org.opencps.dossiermgt.service.persistence.DossierFileFinderImpl.java Source code

Java tutorial

Introduction

Here is the source code for org.opencps.dossiermgt.service.persistence.DossierFileFinderImpl.java

Source

/**
* OpenCPS is the open source Core Public Services software
* Copyright (C) 2016-present OpenCPS community
    
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* any later version.
    
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>
*/

package org.opencps.dossiermgt.service.persistence;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import org.opencps.dossiermgt.bean.DossierFileBean;
import org.opencps.dossiermgt.model.DossierFile;
import org.opencps.dossiermgt.model.impl.DossierFileImpl;
import org.opencps.dossiermgt.util.DossierMgtUtil;

import com.liferay.portal.kernel.dao.orm.QueryPos;
import com.liferay.portal.kernel.dao.orm.QueryUtil;
import com.liferay.portal.kernel.dao.orm.SQLQuery;
import com.liferay.portal.kernel.dao.orm.Session;
import com.liferay.portal.kernel.dao.orm.Type;
import com.liferay.portal.kernel.log.Log;
import com.liferay.portal.kernel.log.LogFactoryUtil;
import com.liferay.portal.kernel.util.GetterUtil;
import com.liferay.portal.kernel.util.OrderByComparator;
import com.liferay.portal.kernel.util.StringPool;
import com.liferay.portal.kernel.util.StringUtil;
import com.liferay.portal.kernel.util.Validator;
import com.liferay.portal.service.persistence.impl.BasePersistenceImpl;
import com.liferay.util.dao.orm.CustomSQLUtil;

/**
 * @author trungnt
 */
public class DossierFileFinderImpl extends BasePersistenceImpl<DossierFile> implements DossierFileFinder {

    public static final String COUNT_DOSSIER_FILE_ADVANCE = DossierFileFinder.class.getName()
            + ".countDossierFileAdvance";

    public static final String COUNT_DOSSIER_FILE_BY_G_K_T_R = DossierFileFinder.class.getName()
            + ".countDossierFileByG_K_T_R";

    public static final String COUNT_DOSSIER_FILE_TEMPLATE = DossierFileFinder.class.getName()
            + ".countDossierFile";

    public static final String SEARCH_DOSSIER_FILE_ADVANCE = DossierFileFinder.class.getName()
            + ".searchDossierFileAdvance";

    public static final String SEARCH_DOSSIER_FILE_BY_G_K_T_R = DossierFileFinder.class.getName()
            + ".searchDossierFileByG_K_T_R";

    public static final String SEARCH_DOSSIER_FILE_TEMPLATE = DossierFileFinder.class.getName()
            + ".searchDossierFile";

    private Log _log = LogFactoryUtil.getLog(DossierFileFinder.class.getName());

    /**
     * @param groupId
     * @param keyword
     * @param templateFileNo
     * @param removed
     * @return
     */
    public int countDossierFile(long groupId, long ownerUserId, long ownerOrganizationId, String keyword,
            String templateFileNo, int removed) {

        String[] keywords = null;

        boolean andOperator = false;
        if (Validator.isNotNull(keyword)) {
            keywords = CustomSQLUtil.keywords(keyword);
        } else {
            andOperator = true;
        }

        return countDossierFile(groupId, ownerUserId, ownerOrganizationId, keywords, templateFileNo, removed,
                andOperator);
    }

