Example usage for org.hibernate.criterion Projections countDistinct

List of usage examples for org.hibernate.criterion Projections countDistinct

Introduction

In this page you can find the example usage for org.hibernate.criterion Projections countDistinct.

Prototype

public static CountProjection countDistinct(String propertyName) 

Source Link

Document

A distinct property value count projection

Usage

From source file:org.tonguetied.keywordmanagement.KeywordRepositoryImpl.java

License:Apache License

/**
 * Run a query to calculate the total number of records that match the 
 * search criteria./*from   w  w  w. j  a v  a 2 s .  c  o  m*/
 * 
 * @param criterion used to create the search criteria
 * @param conjunction used to create the search criteria
 * @return the total number of matches for the search criteria
 */
private int calculateMaxListSize(Example criterion, Conjunction conjunction) {
    Criteria criteria = getSession().createCriteria(Keyword.class);
    criteria.add(criterion);
    if (conjunction != null)
        criteria.createCriteria(FIELD_TRANSLATIONS).add(conjunction);
    criteria.setProjection(Projections.countDistinct(FIELD_ID));

    return (Integer) criteria.uniqueResult();
}

From source file:py.una.pol.karaku.dao.impl.BaseDAOImpl.java

License:Open Source License

@Override
public Long getCount(final Where<T> where) {

    Map<String, String> alias = new HashMap<String, String>();
    Criteria criteria = this.generateWhere(where, alias);
    if (where != null && where.isDistinct()) {
        criteria.setProjection(Projections.countDistinct("id"));
    } else {//  www  . j a v a  2 s.c om
        criteria.setProjection(Projections.rowCount());
    }
    Object result = criteria.uniqueResult();
    if (result == null) {
        throw new KarakuRuntimeException("The class " + this.getClassOfT().getSimpleName() + " is not mapped");
    }
    return (Long) result;
}

From source file:reviewbot.repository.BookRepository.java

License:Creative Commons License

@Override
@SuppressWarnings("unchecked")
public List<Book> readRange(Integer length, Integer offset) {

    final Integer len = length;
    final Integer offs = offset;

    // Solution by MattC@stackoverflow
    // https://stackoverflow.com/questions/11038234/pagination-with-hibernate-criteria-and-distinct-root-entity/23618190#23618190

    Criteria criteria = getCurrentSession().createCriteria(Book.class);
    Projection idCountProjection = Projections.countDistinct("id");
    criteria.setProjection(idCountProjection);
    int totalResultCount = ((Long) criteria.uniqueResult()).intValue();

    criteria.setProjection(Projections.distinct(Projections.property("id")));
    if (offs != null)
        criteria.setFirstResult(offs);/*from  w  ww.j  a v a2 s . c om*/
    if (len != null)
        criteria.setMaxResults(len);
    List uniqueSubList = criteria.list();

    criteria.setProjection(null);
    criteria.setFirstResult(0);
    criteria.setMaxResults(Integer.MAX_VALUE);
    criteria.add(Restrictions.in("id", uniqueSubList));
    criteria.setResultTransformer(CriteriaSpecification.DISTINCT_ROOT_ENTITY);

    return (List<Book>) criteria.list();
}

From source file:ro.cs.cm.model.dao.impl.DaoClientImpl.java

License:Open Source License

/**
 * Searches for clients using the criterion defined in searchClientBean
 * @author Coni/* w  w w . jav a  2s  .  com*/
 * @param searchClientBean
 * @param isDeleteAction
 * @return
 */
