From fe4a8b0b82cb9fbba26ce84ad0345cadd5f4df29 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=93scar=20Gonz=C3=A1lez=20Fern=C3=A1ndez?= Date: Mon, 7 Dec 2009 14:26:02 +0100 Subject: [PATCH] ItEr38S05ValidacionEProbasFuncionaisItEr37S06: [Bug #119]. Fixing bug. --- .../materials/entities/MaterialCategory.java | 26 ++++++++-------- .../web/materials/MaterialsController.java | 2 +- .../web/materials/MaterialsModel.java | 30 +++++++++++++++++++ 3 files changed, 43 insertions(+), 15 deletions(-) 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 675e0c089..7c7c75c47 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 @@ -20,12 +20,13 @@ package org.navalplanner.business.materials.entities; +import java.util.ArrayList; +import java.util.Collection; import java.util.Collections; import java.util.HashSet; +import java.util.List; import java.util.Set; -import org.apache.commons.lang.Validate; -import org.hibernate.validator.AssertTrue; import org.hibernate.validator.NotEmpty; import org.hibernate.validator.Valid; import org.navalplanner.business.common.BaseEntity; @@ -38,6 +39,15 @@ import org.navalplanner.business.common.BaseEntity; */ public class MaterialCategory extends BaseEntity { + public static List getAllMaterialsFrom( + Collection categories) { + List result = new ArrayList(); + for (MaterialCategory each : categories) { + result.addAll(each.getMaterials()); + } + return result; + } + @NotEmpty private String name; @@ -104,16 +114,4 @@ public class MaterialCategory extends BaseEntity { materials.remove(material); } -// @AssertTrue(message="material code must be unique within a category") -// public boolean checkConstraintNonRepeatedMaterialCodes() { -// Set materialCodes = new HashSet(); -// for (Material each: materials) { -// final String code = each.getCode(); -// if (materialCodes.contains(code)) { -// return false; -// } -// materialCodes.add(code); -// } -// return true; -// } } diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/materials/MaterialsController.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/materials/MaterialsController.java index 2dc7fcde3..a1071d3b1 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/materials/MaterialsController.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/materials/MaterialsController.java @@ -29,7 +29,6 @@ import java.util.List; import org.apache.commons.logging.LogFactory; import org.hibernate.validator.InvalidValue; -import org.navalplanner.business.common.exceptions.InstanceNotFoundException; import org.navalplanner.business.common.exceptions.ValidationException; import org.navalplanner.business.materials.entities.Material; import org.navalplanner.business.materials.entities.MaterialCategory; @@ -326,6 +325,7 @@ public class MaterialsController extends } } } + messagesForUser.showInvalidValues(validationException); } private boolean locateAndSelectMaterialCategory(MaterialCategory materialCategory) { diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/materials/MaterialsModel.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/materials/MaterialsModel.java index cd7bcc4cb..47f1e5c76 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/materials/MaterialsModel.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/materials/MaterialsModel.java @@ -4,7 +4,9 @@ import static org.navalplanner.web.I18nHelper._; import java.util.ArrayList; import java.util.Collection; +import java.util.HashMap; import java.util.List; +import java.util.Map; import java.util.Set; import org.apache.commons.lang.Validate; @@ -159,11 +161,39 @@ public class MaterialsModel implements IMaterialsModel { @Transactional public void confirmSave() throws ValidationException { final List categories = materialCategories.asList(); + checkNoCodeRepeatedAtNewMaterials(categories); for (MaterialCategory each: categories) { categoryDAO.save(each); } } + private void checkNoCodeRepeatedAtNewMaterials( + final List categories) throws ValidationException { + List allMaterials = MaterialCategory + .getAllMaterialsFrom(categories); + Map byCode = new HashMap(); + for (Material each : allMaterials) { + if (byCode.containsKey(each.getCode())) { + throw new ValidationException(sameCodeMessage(each, byCode + .get(each.getCode()))); + } + byCode.put(each.getCode(), each); + } + } + + private String sameCodeMessage(Material first, Material second) { + return _( + "both {0} of category {1} and {2} of category {3} have the same code", + asStringForUser(first), first.getCategory().getName(), + asStringForUser(second), second.getCategory().getName()); + } + + private String asStringForUser(Material material) { + return String.format("{code: %s, description: %s}", material.getCode(), + material + .getDescription()); + } + @Override public void removeMaterial(Material material) { material.getCategory().removeMaterial(material);