    /**
     * @param groupId
     * @param keywords
     * @param templateFileNo
     * @param removed
     * @param andOperator
     * @return
     */
    private int countDossierFile(long groupId, long ownerUserId, long ownerOrganizationId, String[] keywords,
            String templateFileNo, int removed, boolean andOperator) {

        Session session = null;

        try {
            session = openSession();

            String sql = CustomSQLUtil.get(COUNT_DOSSIER_FILE_BY_G_K_T_R);

            if (keywords != null && keywords.length > 0) {
                sql = CustomSQLUtil.replaceKeywords(sql, "lower(opencps_dossier_file.displayName)", StringPool.LIKE,
                        true, keywords);

                sql = CustomSQLUtil.replaceKeywords(sql, "lower(opencps_dossier_file.dossierFileNo)",
                        StringPool.LIKE, true, keywords);
            }

            if (keywords == null || keywords.length == 0) {
                sql = StringUtil.replace(sql,
                        "AND (lower(opencps_dossier_file.displayName) LIKE ? [$AND_OR_NULL_CHECK$])",
                        StringPool.BLANK);

                sql = StringUtil.replace(sql,
                        "OR (lower(opencps_dossier_file.dossierFileNo) LIKE ? [$AND_OR_NULL_CHECK$])",
                        StringPool.BLANK);
            }

            if (Validator.isNull(templateFileNo)) {
                sql = StringUtil.replace(sql, "AND (opencps_dossier_file.templateFileNo = ?)", StringPool.BLANK);
            }

            if (ownerUserId <= 0) {
                sql = StringUtil.replace(sql, "AND (opencps_dossier_file.ownerUserId = ?)", StringPool.BLANK);
            }

            if (ownerOrganizationId <= 0) {
                sql = StringUtil.replace(sql, "AND (opencps_dossier_file.ownerOrganizationId = ?)",
                        StringPool.BLANK);
            }

            sql = CustomSQLUtil.replaceAndOperator(sql, andOperator);

            SQLQuery q = session.createSQLQuery(sql);

            q.addScalar(COUNT_COLUMN_NAME, Type.INTEGER);

            QueryPos qPos = QueryPos.getInstance(q);

            qPos.add(groupId);

            qPos.add(removed);

            if (keywords != null && keywords.length > 0) {
                qPos.add(keywords, 2);
                qPos.add(keywords, 2);
            }

            if (Validator.isNotNull(templateFileNo)) {
                qPos.add(templateFileNo);
            }

            if (ownerUserId > 0) {
                qPos.add(ownerUserId);
            }

            if (ownerOrganizationId > 0) {
                qPos.add(ownerOrganizationId);
            }

            Iterator<Integer> itr = q.iterate();

            if (itr.hasNext()) {
                Integer count = itr.next();

                if (count != null) {
                    return count.intValue();
                }
            }

            return 0;

        } catch (Exception e) {
            _log.error(e);
        } finally {
            closeSession(session);
        }

        return 0;
    }

    /**
     * @param groupId
     * @param keyword
     * @param dossierTemplateId
     * @param fileEntryId
     * @param onlyViewFileResult
     * @return
     */
    public int countDossierFile(long groupId, String keyword, long dossierTemplateId, long fileEntryId,
            boolean onlyViewFileResult) {

        String[] keywords = null;
        int dossierFileType = DossierMgtUtil.DOSSIERFILETYPE_ALL;
        boolean andOperator = false;
        if (Validator.isNotNull(keyword)) {
            keywords = CustomSQLUtil.keywords(keyword);
        } else {
            andOperator = true;
        }
        if (onlyViewFileResult) {
            dossierFileType = DossierMgtUtil.DOSSIERFILETYPE_OUTPUT;
        }
        return countDossierFile(groupId, keywords, dossierTemplateId, dossierFileType, fileEntryId, andOperator);
    }