public List<Client> getClientBeanFromSearch(SearchClientBean searchClientBean, boolean isDeleteAction) {
    logger.debug("getClientBeanFromSearch - START");

    DetachedCriteria dc = DetachedCriteria.forEntityName(IModelConstant.clientForListingEntity);
    DetachedCriteria dcCount = DetachedCriteria.forEntityName(IModelConstant.clientForListingEntity);

    if (searchClientBean.getOrganizationId() != -1) {
        dc.add(Restrictions.eq("organizationId", searchClientBean.getOrganizationId()));
        dcCount.add(Restrictions.eq("organizationId", searchClientBean.getOrganizationId()));
    }

    //if the c_name property is set it means it is a client of type firm and the p_firstName and
    //p_lastName properties of a person won't be set; there is a third case when the client search is first displayed, 
    //with no client type being selected 
    if (searchClientBean.getC_name() != null && !"".equals(searchClientBean.getC_name())
            && searchClientBean.getType() == IConstant.NOM_CLIENT_TYPE_FIRM) {
        dc.add(Restrictions.ilike("c_name", "%".concat(searchClientBean.getC_name().concat("%"))));
        dcCount.add(Restrictions.ilike("c_name", "%".concat(searchClientBean.getC_name().concat("%"))));
    } else if (searchClientBean.getC_name() != null && !"".equals(searchClientBean.getC_name())
            && searchClientBean.getType() == -1) { //no client type is selected, but the name field isn't empty
        //we consider the firstname and lastname that might have been entered are split by " "; if no space is entered, we consider it as the firstName
        String firstName = null;
        String lastName = null;
        if (searchClientBean.getC_name().lastIndexOf(" ") != -1) {
            firstName = searchClientBean.getC_name().substring(0,
                    searchClientBean.getC_name().lastIndexOf(" "));
            lastName = searchClientBean.getC_name()
                    .substring(searchClientBean.getC_name().lastIndexOf(" ") + 1);
        } else {
            firstName = searchClientBean.getC_name();
        }

        if (firstName != null && !"".equals(firstName) && lastName != null && !"".equals(lastName)) {
            dc.add(Restrictions.or(
                    Restrictions.ilike("c_name", "%".concat(searchClientBean.getC_name().concat("%"))),
                    Restrictions.and(Restrictions.ilike("p_firstName", "%".concat(firstName).concat("%")),
                            Restrictions.ilike("p_lastName", "%".concat(lastName).concat("%")))));
        } else if (firstName != null && !"".equals(firstName)) {
            dc.add(Restrictions.or(
                    Restrictions.ilike("c_name", "%".concat(searchClientBean.getC_name().concat("%"))),
                    Restrictions.ilike("p_firstName", "%".concat(firstName).concat("%"))));
        } else if (lastName != null && !"".equals(lastName)) {
            dc.add(Restrictions.or(
                    Restrictions.ilike("c_name", "%".concat(searchClientBean.getC_name().concat("%"))),
                    Restrictions.ilike("p_lastName", "%".concat(lastName).concat("%"))));
        }
    } else {
        if (searchClientBean.getP_firstName() != null && !"".equals(searchClientBean.getP_firstName())) {
            dc.add(Restrictions.ilike("p_firstName",
                    "%".concat(searchClientBean.getP_firstName().concat("%"))));
            dcCount.add(Restrictions.ilike("p_firstName",
                    "%".concat(searchClientBean.getP_firstName().concat("%"))));
        }
        if (searchClientBean.getP_lastName() != null && !"".equals(searchClientBean.getP_lastName())) {
            dc.add(Restrictions.ilike("p_lastName", "%".concat(searchClientBean.getP_lastName().concat("%"))));
            dcCount.add(
                    Restrictions.ilike("p_lastName", "%".concat(searchClientBean.getP_lastName().concat("%"))));
        }
    }

    if (searchClientBean.getEmail() != null && !"".equals(searchClientBean.getEmail())) {
        dc.add(Restrictions.ilike("email", "%".concat(searchClientBean.getEmail().concat("%"))));
        dcCount.add(Restrictions.ilike("email", "%".concat(searchClientBean.getEmail().concat("%"))));
    }

    if (searchClientBean.getAddress() != null && !"".equals(searchClientBean.getAddress())) {
        dc.add(Restrictions.ilike("address", "%".concat(searchClientBean.getAddress().concat("%"))));
        dcCount.add(Restrictions.ilike("address", "%".concat(searchClientBean.getAddress().concat("%"))));
    }

    if (searchClientBean.getType() != -1) {
        dc.add(Restrictions.eq("type", searchClientBean.getType()));
        dcCount.add(Restrictions.eq("type", searchClientBean.getType()));
    }

    if (searchClientBean.getStatus() != -1) {
        dc.add(Restrictions.eq("status", searchClientBean.getStatus()));
        dcCount.add(Restrictions.eq("status", searchClientBean.getStatus()));
    }

    // check if I have to order the results
    if (searchClientBean.getSortParam() != null && !"".equals(searchClientBean.getSortParam())
            && !IConstant.NOM_CLIENT_SORT_PARAM_NAME.equals(searchClientBean.getSortParam())) {
        // if I have to, check if I have to order them ascending or descending
        if (searchClientBean.getSortDirection() == -1) {
            // ascending
            dc.addOrder(Order.asc(searchClientBean.getSortParam()));
        } else {
            // descending
            dc.addOrder(Order.desc(searchClientBean.getSortParam()));
        }
    }

    // if the request didn't come from the pagination area, 
    // it means that I have to set the number of results and pages
    if (isDeleteAction || searchClientBean.getNbrOfResults() == -1) {
        boolean isSearch = false;
        if (searchClientBean.getNbrOfResults() == -1) {
            isSearch = true;
        }
        // set the count(*) restriction         
        dcCount.setProjection(Projections.countDistinct("clientId"));

        //findByCriteria must be called with firstResult and maxResults parameters; the default findByCriteria(DetachedCriteria criteria) implementation
        //sets firstResult and maxResults to -1, which kills the countDistinct Projection         
        int nbrOfResults = ((Integer) getHibernateTemplate().findByCriteria(dcCount, 0, 0).get(0)).intValue();
        logger.debug("search results: ".concat(String.valueOf(nbrOfResults)));
        searchClientBean.setNbrOfResults(nbrOfResults);

        // get the number of pages
        if (nbrOfResults % searchClientBean.getResultsPerPage() == 0) {
            searchClientBean.setNbrOfPages(nbrOfResults / searchClientBean.getResultsPerPage());
        } else {
            searchClientBean.setNbrOfPages(nbrOfResults / searchClientBean.getResultsPerPage() + 1);
        }
        // after a client is deleted, the same page has to be displayed;
        //only when all the client from last page are deleted, the previous page will be shown 
        if (isDeleteAction && (searchClientBean.getCurrentPage() > searchClientBean.getNbrOfPages())) {
            searchClientBean.setCurrentPage(searchClientBean.getNbrOfPages());
        } else if (isSearch) {
            searchClientBean.setCurrentPage(1);
        }

    }

    List<Client> res = (List<Client>) getHibernateTemplate().findByCriteria(dc,
            (searchClientBean.getCurrentPage() - 1) * searchClientBean.getResultsPerPage(),
            searchClientBean.getResultsPerPage());
    logger.debug("getClientBeanFromSearch - END results size : ".concat(String.valueOf(res.size())));
    return res;
}

From source file:ro.cs.cm.model.dao.impl.DaoProjectImpl.java

License:Open Source License

/**
 * Searches for Projects after criterion from searchProjectBean.
 * //from w  w w . ja va2s  .co m
 * @author Adelina
 * 
 * @param searchProjectBean
 * @param statusIds
 * @param isDeleteAction
 * @return
 */
