* @param n
* @return
*/
@SuppressWarnings("unchecked")
public List<CloudEntry> getLabelCloud(Blog blog, User user, Group group, int n) {
PermissionManager permissionMgr = new PermissionManager(locale, session);
List<CloudEntry> entries = new ArrayList<CloudEntry>();
if (blog == null) {
Query q = session.createQuery("select new evolaris.framework.blog.business.CloudEntry(l.label, count(elements(l.articles))) from Label l group by lower(l.label)");
List<CloudEntry> tmpList = q.list();
// find blogs for every label, and if no access, remove that number of articles from count -- if count is 0, return label completely
for (CloudEntry entry : tmpList) {
int count = entry.getCount();
Query q2 = session.createQuery("from Label l where lower(l.label) = :LABEL");
q2.setString("LABEL", entry.getLabel().toLowerCase());
List<Label> labels = (List<Label>)q2.list();
for (Label l : labels) {
if ((group != null && l.getBlog().getGroup() != group)
|| !permissionMgr.getPermissions(l.getBlog(), user).contains(PermissionManager.READ_PERMISSION)) {
count -= l.getArticles().size();
}
}
if (count > 0) {
entry.setCount(count);
entries.add(entry);
}
}
} else {
if (permissionMgr.getPermissions(blog, user).contains(PermissionManager.READ_PERMISSION)) {
Query q = session.createQuery("select new evolaris.framework.blog.business.CloudEntry(l.id, l.label, count(elements(l.articles))) from Label l where l.blog=:BLOG group by l.id, l.label");
q.setEntity("BLOG", blog);
entries = q.list();
}
}