    /**
     * @param groupId
     * @param keywords
     * @param dossierTemplateId
     * @param dossierFileType
     * @param fileEntryId
     * @param andOperator
     * @return
     */
    private int countDossierFile(long groupId, String[] keywords, long dossierTemplateId, int dossierFileType,
            long fileEntryId, boolean andOperator) {

        Session session = null;

        try {
            session = openSession();

            String sql = CustomSQLUtil.get(COUNT_DOSSIER_FILE_TEMPLATE);

            if (keywords != null && keywords.length > 0) {
                sql = CustomSQLUtil.replaceKeywords(sql, "lower(opencps_dossier_file.displayName)", StringPool.LIKE,
                        true, keywords);

                sql = CustomSQLUtil.replaceKeywords(sql, "lower(opencps_dossier_file.dossierFileNo)",
                        StringPool.LIKE, true, keywords);
            }

            if (keywords == null || keywords.length == 0) {
                sql = StringUtil.replace(sql,
                        "AND (lower(opencps_dossier_file.displayName) LIKE ? [$AND_OR_NULL_CHECK$])",
                        StringPool.BLANK);

                sql = StringUtil.replace(sql,
                        "OR (lower(opencps_dossier_file.dossierFileNo) LIKE ? [$AND_OR_NULL_CHECK$])",
                        StringPool.BLANK);
            }

            if (dossierTemplateId != 0) {
            } else {
                sql = StringUtil.replace(sql, "AND (opencps_dossierpart.dossierTemplateId = ?)", StringPool.BLANK);
            }

            if (dossierFileType != DossierMgtUtil.DOSSIERFILETYPE_ALL) {
            } else {
                sql = StringUtil.replace(sql, "AND (opencps_dossier_file.dossierFileType = ?)", StringPool.BLANK);
            }

            if (fileEntryId < 0) {
                sql = StringUtil.replace(sql,
                        " AND (opencps_dossier_file.fileEntryId IS NOT NULL AND opencps_dossier_file.fileEntryId = ?)",
                        StringPool.BLANK);
            } else {

            }

            sql = CustomSQLUtil.replaceAndOperator(sql, andOperator);

            SQLQuery q = session.createSQLQuery(sql);

            q.addScalar(COUNT_COLUMN_NAME, Type.INTEGER);

            QueryPos qPos = QueryPos.getInstance(q);

            qPos.add(groupId);

            if (keywords != null && keywords.length > 0) {
                qPos.add(keywords, 2);
                qPos.add(keywords, 2);
            }

            if (fileEntryId > 0) {
                qPos.add(fileEntryId);
            }

            if (dossierFileType != DossierMgtUtil.DOSSIERFILETYPE_ALL) {
                qPos.add(dossierFileType);
            }

            if (dossierTemplateId > 0) {
                qPos.add(dossierTemplateId);
            }
            Iterator<Integer> itr = q.iterate();

            if (itr.hasNext()) {
                Integer count = itr.next();

                if (count != null) {
                    return count.intValue();
                }
            }

            return 0;

        } catch (Exception e) {
            _log.error(e);
        } finally {
            closeSession(session);
        }

        return 0;
    }

    /**
     * @param groupId
     * @param ownerUserId
     * @param ownerOrganizationId
     * @param keyword
     * @param templateFileNo
     * @param removed
     * @param partType
     * @param original
     * @return
     */
    public int countDossierFileAdvance(long groupId, long ownerUserId, long ownerOrganizationId, String keyword,
            String templateFileNo, int removed, int partType, int original) {

        String[] keywords = null;

        boolean andOperator = false;
        if (Validator.isNotNull(keyword)) {
            keywords = CustomSQLUtil.keywords(keyword);
        } else {
            andOperator = true;
        }

        return countDossierFileAdvance(groupId, ownerUserId, ownerOrganizationId, keywords, templateFileNo, removed,
                partType, original, andOperator);
    }