public List<Project> getFromSearch(SearchProjectBean searchProjectBean, Set<Byte> statusIds,
        Set<Integer> clientIds, boolean isDeleteAction, MessageSource messageSource) {
    logger.debug("getFromSearch - START - ");

    UserAuth userAuth = (UserAuth) SecurityContextHolder.getContext().getAuthentication().getPrincipal();

    // set search criterion
    DetachedCriteria dc = DetachedCriteria.forEntityName(IModelConstant.projectAllEntity);
    DetachedCriteria dcCount = DetachedCriteria.forEntityName(IModelConstant.projectAllEntity);

    if (searchProjectBean.getOrganizationId() != -1) {
        dc.add(Restrictions.eq("organizationId", searchProjectBean.getOrganizationId()));
        dcCount.add(Restrictions.eq("organizationId", searchProjectBean.getOrganizationId()));
    }

    if (!userAuth.hasAuthority(PermissionConstant.getInstance().getCM_ProjectAdvancedSearch())) {
        // search only for projects that the user belongs to (such as manager or member)         

        List<TeamMember> members = new ArrayList<TeamMember>();

        List<ProjectTeam> projectTeams = new ArrayList<ProjectTeam>();

        List<Integer> projectIds = new ArrayList<Integer>();

        DetachedCriteria dc1 = DetachedCriteria.forEntityName(IModelConstant.teamMemberEntity);
        dc1.add(Restrictions.eq("personId", userAuth.getPersonId()));
        dc1.add(Restrictions.ne("status", IConstant.NOM_TEAM_MEMBER_STATUS_DELETED));
        members = getHibernateTemplate().findByCriteria(dc1);
        logger.debug("members = " + members);

        if (members != null && members.size() > 0) {
            for (TeamMember user : members) {
                logger.debug("user = " + user);
                DetachedCriteria dcProjTeam = DetachedCriteria.forEntityName(IModelConstant.projectTeamEntity);
                dcProjTeam.add(Restrictions.eq("projectTeamId", user.getProjectTeamId()));
                dcProjTeam.add(Restrictions.ne("status", IConstant.NOM_PROJECT_TEAM_STATUS_DELETED));
                projectTeams = getHibernateTemplate().findByCriteria(dcProjTeam);
                logger.debug("project teams = " + projectTeams);
                if (projectTeams != null && projectTeams.size() > 0) {
                    for (ProjectTeam projectTeam : projectTeams) {
                        logger.debug("project team = " + projectTeam);
                        projectIds.add(projectTeam.getProjectId());
                    }
                }
            }
        }

        if (projectTeams == null || projectTeams.size() == 0) {
            projectIds.add(new Integer(-1));
        }

        logger.debug("projectIds = " + projectIds);
        if (projectIds != null && projectIds.size() > 0) {
            dc.add(Expression.or(Expression.eq("managerId", userAuth.getPersonId()),
                    Restrictions.in("projectId", projectIds)));
            dcCount.add(Expression.or(Expression.eq("managerId", userAuth.getPersonId()),
                    Restrictions.in("projectId", projectIds)));
        }
    }

    logger.debug("managerId = " + searchProjectBean.getManagerId());

    // manager      
    if (searchProjectBean.getManagerId() != null && searchProjectBean.getManagerId() != -1) {
        dc.add(Restrictions.eq("managerId", searchProjectBean.getManagerId()));
        dcCount.add(Restrictions.eq("managerId", searchProjectBean.getManagerId()));
        logger.debug("ManagerId Id: " + searchProjectBean.getManagerId());
    }

    // name
    if (Tools.getInstance().stringNotEmpty(searchProjectBean.getName())) {
        dc.add(Restrictions.ilike("name", "%".concat(searchProjectBean.getName().concat("%"))));
        dcCount.add(Restrictions.ilike("name", "%".concat(searchProjectBean.getName().concat("%"))));
        logger.debug("name = " + searchProjectBean.getName());
    }

    logger.debug("clientId = " + searchProjectBean.getClientId());
    logger.debug("clientsIds = " + clientIds);

    // client
    if (searchProjectBean.getClientId() != null && searchProjectBean.getClientId() != 0) {
        dc.add(Restrictions.like("clientId", searchProjectBean.getClientId()));
        dcCount.add(Restrictions.like("clientId", searchProjectBean.getClientId()));
    } else {
        dc.add(Restrictions.in("clientId", clientIds));
        dcCount.add(Restrictions.in("clientId", clientIds));
    }

    //If the user didn't select at least one status then we'll make a search on all of these criterions
    // Status
    if (searchProjectBean.getStatus() != -1) {
        dc.add(Restrictions.eq("status", searchProjectBean.getStatus()));
        dcCount.add(Restrictions.eq("status", searchProjectBean.getStatus()));
    } else {
        dc.add(Restrictions.in("status", statusIds));
        dcCount.add(Restrictions.in("status", statusIds));
    }

    List<Project> res = null;

    //the order can be done while retrieving the data from the database only if the sort parameter is the project name or status;
    //this cannot be done if the results must be ordered by the client name
    if (searchProjectBean.getSortParam() != null && !"".equals(searchProjectBean.getSortParam())
            && !"clientName".equals(searchProjectBean.getSortParam())) {
        // check if I have to order the results
        // if I have to, check if I have to order them ascending or descending
        if (searchProjectBean.getSortDirection() == -1) {
            // ascending
            dc.addOrder(Order.asc(searchProjectBean.getSortParam()));
        } else {
            // descending
            dc.addOrder(Order.desc(searchProjectBean.getSortParam()));
        }

        // if the request didn't come from the pagination area, 
        // it means that I have to set the number of results and pages
        if (isDeleteAction || searchProjectBean.getNbrOfResults() == -1) {
            boolean isSearch = false;
            if (searchProjectBean.getNbrOfResults() == -1) {
                isSearch = true;
            }
            // set the count(*) restriction         
            dcCount.setProjection(Projections.countDistinct("projectId"));

            //findByCriteria must be called with firstResult and maxResults parameters; the default findByCriteria(DetachedCriteria criteria) implementation
            //sets firstResult and maxResults to -1, which kills the countDistinct Projection         
            int nbrOfResults = ((Integer) getHibernateTemplate().findByCriteria(dcCount, 0, 0).get(0))
                    .intValue();
            logger.debug("search results: ".concat(String.valueOf(nbrOfResults)));
            searchProjectBean.setNbrOfResults(nbrOfResults);

            // get the number of pages
            if (nbrOfResults % searchProjectBean.getResultsPerPage() == 0) {
                searchProjectBean.setNbrOfPages(nbrOfResults / searchProjectBean.getResultsPerPage());
            } else {
                searchProjectBean.setNbrOfPages(nbrOfResults / searchProjectBean.getResultsPerPage() + 1);
            }
            // after a project is deleted, the same page has to be displayed;
            //only when all the client from last page are deleted, the previous page will be shown 
            if (isDeleteAction && (searchProjectBean.getCurrentPage() > searchProjectBean.getNbrOfPages())) {
                searchProjectBean.setCurrentPage(searchProjectBean.getNbrOfPages());
            } else if (isSearch) {
                searchProjectBean.setCurrentPage(1);
            }
        }

        res = (List<Project>) getHibernateTemplate().findByCriteria(dc,
                (searchProjectBean.getCurrentPage() - 1) * searchProjectBean.getResultsPerPage(),
                searchProjectBean.getResultsPerPage());
    } else {
        res = (List<Project>) getHibernateTemplate().findByCriteria(dc);
        // if the request didn't come from the pagination area, 
        // it means that I have to set the number of results and pages
        if (isDeleteAction || searchProjectBean.getNbrOfResults() == -1) {
            boolean isSearch = false;
            if (searchProjectBean.getNbrOfResults() == -1) {
                isSearch = true;
            }
            int nbrOfResults = res.size();
            logger.debug("search results: ".concat(String.valueOf(nbrOfResults)));
            searchProjectBean.setNbrOfResults(nbrOfResults);

            // get the number of pages
            if (nbrOfResults % searchProjectBean.getResultsPerPage() == 0) {
                searchProjectBean.setNbrOfPages(nbrOfResults / searchProjectBean.getResultsPerPage());
            } else {
                searchProjectBean.setNbrOfPages(nbrOfResults / searchProjectBean.getResultsPerPage() + 1);
            }
            // after an exchange is deleted, the same page has to be displayed;
            //only when all the exchanges from last page are deleted, the previous page will be shown 
            if (isDeleteAction && (searchProjectBean.getCurrentPage() > searchProjectBean.getNbrOfPages())) {
                searchProjectBean.setCurrentPage(searchProjectBean.getNbrOfPages());
            } else if (isSearch) {
                searchProjectBean.setCurrentPage(1);
            }
        }
    }

    List<Project> newRes = new ArrayList<Project>();

    if (res != null && res.size() > 0) {
        // for every project
        for (Project project : res) {
            Project projectNew = getWithAll(project.getProjectId());
            if (projectNew.getClientId() != null && projectNew.getClientId() > 0) {
                Client client = projectNew.getClient();
                if (client != null) {
                    if (client.getType() == IConstant.NOM_CLIENT_TYPE_FIRM) {
                        projectNew.setClientName(client.getC_name());
                    } else {
                        projectNew.setClientName(
                                client.getP_firstName().concat(" ").concat(client.getP_lastName()));
                    }
                }
            } else {
                projectNew.setClientName(messageSource.getMessage(CLIENT_FROM_ORG, null, null));
            }

            newRes.add(projectNew);
        }
    }

    List<Project> projects = new ArrayList<Project>();
    //sorting the exchanges list
    if (searchProjectBean.getSortParam() != null && searchProjectBean.getSortParam().equals("clientName")) {
        Collections.sort(newRes, ProjectComparator.getInstance().projectClientNameComparator());

        //ascending or descending
        if (searchProjectBean.getSortDirection() == IConstant.DESCENDING) {
            Collections.reverse(newRes);
        }

        long start = (searchProjectBean.getCurrentPage() - 1) * searchProjectBean.getResultsPerPage();
        long end = searchProjectBean.getCurrentPage() * searchProjectBean.getResultsPerPage();

        // go over the entries      
        if (newRes.size() > 0) {
            for (int i = (int) start; i < end; i++) {
                if (i >= newRes.size()) {
                    continue;
                }
                projects.add(newRes.get(i));
            }
        }
    } else {
        projects = newRes;
    }

    logger.debug("getFromSearch - END - results size : ".concat(String.valueOf(projects.size())));

    return projects;
}

