diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/workorders/entities/ProjectWork.java b/navalplanner-business/src/main/java/org/navalplanner/business/workorders/entities/ProjectWork.java index 6c33a431f..f5403280e 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/workorders/entities/ProjectWork.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/workorders/entities/ProjectWork.java @@ -2,9 +2,7 @@ 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; @@ -38,7 +36,7 @@ public class ProjectWork { // TODO turn into a many to one relationship when Customer entity is defined private String customer; - private Set taskWorks = new HashSet(); + private List taskWorks = new ArrayList(); public Long getId() { return id; diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/workorders/entities/TaskWorkContainer.java b/navalplanner-business/src/main/java/org/navalplanner/business/workorders/entities/TaskWorkContainer.java index 38e081806..a0ec634ea 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/workorders/entities/TaskWorkContainer.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/workorders/entities/TaskWorkContainer.java @@ -1,13 +1,11 @@ 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 children = new HashSet(); + private List children = new ArrayList(); public List getChildren() { return new ArrayList(children); diff --git a/navalplanner-business/src/main/resources/org/navalplanner/business/workorders/entities/WorkOrders.hbm.xml b/navalplanner-business/src/main/resources/org/navalplanner/business/workorders/entities/WorkOrders.hbm.xml index 974c7d57e..f3d732a32 100644 --- a/navalplanner-business/src/main/resources/org/navalplanner/business/workorders/entities/WorkOrders.hbm.xml +++ b/navalplanner-business/src/main/resources/org/navalplanner/business/workorders/entities/WorkOrders.hbm.xml @@ -12,10 +12,11 @@ - + + - + @@ -33,10 +34,11 @@ - + + - + diff --git a/navalplanner-business/src/test/java/org/navalplanner/business/test/workorders/entities/ProjectWorkTest.java b/navalplanner-business/src/test/java/org/navalplanner/business/test/workorders/entities/ProjectWorkTest.java index a9ebe84c6..fa944a9fe 100644 --- a/navalplanner-business/src/test/java/org/navalplanner/business/test/workorders/entities/ProjectWorkTest.java +++ b/navalplanner-business/src/test/java/org/navalplanner/business/test/workorders/entities/ProjectWorkTest.java @@ -1,13 +1,14 @@ 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.TaskWork; import org.navalplanner.business.workorders.entities.TaskWorkContainer; import org.navalplanner.business.workorders.entities.TaskWorkLeaf; +import static org.hamcrest.CoreMatchers.equalTo; +import static org.junit.Assert.assertThat; + /** * Tests for {@link ProjectWork}.
* @author Óscar González Fernández @@ -23,4 +24,19 @@ public class ProjectWorkTest { projectWork.add(container); assertThat(projectWork.getTaskWorks().size(), equalTo(1)); } + + @Test + public void testPreservesOrder() throws Exception { + TaskWorkContainer container = new TaskWorkContainer(); + + TaskWorkLeaf[] created = new TaskWorkLeaf[100]; + for (int i = 0; i < created.length; i++) { + created[i] = new TaskWorkLeaf(); + container.addTask(created[i]); + } + for (int i = 0; i < created.length; i++) { + assertThat(container.getChildren().get(i), + equalTo((TaskWork) created[i])); + } + } } diff --git a/navalplanner-business/src/test/java/org/navalplanner/business/test/workorders/services/ProjectWorkServiceTest.java b/navalplanner-business/src/test/java/org/navalplanner/business/test/workorders/services/ProjectWorkServiceTest.java index 208ba0ee5..920079980 100644 --- a/navalplanner-business/src/test/java/org/navalplanner/business/test/workorders/services/ProjectWorkServiceTest.java +++ b/navalplanner-business/src/test/java/org/navalplanner/business/test/workorders/services/ProjectWorkServiceTest.java @@ -1,13 +1,5 @@ package org.navalplanner.business.test.workorders.services; -import static org.hamcrest.CoreMatchers.equalTo; -import static org.hamcrest.CoreMatchers.notNullValue; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertThat; -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; @@ -28,6 +20,14 @@ 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; +import static org.junit.Assert.assertThat; +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; + /** * Tests for {@link ProjectWork}.
* @author Óscar González Fernández @@ -90,6 +90,61 @@ public class ProjectWorkServiceTest { assertThat(projectWorkService.find(projectWork.getId()), notNullValue()); } + @Test + @NotTransactional + public void testOrderPreserved() throws ValidationException, + InstanceNotFoundException { + final ProjectWork projectWork = createValidProjectWork(); + final TaskWork[] containers = new TaskWorkContainer[10]; + for (int i = 0; i < containers.length; i++) { + containers[i] = new TaskWorkContainer(); + containers[i].setName("bla"); + projectWork.add(containers[i]); + } + TaskWorkContainer container = (TaskWorkContainer) containers[0]; + container.setName("container"); + final TaskWork[] tasks = new TaskWork[10]; + for (int i = 0; i < tasks.length; i++) { + TaskWorkLeaf leaf = createValidLeaf("bla"); + tasks[i] = leaf; + container.addTask(leaf); + } + projectWorkService.save(projectWork); + projectWorkService.onTransaction(new OnTransaction() { + + @Override + public Void execute() { + try { + ProjectWork reloaded = projectWorkService.find(projectWork + .getId()); + List taskWorks = reloaded.getTaskWorks(); + for (int i = 0; i < containers.length; i++) { + assertThat(taskWorks.get(i).getId(), + equalTo(containers[i].getId())); + } + TaskWorkContainer container = (TaskWorkContainer) reloaded + .getTaskWorks().iterator().next(); + List children = container.getChildren(); + for (int i = 0; i < tasks.length; i++) { + assertThat(children.get(i).getId(), equalTo(tasks[i] + .getId())); + } + return null; + } catch (Exception e) { + throw new RuntimeException(e); + } + } + + }); + projectWorkService.remove(projectWork); + } + + private TaskWorkLeaf createValidLeaf(String parameter) { + TaskWorkLeaf result = new TaskWorkLeaf(); + result.setName(parameter); + return result; + } + @Test @NotTransactional public void testAddingTaskWork() throws Exception {