    /**
     * @param groupId
     * @param ownerUserId
     * @param ownerOrganizationId
     * @param keywords
     * @param templateFileNo
     * @param removed
     * @param partType
     * @param original
     * @param andOperator
     * @return
     */
    private int countDossierFileAdvance(long groupId, long ownerUserId, long ownerOrganizationId, String[] keywords,
            String templateFileNo, int removed, int partType, int original, boolean andOperator) {

        Session session = null;

        try {
            session = openSession();

            String sql = CustomSQLUtil.get(COUNT_DOSSIER_FILE_ADVANCE);

            if (partType < 0) {
                sql = StringUtil.replace(sql, "AND opencps_dossierpart.dossierpartId = ?", StringPool.BLANK);
            }

            if (keywords != null && keywords.length > 0) {
                sql = CustomSQLUtil.replaceKeywords(sql, "lower(opencps_dossier_file.displayName)", StringPool.LIKE,
                        true, keywords);

                sql = CustomSQLUtil.replaceKeywords(sql, "lower(opencps_dossier_file.dossierFileNo)",
                        StringPool.LIKE, true, keywords);
            }

            if (keywords == null || keywords.length == 0) {
                sql = StringUtil.replace(sql,
                        "AND (lower(opencps_dossier_file.displayName) LIKE ? [$AND_OR_NULL_CHECK$])",
                        StringPool.BLANK);

                sql = StringUtil.replace(sql,
                        "OR (lower(opencps_dossier_file.dossierFileNo) LIKE ? [$AND_OR_NULL_CHECK$])",
                        StringPool.BLANK);
            }

            if (Validator.isNull(templateFileNo)) {
                sql = StringUtil.replace(sql, "AND (opencps_dossier_file.templateFileNo = ?)", StringPool.BLANK);
            }

            if (ownerUserId <= 0) {
                sql = StringUtil.replace(sql, "AND (opencps_dossier_file.ownerUserId = ?)", StringPool.BLANK);
            }

            if (ownerOrganizationId <= 0) {
                sql = StringUtil.replace(sql, "AND (opencps_dossier_file.ownerOrganizationId = ?)",
                        StringPool.BLANK);
            }

            sql = CustomSQLUtil.replaceAndOperator(sql, andOperator);

            SQLQuery q = session.createSQLQuery(sql);

            q.addScalar(COUNT_COLUMN_NAME, Type.INTEGER);

            QueryPos qPos = QueryPos.getInstance(q);

            if (partType >= 0) {
                qPos.add(partType);
            }

            qPos.add(groupId);

            qPos.add(removed);

            if (keywords != null && keywords.length > 0) {
                qPos.add(keywords, 2);
                qPos.add(keywords, 2);
            }

            if (Validator.isNotNull(templateFileNo)) {
                qPos.add(templateFileNo);
            }

            qPos.add(original);

            if (ownerUserId > 0) {
                qPos.add(ownerUserId);
            }

            if (ownerOrganizationId > 0) {
                qPos.add(ownerOrganizationId);
            }

            Iterator<Integer> itr = q.iterate();

            if (itr.hasNext()) {
                Integer count = itr.next();

                if (count != null) {
                    return count.intValue();
                }
            }

            return 0;

        } catch (Exception e) {
            _log.error(e);
        } finally {
            closeSession(session);
        }

        return 0;
    }

    public List<DossierFile> searchDossierFile(long groupId, long ownerUserId, long ownerOrganizationId,
            String keyword, String templateFileNo, int removed, int start, int end, OrderByComparator obc) {

        String[] keywords = null;
        boolean andOperator = false;
        if (Validator.isNotNull(keyword)) {
            keywords = CustomSQLUtil.keywords(keyword);
        } else {
            andOperator = true;
        }

        return searchDossierFile(groupId, ownerUserId, ownerOrganizationId, keywords, templateFileNo, removed,
                start, end, obc, andOperator);
    }