From source file:ro.cs.cm.model.dao.impl.DaoTeamMemberImpl.java

License:Open Source License

/**
 * Retrieves from search a list of team members with basic info and pagination; search method
 * for TS person search/*w  ww. j av a 2s. c  o m*/
 * 
 * @author Coni
 * @param searchTeamMemberBean
 * @return
 * @throws WSClientException 
 * @throws IOException 
 * @throws XmlMappingException 
 * @throws BusinessException 
 */
public List<TeamMember> getFromSearchSimpleWithPagination(SearchTeamMemberBean searchTeamMemberBean)
        throws XmlMappingException, IOException, WSClientException, BusinessException {
    logger.debug("getFromSearchSimpleWithPagination - START");

    DetachedCriteria dc = DetachedCriteria
            .forEntityName(IModelConstant.teamMemberWithProjectTeamAndProjectEntity);
    DetachedCriteria dcCount = DetachedCriteria
            .forEntityName(IModelConstant.teamMemberWithProjectTeamAndProjectEntity);

    //retrieve all the team members for persons from the organization(which have personId !=  0) or 
    //not(which have firstName and lastName) that correspond to the search criteria
    if (searchTeamMemberBean.getFirstName() != null && !"".equals(searchTeamMemberBean.getFirstName())
            && searchTeamMemberBean.getLastName() != null && !"".equals(searchTeamMemberBean.getLastName())) {
        dc.add(Restrictions.and(
                Restrictions.ilike("firstName", "%".concat(searchTeamMemberBean.getFirstName()).concat("%")),
                Restrictions.ilike("lastName", "%".concat(searchTeamMemberBean.getLastName()).concat("%"))));
        dcCount.add(Restrictions.and(
                Restrictions.ilike("firstName", "%".concat(searchTeamMemberBean.getFirstName()).concat("%")),
                Restrictions.ilike("lastName", "%".concat(searchTeamMemberBean.getLastName()).concat("%"))));
    } else if (searchTeamMemberBean.getFirstName() != null && !"".equals(searchTeamMemberBean.getFirstName())) {
        dc.add(Restrictions.ilike("firstName", "%".concat(searchTeamMemberBean.getFirstName()).concat("%")));
        dcCount.add(
                Restrictions.ilike("firstName", "%".concat(searchTeamMemberBean.getFirstName()).concat("%")));
    } else if (searchTeamMemberBean.getLastName() != null && !"".equals(searchTeamMemberBean.getLastName())) {
        dc.add(Restrictions.ilike("lastName", "%".concat(searchTeamMemberBean.getLastName()).concat("%")));
        dcCount.add(Restrictions.ilike("lastName", "%".concat(searchTeamMemberBean.getLastName()).concat("%")));
    }

    if (!searchTeamMemberBean.isWithDeleted()) {
        dc.add(Restrictions.eq("status", IConstant.NOM_TEAM_MEMBER_STATUS_ACTIVATED));
        dcCount.add(Restrictions.eq("status", IConstant.NOM_TEAM_MEMBER_STATUS_ACTIVATED));
    }

    DetachedCriteria dcOnProject = dc.createCriteria("projectTeam").createCriteria("project");
    DetachedCriteria dcCountOnProject = dcCount.createCriteria("projectTeam").createCriteria("project");
    if (searchTeamMemberBean.getProjectId() != null && !searchTeamMemberBean.getProjectId()
            .equals(Integer.valueOf(IConstant.NOM_TS_PERSON_SEARCH_IN_ORGANIZATION))) {
        if (searchTeamMemberBean.getProjectId()
                .equals(Integer.valueOf(IConstant.NOM_TS_PERSON_SEARCH_ALL_PROJECTS))) {
            //if the used doesn't have the permission to search in all the projects for team members, 
            //the user must see all the persons from the projects where he is PM and only his person
            //for the projects where he isn't PM
            List<Project> userProjects = null;
            if (!searchTeamMemberBean.isHasPermissionToSeeAllProjects()) {
                if (!searchTeamMemberBean.isOnlyManager()) {
                    userProjects = BLProject.getInstance().getProjectsByPerson(
                            searchTeamMemberBean.getPersonId(),
                            searchTeamMemberBean.isIncludeFinishedAndAbandonedProjects());
                } else {
                    userProjects = BLProject.getInstance().getProjectsByManager(
                            searchTeamMemberBean.getPersonId(),
                            searchTeamMemberBean.isIncludeFinishedAndAbandonedProjects());
                }
            } else {
                userProjects = BLProject.getInstance().getAllProjects(searchTeamMemberBean.getOrganizationId(),
                        searchTeamMemberBean.isIncludeFinishedAndAbandonedProjects());
            }
            if (userProjects != null && !userProjects.isEmpty()) {
                List<Integer> projectIds = new ArrayList<Integer>();
                for (Project prj : userProjects) {
                    projectIds.add(prj.getProjectId());
                }
                dcOnProject.add(Restrictions.in("projectId", projectIds));
                dcCountOnProject.add(Restrictions.in("projectId", projectIds));
            } else {
                return new ArrayList<TeamMember>();
            }
        } else {
            //if a project is selected, the team members project team must correspond to that project
            dcOnProject.add(Restrictions.eq("projectId", searchTeamMemberBean.getProjectId()));
            dcCountOnProject.add(Restrictions.eq("projectId", searchTeamMemberBean.getProjectId()));
        }
    }

    if (searchTeamMemberBean.getOrganizationId() != null) {
        dcOnProject.add(Restrictions.eq("organizationId", searchTeamMemberBean.getOrganizationId()));
        dcCountOnProject.add(Restrictions.eq("organizationId", searchTeamMemberBean.getOrganizationId()));
    }

    // check if I have to order the results
    if (searchTeamMemberBean.getSortParam() != null
            && StringUtils.hasLength(searchTeamMemberBean.getSortParam())) {
        if (searchTeamMemberBean.getSortParam().equals("projectName")) {
            if (searchTeamMemberBean.getSortDirection() == IConstant.ASCENDING) {
                dcOnProject.addOrder(Order.asc("name"));
            } else {
                dcOnProject.addOrder(Order.desc("name"));
            }
        } else {
            // if I have to, check if I have to order them ascending or descending
            if (searchTeamMemberBean.getSortDirection() == IConstant.ASCENDING) {
                // ascending
                dc.addOrder(Order.asc(searchTeamMemberBean.getSortParam()));
            } else {
                // descending
                dc.addOrder(Order.desc(searchTeamMemberBean.getSortParam()));
            }
        }
    }

    // if the request didn't come from the pagination area, 
    // it means that I have to set the number of result and pages
    if (searchTeamMemberBean.getNbrOfResults() == -1) {
        // set the countDistinct restriction
        dcCount.setProjection(Projections.countDistinct("memberId"));

        int nbrOfResults = ((Integer) getHibernateTemplate().findByCriteria(dcCount, 0, 0).get(0)).intValue();
        searchTeamMemberBean.setNbrOfResults(nbrOfResults);
        logger.debug("NbrOfResults " + searchTeamMemberBean.getNbrOfResults());
        logger.debug("----> searchPersonBean.getResults " + searchTeamMemberBean.getResultsPerPage());
        // get the number of pages
        if (nbrOfResults % searchTeamMemberBean.getResultsPerPage() == 0) {
            searchTeamMemberBean.setNbrOfPages(nbrOfResults / searchTeamMemberBean.getResultsPerPage());
        } else {
            searchTeamMemberBean.setNbrOfPages(nbrOfResults / searchTeamMemberBean.getResultsPerPage() + 1);
        }
        searchTeamMemberBean.setCurrentPage(1);
    }

    List<TeamMember> res = getHibernateTemplate().findByCriteria(dc,
            (searchTeamMemberBean.getCurrentPage() - 1) * searchTeamMemberBean.getResultsPerPage(),
            searchTeamMemberBean.getResultsPerPage());

    logger.debug("getFromSearchSimpleWithPagination - END");
    return res;
}

