package com.opentravelsoft.providers.hibernate; import java.util.ArrayList; import java.util.List; import java.util.Set; import org.hibernate.criterion.CriteriaSpecification; import org.hibernate.criterion.DetachedCriteria; import org.hibernate.criterion.Restrictions; import org.springframework.orm.hibernate3.HibernateTemplate; import org.springframework.stereotype.Repository; import com.opentravelsoft.common.TeamType; import com.opentravelsoft.entity.Employee; import com.opentravelsoft.entity.Team; import com.opentravelsoft.providers.TeamDao; import com.opentravelsoft.util.PaginationSupport; @Repository("TeamDao") public class TeamDaoHibernate extends GenericDaoHibernate<Team, Integer> implements TeamDao { public TeamDaoHibernate() { super(Team.class); } @SuppressWarnings("unchecked") public List<Team> getTeam(int userId, TeamType type) { boolean isAdmin = false; HibernateTemplate template = getHibernateTemplate(); Object obj = template.get(Employee.class, userId); List<Team> list = new ArrayList<Team>(); if (null == obj) return list; else { Employee employee = (Employee) obj; isAdmin = employee.getIsAdmin(); if (isAdmin) { DetachedCriteria criteria = DetachedCriteria.forClass(Team.class); if (type == TeamType.Product) criteria.add(Restrictions.eq("isProduct", true)); else if (type == TeamType.Sales) criteria.add(Restrictions.eq("isSales", true)); else if (type == TeamType.Operator) criteria.add(Restrictions.eq("isOperator", true)); criteria.setResultTransformer(CriteriaSpecification.ROOT_ENTITY); list = getHibernateTemplate().findByCriteria(criteria); } else { Set<Team> team = employee.getTeamMemberships(); for (Team team2 : team) { if (type == TeamType.Operator && team2.getIsOperator()) list.add(team2); else if (type == TeamType.Sales && team2.getIsSales()) list.add(team2); else if (type == TeamType.Product && team2.getIsProduct()) list.add(team2); } } return list; } } public PaginationSupport getTeamList(int fromRecord, int pageSize) { DetachedCriteria teamCriteria = DetachedCriteria.forClass(Team.class); PaginationSupport support = findPageByCriteria(teamCriteria, pageSize, fromRecord); return support; } @SuppressWarnings("unchecked") public List<Team> getTeamList(TeamType type) { DetachedCriteria criteria = DetachedCriteria.forClass(Team.class); if (type == TeamType.Product) criteria.add(Restrictions.eq("isProduct", true)); else if (type == TeamType.Sales) criteria.add(Restrictions.eq("isSales", true)); else if (type == TeamType.Operator) criteria.add(Restrictions.eq("isOperator", true)); criteria.setResultTransformer(CriteriaSpecification.ROOT_ENTITY); return getHibernateTemplate().findByCriteria(criteria); } }