    /**
     * @param groupId
     * @param keywords
     * @param templateFileNo
     * @param removed
     * @param start
     * @param end
     * @param obc
     * @param andOperator
     * @return
     */
    private List<DossierFile> searchDossierFile(long groupId, long ownerUserId, long ownerOrganizationId,
            String[] keywords, String templateFileNo, int removed, int start, int end, OrderByComparator obc,
            boolean andOperator) {

        Session session = null;

        try {
            session = openSession();

            String sql = CustomSQLUtil.get(SEARCH_DOSSIER_FILE_BY_G_K_T_R);

            if (keywords != null && keywords.length > 0) {
                sql = CustomSQLUtil.replaceKeywords(sql, "lower(opencps_dossier_file.displayName)", StringPool.LIKE,
                        true, keywords);

                sql = CustomSQLUtil.replaceKeywords(sql, "lower(opencps_dossier_file.dossierFileNo)",
                        StringPool.LIKE, true, keywords);
            }

            if (keywords == null || keywords.length == 0) {
                sql = StringUtil.replace(sql,
                        "AND (lower(opencps_dossier_file.displayName) LIKE ? [$AND_OR_NULL_CHECK$])",
                        StringPool.BLANK);

                sql = StringUtil.replace(sql,
                        "OR (lower(opencps_dossier_file.dossierFileNo) LIKE ? [$AND_OR_NULL_CHECK$])",
                        StringPool.BLANK);
            }

            if (Validator.isNull(templateFileNo)) {
                sql = StringUtil.replace(sql, "AND (opencps_dossier_file.templateFileNo = ?)", StringPool.BLANK);
            }

            if (ownerUserId <= 0) {
                sql = StringUtil.replace(sql, "AND (opencps_dossier_file.ownerUserId = ?)", StringPool.BLANK);
            }

            if (ownerOrganizationId <= 0) {
                sql = StringUtil.replace(sql, "AND (opencps_dossier_file.ownerOrganizationId = ?)",
                        StringPool.BLANK);
            }

            sql = CustomSQLUtil.replaceAndOperator(sql, andOperator);
            SQLQuery q = session.createSQLQuery(sql);

            q.addEntity("DossierFile", DossierFileImpl.class);

            QueryPos qPos = QueryPos.getInstance(q);

            qPos.add(groupId);

            qPos.add(removed);

            if (keywords != null && keywords.length > 0) {
                qPos.add(keywords, 2);
                qPos.add(keywords, 2);
            }

            if (Validator.isNotNull(templateFileNo)) {
                qPos.add(templateFileNo);
            }

            if (ownerUserId > 0) {
                qPos.add(ownerUserId);
            }

            if (ownerOrganizationId > 0) {
                qPos.add(ownerOrganizationId);
            }

            return (List<DossierFile>) QueryUtil.list(q, getDialect(), start, end);
        } catch (Exception e) {
            _log.error(e);
        } finally {
            closeSession(session);
        }

        return null;
    }

    /**
     * @param groupId
     * @param keyword
     * @param dossierTemplateId
     * @param fileEntryId
     * @param onlyViewFileResult
     * @param start
     * @param end
     * @param obc
     * @return
     */
    public List<DossierFile> searchDossierFile(long groupId, String keyword, long dossierTemplateId,
            long fileEntryId, boolean onlyViewFileResult, int start, int end, OrderByComparator obc) {

        String[] keywords = null;
        boolean andOperator = false;
        if (Validator.isNotNull(keyword)) {
            keywords = CustomSQLUtil.keywords(keyword);
        } else {
            andOperator = true;
        }
        int dossierFileType = DossierMgtUtil.DOSSIERFILETYPE_ALL;
        if (onlyViewFileResult) {
            dossierFileType = DossierMgtUtil.DOSSIERFILETYPE_OUTPUT;
        }
        return searchDossierFile(groupId, keywords, dossierTemplateId, dossierFileType, fileEntryId, start, end,
                obc, andOperator);
    }