From source file:ro.cs.logaudit.dao.impl.DaoAuditCmImpl.java

License:Open Source License

/**
 * Searches for audit after criterion from searchBean
 * /* w  ww.ja v a 2  s. co  m*/
 * @author Coni
 * 
 * @return A list of audit beans 
 * @throws ParseException 
 */
public List<AuditCmBean> getAuditBeanFromSearch(SearchAuditCmBean searchAuditCmBean, boolean isDeleteAction,
        Locale locale) throws ParseException {

    logger.debug("getAuditBeanFromSearch - START");

    // set search criterion
    DetachedCriteria dc = DetachedCriteria.forEntityName(IModelConstant.auditcmEntity);
    DetachedCriteria dcCount = DetachedCriteria.forEntityName(IModelConstant.auditcmEntity);

    if (searchAuditCmBean.getOrganisationId() != -1) {
        dc.add(Restrictions.eq("organisationId", searchAuditCmBean.getOrganisationId()));
        dcCount.add(Restrictions.eq("organisationId", searchAuditCmBean.getOrganisationId()));
    }

    if (searchAuditCmBean.getEvent() != null && !"-1".equals(searchAuditCmBean.getEvent())) {
        dc.add(Restrictions.ilike("event", "%".concat(searchAuditCmBean.getEvent()).concat("%")));
        dcCount.add(Restrictions.ilike("event", "%".concat(searchAuditCmBean.getEvent()).concat("%")));
    }
    if (searchAuditCmBean.getPersonId() != null && !"".equals(searchAuditCmBean.getPersonId())) {
        dc.add(Restrictions.eq("personId", searchAuditCmBean.getPersonId()));
        dcCount.add(Restrictions.eq("personId", searchAuditCmBean.getPersonId()));
    }
    if (searchAuditCmBean.getMessage() != null && !"".equals(searchAuditCmBean.getMessage())) {
        dc.add(Restrictions.ilike("message".concat(locale.toString().toUpperCase()),
                "%".concat(searchAuditCmBean.getMessage()).concat("%")));
        dcCount.add(Restrictions.ilike("message".concat(locale.toString().toUpperCase()),
                "%".concat(searchAuditCmBean.getMessage()).concat("%")));
    }

    if (searchAuditCmBean.getStartDate() != null) {
        dc.add(Expression.ge("date", searchAuditCmBean.getStartDate()));
        dcCount.add(Expression.ge("date", searchAuditCmBean.getStartDate()));
    }

    if (searchAuditCmBean.getEndDate() != null) {
        dc.add(Expression.le("date", searchAuditCmBean.getEndDate()));
        dcCount.add(Expression.le("date", searchAuditCmBean.getEndDate()));
    }

    // check if I have to order the results
    if (searchAuditCmBean.getSortParam() != null && !"".equals(searchAuditCmBean.getSortParam())) {
        // if I have to, check if I have to order them ascending or descending
        if (searchAuditCmBean.getSortDirection() == -1) {
            // ascending
            dc.addOrder(Order.asc(searchAuditCmBean.getSortParam()));
        } else {
            // descending
            dc.addOrder(Order.desc(searchAuditCmBean.getSortParam()));
        }
    }

    // if the request didn't come from the pagination area, 
    // it means that I have to set the number of results and pages
    if (isDeleteAction || searchAuditCmBean.getNbrOfResults() == -1) {
        boolean isSearch = false;
        if (searchAuditCmBean.getNbrOfResults() == -1) {
            isSearch = true;
        }
        // set the count(*) restriction         
        dcCount.setProjection(Projections.countDistinct("auditId"));

        //findByCriteria must be called with firstResult and maxResults parameters; the default findByCriteria(DetachedCriteria criteria) implementation
        //sets firstResult and maxResults to -1, which kills the countDistinct Projection         
        int nbrOfResults = ((Integer) getHibernateTemplate().findByCriteria(dcCount, 0, 0).get(0)).intValue();
        logger.debug("search results: ".concat(String.valueOf(nbrOfResults)));
        searchAuditCmBean.setNbrOfResults(nbrOfResults);

        // get the number of pages
        if (nbrOfResults % searchAuditCmBean.getResultsPerPage() == 0) {
            searchAuditCmBean.setNbrOfPages(nbrOfResults / searchAuditCmBean.getResultsPerPage());
        } else {
            searchAuditCmBean.setNbrOfPages(nbrOfResults / searchAuditCmBean.getResultsPerPage() + 1);
        }
        // after an audit is deleted, the same page has to be displayed;
        //only when all the audit events from last page are deleted, the previous page will be shown 
        if (isDeleteAction && (searchAuditCmBean.getCurrentPage() > searchAuditCmBean.getNbrOfPages())) {
            searchAuditCmBean.setCurrentPage(searchAuditCmBean.getNbrOfPages());
        } else if (isSearch) {
            searchAuditCmBean.setCurrentPage(1);
        }

    }

    List<AuditCmBean> res = (List<AuditCmBean>) getHibernateTemplate().findByCriteria(dc,
            (searchAuditCmBean.getCurrentPage() - 1) * searchAuditCmBean.getResultsPerPage(),
            searchAuditCmBean.getResultsPerPage());
    logger.debug("getAuditBeanFromSearch - END results size : ".concat(String.valueOf(res.size())));
    return res;
}

From source file:ro.cs.logaudit.dao.impl.DaoAuditDmImpl.java

License:Open Source License

/**
 * Searches for audit after criterion from searchBean
 * /*from   w  w w . ja v  a  2s . c o m*/
 * @author coni
 * 
 * @return A list of audit beans 
 * @throws ParseException 
 */
public List<AuditDmBean> getAuditBeanFromSearch(SearchAuditDmBean searchAuditDmBean, boolean isDeleteAction,
        Locale locale) throws ParseException {

    logger.debug("getAuditBeanFromSearch - START");

    // set search criterion
    DetachedCriteria dc = DetachedCriteria.forEntityName(IModelConstant.auditdmEntity);
    DetachedCriteria dcCount = DetachedCriteria.forEntityName(IModelConstant.auditdmEntity);

    if (searchAuditDmBean.getOrganisationId() != -1) {
        dc.add(Restrictions.eq("organisationId", searchAuditDmBean.getOrganisationId()));
        dcCount.add(Restrictions.eq("organisationId", searchAuditDmBean.getOrganisationId()));
    }

    if (searchAuditDmBean.getEvent() != null && !"-1".equals(searchAuditDmBean.getEvent())) {
        dc.add(Restrictions.ilike("event", "%".concat(searchAuditDmBean.getEvent()).concat("%")));
        dcCount.add(Restrictions.ilike("event", "%".concat(searchAuditDmBean.getEvent()).concat("%")));
    }
    if (searchAuditDmBean.getPersonId() != null && !"".equals(searchAuditDmBean.getPersonId())) {
        dc.add(Restrictions.eq("personId", searchAuditDmBean.getPersonId()));
        dcCount.add(Restrictions.eq("personId", searchAuditDmBean.getPersonId()));
    }
    if (searchAuditDmBean.getMessage() != null && !"".equals(searchAuditDmBean.getMessage())) {
        dc.add(Restrictions.ilike("message".concat(locale.toString().toUpperCase()),
                "%".concat(searchAuditDmBean.getMessage()).concat("%")));
        dcCount.add(Restrictions.ilike("message".concat(locale.toString().toUpperCase()),
                "%".concat(searchAuditDmBean.getMessage()).concat("%")));
    }

    if (searchAuditDmBean.getStartDate() != null) {
        dc.add(Expression.ge("date", searchAuditDmBean.getStartDate()));
        dcCount.add(Expression.ge("date", searchAuditDmBean.getStartDate()));
    }

    if (searchAuditDmBean.getEndDate() != null) {
        dc.add(Expression.le("date", searchAuditDmBean.getEndDate()));
        dcCount.add(Expression.le("date", searchAuditDmBean.getEndDate()));
    }

    // check if I have to order the results
    if (searchAuditDmBean.getSortParam() != null && !"".equals(searchAuditDmBean.getSortParam())) {
        // if I have to, check if I have to order them ascending or descending
        if (searchAuditDmBean.getSortDirection() == -1) {
            // ascending
            dc.addOrder(Order.asc(searchAuditDmBean.getSortParam()));
        } else {
            // descending
            dc.addOrder(Order.desc(searchAuditDmBean.getSortParam()));
        }
    }

    // if the request didn't come from the pagination area, 
    // it means that I have to set the number of results and pages
    if (isDeleteAction || searchAuditDmBean.getNbrOfResults() == -1) {
        boolean isSearch = false;
        if (searchAuditDmBean.getNbrOfResults() == -1) {
            isSearch = true;
        }
        // set the count(*) restriction         
        dcCount.setProjection(Projections.countDistinct("auditId"));

        //findByCriteria must be called with firstResult and maxResults parameters; the default findByCriteria(DetachedCriteria criteria) implementation
        //sets firstResult and maxResults to -1, which kills the countDistinct Projection         
        int nbrOfResults = ((Integer) getHibernateTemplate().findByCriteria(dcCount, 0, 0).get(0)).intValue();
        logger.debug("search results: ".concat(String.valueOf(nbrOfResults)));
        searchAuditDmBean.setNbrOfResults(nbrOfResults);

        // get the number of pages
        if (nbrOfResults % searchAuditDmBean.getResultsPerPage() == 0) {
            searchAuditDmBean.setNbrOfPages(nbrOfResults / searchAuditDmBean.getResultsPerPage());
        } else {
            searchAuditDmBean.setNbrOfPages(nbrOfResults / searchAuditDmBean.getResultsPerPage() + 1);
        }
        // after an audit is deleted, the same page has to be displayed;
        //only when all the roles from last page are deleted, the previous page will be shown 
        if (isDeleteAction && (searchAuditDmBean.getCurrentPage() > searchAuditDmBean.getNbrOfPages())) {
            searchAuditDmBean.setCurrentPage(searchAuditDmBean.getNbrOfPages());
        } else if (isSearch) {
            searchAuditDmBean.setCurrentPage(1);
        }

    }

    List<AuditDmBean> res = (List<AuditDmBean>) getHibernateTemplate().findByCriteria(dc,
            (searchAuditDmBean.getCurrentPage() - 1) * searchAuditDmBean.getResultsPerPage(),
            searchAuditDmBean.getResultsPerPage());
    logger.debug("getAuditBeanFromSearch - END results size : ".concat(String.valueOf(res.size())));
    return res;
}

