From 25c192f7132c78fb4b9b0efba2d8829cd151a992 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jacobo=20Aragunde=20P=C3=A9rez?= Date: Fri, 4 Dec 2009 20:05:25 +0100 Subject: [PATCH] ItEr37S12CUAdministracionCategoriaCosteItEr36S14: implemented the relation between ResourcesCostCategoryAssignment and Resource The relation was implemented in both sides. A test has been added to check the navigation. DAO.remove() method was overwritten to "cut" the relation before removing (otherwise, a exception is thrown). --- .../ResourcesCostCategoryAssignmentDAO.java | 14 +++++++++++++ .../ResourcesCostCategoryAssignment.java | 19 ++++++++++++++++++ .../business/resources/entities/Resource.java | 20 +++++++++++++++++++ .../entities/CostCategories.hbm.xml | 2 ++ .../resources/entities/Resources.hbm.xml | 5 +++++ ...esourcesCostCategoryAssignmentDAOTest.java | 19 ++++++++++++++++++ ...navalplanner-webapp-spring-config-test.xml | 3 +++ 7 files changed, 82 insertions(+) diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/costcategories/daos/ResourcesCostCategoryAssignmentDAO.java b/navalplanner-business/src/main/java/org/navalplanner/business/costcategories/daos/ResourcesCostCategoryAssignmentDAO.java index 3dfb8e998..d5638d621 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/costcategories/daos/ResourcesCostCategoryAssignmentDAO.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/costcategories/daos/ResourcesCostCategoryAssignmentDAO.java @@ -21,6 +21,7 @@ package org.navalplanner.business.costcategories.daos; import org.navalplanner.business.common.daos.GenericDAOHibernate; +import org.navalplanner.business.common.exceptions.InstanceNotFoundException; import org.navalplanner.business.costcategories.entities.ResourcesCostCategoryAssignment; import org.springframework.beans.factory.config.BeanDefinition; import org.springframework.context.annotation.Scope; @@ -34,4 +35,17 @@ import org.springframework.stereotype.Repository; public class ResourcesCostCategoryAssignmentDAO extends GenericDAOHibernate implements IResourcesCostCategoryAssignmentDAO { + + @Override + public void remove(Long id) throws InstanceNotFoundException { + try { + ResourcesCostCategoryAssignment assignment = find(id); + assignment.getResource().removeResourcesCostCategoryAssignment(assignment); + } + catch(InstanceNotFoundException e) { + //it was already deleted from its parent + //we do nothing + } + super.remove(id); + } } diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/costcategories/entities/ResourcesCostCategoryAssignment.java b/navalplanner-business/src/main/java/org/navalplanner/business/costcategories/entities/ResourcesCostCategoryAssignment.java index f856d4e8b..d970186a9 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/costcategories/entities/ResourcesCostCategoryAssignment.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/costcategories/entities/ResourcesCostCategoryAssignment.java @@ -23,6 +23,7 @@ package org.navalplanner.business.costcategories.entities; import org.hibernate.validator.NotNull; import org.joda.time.LocalDate; import org.navalplanner.business.common.BaseEntity; +import org.navalplanner.business.resources.entities.Resource; /** * @author Jacobo Aragunde Perez @@ -37,6 +38,9 @@ public class ResourcesCostCategoryAssignment extends BaseEntity { @NotNull private CostCategory costCategory; + @NotNull + private Resource resource; + // Default constructor, needed by Hibernate protected ResourcesCostCategoryAssignment() { @@ -69,4 +73,19 @@ public class ResourcesCostCategoryAssignment extends BaseEntity { public void setCostCategory(CostCategory category) { this.costCategory = category; } + + public Resource getResource() { + return resource; + } + + public void setResource(Resource resource) { + Resource oldResource = this.resource; + this.resource = resource; + if(oldResource!=null) + oldResource.removeResourcesCostCategoryAssignment(this); + if(resource!=null && + !resource.getResourcesCostCategoryAssignments().contains(this)) { + resource.addResourcesCostCategoryAssignment(this); + } + } } diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/resources/entities/Resource.java b/navalplanner-business/src/main/java/org/navalplanner/business/resources/entities/Resource.java index 39c0f24e6..3dc4a591f 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/resources/entities/Resource.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/resources/entities/Resource.java @@ -40,6 +40,7 @@ import org.navalplanner.business.calendars.entities.ResourceCalendar; import org.navalplanner.business.calendars.entities.SameWorkHoursEveryDay; import org.navalplanner.business.common.BaseEntity; import org.navalplanner.business.common.exceptions.ValidationException; +import org.navalplanner.business.costcategories.entities.ResourcesCostCategoryAssignment; import org.navalplanner.business.planner.entities.DayAssignment; // FIXME: Alternatively, Resource can be modeled with the style: @@ -54,6 +55,7 @@ import org.navalplanner.business.planner.entities.DayAssignment; * This class acts as the base class for all resources. * @author Fernando Bellas Permuy * @author Susana Montes Pedreira + * @author Jacobo Aragunde Perez */ public abstract class Resource extends BaseEntity{ @@ -65,6 +67,9 @@ public abstract class Resource extends BaseEntity{ private Map> assignmentsByDayCached = null; + private Set resourcesCostCategoryAssignments = + new HashSet(); + private void clearCachedData() { assignmentsByDayCached = null; } @@ -727,4 +732,19 @@ public abstract class Resource extends BaseEntity{ return compositedCriterion.isSatisfiedBy(this); } + public Set getResourcesCostCategoryAssignments() { + return resourcesCostCategoryAssignments; + } + + public void addResourcesCostCategoryAssignment(ResourcesCostCategoryAssignment assignment) { + resourcesCostCategoryAssignments.add(assignment); + if(assignment.getResource()!=this) + assignment.setResource(this); + } + + public void removeResourcesCostCategoryAssignment(ResourcesCostCategoryAssignment assignment) { + resourcesCostCategoryAssignments.remove(assignment); + if(assignment.getResource()==this) + assignment.setResource(null); + } } diff --git a/navalplanner-business/src/main/resources/org/navalplanner/business/costcategories/entities/CostCategories.hbm.xml b/navalplanner-business/src/main/resources/org/navalplanner/business/costcategories/entities/CostCategories.hbm.xml index 5ca9bf87d..a9b29706d 100644 --- a/navalplanner-business/src/main/resources/org/navalplanner/business/costcategories/entities/CostCategories.hbm.xml +++ b/navalplanner-business/src/main/resources/org/navalplanner/business/costcategories/entities/CostCategories.hbm.xml @@ -76,5 +76,7 @@ + + diff --git a/navalplanner-business/src/main/resources/org/navalplanner/business/resources/entities/Resources.hbm.xml b/navalplanner-business/src/main/resources/org/navalplanner/business/resources/entities/Resources.hbm.xml index d44e52c78..48b6b996f 100644 --- a/navalplanner-business/src/main/resources/org/navalplanner/business/resources/entities/Resources.hbm.xml +++ b/navalplanner-business/src/main/resources/org/navalplanner/business/resources/entities/Resources.hbm.xml @@ -26,6 +26,11 @@ class="org.navalplanner.business.calendars.entities.ResourceCalendar" unique="true" /> + + + + + diff --git a/navalplanner-business/src/test/java/org/navalplanner/business/test/costcategories/daos/ResourcesCostCategoryAssignmentDAOTest.java b/navalplanner-business/src/test/java/org/navalplanner/business/test/costcategories/daos/ResourcesCostCategoryAssignmentDAOTest.java index 02432ae25..d4e48b46b 100644 --- a/navalplanner-business/src/test/java/org/navalplanner/business/test/costcategories/daos/ResourcesCostCategoryAssignmentDAOTest.java +++ b/navalplanner-business/src/test/java/org/navalplanner/business/test/costcategories/daos/ResourcesCostCategoryAssignmentDAOTest.java @@ -38,6 +38,9 @@ import org.navalplanner.business.costcategories.daos.ICostCategoryDAO; import org.navalplanner.business.costcategories.daos.IResourcesCostCategoryAssignmentDAO; import org.navalplanner.business.costcategories.entities.CostCategory; import org.navalplanner.business.costcategories.entities.ResourcesCostCategoryAssignment; +import org.navalplanner.business.resources.daos.IWorkerDAO; +import org.navalplanner.business.resources.entities.Resource; +import org.navalplanner.business.resources.entities.Worker; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; @@ -61,6 +64,9 @@ public class ResourcesCostCategoryAssignmentDAOTest { @Autowired ICostCategoryDAO costCategoryDAO; + @Autowired + IWorkerDAO workerDAO; + @Test public void testInSpringContainer() { assertNotNull(resourcesCostCategoryAssignmentDAO); @@ -69,10 +75,13 @@ public class ResourcesCostCategoryAssignmentDAOTest { private ResourcesCostCategoryAssignment createValidResourcesCostCategoryAssignment() { CostCategory costCategory = createValidCostCategory(); costCategoryDAO.save(costCategory); + Worker worker = createValidWorker(); + workerDAO.save(worker); ResourcesCostCategoryAssignment assignment = ResourcesCostCategoryAssignment.create(); assignment.setInitDate(new LocalDate()); assignment.setCostCategory(costCategory); + assignment.setResource(worker); return assignment; } @@ -81,6 +90,11 @@ public class ResourcesCostCategoryAssignmentDAOTest { return costCategory; } + private Worker createValidWorker() { + return Worker.create(UUID.randomUUID().toString(), + UUID.randomUUID().toString(), UUID.randomUUID().toString()); + } + @Test public void testSaveResourcesCostCategoryAssignment() { ResourcesCostCategoryAssignment assignment = createValidResourcesCostCategoryAssignment(); @@ -109,7 +123,12 @@ public class ResourcesCostCategoryAssignmentDAOTest { public void testNavigateRelations() { ResourcesCostCategoryAssignment assignment = createValidResourcesCostCategoryAssignment(); resourcesCostCategoryAssignmentDAO.save(assignment); + Resource resource = assignment.getResource(); assertTrue(costCategoryDAO.list(CostCategory.class).contains(assignment.getCostCategory())); + assertTrue(resource.getResourcesCostCategoryAssignments().contains(assignment)); + + assignment.setResource(null); + assertFalse(resource.getResourcesCostCategoryAssignments().contains(assignment)); } } diff --git a/navalplanner-webapp/src/test/resources/navalplanner-webapp-spring-config-test.xml b/navalplanner-webapp/src/test/resources/navalplanner-webapp-spring-config-test.xml index 1725cde8f..83fa703e1 100644 --- a/navalplanner-webapp/src/test/resources/navalplanner-webapp-spring-config-test.xml +++ b/navalplanner-webapp/src/test/resources/navalplanner-webapp-spring-config-test.xml @@ -66,6 +66,9 @@ org/navalplanner/business/users/entities/Users.hbm.xml + + org/navalplanner/business/costcategories/entities/CostCategories.hbm.xml +