    /**
     * @param groupId
     * @param keywords
     * @param dossierTemplateId
     * @param dossierFileType
     * @param fileEntryId
     * @param start
     * @param end
     * @param obc
     * @param andOperator
     * @return
     */
    private List<DossierFile> searchDossierFile(long groupId, String[] keywords, long dossierTemplateId,
            int dossierFileType, long fileEntryId, int start, int end, OrderByComparator obc, boolean andOperator) {

        Session session = null;

        try {
            session = openSession();

            String sql = CustomSQLUtil.get(SEARCH_DOSSIER_FILE_TEMPLATE);

            if (keywords != null && keywords.length > 0) {
                sql = CustomSQLUtil.replaceKeywords(sql, "lower(opencps_dossier_file.displayName)", StringPool.LIKE,
                        true, keywords);

                sql = CustomSQLUtil.replaceKeywords(sql, "lower(opencps_dossier_file.dossierFileNo)",
                        StringPool.LIKE, true, keywords);
            }

            if (keywords == null || keywords.length == 0) {
                sql = StringUtil.replace(sql,
                        "AND (lower(opencps_dossier_file.displayName) LIKE ? [$AND_OR_NULL_CHECK$])",
                        StringPool.BLANK);

                sql = StringUtil.replace(sql,
                        "OR (lower(opencps_dossier_file.dossierFileNo) LIKE ? [$AND_OR_NULL_CHECK$])",
                        StringPool.BLANK);
            }

            if (dossierTemplateId != 0) {
            } else {
                sql = StringUtil.replace(sql, "AND (opencps_dossierpart.dossierTemplateId = ?)", StringPool.BLANK);
            }

            if (dossierFileType != DossierMgtUtil.DOSSIERFILETYPE_ALL) {
            } else {
                sql = StringUtil.replace(sql, "AND (opencps_dossier_file.dossierFileType = ?)", StringPool.BLANK);
            }

            if (fileEntryId < 0) {
                sql = StringUtil.replace(sql,
                        " AND (opencps_dossier_file.fileEntryId IS NOT NULL AND opencps_dossier_file.fileEntryId = ?)",
                        StringPool.BLANK);
            } else {

            }

            sql = CustomSQLUtil.replaceAndOperator(sql, andOperator);
            SQLQuery q = session.createSQLQuery(sql);

            q.addEntity("DossierFile", DossierFileImpl.class);

            QueryPos qPos = QueryPos.getInstance(q);

            qPos.add(groupId);

            if (keywords != null && keywords.length > 0) {
                qPos.add(keywords, 2);
                qPos.add(keywords, 2);
            }

            if (fileEntryId > 0) {
                qPos.add(fileEntryId);
            }

            if (dossierFileType != DossierMgtUtil.DOSSIERFILETYPE_ALL) {
                qPos.add(dossierFileType);
            }

            if (dossierTemplateId > 0) {
                qPos.add(dossierTemplateId);
            }
            return (List<DossierFile>) QueryUtil.list(q, getDialect(), start, end);
        } catch (Exception e) {
            _log.error(e);
        } finally {
            closeSession(session);
        }

        return null;
    }

    public List searchDossierFileAdvance(long groupId, long ownerUserId, long ownerOrganizationId, String keyword,
            String templateFileNo, int removed, int partType, int original, int start, int end,
            OrderByComparator obc) {

        String[] keywords = null;
        boolean andOperator = false;
        if (Validator.isNotNull(keyword)) {
            keywords = CustomSQLUtil.keywords(keyword);
        } else {
            andOperator = true;
        }

        return searchDossierFileAdvance(groupId, ownerUserId, ownerOrganizationId, keywords, templateFileNo,
                removed, partType, original, start, end, obc, andOperator);
    }