From source file:ro.cs.logaudit.dao.impl.DaoAuditOmImpl.java

License:Open Source License

/**
 * Searches for audit after criterion from searchBean
 * /*from  w  w  w.j  av  a2  s .c  om*/
 * @author Adelina
 * @author Coni
 * 
 * @return A list of audit beans 
 * @throws ParseException 
 */
public List<AuditOmBean> getAuditBeanFromSearch(SearchAuditOmBean searchAuditOmBean, boolean isDeleteAction,
        Locale locale) throws ParseException {

    logger.debug("getAuditBeanFromSearch - START");

    // set search criterion
    DetachedCriteria dc = DetachedCriteria.forEntityName(IModelConstant.auditomEntity);
    DetachedCriteria dcCount = DetachedCriteria.forEntityName(IModelConstant.auditomEntity);

    if (searchAuditOmBean.getOrganisationId() != -1) {
        dc.add(Restrictions.eq("organisationId", searchAuditOmBean.getOrganisationId()));
        dcCount.add(Restrictions.eq("organisationId", searchAuditOmBean.getOrganisationId()));
    }

    if (searchAuditOmBean.getEvent() != null && !"-1".equals(searchAuditOmBean.getEvent())) {
        dc.add(Restrictions.ilike("event", "%".concat(searchAuditOmBean.getEvent()).concat("%")));
        dcCount.add(Restrictions.ilike("event", "%".concat(searchAuditOmBean.getEvent()).concat("%")));
    }
    if (searchAuditOmBean.getPersonId() != null && !"".equals(searchAuditOmBean.getPersonId())) {
        dc.add(Restrictions.eq("personId", searchAuditOmBean.getPersonId()));
        dcCount.add(Restrictions.eq("personId", searchAuditOmBean.getPersonId()));
    }
    if (searchAuditOmBean.getMessage() != null && !"".equals(searchAuditOmBean.getMessage())) {
        dc.add(Restrictions.ilike("message".concat(locale.toString().toUpperCase()),
                "%".concat(searchAuditOmBean.getMessage()).concat("%")));
        dcCount.add(Restrictions.ilike("message".concat(locale.toString().toUpperCase()),
                "%".concat(searchAuditOmBean.getMessage()).concat("%")));
    }

    if (searchAuditOmBean.getStartDate() != null) {
        dc.add(Expression.ge("date", searchAuditOmBean.getStartDate()));
        dcCount.add(Expression.ge("date", searchAuditOmBean.getStartDate()));
    }

    if (searchAuditOmBean.getEndDate() != null) {
        dc.add(Expression.le("date", searchAuditOmBean.getEndDate()));
        dcCount.add(Expression.le("date", searchAuditOmBean.getEndDate()));
    }

    // check if I have to order the results
    if (searchAuditOmBean.getSortParam() != null && !"".equals(searchAuditOmBean.getSortParam())) {
        // if I have to, check if I have to order them ascending or descending
        if (searchAuditOmBean.getSortDirection() == -1) {
            // ascending
            dc.addOrder(Order.asc(searchAuditOmBean.getSortParam()));
        } else {
            // descending
            dc.addOrder(Order.desc(searchAuditOmBean.getSortParam()));
        }
    }

    // if the request didn't come from the pagination area, 
    // it means that I have to set the number of results and pages
    if (isDeleteAction || searchAuditOmBean.getNbrOfResults() == -1) {
        boolean isSearch = false;
        if (searchAuditOmBean.getNbrOfResults() == -1) {
            isSearch = true;
        }
        // set the count(*) restriction         
        dcCount.setProjection(Projections.countDistinct("auditId"));

        //findByCriteria must be called with firstResult and maxResults parameters; the default findByCriteria(DetachedCriteria criteria) implementation
        //sets firstResult and maxResults to -1, which kills the countDistinct Projection         
        int nbrOfResults = ((Integer) getHibernateTemplate().findByCriteria(dcCount, 0, 0).get(0)).intValue();
        logger.debug("search results: ".concat(String.valueOf(nbrOfResults)));
        searchAuditOmBean.setNbrOfResults(nbrOfResults);

        // get the number of pages
        if (nbrOfResults % searchAuditOmBean.getResultsPerPage() == 0) {
            searchAuditOmBean.setNbrOfPages(nbrOfResults / searchAuditOmBean.getResultsPerPage());
        } else {
            searchAuditOmBean.setNbrOfPages(nbrOfResults / searchAuditOmBean.getResultsPerPage() + 1);
        }
        // after an audit is deleted, the same page has to be displayed;
        //only when all the audit events from last page are deleted, the previous page will be shown 
        if (isDeleteAction && (searchAuditOmBean.getCurrentPage() > searchAuditOmBean.getNbrOfPages())) {
            searchAuditOmBean.setCurrentPage(searchAuditOmBean.getNbrOfPages());
        } else if (isSearch) {
            searchAuditOmBean.setCurrentPage(1);
        }

    }

    List<AuditOmBean> res = (List<AuditOmBean>) getHibernateTemplate().findByCriteria(dc,
            (searchAuditOmBean.getCurrentPage() - 1) * searchAuditOmBean.getResultsPerPage(),
            searchAuditOmBean.getResultsPerPage());
    logger.debug("getAuditBeanFromSearch - END results size : ".concat(String.valueOf(res.size())));
    return res;
}

