Bytte till "Imp" istället för "Impl" på de som hette det i paketet. Skrev om EventDaoJPAImp till SciProevents. Skapade Alla Project-relaterade klasser

git-svn-id: svn://svn.dsv.su.se/scipro/scipro/trunk@42 73ecded7-942e-4092-bab0-0e58ef0ee984
This commit is contained in:
dan-kjel 2011-02-01 17:28:54 +00:00
parent c2d8d9ef48
commit f4f3d919c3
9 changed files with 294 additions and 38 deletions

@ -21,7 +21,7 @@ import se.su.dsv.scipro.data.dataobjects.DomainObject;
*
* @param <T>
*/
public abstract class AbstractDaoJPAImpl<T extends DomainObject> extends JpaDaoSupport implements Dao<T> {
public abstract class AbstractDaoJPAImp<T extends DomainObject> extends JpaDaoSupport implements Dao<T> {
protected Class<T> domainClass;
protected String domainClassString;
@ -35,7 +35,7 @@ public abstract class AbstractDaoJPAImpl<T extends DomainObject> extends JpaDaoS
}
public AbstractDaoJPAImpl(Class<T> domainClass) {
public AbstractDaoJPAImp(Class<T> domainClass) {
this.domainClass = domainClass;
domainClassString = domainClass.getCanonicalName();
}

@ -1,14 +1,5 @@
package se.su.dsv.scipro.data.dao.jpa;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceException;
import javax.persistence.TypedQuery;
import org.springframework.orm.jpa.JpaCallback;
import org.springframework.transaction.annotation.Transactional;
import se.su.dsv.scipro.data.dao.interfaces.EventDao;
import se.su.dsv.scipro.data.dataobjects.Event;
@ -16,31 +7,10 @@ import se.su.dsv.scipro.data.dataobjects.Event;
* @author Richard Wilkinson - richard.wilkinson@jweekend.com
*
*/
public class EventDaoJPAImp extends AbstractDaoJPAImpl<Event> implements EventDao {
public class EventDaoJPAImp extends LazyDeleteAbstractDaoJPAImp<Event> implements EventDao {
public EventDaoJPAImp() {
super(Event.class);
}
@Transactional
public List<Event> findAll() {
return getJpaTemplate().execute(new JpaCallback<List<Event>>() {
public List<Event> doInJpa(EntityManager em) throws PersistenceException {
TypedQuery<Event> query = em.createQuery("select e from Event e", Event.class);
return query.getResultList();
}
});
}
@Transactional
public int countAll() {
return getJpaTemplate().execute(new JpaCallback<Integer>() {
public Integer doInJpa(EntityManager em) throws PersistenceException {
TypedQuery<Long> query = em.createQuery("select count (e) from Event e", Long.class);
return (query.getSingleResult()).intValue();
}
});
}
}

@ -20,9 +20,9 @@ import se.su.dsv.scipro.data.dataobjects.DomainObject;
*
* @param <T>
*/
public abstract class LazyDeleteAbstractDaoJPAImpl<T extends DomainObject & LazyDeletable> extends AbstractDaoJPAImpl<T> implements LazyDeleteDao<T> {
public abstract class LazyDeleteAbstractDaoJPAImp<T extends DomainObject & LazyDeletable> extends AbstractDaoJPAImp<T> implements LazyDeleteDao<T> {
public LazyDeleteAbstractDaoJPAImpl(Class<T> domainClass) {
public LazyDeleteAbstractDaoJPAImp(Class<T> domainClass) {
super(domainClass);
}

@ -0,0 +1,164 @@
package se.su.dsv.scipro.data.dao.jpa;
import java.util.ArrayList;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.NoResultException;
import javax.persistence.PersistenceException;
import javax.persistence.TypedQuery;
import org.springframework.orm.jpa.JpaCallback;
import org.springframework.transaction.annotation.Transactional;
import se.su.dsv.scipro.data.dao.interfaces.ProjectDao;
import se.su.dsv.scipro.data.dataobjects.Project;
import se.su.dsv.scipro.data.dataobjects.User;
import se.su.dsv.scipro.data.enums.ProjectStatus;
import se.su.dsv.scipro.data.enums.ProjectTeamMemberRoles;
public class ProjectDaoJPAImp extends AbstractDaoJPAImp<Project> implements ProjectDao {
public ProjectDaoJPAImp() {
super(Project.class);
}
@Transactional
public List<Project> getProjectsByParticipant(final User user, final ProjectStatus projectStatus) {
return getJpaTemplate().execute(new JpaCallback<List<Project>>() {
public List<Project> doInJpa(EntityManager em)
throws PersistenceException {
String q = "select p " +
"from Project p, User u " +
"join p.projectParticipants participant " +
"join u.roles role " +
"where participant = role " +
"and u = :user ";
if(projectStatus != null){
q += "and p.projectStatus = :status ";
}
q += "order by p.title asc";
TypedQuery<Project> query = em.createQuery(q, Project.class);
query.setParameter("user", user);
if(projectStatus != null){
query.setParameter("status", projectStatus);
}
try {
return query.getResultList();
} catch (NoResultException e) {
return new ArrayList<Project>();
}
}
});
}
@Transactional
public int countProjectsByParticipant(final User user, final ProjectStatus projectStatus) {
return getJpaTemplate().execute(new JpaCallback<Integer>() {
public Integer doInJpa(EntityManager em)
throws PersistenceException {
String q = "select count(p) " +
"from Project p, User u " +
"join p.projectParticipants participant " +
"join u.roles role " +
"where participant = role " +
"and u = :user ";
if(projectStatus != null){
q += "and p.projectStatus = :status ";
}
TypedQuery<Long> query = em.createQuery(q, Long.class);
query.setParameter("user", user);
if(projectStatus != null){
query.setParameter("status", projectStatus);
}
return (query.getSingleResult()).intValue();
}
});
}
@Transactional
public List<Project> getProjectsByHeadSupervisor(final User user, final ProjectStatus projectStatus) {
return getJpaTemplate().execute(new JpaCallback<List<Project>>() {
public List<Project> doInJpa(EntityManager em)
throws PersistenceException {
String q = "select p " +
"from Project p, User u " +
"join u.roles role " +
"where u = :user " +
"and p.headSupervisor = role ";
if(projectStatus != null){
q += "and p.projectStatus = :status ";
}
q += "order by p.title asc";
TypedQuery<Project> query = em.createQuery(q, Project.class);
query.setParameter("user", user);
if(projectStatus != null){
query.setParameter("status", projectStatus);
}
try {
return query.getResultList();
} catch (NoResultException e) {
e.printStackTrace();
return new ArrayList<Project>();
}
}
});
}
@Transactional
public List<Project> getProjectsByProjectTeamMember(final User user, final ProjectStatus projectStatus, final ProjectTeamMemberRoles teamRole) {
return getJpaTemplate().execute(new JpaCallback<List<Project>>() {
public List<Project> doInJpa(EntityManager em)
throws PersistenceException {
String q = "select p " +
"from Project p, User u " +
"join u.roles role " +
"join p.projectFollowers pf " +
"where u = :user " +
"and pf.follower = role ";
if(projectStatus != null){
q += "and p.projectStatus = :status ";
}
if(teamRole != null){
q += "and pf.projectRole = :teamRole ";
}
q += "order by p.title asc";
TypedQuery<Project> query = em.createQuery(q, Project.class);
query.setParameter("user", user);
if(projectStatus != null){
query.setParameter("status", projectStatus);
}
if(teamRole != null){
query.setParameter("teamRole", teamRole);
}
try {
return query.getResultList();
} catch (NoResultException e) {
e.printStackTrace();
return new ArrayList<Project>();
}
}
});
}
}

@ -0,0 +1,12 @@
package se.su.dsv.scipro.data.dao.jpa;
import se.su.dsv.scipro.data.dao.interfaces.ProjectFollowerDao;
import se.su.dsv.scipro.data.dataobjects.ProjectFollower;
public class ProjectFollowerDaoJPAImp extends AbstractDaoJPAImp<ProjectFollower> implements ProjectFollowerDao {
public ProjectFollowerDaoJPAImp() {
super(ProjectFollower.class);
}
}

@ -0,0 +1,110 @@
package se.su.dsv.scipro.data.dao.jpa;
import java.util.ArrayList;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.NoResultException;
import javax.persistence.PersistenceException;
import javax.persistence.TypedQuery;
import org.springframework.orm.jpa.JpaCallback;
import org.springframework.transaction.annotation.Transactional;
import se.su.dsv.scipro.data.dao.interfaces.ProjectScheduleDao;
import se.su.dsv.scipro.data.dataobjects.Event;
import se.su.dsv.scipro.data.dataobjects.ProjectSchedule;
public class ProjectScheduleDaoJPAImp extends AbstractDaoJPAImp<ProjectSchedule>
implements ProjectScheduleDao {
private static final int ALL_EVENTS = 0;
private static final int OLD_EVENTS = 1;
private static final int UPCOMING_EVENTS = 2;
private static final int UPCOMING_AND_NOT_DONE_EVENTS = 3;
public ProjectScheduleDaoJPAImp() {
super(ProjectSchedule.class);
}
@Transactional
public List<Event> getEventsByProjectSchedule(final ProjectSchedule ps, final int eventCode, final Boolean eventIsDone) {
return getJpaTemplate().execute(new JpaCallback<List<Event>>() {
public List<Event> doInJpa(EntityManager em) throws PersistenceException {
String q = "Select e " +
"from Event e " +
"where e.projectSchedule = :ps " +
"and e.deleted = false ";
switch(eventCode){
case OLD_EVENTS:
q += "and e.dueDate < now() ";
break;
case UPCOMING_AND_NOT_DONE_EVENTS:
q += "and (e.dueDate > now() or e.done = false) ";
break;
case UPCOMING_EVENTS:
q += "and e.dueDate > now() ";
break;
case ALL_EVENTS:
default:
break;
}
if(eventIsDone != null){
q += String.format("and e.done = %s ", eventIsDone);
}
q += "order by e.dueDate asc";
System.out.println(q);
TypedQuery<Event> query = em.createQuery(q, Event.class);
query.setParameter("ps", ps);
try {
return query.getResultList();
} catch (NoResultException e){
return new ArrayList<Event>(1);
}
}
});
}
public List<Event> getUpcomingEventsByProjectSchedule(final ProjectSchedule ps, boolean includeOldNotDoneEvents) {
if(includeOldNotDoneEvents)
return getEventsByProjectSchedule(ps, UPCOMING_AND_NOT_DONE_EVENTS, null);
else
return getEventsByProjectSchedule(ps, UPCOMING_EVENTS, null);
}
public List<Event> getAllEventsByProjectSchedule(final ProjectSchedule ps) {
return getEventsByProjectSchedule(ps, ALL_EVENTS, null);
}
public List<Event> getOldEventsByProjectSchedule(final ProjectSchedule ps, final Boolean done) {
return getEventsByProjectSchedule(ps, OLD_EVENTS, done);
}
@Transactional
public int countOverDueEvents(final ProjectSchedule ps) {
return getJpaTemplate().execute(new JpaCallback<Integer>() {
public Integer doInJpa(EntityManager em) throws PersistenceException {
String q = "select count(e) " +
"from Event e " +
"where e.projectSchedule = :ps " +
"and e.done = false " +
"and e.dueDate < now() " +
"and e.deleted = false ";
TypedQuery<Long> query = em.createQuery(q, Long.class);
query.setParameter("ps", ps);
return (query.getSingleResult()).intValue();
}
});
}
}

@ -13,7 +13,7 @@ import se.su.dsv.scipro.data.dataobjects.Role;
import se.su.dsv.scipro.data.dataobjects.User;
public class RoleDaoJPAImp extends LazyDeleteAbstractDaoJPAImpl<Role> implements
public class RoleDaoJPAImp extends LazyDeleteAbstractDaoJPAImp<Role> implements
RoleDao {
public RoleDaoJPAImp() {

@ -12,7 +12,7 @@ import se.su.dsv.scipro.data.dao.interfaces.UserDao;
import se.su.dsv.scipro.data.dataobjects.User;
public class UserDaoJPAImp extends LazyDeleteAbstractDaoJPAImpl<User> implements
public class UserDaoJPAImp extends LazyDeleteAbstractDaoJPAImp<User> implements
UserDao {
public UserDaoJPAImp() {

@ -15,7 +15,7 @@ import se.su.dsv.scipro.data.dao.interfaces.UsernameDao;
import se.su.dsv.scipro.data.dataobjects.User;
import se.su.dsv.scipro.data.dataobjects.Username;
public class UserNameDaoJPAImp extends AbstractDaoJPAImpl<Username> implements UsernameDao{
public class UserNameDaoJPAImp extends AbstractDaoJPAImp<Username> implements UsernameDao{
public UserNameDaoJPAImp() {
super(Username.class);