ItEr11S09CUCreacionDeOrganizacionsDeTraballoItEr10S10: Create skeleton of entities and mappings.
This commit is contained in:
parent
b06347a650
commit
5dea68fa30
17 changed files with 281 additions and 36 deletions
|
|
@ -0,0 +1,9 @@
|
|||
package org.navalplanner.business.common;
|
||||
|
||||
/**
|
||||
* Represents some work done inside a transaction <br />
|
||||
* @author oscar @param <T>
|
||||
*/
|
||||
public interface OnTransaction<T> {
|
||||
public T execute();
|
||||
}
|
||||
|
|
@ -4,6 +4,7 @@ import java.util.Collection;
|
|||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
import org.navalplanner.business.common.OnTransaction;
|
||||
import org.navalplanner.business.common.exceptions.InstanceNotFoundException;
|
||||
import org.navalplanner.business.resources.entities.Criterion;
|
||||
import org.navalplanner.business.resources.entities.CriterionSatisfaction;
|
||||
|
|
@ -48,10 +49,6 @@ public interface CriterionService {
|
|||
|
||||
Criterion load(Criterion criterion);
|
||||
|
||||
interface OnTransaction<T> {
|
||||
public T execute();
|
||||
}
|
||||
|
||||
<T> T onTransaction(OnTransaction<T> onTransaction);
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -6,6 +6,7 @@ import java.util.Date;
|
|||
import java.util.List;
|
||||
|
||||
import org.apache.commons.lang.Validate;
|
||||
import org.navalplanner.business.common.OnTransaction;
|
||||
import org.navalplanner.business.common.exceptions.InstanceNotFoundException;
|
||||
import org.navalplanner.business.resources.daos.ICriterionDAO;
|
||||
import org.navalplanner.business.resources.daos.impl.CriterionDAO;
|
||||
|
|
|
|||
|
|
@ -0,0 +1,24 @@
|
|||
package org.navalplanner.business.workorders.entities;
|
||||
|
||||
import org.hibernate.validator.NotNull;
|
||||
|
||||
public class ActivityWork {
|
||||
|
||||
private Long id;
|
||||
|
||||
public Long getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
private Integer workingHours;
|
||||
|
||||
public void setWorkingHours(Integer workingHours) {
|
||||
this.workingHours = workingHours;
|
||||
}
|
||||
|
||||
public int getWorkingHours() {
|
||||
return workingHours;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -1,6 +1,10 @@
|
|||
package org.navalplanner.business.workorders.entities;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Date;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
import org.hibernate.validator.NotEmpty;
|
||||
import org.hibernate.validator.NotNull;
|
||||
|
|
@ -34,6 +38,8 @@ public class ProjectWork {
|
|||
// TODO turn into a many to one relationship when Customer entity is defined
|
||||
private String customer;
|
||||
|
||||
private Set<TaskWork> taskWorks = new HashSet<TaskWork>();
|
||||
|
||||
public Long getId() {
|
||||
return id;
|
||||
}
|
||||
|
|
@ -94,4 +100,12 @@ public class ProjectWork {
|
|||
return endDate != null && endDate.before(initDate);
|
||||
}
|
||||
|
||||
public void add(TaskWork task) {
|
||||
taskWorks.add(task);
|
||||
}
|
||||
|
||||
public List<TaskWork> getTaskWorks() {
|
||||
return new ArrayList<TaskWork>(taskWorks);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,58 @@
|
|||
package org.navalplanner.business.workorders.entities;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Date;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
import org.hibernate.validator.NotNull;
|
||||
|
||||
public abstract class TaskWork {
|
||||
private long id;
|
||||
|
||||
@NotNull
|
||||
private String name;
|
||||
|
||||
private Date initDate;
|
||||
|
||||
private Date endDate;
|
||||
|
||||
private Set<ActivityWork> activityWorks = new HashSet<ActivityWork>();
|
||||
|
||||
public int getWorkHours() {
|
||||
int result = 0;
|
||||
Set<ActivityWork> a = activityWorks;
|
||||
for (ActivityWork activityWork : a) {
|
||||
result += activityWork.getWorkingHours();
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
public void addActivity(ActivityWork activityWork) {
|
||||
activityWorks.add(activityWork);
|
||||
}
|
||||
|
||||
public List<ActivityWork> getActivities() {
|
||||
return new ArrayList<ActivityWork>(activityWorks);
|
||||
}
|
||||
|
||||
public long getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the duration in milliseconds
|
||||
*/
|
||||
public long getDuration() {
|
||||
return endDate.getTime() - initDate.getTime();
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
public void setName(String name) {
|
||||
this.name = name;
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,20 @@
|
|||
package org.navalplanner.business.workorders.entities;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
public class TaskWorkContainer extends TaskWork {
|
||||
|
||||
private Set<TaskWork> children = new HashSet<TaskWork>();
|
||||
|
||||
public List<TaskWork> getChildren() {
|
||||
return new ArrayList<TaskWork>(children);
|
||||
}
|
||||
|
||||
public void addTask(TaskWorkLeaf leaf) {
|
||||
children.add(leaf);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
package org.navalplanner.business.workorders.entities;
|
||||
|
||||
public class TaskWorkLeaf extends TaskWork {
|
||||
}
|
||||
|
|
@ -2,6 +2,7 @@ package org.navalplanner.business.workorders.services;
|
|||
|
||||
import java.util.List;
|
||||
|
||||
import org.navalplanner.business.common.OnTransaction;
|
||||
import org.navalplanner.business.common.exceptions.InstanceNotFoundException;
|
||||
import org.navalplanner.business.common.exceptions.ValidationException;
|
||||
import org.navalplanner.business.workorders.entities.ProjectWork;
|
||||
|
|
@ -22,4 +23,6 @@ public interface IProjectWorkService {
|
|||
|
||||
ProjectWork find(Long workerId) throws InstanceNotFoundException;
|
||||
|
||||
public <T> T onTransaction(OnTransaction<T> onTransaction);
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -4,6 +4,7 @@ import java.util.List;
|
|||
|
||||
import org.hibernate.Session;
|
||||
import org.hibernate.SessionFactory;
|
||||
import org.navalplanner.business.common.OnTransaction;
|
||||
import org.navalplanner.business.common.daos.impl.GenericDaoHibernate;
|
||||
import org.navalplanner.business.common.exceptions.InstanceNotFoundException;
|
||||
import org.navalplanner.business.common.exceptions.ValidationException;
|
||||
|
|
@ -70,4 +71,9 @@ public class ProjectWorkService implements IProjectWorkService {
|
|||
dao.remove(projectWork.getId());
|
||||
}
|
||||
|
||||
@Override
|
||||
public <T> T onTransaction(OnTransaction<T> onTransaction) {
|
||||
return onTransaction.execute();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -24,7 +24,7 @@
|
|||
org/navalplanner/business/resources/entities/Resources.hbm.xml
|
||||
</value>
|
||||
<value>
|
||||
org/navalplanner/business/resources/entities/WorkOrders.hbm.xml
|
||||
org/navalplanner/business/workorders/entities/WorkOrders.hbm.xml
|
||||
</value>
|
||||
</list>
|
||||
</property>
|
||||
|
|
|
|||
|
|
@ -1,16 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
|
||||
<hibernate-mapping package="org.navalplanner.business.workorders.entities">
|
||||
<class name="ProjectWork">
|
||||
<id access="field" name="id">
|
||||
<generator class="native" />
|
||||
</id>
|
||||
<version name="version" access="field" type="long"/>
|
||||
<property name="initDate" access="field"></property>
|
||||
<property name="endDate" access="field"></property>
|
||||
<property name="name" access="field"></property>
|
||||
<property name="description" access="field"></property>
|
||||
<property name="responsible" access="field"></property>
|
||||
<property name="customer" access="field"></property>
|
||||
</class>
|
||||
</hibernate-mapping>
|
||||
|
|
@ -0,0 +1,53 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
|
||||
<hibernate-mapping package="org.navalplanner.business.workorders.entities">
|
||||
<class name="ProjectWork">
|
||||
<id access="field" name="id">
|
||||
<generator class="native" />
|
||||
</id>
|
||||
<version name="version" access="field" type="long" />
|
||||
<property name="initDate" access="field"></property>
|
||||
<property name="endDate" access="field"></property>
|
||||
<property name="name" access="field"></property>
|
||||
<property name="description" access="field"></property>
|
||||
<property name="responsible" access="field"></property>
|
||||
<property name="customer" access="field"></property>
|
||||
<set name="taskWorks" access="field" cascade="all-delete-orphan">
|
||||
<key column="projectId" not-null="false"></key>
|
||||
<one-to-many class="TaskWork" />
|
||||
</set>
|
||||
</class>
|
||||
|
||||
<class name="TaskWork" abstract="true">
|
||||
<id name="id" type="long" access="field">
|
||||
<generator class="native" />
|
||||
</id>
|
||||
<set name="activityWorks" access="field" cascade="all-delete-orphan">
|
||||
<key column="PARENT_TASK" not-null="false"></key>
|
||||
<one-to-many class="ActivityWork" />
|
||||
</set>
|
||||
|
||||
<property name="name" access="field" />
|
||||
<property name="initDate" access="field" />
|
||||
<property name="endDate" access="field" />
|
||||
|
||||
<joined-subclass name="TaskWorkContainer">
|
||||
<key column="TASKWORKID"></key>
|
||||
<set name="children" access="field" cascade="all-delete-orphan">
|
||||
<key column="parent" not-null="false"></key>
|
||||
<one-to-many class="TaskWork" />
|
||||
</set>
|
||||
</joined-subclass>
|
||||
|
||||
<joined-subclass name="TaskWorkLeaf">
|
||||
<key column="TASKWORKID"></key>
|
||||
</joined-subclass>
|
||||
</class>
|
||||
|
||||
<class name="ActivityWork">
|
||||
<id name="id" type="long" access="field">
|
||||
<generator class="native" />
|
||||
</id>
|
||||
<property name="workingHours"></property>
|
||||
</class>
|
||||
</hibernate-mapping>
|
||||
|
|
@ -8,6 +8,7 @@ import org.hibernate.validator.InvalidStateException;
|
|||
import org.junit.Assume;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.navalplanner.business.common.OnTransaction;
|
||||
import org.navalplanner.business.common.exceptions.InstanceNotFoundException;
|
||||
import org.navalplanner.business.resources.entities.Criterion;
|
||||
import org.navalplanner.business.resources.entities.CriterionSatisfaction;
|
||||
|
|
@ -21,7 +22,6 @@ import org.navalplanner.business.resources.entities.Resource;
|
|||
import org.navalplanner.business.resources.entities.Worker;
|
||||
import org.navalplanner.business.resources.services.CriterionService;
|
||||
import org.navalplanner.business.resources.services.ResourceService;
|
||||
import org.navalplanner.business.resources.services.CriterionService.OnTransaction;
|
||||
import org.navalplanner.business.test.resources.daos.CriterionDAOTest;
|
||||
import org.navalplanner.business.test.resources.daos.CriterionSatisfactionDAOTest;
|
||||
import org.navalplanner.business.test.resources.entities.ResourceTest;
|
||||
|
|
|
|||
|
|
@ -0,0 +1,26 @@
|
|||
package org.navalplanner.business.test.workorders.entities;
|
||||
|
||||
import static org.hamcrest.CoreMatchers.equalTo;
|
||||
import static org.junit.Assert.assertThat;
|
||||
|
||||
import org.junit.Test;
|
||||
import org.navalplanner.business.workorders.entities.ProjectWork;
|
||||
import org.navalplanner.business.workorders.entities.TaskWorkContainer;
|
||||
import org.navalplanner.business.workorders.entities.TaskWorkLeaf;
|
||||
|
||||
/**
|
||||
* Tests for {@link ProjectWork}. <br />
|
||||
* @author Óscar González Fernández <ogonzalez@igalia.com>
|
||||
*/
|
||||
public class ProjectWorkTest {
|
||||
|
||||
@Test
|
||||
public void testAddingTaskWork() throws Exception {
|
||||
ProjectWork projectWork = new ProjectWork();
|
||||
TaskWorkContainer container = new TaskWorkContainer();
|
||||
TaskWorkLeaf leaf = new TaskWorkLeaf();
|
||||
container.addTask(leaf);
|
||||
projectWork.add(container);
|
||||
assertThat(projectWork.getTaskWorks().size(), equalTo(1));
|
||||
}
|
||||
}
|
||||
|
|
@ -1,18 +1,5 @@
|
|||
package org.navalplanner.business.test.workorders.services;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.navalplanner.business.common.exceptions.ValidationException;
|
||||
import org.navalplanner.business.test.resources.daos.CriterionSatisfactionDAOTest;
|
||||
import org.navalplanner.business.workorders.entities.ProjectWork;
|
||||
import org.navalplanner.business.workorders.services.IProjectWorkService;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.test.context.ContextConfiguration;
|
||||
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import static org.hamcrest.CoreMatchers.equalTo;
|
||||
import static org.hamcrest.CoreMatchers.notNullValue;
|
||||
import static org.junit.Assert.assertFalse;
|
||||
|
|
@ -21,6 +8,26 @@ import static org.junit.Assert.assertTrue;
|
|||
import static org.navalplanner.business.BusinessGlobalNames.BUSINESS_SPRING_CONFIG_FILE;
|
||||
import static org.navalplanner.business.test.BusinessGlobalNames.BUSINESS_SPRING_CONFIG_TEST_FILE;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.navalplanner.business.common.OnTransaction;
|
||||
import org.navalplanner.business.common.exceptions.InstanceNotFoundException;
|
||||
import org.navalplanner.business.common.exceptions.ValidationException;
|
||||
import org.navalplanner.business.test.resources.daos.CriterionSatisfactionDAOTest;
|
||||
import org.navalplanner.business.workorders.entities.ActivityWork;
|
||||
import org.navalplanner.business.workorders.entities.ProjectWork;
|
||||
import org.navalplanner.business.workorders.entities.TaskWork;
|
||||
import org.navalplanner.business.workorders.entities.TaskWorkContainer;
|
||||
import org.navalplanner.business.workorders.entities.TaskWorkLeaf;
|
||||
import org.navalplanner.business.workorders.services.IProjectWorkService;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.test.annotation.NotTransactional;
|
||||
import org.springframework.test.context.ContextConfiguration;
|
||||
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
/**
|
||||
* Tests for {@link ProjectWork}. <br />
|
||||
* @author Óscar González Fernández <ogonzalez@igalia.com>
|
||||
|
|
@ -83,4 +90,43 @@ public class ProjectWorkServiceTest {
|
|||
assertThat(projectWorkService.find(projectWork.getId()), notNullValue());
|
||||
}
|
||||
|
||||
@Test
|
||||
@NotTransactional
|
||||
public void testAddingTaskWork() throws Exception {
|
||||
final ProjectWork projectWork = createValidProjectWork();
|
||||
TaskWorkContainer container = new TaskWorkContainer();
|
||||
container.setName("bla");
|
||||
TaskWorkLeaf leaf = new TaskWorkLeaf();
|
||||
leaf.setName("leaf");
|
||||
container.addTask(leaf);
|
||||
projectWork.add(container);
|
||||
ActivityWork activityWork = new ActivityWork();
|
||||
activityWork.setWorkingHours(3);
|
||||
leaf.addActivity(activityWork);
|
||||
projectWorkService.save(projectWork);
|
||||
projectWorkService.onTransaction(new OnTransaction<Void>() {
|
||||
|
||||
@Override
|
||||
public Void execute() {
|
||||
try {
|
||||
ProjectWork reloaded = projectWorkService.find(projectWork
|
||||
.getId());
|
||||
assertFalse(projectWork == reloaded);
|
||||
assertThat(reloaded.getTaskWorks().size(), equalTo(1));
|
||||
TaskWorkContainer containerReloaded = (TaskWorkContainer) reloaded
|
||||
.getTaskWorks().get(0);
|
||||
assertThat(containerReloaded.getActivities().size(),
|
||||
equalTo(0));
|
||||
assertThat(containerReloaded.getChildren().size(),
|
||||
equalTo(1));
|
||||
TaskWork leaf = containerReloaded.getChildren().get(0);
|
||||
assertThat(leaf.getActivities().size(), equalTo(1));
|
||||
projectWorkService.remove(projectWork);
|
||||
} catch (InstanceNotFoundException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -30,7 +30,7 @@
|
|||
org/navalplanner/business/resources/entities/Resources.hbm.xml
|
||||
</value>
|
||||
<value>
|
||||
org/navalplanner/business/resources/entities/WorkOrders.hbm.xml
|
||||
org/navalplanner/business/workorders/entities/WorkOrders.hbm.xml
|
||||
</value>
|
||||
</list>
|
||||
</property>
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue