package com.github.windbender.dao;
import java.util.List;
import javax.ws.rs.WebApplicationException;
import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.criterion.Restrictions;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.github.windbender.domain.Project;
import com.github.windbender.domain.User;
import com.github.windbender.domain.UserProject;
import com.yammer.dropwizard.hibernate.AbstractDAO;
public class UserProjectDAO extends AbstractDAO<UserProject> {
Logger logger = LoggerFactory.getLogger(UserProjectDAO.class);
public UserProjectDAO(SessionFactory sessionFactory) {
super(sessionFactory);
}
public UserProject save(UserProject up) {
if (up.getId() != null) {
// this is an update
UserProject upold = this.get(up.getId());
this.currentSession().evict(upold);
}
UserProject newP = this.persist(up);
return newP;
}
public List<UserProject> findAllByUser(User u) {
Session currentSession = this.currentSession();
Criteria crit = currentSession.createCriteria(UserProject.class);
crit.add(Restrictions.eq("user", u));
logger.info("the criteria is " + crit.toString());
List<UserProject> findList = (List<UserProject>) crit.list();
return findList;
}
public List<UserProject> findAllInProject(Project p) {
Session currentSession = this.currentSession();
Criteria crit = currentSession.createCriteria(UserProject.class);
crit.add(Restrictions.eq("project", p));
logger.info("the criteria is " + crit.toString());
List<UserProject> findList = (List<UserProject>) crit.list();
return findList;
}
public UserProject findById(Long userProjectId) {
Session currentSession = this.currentSession();
Criteria crit = currentSession.createCriteria(UserProject.class);
crit.add(Restrictions.eq("id", userProjectId));
logger.info("the criteria is " + crit.toString());
UserProject up = (UserProject) crit.uniqueResult();
return up;
}
public void delete(Long id) {
if (id != null) {
// this is an update
UserProject up = this.get(id);
this.currentSession().delete(up);
} else {
// trying to delete with no id...
throw new WebApplicationException();
}
}
public List<UserProject> findByUserIdProjectId(User u, Project p) {
Session currentSession = this.currentSession();
Criteria crit = currentSession.createCriteria(UserProject.class);
crit.add(Restrictions.eq("project", p));
crit.add(Restrictions.eq("user", u));
logger.info("the criteria is " + crit.toString());
List<UserProject> findList = (List<UserProject>) crit.list();
return findList;
}
}