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).
This commit is contained in:
parent
359022813f
commit
25c192f713
7 changed files with 82 additions and 0 deletions
|
|
@ -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<ResourcesCostCategoryAssignment, Long> 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);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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 <jaragunde@igalia.com>
|
||||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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 <fbellas@udc.es>
|
||||
* @author Susana Montes Pedreira <smontes@wirelessgalicia.com>
|
||||
* @author Jacobo Aragunde Perez <jaragunde@igalia.com>
|
||||
*/
|
||||
public abstract class Resource extends BaseEntity{
|
||||
|
||||
|
|
@ -65,6 +67,9 @@ public abstract class Resource extends BaseEntity{
|
|||
|
||||
private Map<LocalDate, List<DayAssignment>> assignmentsByDayCached = null;
|
||||
|
||||
private Set<ResourcesCostCategoryAssignment> resourcesCostCategoryAssignments =
|
||||
new HashSet<ResourcesCostCategoryAssignment>();
|
||||
|
||||
private void clearCachedData() {
|
||||
assignmentsByDayCached = null;
|
||||
}
|
||||
|
|
@ -727,4 +732,19 @@ public abstract class Resource extends BaseEntity{
|
|||
return compositedCriterion.isSatisfiedBy(this);
|
||||
}
|
||||
|
||||
public Set<ResourcesCostCategoryAssignment> 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);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -76,5 +76,7 @@
|
|||
|
||||
<many-to-one name="costCategory" class="CostCategory" column="COST_CATEGORY_ID"/>
|
||||
|
||||
<many-to-one name="resource" class="org.navalplanner.business.resources.entities.Resource" column="RESOURCE_ID"/>
|
||||
|
||||
</class>
|
||||
</hibernate-mapping>
|
||||
|
|
|
|||
|
|
@ -26,6 +26,11 @@
|
|||
class="org.navalplanner.business.calendars.entities.ResourceCalendar"
|
||||
unique="true" />
|
||||
|
||||
<set name="resourcesCostCategoryAssignments" inverse="true" cascade="all-delete-orphan">
|
||||
<key column="RESOURCE_ID"/>
|
||||
<one-to-many class="org.navalplanner.business.costcategories.entities.ResourcesCostCategoryAssignment"/>
|
||||
</set>
|
||||
|
||||
<joined-subclass name="org.navalplanner.business.resources.entities.Worker">
|
||||
<key column="WORKER_ID"/>
|
||||
<property name="firstName"/>
|
||||
|
|
|
|||
|
|
@ -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));
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -66,6 +66,9 @@
|
|||
<value>
|
||||
org/navalplanner/business/users/entities/Users.hbm.xml
|
||||
</value>
|
||||
<value>
|
||||
org/navalplanner/business/costcategories/entities/CostCategories.hbm.xml
|
||||
</value>
|
||||
</list>
|
||||
</property>
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue