From 8be0a0c1359d694b5e4e48a661cd3e27b2ae35ff Mon Sep 17 00:00:00 2001 From: Manuel Rego Casasnovas Date: Thu, 28 Jan 2010 13:08:31 +0100 Subject: [PATCH] ItEr45S23CUImportacionTiposEtiquetasEEtiquetas: Added constraints to LabelType entity. --- .../business/labels/daos/ILabelTypeDAO.java | 5 +++ .../business/labels/daos/LabelTypeDAO.java | 13 ++++++ .../business/labels/entities/LabelType.java | 45 +++++++++++++++++++ 3 files changed, 63 insertions(+) diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/labels/daos/ILabelTypeDAO.java b/navalplanner-business/src/main/java/org/navalplanner/business/labels/daos/ILabelTypeDAO.java index 2679d9171..1ce7da647 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/labels/daos/ILabelTypeDAO.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/labels/daos/ILabelTypeDAO.java @@ -41,4 +41,9 @@ public interface ILabelTypeDAO extends IIntegrationEntityDAO { LabelType findUniqueByName(String type) throws InstanceNotFoundException, NonUniqueResultException; + boolean existsByNameAnotherTransaction(LabelType labelType); + + LabelType findUniqueByNameAnotherTransaction(String name) + throws InstanceNotFoundException; + } diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/labels/daos/LabelTypeDAO.java b/navalplanner-business/src/main/java/org/navalplanner/business/labels/daos/LabelTypeDAO.java index 859ce732c..89f839b76 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/labels/daos/LabelTypeDAO.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/labels/daos/LabelTypeDAO.java @@ -96,4 +96,17 @@ public class LabelTypeDAO extends IntegrationEntityDAO implements return labelType; } + @Override + @Transactional(readOnly = true, propagation = Propagation.REQUIRES_NEW) + public boolean existsByNameAnotherTransaction(LabelType labelType) { + return existsByName(labelType); + } + + @Override + @Transactional(readOnly = true, propagation = Propagation.REQUIRES_NEW) + public LabelType findUniqueByNameAnotherTransaction(String name) + throws InstanceNotFoundException { + return findUniqueByName(name); + } + } diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/labels/entities/LabelType.java b/navalplanner-business/src/main/java/org/navalplanner/business/labels/entities/LabelType.java index 2f28e9c16..8f14ed382 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/labels/entities/LabelType.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/labels/entities/LabelType.java @@ -24,10 +24,13 @@ import java.util.Collections; import java.util.HashSet; import java.util.Set; +import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.Validate; +import org.hibernate.validator.AssertTrue; import org.hibernate.validator.NotEmpty; import org.navalplanner.business.common.IntegrationEntity; import org.navalplanner.business.common.Registry; +import org.navalplanner.business.common.exceptions.InstanceNotFoundException; import org.navalplanner.business.labels.daos.ILabelTypeDAO; /** @@ -96,4 +99,46 @@ public class LabelType extends IntegrationEntity implements Comparable { return Registry.getLabelTypeDAO(); } + @AssertTrue(message = "label names must be unique inside a label type") + public boolean checkConstraintNonRepeatedLabelNames() { + Set labelNames = new HashSet(); + + for (Label label : labels) { + if (!StringUtils.isBlank(label.getName())) { + if (labelNames.contains(label.getName().toLowerCase())) { + return false; + } else { + labelNames.add(label.getName().toLowerCase()); + } + } + } + + return true; + } + + @AssertTrue(message = "label type name is already being used") + public boolean checkConstraintUniqueLabelTypeName() { + if (!firstLevelValidationsPassed()) { + return true; + } + + ILabelTypeDAO labelTypeDAO = Registry.getLabelTypeDAO(); + + if (isNewObject()) { + return !labelTypeDAO.existsByNameAnotherTransaction(this); + } else { + try { + LabelType c = labelTypeDAO + .findUniqueByNameAnotherTransaction(name); + return c.getId().equals(getId()); + } catch (InstanceNotFoundException e) { + return true; + } + } + } + + private boolean firstLevelValidationsPassed() { + return !StringUtils.isBlank(name); + } + }