Example usage for org.hibernate.criterion DetachedCriteria forEntityName

List of usage examples for org.hibernate.criterion DetachedCriteria forEntityName

Introduction

In this page you can find the example usage for org.hibernate.criterion DetachedCriteria forEntityName.

Prototype

@SuppressWarnings("UnusedDeclaration")
public static DetachedCriteria forEntityName(String entityName) 

Source Link

Document

Static builder to create a DetachedCriteria for the given entity.

Usage

From source file:ro.cs.om.model.dao.impl.DaoUserGroupImpl.java

License:Open Source License

public List<UserGroup> getAllOrganizationUserGroups(int organizationId) {
    logger.debug("getAllOrganizationUserGroups START");
    DetachedCriteria dc = DetachedCriteria.forEntityName(IModelConstant.userGroupSimpleEntity);
    //user group status must be normal
    dc.add(Restrictions.eq("status", IConstant.NOM_USER_GROUP_NORMAL));
    dc.add(Restrictions.eq("organisation.organisationId", organizationId));
    List<UserGroup> res = getHibernateTemplate().findByCriteria(dc);
    logger.debug("getAllOrganizationUserGroups END size:"
            .concat((res != null ? Integer.toString(res.size()) : "null")));
    return res;/*ww w .  ja  va  2 s  .co m*/
}

From source file:ro.cs.om.model.dao.impl.DaoUserGroupImpl.java

License:Open Source License

/**
 * Returns an usergroup with the given name
 * /*w w w  . j a  va  2  s .c o  m*/
 * @author Adelina
 * 
 * @param name
 * @return
 */
public UserGroup getUserGroupByNameAndOrg(String name, Integer organisationId) {
    logger.debug("getUserGroupByNameAndOrg - START - user group by name=".concat(name));

    logger.debug("name = ".concat(name));
    logger.debug("organisationId = ".concat(String.valueOf(organisationId)));

    DetachedCriteria dc = DetachedCriteria.forEntityName(IModelConstant.userGroupSimpleEntity);
    dc.add(Restrictions.eq("name", name));
    dc.add(Restrictions.eq("organisation.organisationId", organisationId));

    List<UserGroup> userGroups = (List<UserGroup>) getHibernateTemplate().findByCriteria(dc);

    Tools.getInstance().printList(logger, userGroups);

    logger.debug("getUserGroupByNameAndOrg - END");

    if (userGroups.size() > 0) {
        return userGroups.get(0);
    } else {
        return null;
    }
}

From source file:ro.cs.ts.model.dao.impl.DaoActivityImpl.java

License:Open Source License

/**
* Search for activities/*from   ww w.  j  ava  2  s.  c om*/
* 
* @author Adelina
* 
* @param searchActivityBean
* @param projectIds
* @param isDeleteAction
* @return
* @throws BusinessException 
*/
public List<Activity> getFromSearch(SearchActivityBean searchActivityBean, Set<Integer> projectIds,
        Integer organizationId, boolean isDeleteAction, MessageSource messageSource) throws BusinessException {
    logger.debug("getFromSearch - START ");

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

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

    // organization      
    if (searchActivityBean.getOrganizationId() != null) {
        dc.add(Restrictions.eq("organizationId", searchActivityBean.getOrganizationId()));
        dcCount.add(Restrictions.eq("organizationId", searchActivityBean.getOrganizationId()));
    }

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

    // project   
    if (searchActivityBean.getProjectId() != null) {
        if (searchActivityBean.getProjectId() != IConstant.NOM_ACTIVITY_SEARCH_ALL
                && searchActivityBean.getProjectId() != IConstant.NOM_ACTIVITY_SEARCH_IN_ORGANIZATION) {
            //set the selected projectId as search criteria               
            dc.createCriteria("projectDetails")
                    .add(Restrictions.eq("projectId", searchActivityBean.getProjectId()));
            dcCount.createCriteria("projectDetails")
                    .add(Restrictions.eq("projectId", searchActivityBean.getProjectId()));
        } else if (searchActivityBean.getProjectId() == IConstant.NOM_ACTIVITY_SEARCH_ALL) {
            if (!userAuth.hasAuthority(PermissionConstant.getInstance().getTS_ActivityAdvancedSearch())) {
                DetachedCriteria subquery = DetachedCriteria
                        .forEntityName(IModelConstant.activityForListingEntity);
                subquery.createCriteria("projectDetails").add(Restrictions.in("projectId", projectIds));
                subquery.add(Restrictions.disjunction());
                subquery.setProjection(Projections.id());
                dc.add(Expression.or(Subqueries.propertyIn("activityId", subquery),
                        Restrictions.isNull("projectDetails")));
                dcCount.add(Expression.or(Subqueries.propertyIn("activityId", subquery),
                        Restrictions.isNull("projectDetails")));
            }
        } else if (searchActivityBean.getProjectId() == IConstant.NOM_ACTIVITY_SEARCH_IN_ORGANIZATION) {
            dc.add(Restrictions.isNull("projectDetails"));
            dcCount.add(Restrictions.isNull("projectDetails"));
        }
    }

    // Status
    dc.add(Restrictions.ne("status", IConstant.NOM_ACTIVITY_STATUS_DELETED));
    dcCount.add(Restrictions.ne("status", IConstant.NOM_ACTIVITY_STATUS_DELETED));

    // Billable
    if (searchActivityBean.getBillable() != null) {
        if (searchActivityBean.getBillable().equals(IConstant.NOM_BILLABLE_YES)
                || searchActivityBean.getBillable().equals(IConstant.NOM_BILLABLE_NO)) {
            dc.add(Restrictions.eq("billable", searchActivityBean.getBillable()));
            dcCount.add(Restrictions.eq("billable", searchActivityBean.getBillable()));
        }
    }

    //the results list
    List<Activity> res = null;

    //the order can be done while retrieving the data from the database only if the sort parameter is the activity name or billable;
    //this cannot be done if the results must be ordered by project name
    if (searchActivityBean.getSortParam() != null && !"".equals(searchActivityBean.getSortParam())
            && !"projectName".equals(searchActivityBean.getSortParam())) {
        // check if I have to order the results
        // if I have to, check if I have to order them ascending or descending
        if (searchActivityBean.getSortDirection() == -1) {
            // ascending
            dc.addOrder(Order.asc(searchActivityBean.getSortParam()));
        } else {
            // descending
            dc.addOrder(Order.desc(searchActivityBean.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 || searchActivityBean.getNbrOfResults() == -1) {
            boolean isSearch = false;
            if (searchActivityBean.getNbrOfResults() == -1) {
                isSearch = true;
            }
            // set the count(*) restriction         
            dcCount.setProjection(Projections.countDistinct("activityId"));

            //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)));
            searchActivityBean.setNbrOfResults(nbrOfResults);

            // get the number of pages
            if (nbrOfResults % searchActivityBean.getResultsPerPage() == 0) {
                searchActivityBean.setNbrOfPages(nbrOfResults / searchActivityBean.getResultsPerPage());
            } else {
                searchActivityBean.setNbrOfPages(nbrOfResults / searchActivityBean.getResultsPerPage() + 1);
            }
            // after an activity 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 && (searchActivityBean.getCurrentPage() > searchActivityBean.getNbrOfPages())) {
                searchActivityBean.setCurrentPage(searchActivityBean.getNbrOfPages());
            } else if (isSearch) {
                searchActivityBean.setCurrentPage(1);
            }
        }

        res = (List<Activity>) getHibernateTemplate().findByCriteria(dc,
                (searchActivityBean.getCurrentPage() - 1) * searchActivityBean.getResultsPerPage(),
                searchActivityBean.getResultsPerPage());
    } else {
        res = (List<Activity>) 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 || searchActivityBean.getNbrOfResults() == -1) {
            boolean isSearch = false;
            if (searchActivityBean.getNbrOfResults() == -1) {
                isSearch = true;
            }
            int nbrOfResults = res.size();
            logger.debug("search results: ".concat(String.valueOf(nbrOfResults)));
            searchActivityBean.setNbrOfResults(nbrOfResults);

            // get the number of pages
            if (nbrOfResults % searchActivityBean.getResultsPerPage() == 0) {
                searchActivityBean.setNbrOfPages(nbrOfResults / searchActivityBean.getResultsPerPage());
            } else {
                searchActivityBean.setNbrOfPages(nbrOfResults / searchActivityBean.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 && (searchActivityBean.getCurrentPage() > searchActivityBean.getNbrOfPages())) {
                searchActivityBean.setCurrentPage(searchActivityBean.getNbrOfPages());
            } else if (isSearch) {
                searchActivityBean.setCurrentPage(1);
            }
        }
    }

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

    if (projectIds.size() > 0) {
        projects = BLProject.getInstance().getProjectsSimpleByProjectIds(projectIds);
        logger.debug("projects = " + projects);
    }

    // setting the project name 
    for (Activity activity : res) {
        if (activity.getProjectDetails() != null && activity.getProjectDetails().getProjectId() != null) {
            if (projects != null && projects.size() > 0) {
                for (Project project : projects) {
                    if (activity.getProjectDetails().getProjectId().equals(project.getProjectId())) {
                        activity.setProjectName(project.getName());
                        activity.setProjectId(project.getProjectId());
                        activity.setProjectManagerId(project.getManagerId());
                        logger.debug("activity = " + activity);
                        break;
                    }
                }
            }
        } else {
            activity.setProjectId(-1);
            activity.setProjectName(messageSource.getMessage(PROJECT_FROM_ORG, null, null));
        }

        logger.debug("projectName = " + activity.getProjectName());
    }

    List<Activity> activities = new ArrayList<Activity>();
    if (searchActivityBean.getSortParam() != null && "projectName".equals(searchActivityBean.getSortParam())) {
        //sorting the exchanges list
        //------sort the list
        if (searchActivityBean.getSortParam().equals("projectName")) {
            Collections.sort(res, ActivityComparator.getInstance().activityProjectNameComparator());
        }

        //ascending or descending
        if (searchActivityBean.getSortDirection() == IConstant.DESCENDING) {
            Collections.reverse(res);
        }
        long start = (searchActivityBean.getCurrentPage() - 1) * searchActivityBean.getResultsPerPage();
        long end = searchActivityBean.getCurrentPage() * searchActivityBean.getResultsPerPage();

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

    logger.debug("getFromSearch - END");
    return activities;
}

From source file:ro.cs.ts.model.dao.impl.DaoActivityImpl.java

License:Open Source License

/**
 * Gets all an organization's activities
 * /*from  w  w  w. j av a2s .co  m*/
 * @author Coni
 * @param organizationId
 * @return
 * @throws BusinessException
 */
public List<Activity> getByOrganization(int organizationId) {
    logger.debug("getByOrganization - START");
    DetachedCriteria dc = DetachedCriteria.forEntityName(IModelConstant.activitySimpleEntity);
    dc.add(Restrictions.eq("organizationId", organizationId));
    dc.add(Restrictions.ne("status", IConstant.NOM_ACTIVITY_STATUS_DELETED));
    dc.add(Restrictions.isNull("projectDetailId"));
    List<Activity> result = getHibernateTemplate().findByCriteria(dc);
    logger.debug("getByOrganization - END");
    return result;
}

From source file:ro.cs.ts.model.dao.impl.DaoActivityImpl.java

License:Open Source License

/**
 * Gets all a project activities//from   ww  w  .j  a va 2 s . c  o  m
 * 
 * @author Coni
 * @param projectId
 * @return
 * @throws  
 * @throws BusinessException
 */
public List<Activity> getByProjectId(int projectId) {
    logger.debug("getByProjectId - START");
    DetachedCriteria dc = DetachedCriteria.forEntityName(IModelConstant.activitySimpleEntity);
    ProjectDetails projectDetails = projectDetailsDao.getByProjectId(projectId);

    dc.add(Restrictions.eq("projectDetailId", projectDetails.getProjectDetailId()));
    dc.add(Restrictions.ne("status", IConstant.NOM_ACTIVITY_STATUS_DELETED));

    List<Activity> res = (List<Activity>) getHibernateTemplate().findByCriteria(dc);
    logger.debug("getByProjectId - END");
    return res;
}

From source file:ro.cs.ts.model.dao.impl.DaoActivityImpl.java

License:Open Source License

/**
 * Returns Activity entities that use the Currency with the id currencyId
 * @author Coni//from  w  ww.j  a  v  a  2  s.  c  o m
 * @param currencyId
 * @return
 * @throws BusinessException 
 */
public List<Activity> getByCurrencyId(int currencyId) {
    logger.debug("getByCurrencyId - START");
    DetachedCriteria dc = DetachedCriteria.forEntityName(IModelConstant.activityWithCurrenciesEntity);
    dc.add(Restrictions.or(Restrictions.eq("costPriceCurrencyId", currencyId),
            Restrictions.eq("billingPriceCurrencyId", currencyId)));
    dc.add(Restrictions.ne("status", IConstant.NOM_ACTIVITY_STATUS_DELETED));

    List<Activity> res = getHibernateTemplate().findByCriteria(dc);
    logger.debug("getByCurrencyId - END");
    return res;
}

From source file:ro.cs.ts.model.dao.impl.DaoActivityImpl.java

License:Open Source License

/**
 * Gets the activities for a projectDetail
 * //from  w w w .j ava2 s .com
 * @author Adelina
 * 
 * @param projectDetailId
 * @return
 * @throws  
 * @throws BusinessException
 */
public List<Activity> getByProjectDetailId(Integer projectDetailId) {
    logger.debug("getByProjectDetailId - START");
    DetachedCriteria dc = DetachedCriteria.forEntityName(IModelConstant.activitySimpleEntity);

    dc.add(Restrictions.eq("projectDetailId", projectDetailId));
    dc.add(Restrictions.ne("status", IConstant.NOM_ACTIVITY_STATUS_DELETED));

    List<Activity> res = (List<Activity>) getHibernateTemplate().findByCriteria(dc);
    logger.debug("getByProjectDetailId - END");
    return res;
}

From source file:ro.cs.ts.model.dao.impl.DaoCostSheetImpl.java

License:Open Source License

/**
 * Searches for cost sheets using the criterion defined in searchCostSheetBean
 * @author Coni/* w w  w. ja v a2  s.  co m*/
 * @param searchCostSheetBean
 * @param isDeleteAction
 * @return
 * @throws BusinessException 
 * @throws BusinessException
 */
public List<CostSheet> getResultsForSearch(SearchCostSheetBean searchCostSheetBean, boolean isDeleteAction)
        throws BusinessException {
    logger.debug("getResultsForSearch - START");

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

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

    //COST SHEET ID
    if (searchCostSheetBean.getId() != null) {
        dc.add(Restrictions.eq("costSheetId", searchCostSheetBean.getId()));
        dcCount.add(Restrictions.eq("costSheetId", searchCostSheetBean.getId()));
    }

    //ACTIVITY NAME
    if (searchCostSheetBean.getActivityName() != null && !"".equals(searchCostSheetBean.getActivityName())) {
        dc.add(Restrictions.ilike("activityName",
                "%".concat(searchCostSheetBean.getActivityName().concat("%"))));
        dcCount.add(Restrictions.ilike("activityName",
                "%".concat(searchCostSheetBean.getActivityName().concat("%"))));
    }

    //START DATE
    if (searchCostSheetBean.getStartDate() != null) {
        dc.add(Restrictions.ge("date", searchCostSheetBean.getStartDate()));
        dcCount.add(Restrictions.ge("date", searchCostSheetBean.getStartDate()));
    }

    //END DATE
    if (searchCostSheetBean.getEndDate() != null) {
        dc.add(Restrictions.le("date", searchCostSheetBean.getEndDate()));
        dcCount.add(Restrictions.le("date", searchCostSheetBean.getEndDate()));
    }

    //BILLABLE
    if (searchCostSheetBean.getBillable() != null) {
        if (searchCostSheetBean.getBillable().equals(IConstant.NOM_BILLABLE_YES)
                || searchCostSheetBean.getBillable().equals(IConstant.NOM_BILLABLE_NO)) {
            dc.add(Restrictions.eq("billable", searchCostSheetBean.getBillable()));
            dcCount.add(Restrictions.eq("billable", searchCostSheetBean.getBillable()));
        }
    }

    //ORGANIZATION ID
    if (searchCostSheetBean.getOrganizationId() != null) {
        dc.add(Restrictions.eq("organizationId", searchCostSheetBean.getOrganizationId()));
        dcCount.add(Restrictions.eq("organizationId", searchCostSheetBean.getOrganizationId()));
    }

    //STATUS
    dc.add(Restrictions.ne("status", IConstant.NOM_COST_SHEET_STATUS_DELETED));
    dcCount.add(Restrictions.ne("status", IConstant.NOM_COST_SHEET_STATUS_DELETED));

    //COST PRICE MIN
    if (searchCostSheetBean.getCostPriceMin() != null) {
        dc.add(Restrictions.ge("costPrice", searchCostSheetBean.getCostPriceMin()));
        dcCount.add(Restrictions.ge("costPrice", searchCostSheetBean.getCostPriceMin()));
    }

    //COST PRICE MAX
    if (searchCostSheetBean.getCostPriceMax() != null) {
        dc.add(Restrictions.le("costPrice", searchCostSheetBean.getCostPriceMax()));
        dcCount.add(Restrictions.le("costPrice", searchCostSheetBean.getCostPriceMax()));
    }

    //CURRENCY
    if (searchCostSheetBean.getCostPriceCurrencyId() != null
            && !searchCostSheetBean.getCostPriceCurrencyId().equals(-1)) {
        dc.createCriteria("costPriceCurrency")
                .add(Restrictions.eq("currencyId", searchCostSheetBean.getCostPriceCurrencyId()));
        dcCount.createCriteria("costPriceCurrency")
                .add(Restrictions.eq("currencyId", searchCostSheetBean.getCostPriceCurrencyId()));
    }

    List<TeamMember> members = null;
    List<UserSimple> users = null;
    //FIRST NAME AND LAST NAME
    if ((searchCostSheetBean.getFirstName() != null && !"".equals(searchCostSheetBean.getFirstName()))
            || (searchCostSheetBean.getLastName() != null && !"".equals(searchCostSheetBean.getLastName()))) {

        List<Integer> memberIds = new ArrayList<Integer>();
        if (searchCostSheetBean.getProjectId() != IConstant.NOM_COST_SHEET_SEARCH_FOR_ORG) {
            List<TeamMember> teamMembers = BLTeamMember.getInstance().getTeamMemberFromSearch(
                    searchCostSheetBean.getOrganizationId(), searchCostSheetBean.getFirstName(),
                    searchCostSheetBean.getLastName(), false);
            if (teamMembers != null && !teamMembers.isEmpty()) {
                members = teamMembers;
                for (TeamMember teamMember : teamMembers) {
                    memberIds.add(new Integer(teamMember.getMemberId()));
                }
            }
        }

        List<Integer> personIds = new ArrayList<Integer>();
        //search for persons only if the selected option is to search in all or per organization,
        //otherwise only search for team members
        if (searchCostSheetBean.getProjectId() == IConstant.NOM_COST_SHEET_SEARCH_ALL
                || searchCostSheetBean.getProjectId() == IConstant.NOM_COST_SHEET_SEARCH_FOR_ORG) {
            List<UserSimple> persons = BLUser.getInstance().getUserSimpleFromSearch(
                    searchCostSheetBean.getOrganizationId(), searchCostSheetBean.getFirstName(),
                    searchCostSheetBean.getLastName(), true);

            if (persons != null && !persons.isEmpty()) {
                users = persons;
                for (UserSimple person : persons) {
                    personIds.add(person.getUserId());
                }
            }
        }

        if (!memberIds.isEmpty() && !personIds.isEmpty()) {
            List<Integer> costSheetIds = new ArrayList<Integer>();

            DetachedCriteria teamMemberDc = DetachedCriteria
                    .forEntityName(IModelConstant.costSheetWithTeamMemberDetailEntity);
            teamMemberDc.createCriteria("teamMemberDetail").add(Restrictions.in("teamMemberId", memberIds));
            teamMemberDc.add(Restrictions.ne("status", IConstant.NOM_COST_SHEET_STATUS_DELETED));
            List<CostSheet> resForTeamMembers = (List<CostSheet>) getHibernateTemplate()
                    .findByCriteria(teamMemberDc);
            if (resForTeamMembers != null && !resForTeamMembers.isEmpty()) {
                for (CostSheet cost : resForTeamMembers) {
                    costSheetIds.add(cost.getCostSheetId());
                }
            }
            DetachedCriteria personDc = DetachedCriteria
                    .forEntityName(IModelConstant.costSheetWithPersonDetailEntity);
            personDc.createCriteria("personDetail").add(Restrictions.in("personId", personIds));
            personDc.add(Restrictions.ne("status", IConstant.NOM_COST_SHEET_STATUS_DELETED));
            List<CostSheet> resForPersons = (List<CostSheet>) getHibernateTemplate().findByCriteria(personDc);
            if (resForPersons != null && !resForPersons.isEmpty()) {
                for (CostSheet cost : resForPersons) {
                    costSheetIds.add(cost.getCostSheetId());
                }
            }

            if (!costSheetIds.isEmpty()) {
                dc.add(Restrictions.in("costSheetId", costSheetIds));
                dcCount.add(Restrictions.in("costSheetId", costSheetIds));
            }
        } else if (!memberIds.isEmpty()) {
            dc.createCriteria("teamMemberDetail").add(Restrictions.in("teamMemberId", memberIds));
            dcCount.createCriteria("teamMemberDetail").add(Restrictions.in("teamMemberId", memberIds));
        } else if (!personIds.isEmpty()) {
            dc.createCriteria("personDetail").add(Restrictions.in("personId", personIds));
            dcCount.createCriteria("personDetail").add(Restrictions.in("personId", personIds));
        } else {
            return new ArrayList<CostSheet>();
        }
    }

    List<Project> projects = null;
    //PROJECT AND TEAM MEMBER
    //if no project is selected, we use a subquery to retrieve a list of cost sheet ids from which we will search for cost sheets
    //using the other search criteria (including first name and last name)
    //if a project is selected, firstName or lastName won't exist as search criteria, only teamMemberId must be taken into account 
    if (searchCostSheetBean.getTeamMemberId() == -1
            && searchCostSheetBean.getProjectId() == IConstant.NOM_COST_SHEET_SEARCH_ALL) { //search in all the cost sheets

        //if the user doesn't have the permission to search in all the cost sheets, the projectId must be 
        //included in the list of ids for the projects in which the user is a team member
        if (!userAuth.hasAuthority(PermissionConstant.getInstance().getTS_CostSheetSearchAll())) {

            HashMap<Project, TeamMember> projectsAndTeamMembers = BLProject.getInstance()
                    .getProjectsAndTeamMembersByPerson(userAuth.getPersonId(), true, true);
            if (projectsAndTeamMembers != null && !projectsAndTeamMembers.isEmpty()) {
                projects = new ArrayList<Project>(projectsAndTeamMembers.keySet());
                List<Integer> costSheetIds = new ArrayList<Integer>();
                Iterator it = projectsAndTeamMembers.entrySet().iterator();
                while (it.hasNext()) {
                    Map.Entry<Project, TeamMember> entry = (Map.Entry<Project, TeamMember>) it.next();
                    //the subquery is used to retrieve the list of cost sheet ids retrieved for the teamMemberId and projectId search criteria;
                    DetachedCriteria subquery = null;
                    if (!entry.getKey().getManagerId().equals(userAuth.getPersonId())) {
                        subquery = DetachedCriteria
                                .forEntityName(IModelConstant.costSheetWithProjectAndTeamMemberDetailsEntity);
                    } else {
                        subquery = DetachedCriteria
                                .forEntityName(IModelConstant.costSheetWithProjectDetailsEntity);
                    }
                    subquery.createCriteria("projectDetails")
                            .add(Restrictions.eq("projectId", entry.getKey().getProjectId()));
                    subquery.setProjection(Projections.id());
                    subquery.add(Restrictions.ne("status", IConstant.NOM_COST_SHEET_STATUS_DELETED));
                    //if the user is the PM for this project, we set a restriction only on projectId,
                    //otherwise the restriction is on teamMemberId
                    if (!entry.getKey().getManagerId().equals(userAuth.getPersonId())) {
                        subquery.createCriteria("teamMemberDetail")
                                .add(Restrictions.eq("teamMemberId", entry.getValue().getMemberId()));
                    }
                    List<Integer> costSheetIdsTemp = (List<Integer>) getHibernateTemplate()
                            .findByCriteria(subquery);
                    if (costSheetIdsTemp != null) {
                        for (Integer id : costSheetIdsTemp) {
                            costSheetIds.add(id);
                        }
                    }
                }

                //search for cost sheets entered by the user for the organization (no project selected)
                DetachedCriteria subquery = DetachedCriteria
                        .forEntityName(IModelConstant.costSheetWithPersonDetailEntity);
                subquery.createCriteria("personDetail")
                        .add(Restrictions.eq("personId", userAuth.getPersonId()));
                subquery.setProjection(Projections.id());
                subquery.add(Restrictions.ne("status", IConstant.NOM_COST_SHEET_STATUS_DELETED));
                List<Integer> costSheetIdsTemp = (List<Integer>) getHibernateTemplate()
                        .findByCriteria(subquery);
                if (costSheetIdsTemp != null) {
                    for (Integer id : costSheetIdsTemp) {
                        costSheetIds.add(id);
                    }
                }

                if (!costSheetIds.isEmpty()) {
                    dc.add(Restrictions.in("costSheetId", costSheetIds));
                    dcCount.add(Restrictions.in("costSheetId", costSheetIds));
                } else {
                    return new ArrayList<CostSheet>();
                }
            }
        }

    } else if (searchCostSheetBean.getTeamMemberId() == -1
            && searchCostSheetBean.getProjectId() == IConstant.NOM_COST_SHEET_SEARCH_FOR_ORG) {
        //if the user doesn't have the permission to search in all the cost sheets per organization, i must set the personId property 
        //to the user correspondent personId
        if (!userAuth.hasAuthority(PermissionConstant.getInstance().getTS_CostSheetSearchAll())) {
            dc.createCriteria("personDetail").add(Restrictions.eq("personId", userAuth.getPersonId()));
            dcCount.createCriteria("personDetail").add(Restrictions.eq("personId", userAuth.getPersonId()));
        } else {
            //if the user has the permission to search in all the cost sheets for organization, i must set the condition that the personDetail property
            //mustn't be null
            dc.add(Restrictions.isNotNull("personDetail"));
            dcCount.add(Restrictions.isNotNull("personDetail"));
        }
    } else if (searchCostSheetBean.getTeamMemberId() == -1
            && searchCostSheetBean.getProjectId() == IConstant.NOM_COST_SHEET_SEARCH_IN_ALL_PROJECTS) { //search in the cost sheets for all the projects

        //if the user doesn't have the permission to search in all the cost sheets, the projectId must be 
        //included in the list of ids for the projects in which the user is a team member
        if (!userAuth.hasAuthority(PermissionConstant.getInstance().getTS_CostSheetSearchAll())) {
            HashMap<Project, TeamMember> projectsAndTeamMembers = BLProject.getInstance()
                    .getProjectsAndTeamMembersByPerson(userAuth.getPersonId(), true, true);
            if (projectsAndTeamMembers != null && !projectsAndTeamMembers.isEmpty()) {
                projects = new ArrayList<Project>(projectsAndTeamMembers.keySet());
                List<Integer> costSheetIds = new ArrayList<Integer>();
                Iterator it = projectsAndTeamMembers.entrySet().iterator();
                while (it.hasNext()) {
                    Map.Entry<Project, TeamMember> entry = (Map.Entry<Project, TeamMember>) it.next();
                    //the subquery is used to retrieve the list of cost sheet ids retrieved for the teamMemberId and projectId search criteria;
                    DetachedCriteria subquery = null;
                    if (!entry.getKey().getManagerId().equals(userAuth.getPersonId())) {
                        subquery = DetachedCriteria
                                .forEntityName(IModelConstant.costSheetWithProjectAndTeamMemberDetailsEntity);
                    } else {
                        subquery = DetachedCriteria
                                .forEntityName(IModelConstant.costSheetWithProjectDetailsEntity);
                    }
                    subquery.createCriteria("projectDetails")
                            .add(Restrictions.eq("projectId", entry.getKey().getProjectId()));
                    subquery.setProjection(Projections.id());
                    subquery.add(Restrictions.ne("status", IConstant.NOM_COST_SHEET_STATUS_DELETED));
                    //if the user is the PM for this project, we set a restriction only on projectId,
                    //otherwise the restriction is on teamMemberId
                    if (!entry.getKey().getManagerId().equals(userAuth.getPersonId())) {
                        subquery.createCriteria("teamMemberDetail")
                                .add(Restrictions.eq("teamMemberId", entry.getValue().getMemberId()));
                    }
                    List<Integer> costSheetIdsTemp = (List<Integer>) getHibernateTemplate()
                            .findByCriteria(subquery);
                    if (costSheetIdsTemp != null) {
                        for (Integer id : costSheetIdsTemp) {
                            costSheetIds.add(id);
                        }
                    }
                }
                if (!costSheetIds.isEmpty()) {
                    dc.add(Restrictions.in("costSheetId", costSheetIds));
                    dcCount.add(Restrictions.in("costSheetId", costSheetIds));
                } else {
                    return new ArrayList<CostSheet>();
                }
            }
        } else {
            //the cost sheet must be entered for a specific project; cost sheets per organisation are excluded
            dc.add(Restrictions.isNotNull("projectDetails"));
            dcCount.add(Restrictions.isNotNull("projectDetails"));
        }
    } else if (searchCostSheetBean.getTeamMemberId() == -1 && searchCostSheetBean.getProjectId() > 0) { //search in a project
        Project project = BLProject.getInstance().get(searchCostSheetBean.getProjectId(), true);
        if (project != null) {
            projects = new ArrayList<Project>();
            projects.add(project);
            //if the user is not PM for the selected project nor USER_ALL, it will see only its cost sheets
            if (!project.getManagerId().equals(userAuth.getPersonId())
                    && !userAuth.hasAuthority(PermissionConstant.getInstance().getTS_CostSheetSearchAll())) {
                Iterator<TeamMember> it = project.getProjectTeam().getTeamMembers().iterator();
                while (it.hasNext()) {
                    TeamMember member = it.next();
                    if (member.getPersonId() == userAuth.getPersonId()) {
                        dc.createCriteria("teamMemberDetail")
                                .add(Restrictions.eq("teamMemberId", member.getMemberId()));
                        dcCount.createCriteria("teamMemberDetail")
                                .add(Restrictions.eq("teamMemberId", member.getMemberId()));
                    }
                }
            }
        }
        //set the selected projectId as search criteria
        dc.createCriteria("projectDetails")
                .add(Restrictions.eq("projectId", searchCostSheetBean.getProjectId()));
        dcCount.createCriteria("projectDetails")
                .add(Restrictions.eq("projectId", searchCostSheetBean.getProjectId()));
    } else if (searchCostSheetBean.getTeamMemberId() != -1 && searchCostSheetBean.getProjectId() > 0) { //search in a project and for a specific teamMemberDetail
        //set the selected projectId and teamMemberId as search criteria
        dc.createCriteria("projectDetails")
                .add(Restrictions.eq("projectId", searchCostSheetBean.getProjectId()));
        dc.createCriteria("teamMemberDetail")
                .add(Restrictions.eq("teamMemberId", searchCostSheetBean.getTeamMemberId()));
        dcCount.createCriteria("projectDetails")
                .add(Restrictions.eq("projectId", searchCostSheetBean.getProjectId()));
        dcCount.createCriteria("teamMemberDetail")
                .add(Restrictions.eq("teamMemberId", searchCostSheetBean.getTeamMemberId()));
    }

    //the results list
    List<CostSheet> res = null;

    //the order can be done while retrieving the data from the database only if the sort parameter is the activity name, costSheetId, date, billable;
    //this cannot be done if the results must be ordered by cost sheet owner name or project name
    if (searchCostSheetBean.getSortParam() != null && !"".equals(searchCostSheetBean.getSortParam())
            && !"costSheetReporterName".equals(searchCostSheetBean.getSortParam())
            && !"projectName".equals(searchCostSheetBean.getSortParam())) {
        // check if I have to order the results
        // if I have to, check if I have to order them ascending or descending
        if (searchCostSheetBean.getSortDirection() == -1) {
            // ascending
            dc.addOrder(Order.asc(searchCostSheetBean.getSortParam()));
        } else {
            // descending
            dc.addOrder(Order.desc(searchCostSheetBean.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 || searchCostSheetBean.getNbrOfResults() == -1) {
            boolean isSearch = false;
            if (searchCostSheetBean.getNbrOfResults() == -1) {
                isSearch = true;
            }
            // set the count(*) restriction         
            dcCount.setProjection(Projections.countDistinct("costSheetId"));

            //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)));
            searchCostSheetBean.setNbrOfResults(nbrOfResults);

            // get the number of pages
            if (nbrOfResults % searchCostSheetBean.getResultsPerPage() == 0) {
                searchCostSheetBean.setNbrOfPages(nbrOfResults / searchCostSheetBean.getResultsPerPage());
            } else {
                searchCostSheetBean.setNbrOfPages(nbrOfResults / searchCostSheetBean.getResultsPerPage() + 1);
            }
            // after a cost sheet 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
                    && (searchCostSheetBean.getCurrentPage() > searchCostSheetBean.getNbrOfPages())) {
                searchCostSheetBean.setCurrentPage(searchCostSheetBean.getNbrOfPages());
            } else if (isSearch) {
                searchCostSheetBean.setCurrentPage(1);
            }
        }

        res = (List<CostSheet>) getHibernateTemplate().findByCriteria(dc,
                (searchCostSheetBean.getCurrentPage() - 1) * searchCostSheetBean.getResultsPerPage(),
                searchCostSheetBean.getResultsPerPage());
    }

    //setting the cost sheet reporter name 
    if (res != null && res.size() > 0) {
        if (members == null) {
            HashSet<Integer> teamMemberIds = new HashSet<Integer>();
            for (CostSheet cost : res) {
                if (cost.getTeamMemberDetail() != null) {
                    teamMemberIds.add(new Integer(cost.getTeamMemberDetail().getTeamMemberId()));
                }
            }
            if (teamMemberIds.size() > 0) {
                members = BLTeamMember.getInstance().getTeamMembersByMemberIds(teamMemberIds, false);
            }
        }
        if (users == null) {
            HashSet<Integer> personIds = new HashSet<Integer>();
            for (CostSheet cost : res) {
                if (cost.getPersonDetail() != null) {
                    personIds.add(new Integer(cost.getPersonDetail().getPersonId()));
                }
            }
            if (personIds.size() > 0) {
                String[] ids = new String[personIds.size()];
                int i = 0;
                for (Integer personId : personIds) {
                    ids[i++] = personId.toString();
                }
                users = BLUser.getInstance().getUsersByPersonId(ids);
            }
        }

        if (projects == null) {
            HashSet<Integer> projectIds = new HashSet<Integer>();
            for (CostSheet cost : res) {
                if (cost.getProjectDetails() != null) {
                    projectIds.add(new Integer(cost.getProjectDetails().getProjectId()));
                }
            }
            if (projectIds.size() > 0) {
                projects = BLProject.getInstance().getProjectsSimpleByProjectIds(projectIds);
            }
        }

        for (CostSheet cost : res) {
            if (cost.getTeamMemberDetail() != null && members != null) {
                for (TeamMember member : members) {
                    if (cost.getTeamMemberDetail().getTeamMemberId().equals(member.getMemberId())) {
                        cost.setCostSheetReporterName(
                                member.getFirstName().concat(" ").concat(member.getLastName()));
                        break;
                    }
                }
            } else if (cost.getPersonDetail() != null && users != null) {
                for (UserSimple user : users) {
                    if (cost.getPersonDetail().getPersonId() == user.getUserId()) {
                        cost.setCostSheetReporterName(
                                user.getFirstName().concat(" ").concat(user.getLastName()));
                        break;
                    }
                }
            }

            //setting the project name
            if (cost.getProjectDetails() != null && cost.getProjectDetails().getProjectId() != null
                    && projects != null) {
                for (Project project : projects) {
                    if (cost.getProjectDetails().getProjectId().equals(project.getProjectId())) {
                        cost.setProjectName(project.getName());
                        cost.setProjectManagerId(project.getManagerId());
                        break;
                    }
                }
            }
        }
    }

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

From source file:ro.cs.ts.model.dao.impl.DaoCostSheetImpl.java

License:Open Source License

/**
 * Returns CostSheet entities that use the Currency with the id currencyId
 * @author Coni//from   w  w  w  .j  a v  a 2 s  . c o m
 * @param currencyId
 * @return
 * @throws BusinessException 
 */
public List<CostSheet> getByCurrencyId(int currencyId) {
    logger.debug("getByCurrencyId - START");
    DetachedCriteria dc = DetachedCriteria.forEntityName(IModelConstant.costSheetWithCurrenciesEntity);

    dc.add(Restrictions.or(Restrictions.eq("costPriceCurrencyId", currencyId),
            Restrictions.eq("billingPriceCurrencyId", currencyId)));
    dc.add(Restrictions.ne("status", IConstant.NOM_COST_SHEET_STATUS_DELETED));
    List<CostSheet> res = getHibernateTemplate().findByCriteria(dc);

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

From source file:ro.cs.ts.model.dao.impl.DaoCostSheetImpl.java

License:Open Source License

/**
 * Gets the costs for the projectDetailId
 * //from w w  w .ja va  2 s.  c o  m
 * @author Adelina
 * 
 * @param projectDetailId
 * @return
 */
public List<CostSheet> getSimpleByProjectDetailId(Integer projectDetailId) {
    logger.debug("getByProjectDetailId - START");
    DetachedCriteria dc = DetachedCriteria.forEntityName(IModelConstant.costSheetSimpleEntity);

    dc.add(Restrictions.eq("projectDetailId", projectDetailId));
    dc.add(Restrictions.ne("status", IConstant.NOM_COST_SHEET_STATUS_DELETED));

    List<CostSheet> res = (List<CostSheet>) getHibernateTemplate().findByCriteria(dc);
    logger.debug("getByProjectDetailId - END");
    return res;
}