/** * */ package qa.qcri.aidr.manager.repository.impl; import java.io.Serializable; import java.sql.Timestamp; import java.util.ArrayList; import java.util.Collections; import java.util.List; import org.hibernate.Criteria; import org.hibernate.FetchMode; import org.hibernate.criterion.Restrictions; import org.springframework.stereotype.Repository; import org.springframework.transaction.annotation.Transactional; import qa.qcri.aidr.manager.persistence.entities.Collection; import qa.qcri.aidr.manager.persistence.entities.CollectionCollaborator; import qa.qcri.aidr.manager.persistence.entities.UserAccount; import qa.qcri.aidr.manager.repository.CollectionCollaboratorRepository; import qa.qcri.aidr.manager.util.CollectionComparator; import qa.qcri.aidr.manager.util.CollectionStatus; /** * @author Latika * */ @Repository public class CollectionCollaboratorRepositoryImpl extends GenericRepositoryImpl<CollectionCollaborator, Serializable> implements CollectionCollaboratorRepository { @SuppressWarnings("unchecked") @Override @Transactional public List<UserAccount> getCollaboratorsByCollection(Long collectionId) { Criteria criteria = getHibernateTemplate().getSessionFactory().getCurrentSession().createCriteria(CollectionCollaborator.class); criteria.add(Restrictions.eq("collection.id", collectionId)); List<CollectionCollaborator> collections = (List<CollectionCollaborator>) criteria.list(); List<UserAccount> collaborators = new ArrayList<UserAccount>(); if(collections != null) { for(CollectionCollaborator collaborator : collections) { collaborators.add(collaborator.getAccount()); } } return collaborators; } @Override public CollectionCollaborator findByCollaboratorIdAndCollectionId( Long userId, Long collectionId) { Criteria criteria = getHibernateTemplate().getSessionFactory().getCurrentSession().createCriteria(CollectionCollaborator.class); criteria.add(Restrictions.eq("collection.id", collectionId)); criteria.add(Restrictions.eq("account.id", userId)); CollectionCollaborator collectionCollaborator = (CollectionCollaborator) criteria.uniqueResult(); return collectionCollaborator; } @Override public void save(CollectionCollaborator collectionCollaborator) { Timestamp now = new Timestamp(System.currentTimeMillis()); collectionCollaborator.setUpdatedAt(now); collectionCollaborator.setCreatedAt(now); super.save(collectionCollaborator); } @SuppressWarnings("unchecked") @Override public List<Collection> getCollectionByCollaborator(Long userId, Integer start, Integer limit, boolean trashed) { Criteria criteria = getHibernateTemplate().getSessionFactory().getCurrentSession().createCriteria(CollectionCollaborator.class); criteria.createAlias("collection", "col").setFetchMode("col", FetchMode.JOIN); criteria.add(Restrictions.eq("account.id", userId)); if(trashed) { criteria.add(Restrictions.eq("col.status", CollectionStatus.TRASHED)); } else { criteria.add(Restrictions.ne("col.status", CollectionStatus.TRASHED)); } // "Case col.status When '0' Then 1 When '5' Then 2 Else 3 End"; //"Case start_date When null Then 1 Else start_date*-1 End" if(start != null) { criteria.setFirstResult(start); } if(limit != null) { criteria.setMaxResults(limit); } List<CollectionCollaborator> collectionCollaborators = (List<CollectionCollaborator>) criteria.list(); List<Collection> collections = new ArrayList<Collection>(); if(collectionCollaborators != null) { for(CollectionCollaborator collaborator : collectionCollaborators) { collections.add(collaborator.getCollection()); } } Collections.sort(collections, new CollectionComparator()); return collections; } }