    /**
     * @param groupId
     * @param ownerUserId
     * @param ownerOrganizationId
     * @param keywords
     * @param templateFileNo
     * @param removed
     * @param partType
     * @param original
     * @param start
     * @param end
     * @param obc
     * @param andOperator
     * @return
     */
    private List<DossierFileBean> searchDossierFileAdvance(long groupId, long ownerUserId, long ownerOrganizationId,
            String[] keywords, String templateFileNo, int removed, int partType, int original, int start, int end,
            OrderByComparator obc, boolean andOperator) {

        Session session = null;

        try {
            session = openSession();

            String sql = CustomSQLUtil.get(SEARCH_DOSSIER_FILE_ADVANCE);

            if (partType < 0) {
                sql = StringUtil.replace(sql, "AND opencps_dossierpart.dossierpartId = ?", StringPool.BLANK);
            }

            if (keywords != null && keywords.length > 0) {
                sql = CustomSQLUtil.replaceKeywords(sql, "lower(opencps_dossier_file.displayName)", StringPool.LIKE,
                        true, keywords);

                sql = CustomSQLUtil.replaceKeywords(sql, "lower(opencps_dossier_file.dossierFileNo)",
                        StringPool.LIKE, true, keywords);
            }

            if (keywords == null || keywords.length == 0) {
                sql = StringUtil.replace(sql,
                        "AND (lower(opencps_dossier_file.displayName) LIKE ? [$AND_OR_NULL_CHECK$])",
                        StringPool.BLANK);

                sql = StringUtil.replace(sql,
                        "OR (lower(opencps_dossier_file.dossierFileNo) LIKE ? [$AND_OR_NULL_CHECK$])",
                        StringPool.BLANK);
            }

            if (Validator.isNull(templateFileNo)) {
                sql = StringUtil.replace(sql, "AND (opencps_dossier_file.templateFileNo = ?)", StringPool.BLANK);
            }

            if (ownerUserId <= 0) {
                sql = StringUtil.replace(sql, "AND (opencps_dossier_file.ownerUserId = ?)", StringPool.BLANK);
            }

            if (ownerOrganizationId <= 0) {
                sql = StringUtil.replace(sql, "AND (opencps_dossier_file.ownerOrganizationId = ?)",
                        StringPool.BLANK);
            }

            sql = CustomSQLUtil.replaceAndOperator(sql, andOperator);
            SQLQuery q = session.createSQLQuery(sql);

            q.addEntity("DossierFile", DossierFileImpl.class);

            q.addScalar("serviceInfoId", Type.LONG);
            q.addScalar("receptionNo", Type.STRING);
            q.addScalar("partType", Type.INTEGER);

            QueryPos qPos = QueryPos.getInstance(q);

            if (partType >= 0) {
                qPos.add(partType);
            }

            qPos.add(groupId);

            qPos.add(removed);

            if (keywords != null && keywords.length > 0) {
                qPos.add(keywords, 2);
                qPos.add(keywords, 2);
            }

            if (Validator.isNotNull(templateFileNo)) {
                qPos.add(templateFileNo);
            }

            qPos.add(original);

            if (ownerUserId > 0) {
                qPos.add(ownerUserId);
            }

            if (ownerOrganizationId > 0) {
                qPos.add(ownerOrganizationId);
            }

            Iterator<Object[]> itr = (Iterator<Object[]>) QueryUtil.list(q, getDialect(), start, end).iterator();

            List<DossierFileBean> dossierFileBeans = new ArrayList<DossierFileBean>();

            if (itr.hasNext()) {
                while (itr.hasNext()) {
                    DossierFileBean dossierFileBean = new DossierFileBean();

                    Object[] objects = itr.next();

                    DossierFile dossierFile = (DossierFile) objects[0];

                    long serviceInfoId = GetterUtil.getLong(objects[1]);

                    String receptionNo = (String) objects[2];

                    int dossierPartType = GetterUtil.getInteger(objects[3]);

                    dossierFileBean.setDossierFileId(dossierFile.getDossierFileId());

                    dossierFileBean.setDossierFile(dossierFile);
                    dossierFileBean.setDossierId(dossierFile.getDossierId());
                    dossierFileBean.setPartType(dossierPartType);
                    dossierFileBean.setServiceInfoId(serviceInfoId);

                    dossierFileBean.setReceptionNo(receptionNo);

                    dossierFileBeans.add(dossierFileBean);
                }
            }

            return dossierFileBeans;
        } catch (Exception e) {
            _log.error(e);
        } finally {
            closeSession(session);
        }

        return null;
    }
}