From source file:ro.cs.logaudit.dao.impl.DaoAuditTsImpl.java

License:Open Source License

/**
 * Searches for audit after criterion from searchBean
 * /* w  w  w.ja  v a  2 s  . co  m*/
 * @author Coni
 * 
 * @return A list of audit beans 
 * @throws ParseException 
 */
public List<AuditTsBean> getAuditBeanFromSearch(SearchAuditTsBean searchAuditTsBean, boolean isDeleteAction,
        Locale locale) throws ParseException {

    logger.debug("getAuditBeanFromSearch - START");

    // set search criterion
    DetachedCriteria dc = DetachedCriteria.forEntityName(IModelConstant.audittsEntity);
    DetachedCriteria dcCount = DetachedCriteria.forEntityName(IModelConstant.audittsEntity);

    if (searchAuditTsBean.getOrganisationId() != -1) {
        dc.add(Restrictions.eq("organisationId", searchAuditTsBean.getOrganisationId()));
        dcCount.add(Restrictions.eq("organisationId", searchAuditTsBean.getOrganisationId()));
    }

    if (searchAuditTsBean.getEvent() != null && !"-1".equals(searchAuditTsBean.getEvent())) {
        dc.add(Restrictions.ilike("event", "%".concat(searchAuditTsBean.getEvent()).concat("%")));
        dcCount.add(Restrictions.ilike("event", "%".concat(searchAuditTsBean.getEvent()).concat("%")));
    }
    if (searchAuditTsBean.getPersonId() != null && !"".equals(searchAuditTsBean.getPersonId())) {
        dc.add(Restrictions.eq("personId", searchAuditTsBean.getPersonId()));
        dcCount.add(Restrictions.eq("personId", searchAuditTsBean.getPersonId()));
    }
    if (searchAuditTsBean.getMessage() != null && !"".equals(searchAuditTsBean.getMessage())) {
        dc.add(Restrictions.ilike("message".concat(locale.toString().toUpperCase()),
                "%".concat(searchAuditTsBean.getMessage()).concat("%")));
        dcCount.add(Restrictions.ilike("message".concat(locale.toString().toUpperCase()),
                "%".concat(searchAuditTsBean.getMessage()).concat("%")));
    }

    if (searchAuditTsBean.getStartDate() != null) {
        dc.add(Expression.ge("date", searchAuditTsBean.getStartDate()));
        dcCount.add(Expression.ge("date", searchAuditTsBean.getStartDate()));
    }

    if (searchAuditTsBean.getEndDate() != null) {
        dc.add(Expression.le("date", searchAuditTsBean.getEndDate()));
        dcCount.add(Expression.le("date", searchAuditTsBean.getEndDate()));
    }

    // check if I have to order the results
    if (searchAuditTsBean.getSortParam() != null && !"".equals(searchAuditTsBean.getSortParam())) {
        // if I have to, check if I have to order them ascending or descending
        if (searchAuditTsBean.getSortDirection() == -1) {
            // ascending
            dc.addOrder(Order.asc(searchAuditTsBean.getSortParam()));
        } else {
            // descending
            dc.addOrder(Order.desc(searchAuditTsBean.getSortParam()));
        }
    }

    // if the request didn't come from the pagination area, 
    // it means that I have to set the number of results and pages
    if (isDeleteAction || searchAuditTsBean.getNbrOfResults() == -1) {
        boolean isSearch = false;
        if (searchAuditTsBean.getNbrOfResults() == -1) {
            isSearch = true;
        }
        // set the count(*) restriction         
        dcCount.setProjection(Projections.countDistinct("auditId"));

        //findByCriteria must be called with firstResult and maxResults parameters; the default findByCriteria(DetachedCriteria criteria) implementation
        //sets firstResult and maxResults to -1, which kills the countDistinct Projection         
        int nbrOfResults = ((Integer) getHibernateTemplate().findByCriteria(dcCount, 0, 0).get(0)).intValue();
        logger.debug("search results: ".concat(String.valueOf(nbrOfResults)));
        searchAuditTsBean.setNbrOfResults(nbrOfResults);

        // get the number of pages
        if (nbrOfResults % searchAuditTsBean.getResultsPerPage() == 0) {
            searchAuditTsBean.setNbrOfPages(nbrOfResults / searchAuditTsBean.getResultsPerPage());
        } else {
            searchAuditTsBean.setNbrOfPages(nbrOfResults / searchAuditTsBean.getResultsPerPage() + 1);
        }
        // after an audit is deleted, the same page has to be displayed;
        //only when all the audit events from last page are deleted, the previous page will be shown 
        if (isDeleteAction && (searchAuditTsBean.getCurrentPage() > searchAuditTsBean.getNbrOfPages())) {
            searchAuditTsBean.setCurrentPage(searchAuditTsBean.getNbrOfPages());
        } else if (isSearch) {
            searchAuditTsBean.setCurrentPage(1);
        }

    }

    List<AuditTsBean> res = (List<AuditTsBean>) getHibernateTemplate().findByCriteria(dc,
            (searchAuditTsBean.getCurrentPage() - 1) * searchAuditTsBean.getResultsPerPage(),
            searchAuditTsBean.getResultsPerPage());
    logger.debug("getAuditBeanFromSearch - END results size : ".concat(String.valueOf(res.size())));
    return res;
}