Package org.jboss.seam.wiki.core.dao

Source Code of org.jboss.seam.wiki.core.dao.TagDAO

package org.jboss.seam.wiki.core.dao;

import org.hibernate.Session;
import org.hibernate.Query;
import org.hibernate.transform.Transformers;
import org.jboss.seam.annotations.AutoCreate;
import org.jboss.seam.annotations.In;
import org.jboss.seam.annotations.Logger;
import org.jboss.seam.annotations.Name;
import org.jboss.seam.log.Log;
import org.jboss.seam.wiki.core.model.*;

import javax.persistence.EntityManager;
import java.util.Collections;
import java.util.List;

@Name("tagDAO")
@AutoCreate
public class TagDAO {

    @Logger
    static Log log;

    @In
    protected EntityManager restrictedEntityManager;

    @In
    protected WikiNodeDAO wikiNodeDAO;

    public List<DisplayTagCount> findTagCounts(WikiDirectory startDir, WikiFile ignoreFile, int limit, long minimumCount) {

        StringBuilder queryString = new StringBuilder();
        queryString.append("select t as tag, count(t) as count").append(" ");
        queryString.append("from WikiFile f join f.tags as t").append(" ");
        queryString.append("where f.parent.id in (:parentDirIds) ");
        if (ignoreFile != null && ignoreFile.getId() != null) queryString.append("and not f = :ignoreFile").append(" ");
        queryString.append("group by t").append(" ");
        queryString.append("having count(t) >= :minimumCount").append(" ");
        queryString.append("order by count(t) desc, t asc ");

        Query tagQuery = getSession().createQuery(queryString.toString());
        tagQuery.setParameterList("parentDirIds", wikiNodeDAO.findWikiDirectoryTreeIDs(startDir));
        tagQuery.setParameter("minimumCount", minimumCount);
        if (ignoreFile != null && ignoreFile.getId() != null)
            tagQuery.setParameter("ignoreFile", ignoreFile);
        if (limit > 0) {
            tagQuery.setMaxResults(limit);
        }

        tagQuery.setResultTransformer(Transformers.aliasToBean(DisplayTagCount.class));

        return tagQuery.list();
    }

    public List<WikiFile> findWikFiles(WikiDirectory startDir, WikiFile ignoreFile, final String tag,
                                       WikiNode.SortableProperty orderBy, boolean orderAscending) {

        if (tag == null || tag.length() == 0) return Collections.EMPTY_LIST;

        StringBuilder queryString = new StringBuilder();

        queryString.append("select distinct f from WikiFile f join f.tags as t ");
        queryString.append("where f.parent.id in (:parentDirIds) ");
        if (ignoreFile != null && ignoreFile.getId() != null) queryString.append("and not f = :ignoreFile").append(" ");
        queryString.append("and t = :tag").append(" ");
        queryString.append("order by f.").append(orderBy.name()).append(" ").append(orderAscending ? "asc" : "desc");

        Query fileQuery = getSession().createQuery(queryString.toString());
        fileQuery.setParameterList("parentDirIds", wikiNodeDAO.findWikiDirectoryTreeIDs(startDir));
        if (ignoreFile != null && ignoreFile.getId() != null)
            fileQuery.setParameter("ignoreFile", ignoreFile);
        fileQuery.setParameter("tag", tag);

        return fileQuery.list();
    }

    private Session getSession() {
        return ((Session)((org.jboss.seam.persistence.EntityManagerProxy) restrictedEntityManager).getDelegate());
    }


}
TOP

Related Classes of org.jboss.seam.wiki.core.dao.TagDAO

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.