Utökat ProjectClass lite och förhopnningsvis gjort den lite lättare att använda

git-svn-id: svn://svn.dsv.su.se/scipro/scipro/trunk@547 73ecded7-942e-4092-bab0-0e58ef0ee984
This commit is contained in:
mpeters 2011-04-01 06:52:28 +00:00
parent 4856b6faa2
commit 331c81bcff
11 changed files with 125 additions and 23 deletions

@ -16,6 +16,7 @@ import se.su.dsv.scipro.data.dataobjects.StringResource;
import se.su.dsv.scipro.data.dataobjects.Student;
import se.su.dsv.scipro.data.dataobjects.User;
import se.su.dsv.scipro.data.dataobjects.Username;
import se.su.dsv.scipro.data.enums.ProjectStatus;
/**
* @author Richard Wilkinson - richard.wilkinson@jweekend.com
@ -43,11 +44,14 @@ public class DataInitialiser {
public void dataInit() {
ProjectClass masterClass;
ProjectClass bachelorClass;
if(projectClassDao.countAll() == 0){
ProjectClass pc = new ProjectClass();
pc.setName("Bachelor");
pc.setDescription("Project for bachelor degree thesis work");
pc = projectClassDao.save(pc);
bachelorClass = new ProjectClass(ProjectClass.BACHELOR,"Bachelor","Bachelor degree thesis project");
bachelorClass = projectClassDao.save(bachelorClass);
masterClass = new ProjectClass(ProjectClass.MASTER,"Master","Master degree thesis project");
masterClass = projectClassDao.save(masterClass);
}
User user = null;
@ -56,7 +60,7 @@ public class DataInitialiser {
Employee employeeRole = null;
if(userDao.countAll() == 0){
user = new User();
user.setFirstName("Martin");
user.setFirstName("Martin Jürgen");
user.setLastName("Peters");
user.setIdentifier(666L);
user.setEmailAddress("martin@peters.tf");
@ -99,8 +103,16 @@ public class DataInitialiser {
Project project = new Project();
project.addProjectParticipant(studentRole);
project.setHeadSupervisor(employeeRole);
project.setTitle("The superduper project");
project.setProjectClass(projectClassDao.findAll().get(0));
project.setTitle("The superduper project about peer portals awesomeness");
project.setProjectClass(projectClassDao.getProjectClass(ProjectClass.BACHELOR));
project = projectDao.save(project);
project = new Project();
project.addProjectParticipant(studentRole);
project.setHeadSupervisor(employeeRole);
project.setTitle("The crappy project");
project.setProjectClass(projectClassDao.getProjectClass(ProjectClass.MASTER));
project.setProjectStatus(ProjectStatus.COMPLETED);
project = projectDao.save(project);
}

@ -4,5 +4,6 @@ import se.su.dsv.scipro.data.dataobjects.ProjectClass;
public interface ProjectClassDao extends Dao<ProjectClass>{
ProjectClass getProjectClass(String projectCode);
}

@ -1,6 +1,13 @@
package se.su.dsv.scipro.data.dao.jpa;
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.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;
import se.su.dsv.scipro.data.dao.interfaces.ProjectClassDao;
import se.su.dsv.scipro.data.dataobjects.ProjectClass;
@ -16,4 +23,28 @@ public class ProjectClassDaoJPAImp extends AbstractDaoJPAImp<ProjectClass> imple
public ProjectClassDaoJPAImp() {
super(ProjectClass.class);
}
@Transactional
public ProjectClass getProjectClass(final String projectCode) {
return getJpaTemplate().execute(new JpaCallback<ProjectClass>() {
public ProjectClass doInJpa(EntityManager em)
throws PersistenceException {
TypedQuery<ProjectClass> query = em.createQuery("SELECT pc FROM ProjectClass pc WHERE pc.code = :projectCode", ProjectClass.class);
query.setParameter("projectCode", projectCode);
try {
return query.getSingleResult();
} catch (NoResultException e) {
return null;
}
}
});
}
@Override
@Transactional
public ProjectClass save(ProjectClass projectClass){
projectClass.setCode(projectClass.getCode().toUpperCase());
return super.save(projectClass);
}
}

@ -2,9 +2,11 @@ package se.su.dsv.scipro.data.dataobjects;
import javax.persistence.Basic;
import javax.persistence.Cacheable;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Lob;
import javax.persistence.Table;
import org.hibernate.annotations.Cache;
@ -21,6 +23,10 @@ import org.hibernate.annotations.CacheConcurrencyStrategy;
@Cache(usage= CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
public class ProjectClass extends DomainObject {
public static final String MASTER = "MASTER";
public static final String BACHELOR = "BACHELOR";
public static final String PHD = "PHD";
private static final long serialVersionUID = 1L;
@Id
@ -30,8 +36,20 @@ public class ProjectClass extends DomainObject {
@Basic(optional=false)
private String name;
@Basic(optional=false)
@Column(nullable=false,unique=true)
private String code;
@Lob
private String description;
public ProjectClass() {}
public ProjectClass(String projectCode, String name, String description){
this.code = projectCode;
this.name = name;
this.description = description;
}
public Long getId() {
return id;
@ -49,6 +67,18 @@ public class ProjectClass extends DomainObject {
this.name = name;
}
/**
* NOT PART OF THE PUBLIC API, DO NOT CHANGE PROJECT CODE
* @param code the code to set
*/
public void setCode(String code) {
this.code = code;
}
public String getCode() {
return code;
}
public String getDescription() {
return description;
}

@ -91,8 +91,7 @@ public class EventDataInitializer {
un.setUser(dan);
un = usernameDao.save(un);
prClass = new ProjectClass();
prClass.setName("Master");
prClass = new ProjectClass(ProjectClass.MASTER, "Master",null);
prClass = projectClassDao.save(prClass);
Student danStudent = new Student();

@ -63,10 +63,9 @@ public class ScheduleTemplateInitializer {
sysAdminRole.setUser(sysAdminUser);
sysAdminRole = (SysAdmin) roleDao.save(sysAdminRole);
ProjectClass masterClass = new ProjectClass();
masterClass.setName("Master");
ProjectClass bachelorClass = new ProjectClass();
bachelorClass.setName("Bachelor");
ProjectClass masterClass = new ProjectClass(ProjectClass.MASTER, "Master",null);
ProjectClass bachelorClass = new ProjectClass(ProjectClass.BACHELOR,"Bachelor",null);
masterClass = projectClassDao.save(masterClass);
bachelorClass = projectClassDao.save(bachelorClass);

@ -57,8 +57,7 @@ public class TestCommentThreadDaoJpa {
@Before
public void startTransaction() {
ProjectClass projectClass = new ProjectClass();
projectClass.setName("Test");
ProjectClass projectClass = new ProjectClass(ProjectClass.BACHELOR,"Bachelor","Bachelor degree thesis project");
projectClass = projectClassDao.save(projectClass);
project1 = new Project();
project1.setProjectClass(projectClass);

@ -90,8 +90,7 @@ public class TestEventDaoJPA {
@Before
public void startTransaction() {
projectClass = new ProjectClass();
projectClass.setName("Bachelor");
projectClass = new ProjectClass(ProjectClass.BACHELOR,"Bachelor","Bachelor degree thesis project");
projectClass = projectClassDao.save(projectClass);
indEventUser = new User();

@ -93,8 +93,7 @@ public class TestPeerReviewDaoJPA {
reviewer = userDao.save(reviewer);
reviewerRole = roleDao.makeStudent(reviewer);
projectClass = new ProjectClass();
projectClass.setName("Bachelor");
projectClass = new ProjectClass(ProjectClass.BACHELOR,"Bachelor","Bachelor degree thesis project");
projectClass = projectClassDao.save(projectClass);
requesterProject = new Project();

@ -9,6 +9,7 @@ import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.orm.jpa.JpaSystemException;
import org.springframework.test.annotation.Rollback;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
@ -68,8 +69,7 @@ public class TestProjectDaoJPA {
@Before
public void startTransaction(){
projectClass = new ProjectClass();
projectClass.setName("Bachelor");
projectClass = new ProjectClass(ProjectClass.BACHELOR,"Bachelor","Bachelor degree thesis project");
projectClass = projectClassDao.save(projectClass);
userWithHeadSupervisor = new User();
@ -360,4 +360,38 @@ public class TestProjectDaoJPA {
Assert.assertEquals(list, projectDao.getProjectsByProjectTeamMember(userWithCoSupervisorAndReviewer, null, ProjectTeamMemberRoles.REVIEWER));
}
@Test
@Rollback
@Transactional
public void testGetProjetClass(){
ProjectClass test = projectClassDao.getProjectClass(ProjectClass.BACHELOR);
Assert.assertNotNull(test);
Assert.assertEquals(test.getName(), projectClass.getName());
}
@Test
@Rollback
@Transactional
public void testFailToCreateDuplicateProjectClassCode(){
boolean created = true;
try{
ProjectClass test = new ProjectClass(ProjectClass.BACHELOR,"Bachelor","Bachelor degree thesis project");
test = projectClassDao.save(test);
} catch(JpaSystemException e){
created = false;
}
Assert.assertFalse(created);
}
@Test
@Rollback
@Transactional
public void testProjectClassConvertUppercase(){
String code = "rAndomCase";
ProjectClass test = new ProjectClass(code,"Bachelor","Bachelor degree thesis project");
test = projectClassDao.save(test);
Assert.assertEquals(test.getCode(), code.toUpperCase());
}
}

@ -77,8 +77,7 @@ public class TestScheduleTemplateDaoJPA {
sysAdminRole.setUser(sysAdminUser);
sysAdminRole = (SysAdmin) roleDao.save(sysAdminRole);
masterClass = new ProjectClass();
masterClass.setName("Master");
masterClass = new ProjectClass(ProjectClass.MASTER,"Master","Master degree thesis project");
masterClass = projectClassDao.save(masterClass);
sysAdminTemplate = new ScheduleTemplate();