From f4f3d919c32a93807c0d820815a9c7bbbc76a929 Mon Sep 17 00:00:00 2001 From: dan-kjel <dan-kjel@73ecded7-942e-4092-bab0-0e58ef0ee984> Date: Tue, 1 Feb 2011 17:28:54 +0000 Subject: [PATCH] =?UTF-8?q?Bytte=20till=20"Imp"=20ist=C3=A4llet=20f=C3=B6r?= =?UTF-8?q?=20"Impl"=20p=C3=A5=20de=20som=20hette=20det=20i=20paketet.=20S?= =?UTF-8?q?krev=20om=20EventDaoJPAImp=20till=20SciProevents.=20Skapade=20A?= =?UTF-8?q?lla=20Project-relaterade=20klasser?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: svn://svn.dsv.su.se/scipro/scipro/trunk@42 73ecded7-942e-4092-bab0-0e58ef0ee984 --- ...DaoJPAImpl.java => AbstractDaoJPAImp.java} | 4 +- .../scipro/data/dao/jpa/EventDaoJPAImp.java | 32 +--- ....java => LazyDeleteAbstractDaoJPAImp.java} | 4 +- .../scipro/data/dao/jpa/ProjectDaoJPAImp.java | 164 ++++++++++++++++++ .../dao/jpa/ProjectFollowerDaoJPAImp.java | 12 ++ .../dao/jpa/ProjectScheduleDaoJPAImp.java | 110 ++++++++++++ .../scipro/data/dao/jpa/RoleDaoJPAImp.java | 2 +- .../scipro/data/dao/jpa/UserDaoJPAImp.java | 2 +- .../data/dao/jpa/UserNameDaoJPAImp.java | 2 +- 9 files changed, 294 insertions(+), 38 deletions(-) rename src/main/java/se/su/dsv/scipro/data/dao/jpa/{AbstractDaoJPAImpl.java => AbstractDaoJPAImp.java} (95%) rename src/main/java/se/su/dsv/scipro/data/dao/jpa/{LazyDeleteAbstractDaoJPAImpl.java => LazyDeleteAbstractDaoJPAImp.java} (95%) create mode 100644 src/main/java/se/su/dsv/scipro/data/dao/jpa/ProjectDaoJPAImp.java create mode 100644 src/main/java/se/su/dsv/scipro/data/dao/jpa/ProjectFollowerDaoJPAImp.java create mode 100644 src/main/java/se/su/dsv/scipro/data/dao/jpa/ProjectScheduleDaoJPAImp.java diff --git a/src/main/java/se/su/dsv/scipro/data/dao/jpa/AbstractDaoJPAImpl.java b/src/main/java/se/su/dsv/scipro/data/dao/jpa/AbstractDaoJPAImp.java similarity index 95% rename from src/main/java/se/su/dsv/scipro/data/dao/jpa/AbstractDaoJPAImpl.java rename to src/main/java/se/su/dsv/scipro/data/dao/jpa/AbstractDaoJPAImp.java index 6e8b48a848..32c3c03da7 100644 --- a/src/main/java/se/su/dsv/scipro/data/dao/jpa/AbstractDaoJPAImpl.java +++ b/src/main/java/se/su/dsv/scipro/data/dao/jpa/AbstractDaoJPAImp.java @@ -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(); } diff --git a/src/main/java/se/su/dsv/scipro/data/dao/jpa/EventDaoJPAImp.java b/src/main/java/se/su/dsv/scipro/data/dao/jpa/EventDaoJPAImp.java index ef9b4b756c..b7e76c640e 100644 --- a/src/main/java/se/su/dsv/scipro/data/dao/jpa/EventDaoJPAImp.java +++ b/src/main/java/se/su/dsv/scipro/data/dao/jpa/EventDaoJPAImp.java @@ -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(); - } - }); - - } } diff --git a/src/main/java/se/su/dsv/scipro/data/dao/jpa/LazyDeleteAbstractDaoJPAImpl.java b/src/main/java/se/su/dsv/scipro/data/dao/jpa/LazyDeleteAbstractDaoJPAImp.java similarity index 95% rename from src/main/java/se/su/dsv/scipro/data/dao/jpa/LazyDeleteAbstractDaoJPAImpl.java rename to src/main/java/se/su/dsv/scipro/data/dao/jpa/LazyDeleteAbstractDaoJPAImp.java index 42e9cd0155..e23673cc46 100644 --- a/src/main/java/se/su/dsv/scipro/data/dao/jpa/LazyDeleteAbstractDaoJPAImpl.java +++ b/src/main/java/se/su/dsv/scipro/data/dao/jpa/LazyDeleteAbstractDaoJPAImp.java @@ -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); } diff --git a/src/main/java/se/su/dsv/scipro/data/dao/jpa/ProjectDaoJPAImp.java b/src/main/java/se/su/dsv/scipro/data/dao/jpa/ProjectDaoJPAImp.java new file mode 100644 index 0000000000..66499de4f4 --- /dev/null +++ b/src/main/java/se/su/dsv/scipro/data/dao/jpa/ProjectDaoJPAImp.java @@ -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>(); + } + } + }); + } +} diff --git a/src/main/java/se/su/dsv/scipro/data/dao/jpa/ProjectFollowerDaoJPAImp.java b/src/main/java/se/su/dsv/scipro/data/dao/jpa/ProjectFollowerDaoJPAImp.java new file mode 100644 index 0000000000..fd5a56d6d7 --- /dev/null +++ b/src/main/java/se/su/dsv/scipro/data/dao/jpa/ProjectFollowerDaoJPAImp.java @@ -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); + } + +} diff --git a/src/main/java/se/su/dsv/scipro/data/dao/jpa/ProjectScheduleDaoJPAImp.java b/src/main/java/se/su/dsv/scipro/data/dao/jpa/ProjectScheduleDaoJPAImp.java new file mode 100644 index 0000000000..7da9b1287c --- /dev/null +++ b/src/main/java/se/su/dsv/scipro/data/dao/jpa/ProjectScheduleDaoJPAImp.java @@ -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(); + } + }); + } + +} diff --git a/src/main/java/se/su/dsv/scipro/data/dao/jpa/RoleDaoJPAImp.java b/src/main/java/se/su/dsv/scipro/data/dao/jpa/RoleDaoJPAImp.java index 04b6eca47a..1f2e65bf9d 100644 --- a/src/main/java/se/su/dsv/scipro/data/dao/jpa/RoleDaoJPAImp.java +++ b/src/main/java/se/su/dsv/scipro/data/dao/jpa/RoleDaoJPAImp.java @@ -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() { diff --git a/src/main/java/se/su/dsv/scipro/data/dao/jpa/UserDaoJPAImp.java b/src/main/java/se/su/dsv/scipro/data/dao/jpa/UserDaoJPAImp.java index f980054707..c226d8dc79 100644 --- a/src/main/java/se/su/dsv/scipro/data/dao/jpa/UserDaoJPAImp.java +++ b/src/main/java/se/su/dsv/scipro/data/dao/jpa/UserDaoJPAImp.java @@ -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() { diff --git a/src/main/java/se/su/dsv/scipro/data/dao/jpa/UserNameDaoJPAImp.java b/src/main/java/se/su/dsv/scipro/data/dao/jpa/UserNameDaoJPAImp.java index e60db624df..d6ab2011ae 100644 --- a/src/main/java/se/su/dsv/scipro/data/dao/jpa/UserNameDaoJPAImp.java +++ b/src/main/java/se/su/dsv/scipro/data/dao/jpa/UserNameDaoJPAImp.java @@ -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);