diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/materials/entities/Material.java b/navalplanner-business/src/main/java/org/navalplanner/business/materials/entities/Material.java index 449646afe..373495de1 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/materials/entities/Material.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/materials/entities/Material.java @@ -44,7 +44,7 @@ public class Material extends BaseEntity { private boolean disabled; @NotNull - private MaterialCategory category; + private MaterialCategory category = null; // Default constructor, needed by Hibernate protected Material() { @@ -72,7 +72,10 @@ public class Material extends BaseEntity { } public void setCategory(MaterialCategory category) { + if(this.category!=null) + this.category.removeMaterial(this); this.category = category; + category.addMaterial(this); } public String getDescription() { diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/materials/entities/MaterialCategory.java b/navalplanner-business/src/main/java/org/navalplanner/business/materials/entities/MaterialCategory.java index 3b0e5e1c3..fd3ecbc91 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/materials/entities/MaterialCategory.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/materials/entities/MaterialCategory.java @@ -97,4 +97,17 @@ public class MaterialCategory extends BaseEntity { if(subcategory.getParent()!=null) subcategory.removeParent(); } + + public Set getMaterials() { + return materials; + } + + public void addMaterial(Material material) { + materials.add(material); + if(material.getCategory()!=this) + material.setCategory(this); + } + public void removeMaterial(Material material) { + materials.remove(material); + } } diff --git a/navalplanner-business/src/test/java/org/navalplanner/business/test/materials/daos/MaterialDAOTest.java b/navalplanner-business/src/test/java/org/navalplanner/business/test/materials/daos/MaterialDAOTest.java index 55b9e1b1b..06a37f6a7 100644 --- a/navalplanner-business/src/test/java/org/navalplanner/business/test/materials/daos/MaterialDAOTest.java +++ b/navalplanner-business/src/test/java/org/navalplanner/business/test/materials/daos/MaterialDAOTest.java @@ -28,6 +28,7 @@ import static org.navalplanner.business.BusinessGlobalNames.BUSINESS_SPRING_CONF import static org.navalplanner.business.test.BusinessGlobalNames.BUSINESS_SPRING_CONFIG_TEST_FILE; import java.util.List; +import java.util.Set; import java.util.UUID; import org.junit.Test; @@ -84,6 +85,7 @@ public class MaterialDAOTest { public void testRemoveMaterial() throws InstanceNotFoundException { Material material = createValidMaterial(); materialDAO.save(material); + //material.getCategory().removeMaterial(material); materialDAO.remove(material.getId()); assertFalse(materialDAO.exists(material.getId())); } @@ -96,4 +98,17 @@ public class MaterialDAOTest { List list = materialDAO.list(Material.class); assertEquals(previous + 1, list.size()); } + + @Test + public void testListMaterialsFromCategory() { + Material material1 = createValidMaterial(); + int previous = material1.getCategory().getMaterials().size(); + Material material2 = createValidMaterial(); + material2.setCategory(material1.getCategory()); + materialDAO.save(material1); + materialDAO.save(material2); + + Set list = material1.getCategory().getMaterials(); + assertEquals(previous + 1, list.size()); + } }