IssueDAOImpl.java
- package org.itracker.persistence.dao;
- import org.apache.commons.collections.CollectionUtils;
- import org.apache.commons.collections.Predicate;
- import org.apache.commons.collections.Transformer;
- import org.hibernate.Criteria;
- import org.hibernate.HibernateException;
- import org.hibernate.Query;
- import org.hibernate.criterion.Order;
- import org.hibernate.criterion.Restrictions;
- import org.itracker.model.*;
- import org.itracker.model.util.IssueUtilities;
- import java.util.*;
- /**
- * Default implementation of <code>IssueDAO</code> using Hibernate.
- *
- * @author ready
- */
- public class IssueDAOImpl extends BaseHibernateDAOImpl<Issue> implements IssueDAO {
- private ProjectDAO projectDAO;
- public Issue findByPrimaryKey(Integer issueId) {
- try {
- Issue issue = (Issue) getSession().get(Issue.class, issueId);
- if (null != issue) {
- getSession().refresh(issue);
- } else {
- throw new NoSuchEntityException("Issue " + issueId);
- }
- return issue;
- } catch (HibernateException ex) {
- throw convertHibernateAccessException(ex);
- }
- }
- public Long countAllIssues() {
- final Long count;
- try {
- final Query query = getSession().getNamedQuery("IssueCountAll");
- count = (Long) query.uniqueResult();
- } catch (HibernateException ex) {
- throw convertHibernateAccessException(ex);
- }
- return count;
- }
- @SuppressWarnings("unchecked")
- public List<Issue> findAll() {
- final List<Issue> issues;
- try {
- issues = getSession().getNamedQuery("IssuesAllQuery").list();
- } catch (HibernateException ex) {
- throw convertHibernateAccessException(ex);
- }
- return issues;
- }
- @SuppressWarnings("unchecked")
- public List<Issue> findByStatus(int status) {
- try {
- Query query = getSession().getNamedQuery("IssuesByStatusQuery");
- query.setInteger("issueStatus", status);
- return query.list();
- } catch (HibernateException ex) {
- throw convertHibernateAccessException(ex);
- }
- }
- @SuppressWarnings("unchecked")
- public List<Issue> findByStatusLessThan(int maxExclusiveStatus) {
- final List<Issue> issues;
- try {
- Query query = getSession().getNamedQuery("IssuesByStatusLessThanQuery");
- query.setInteger("maxExclusiveStatus", maxExclusiveStatus);
- issues = query.list();
- } catch (HibernateException ex) {
- throw convertHibernateAccessException(ex);
- }
- return issues;
- }
- @SuppressWarnings("unchecked")
- public List<Issue> findByStatusLessThanEqualTo(int maxStatus) {
- final List<Issue> issues;
- try {
- Query query = getSession().getNamedQuery("IssuesByStatusLessThanEqualToQuery");
- query.setInteger("maxStatus", maxStatus);
- issues = query.list();
- } catch (HibernateException ex) {
- throw convertHibernateAccessException(ex);
- }
- return issues;
- }
- @SuppressWarnings("unchecked")
- public List<Issue> findByStatusLessThanEqualToInAvailableProjects(int maxStatus) {
- final List<Issue> issues;
- try {
- Query query = getSession().getNamedQuery(
- "IssuesByStatusLessThanEqualToInAvailableProjectsQuery");
- query.setInteger("maxStatus", maxStatus);
- issues = query.list();
- } catch (HibernateException ex) {
- throw convertHibernateAccessException(ex);
- }
- return issues;
- }
- @SuppressWarnings("unchecked")
- public List<Issue> findBySeverity(int severity) {
- final List<Issue> issues;
- try {
- Query query = getSession().getNamedQuery("IssuesBySeverityQuery");
- query.setInteger("severity", severity);
- issues = query.list();
- } catch (HibernateException ex) {
- throw convertHibernateAccessException(ex);
- }
- return issues;
- }
- @SuppressWarnings("unchecked")
- public List<Issue> findByProject(Integer projectId) {
- final List<Issue> issues;
- try {
- Query query = getSession().getNamedQuery("IssuesByProjectQuery");
- query.setInteger("projectId", projectId);
- issues = query.list();
- } catch (HibernateException ex) {
- throw convertHibernateAccessException(ex);
- }
- return issues;
- }
- public Long countByProject(Integer projectId) {
- final Long count;
- try {
- final Query query = getSession().getNamedQuery(
- "IssueCountByProjectQuery");
- query.setInteger("projectId", projectId);
- count = (Long) query.uniqueResult();
- } catch (HibernateException ex) {
- throw convertHibernateAccessException(ex);
- }
- return count;
- }
- @SuppressWarnings("unchecked")
- public List<Issue> findByProjectAndLowerStatus(Integer projectId,
- int maxExclusiveStatus) {
- final List<Issue> issues;
- try {
- Query query = getSession().getNamedQuery(
- "IssuesByProjectAndLowerStatusQuery");
- query.setInteger("projectId", projectId);
- query.setInteger("maxExclusiveStatus", maxExclusiveStatus);
- issues = query.list();
- } catch (HibernateException ex) {
- throw convertHibernateAccessException(ex);
- }
- return issues;
- }
- public Long countByProjectAndLowerStatus(Integer projectId,
- int maxExclusiveStatus) {
- final Long count;
- try {
- final Query query = getSession().getNamedQuery(
- "IssueCountByProjectAndLowerStatusQuery");
- query.setInteger("projectId", projectId);
- query.setInteger("maxExclusiveStatus", maxExclusiveStatus);
- count = (Long) query.uniqueResult();
- } catch (HibernateException ex) {
- throw convertHibernateAccessException(ex);
- }
- return count;
- }
- @SuppressWarnings("unchecked")
- public List<Issue> findByProjectAndHigherStatus(Integer projectId,
- int status) {
- final List<Issue> issues;
- try {
- Query query = getSession().getNamedQuery(
- "IssuesByProjectAndHigherStatusQuery");
- query.setInteger("projectId", projectId);
- query.setInteger("minStatus", status);
- issues = query.list();
- } catch (HibernateException ex) {
- throw convertHibernateAccessException(ex);
- }
- return issues;
- }
- public Long countByProjectAndHigherStatus(Integer projectId, int minStatus) {
- final Long count;
- try {
- final Query query = getSession().getNamedQuery(
- "IssueCountByProjectAndHigherStatusQuery");
- query.setInteger("projectId", projectId);
- query.setInteger("minStatus", minStatus);
- count = (Long) query.uniqueResult();
- } catch (HibernateException ex) {
- throw convertHibernateAccessException(ex);
- }
- return count;
- }
- @SuppressWarnings("unchecked")
- public List<Issue> findByOwner(Integer ownerId, int maxExclusiveStatus) {
- final List<Issue> issues;
- try {
- Query query = getSession().getNamedQuery("IssuesByOwnerQuery");
- query.setInteger("ownerId", ownerId);
- query.setInteger("maxExclusiveStatus", maxExclusiveStatus);
- issues = query.list();
- } catch (HibernateException ex) {
- throw convertHibernateAccessException(ex);
- }
- return issues;
- }
- @SuppressWarnings("unchecked")
- public List<Issue> findByOwnerInAvailableProjects(Integer ownerId,
- int maxExclusiveStatus) {
- final List<Issue> issues;
- try {
- Query query = getSession().getNamedQuery(
- "IssuesByOwnerInAvailableProjectsQuery");
- query.setInteger("ownerId", ownerId);
- query.setInteger("maxExclusiveStatus", maxExclusiveStatus);
- issues = query.list();
- } catch (HibernateException ex) {
- throw convertHibernateAccessException(ex);
- }
- return issues;
- }
- @SuppressWarnings("unchecked")
- public List<Issue> findUnassignedIssues(int maxStatus) {
- final List<Issue> issues;
- try {
- Query query = getSession().getNamedQuery("IssuesUnassignedQuery");
- query.setInteger("maxStatus", maxStatus);
- issues = query.list();
- } catch (HibernateException ex) {
- throw convertHibernateAccessException(ex);
- }
- return issues;
- }
- @SuppressWarnings("unchecked")
- public List<Issue> findByCreator(Integer creatorId,
- int maxExclusiveStatus) {
- final List<Issue> issues;
- try {
- Query query = getSession().getNamedQuery("IssuesByCreatorQuery");
- query.setInteger("creatorId", creatorId);
- query.setInteger("maxExclusiveStatus", maxExclusiveStatus);
- issues = query.list();
- } catch (HibernateException ex) {
- throw convertHibernateAccessException(ex);
- }
- return issues;
- }
- @SuppressWarnings("unchecked")
- public List<Issue> findByCreatorInAvailableProjects(Integer creatorId,
- int maxExclusiveStatus) {
- final List<Issue> issues;
- try {
- Query query = getSession().getNamedQuery(
- "IssuesByCreatorInAvailableProjectsQuery");
- query.setInteger("creatorId", creatorId);
- query.setInteger("maxExclusiveStatus", maxExclusiveStatus);
- issues = query.list();
- } catch (HibernateException ex) {
- throw convertHibernateAccessException(ex);
- }
- return issues;
- }
- @SuppressWarnings("unchecked")
- public List<Issue> findByNotification(Integer userId,
- int maxExclusiveStatus) {
- final List<Issue> issues;
- try {
- final Query query = getSession().getNamedQuery(
- "IssuesByNotificationQuery");
- query.setInteger("userId", userId);
- query.setInteger("maxExclusiveStatus", maxExclusiveStatus);
- issues = query.list();
- } catch (HibernateException ex) {
- throw convertHibernateAccessException(ex);
- }
- return issues;
- }
- @SuppressWarnings("unchecked")
- public List<Issue> findByNotificationInAvailableProjects(Integer userId,
- int maxExclusiveStatus) {
- final List<Issue> issues;
- try {
- final Query query = getSession().getNamedQuery(
- "IssuesByNotificationInAvailableProjectsQuery");
- query.setInteger("userId", userId);
- //@ToDo Check this query.
- query.setInteger("maxExclusiveStatus", maxExclusiveStatus);
- issues = query.list();
- } catch (HibernateException ex) {
- throw convertHibernateAccessException(ex);
- }
- return issues;
- }
- @SuppressWarnings("unchecked")
- public List<Issue> findByComponent(Integer componentId) {
- final List<Issue> issues;
- try {
- final Query query = getSession().getNamedQuery(
- "IssuesByComponentQuery");
- query.setInteger("componentId", componentId);
- issues = query.list();
- } catch (HibernateException ex) {
- throw convertHibernateAccessException(ex);
- }
- return issues;
- }
- public Long countByComponent(Integer componentId) {
- final Long count;
- try {
- final Query query = getSession().getNamedQuery(
- "IssueCountByComponentQuery");
- query.setInteger("componentId", componentId);
- count = (Long) query.uniqueResult();
- } catch (HibernateException ex) {
- throw convertHibernateAccessException(ex);
- }
- return count;
- }
- @SuppressWarnings("unchecked")
- public List<Issue> findByVersion(Integer versionId) {
- final List<Issue> issues;
- try {
- final Query query = getSession().getNamedQuery(
- "IssuesByVersionQuery");
- query.setInteger("versionId", versionId);
- issues = query.list();
- } catch (HibernateException ex) {
- throw convertHibernateAccessException(ex);
- }
- return issues;
- }
- public Long countByVersion(Integer versionId) {
- final Long count;
- try {
- final Query query = getSession().getNamedQuery(
- "IssueCountByVersionQuery");
- query.setInteger("versionId", versionId);
- count = (Long) query.uniqueResult();
- } catch (HibernateException ex) {
- throw convertHibernateAccessException(ex);
- }
- return count;
- }
- public Date latestModificationDate(Integer projectId) {
- final Date lastModifiedDate;
- try {
- final Query query = getSession().getNamedQuery(
- "MaxIssueModificationDateQuery");
- query.setInteger("projectId", projectId);
- lastModifiedDate = (Date) query.uniqueResult();
- } catch (HibernateException ex) {
- throw convertHibernateAccessException(ex);
- }
- return lastModifiedDate;
- }
- public List<Issue> findNextIssues(Integer issueId) {
- List<Issue> issue;
- try {
- final Query query = getSession().getNamedQuery(
- "FindNextIssues");
- query.setInteger("issueId", issueId);
- issue = query.list();
- } catch (HibernateException ex) {
- throw convertHibernateAccessException(ex);
- }
- return issue;
- }
- public List<Issue> findPreviousIssues(Integer issueId) {
- List<Issue> issue;
- try {
- final Query query = getSession().getNamedQuery(
- "FindPreviousIssues");
- query.setInteger("issueId", issueId);
- issue = query.list();
- } catch (HibernateException ex) {
- throw convertHibernateAccessException(ex);
- }
- return issue;
- }
- /**
- * It doens't really make sense for this method to receive projectDAO, it's just a quick
- * fix for the fact that IssueSearchQuery handles ids and not objects
- */
- @SuppressWarnings("unchecked")
- public List<Issue> query(
- IssueSearchQuery searchQuery,
- final User user,
- final Map<Integer, Set<PermissionType>> userPermissions) {
- Criteria criteria = getSession().createCriteria(Issue.class);
- // projects
- Collection<Project> projects = Collections.checkedCollection((Collection<Project>) getProjectsObjects(searchQuery), Project.class);
- if (projects.size() > 0) {
- criteria.add(Restrictions.in("project", projects));
- }
- // severities
- if (searchQuery.getSeverities().size() > 0) {
- criteria.add(Restrictions.in("severity", searchQuery.getSeverities()));
- }
- // status
- if (searchQuery.getStatuses().size() > 0) {
- criteria.add(Restrictions.in("status", searchQuery.getStatuses()));
- }
- // componentes
- if (searchQuery.getComponents().size() > 0) {
- criteria.createCriteria("components").add(Restrictions.in("id", searchQuery.getComponents()));
- }
- // versions
- if (searchQuery.getVersions().size() > 0) {
- criteria.createCriteria("versions").add(Restrictions.in("id", searchQuery.getVersions()));
- }
- // creator
- if (searchQuery.getCreator() != null) {
- criteria.add(Restrictions.eq("creator", searchQuery.getCreator()));
- }
- // owner
- if (searchQuery.getOwner() != null) {
- criteria.add(Restrictions.eq("owner", searchQuery.getOwner()));
- }
- // description and history
- if (searchQuery.getText() != null && !searchQuery.getText().equals("")) {
- criteria.createAlias("history", "history").
- add(Restrictions.or(
- Restrictions.ilike("description", "%" + searchQuery.getText() + "%"),
- Restrictions.ilike("history.description", "%" + searchQuery.getText() + "%")
- ));
- }
- // resolution
- if (searchQuery.getResolution() != null) {
- criteria.add(Restrictions.eq("resolution", searchQuery.getResolution() + "%"));
- }
- // resolution
- if (searchQuery.getTargetVersion() != null) {
- criteria.add(Restrictions.eq("targetVersion.id", searchQuery.getTargetVersion()));
- }
- // sort
- String order = searchQuery.getOrderBy();
- if (!"id".equals(order)) {
- if ("sev".equals(order)) {
- criteria.addOrder(order("severity", true));
- } else if ("proj".equals(order)) {
- criteria.addOrder(order("project", true)).addOrder(order("status", false));
- } else if ("owner".equals(order)) {
- criteria.addOrder(order("owner", true)).addOrder(order("status", false));
- } else if ("lm".equals(order)) {
- criteria.addOrder(order("lastModifiedDate", true));
- } else {
- criteria.addOrder(order("status", true));
- }
- }
- criteria.addOrder(order("id", true));
- List<Issue> list = Collections.checkedList(Criteria.DISTINCT_ROOT_ENTITY.transformList(criteria.list()), Issue.class);
- // filter for permission
- list = new LinkedList<Issue>(Collections.checkedCollection(CollectionUtils.select(list, new Predicate() {
- public boolean evaluate(Object arg0) {
- return IssueUtilities.canViewIssue((Issue) arg0, user, userPermissions);
- }
- }), Issue.class));
- return list;
- }
- // from the list of project ids this objects has, return a list of
- // projects
- public Collection<?> getProjectsObjects(final IssueSearchQuery query) {
- return CollectionUtils.collect(query.getProjects(), new Transformer() {
- public Object transform(Object arg0) {
- return projectDAO.findByPrimaryKey((Integer) arg0);
- }
- });
- }
- Order order(String propertyName, boolean asc) {
- return asc ? Order.asc(propertyName) : Order.desc(propertyName);
- }
- public ProjectDAO getProjectDAO() {
- return projectDAO;
- }
- public void setProjectDAO(ProjectDAO projectDAO) {
- this.projectDAO = projectDAO;
- }
- /**
- * {@inheritDoc}
- */
- @SuppressWarnings("unchecked")
- public List<Issue> findByTargetVersion(Integer versionId) {
- try {
- final Query query = getSession().getNamedQuery("FindByTargetVersion");
- query.setInteger("versionId", versionId);
- return query.list();
- } catch (HibernateException ex) {
- throw convertHibernateAccessException(ex);
- }
- }
- }