From 722b57c36b95d33b83d19a351430410ce835dd1c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=93scar=20Gonz=C3=A1lez=20Fern=C3=A1ndez?= Date: Tue, 3 Aug 2010 14:03:08 +0200 Subject: [PATCH] ItEr60S04ValidacionEProbasFuncionaisItEr59S04: [Bug #557] Fix bug. Now criterion types can be renamed and they are not created again. It won't work for legacy data the first time. --- .../bootstrap/CriterionsBootstrap.java | 15 ++------ .../resources/daos/CriterionTypeDAO.java | 34 +++++++++++++++++++ .../resources/daos/ICriterionTypeDAO.java | 21 ++++++++++++ 3 files changed, 57 insertions(+), 13 deletions(-) diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/resources/bootstrap/CriterionsBootstrap.java b/navalplanner-business/src/main/java/org/navalplanner/business/resources/bootstrap/CriterionsBootstrap.java index b54d457cb..fb2006df6 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/resources/bootstrap/CriterionsBootstrap.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/resources/bootstrap/CriterionsBootstrap.java @@ -28,7 +28,6 @@ import java.util.Map.Entry; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.navalplanner.business.common.exceptions.InstanceNotFoundException; import org.navalplanner.business.resources.daos.ICriterionDAO; import org.navalplanner.business.resources.daos.ICriterionTypeDAO; import org.navalplanner.business.resources.entities.Criterion; @@ -87,21 +86,11 @@ public class CriterionsBootstrap implements ICriterionsBootstrap { } private CriterionType retrieveOrCreate(CriterionType criterionType) { - if (!criterionTypeDAO.exists(criterionType.getId()) - && !criterionTypeDAO - .existsOtherCriterionTypeByName(criterionType)) { + if (!criterionTypeDAO.existsPredefinedType(criterionType)) { criterionTypeDAO.save(criterionType); return criterionType; - } else { - try { - CriterionType result = criterionTypeDAO - .findUniqueByName(criterionType - .getName()); - return result; - } catch (InstanceNotFoundException e) { - throw new RuntimeException(e); - } } + return criterionTypeDAO.findPredefined(criterionType); } private Map> getTypesWithCriterions() { diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/resources/daos/CriterionTypeDAO.java b/navalplanner-business/src/main/java/org/navalplanner/business/resources/daos/CriterionTypeDAO.java index a0320938f..77718cb31 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/resources/daos/CriterionTypeDAO.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/resources/daos/CriterionTypeDAO.java @@ -99,6 +99,40 @@ public class CriterionTypeDAO extends IntegrationEntityDAO return found != null && criterionType != found; } + @Override + public boolean existsPredefinedType(CriterionType criterionType) { + Validate.notNull(criterionType); + Validate.notNull(criterionType.getPredefinedTypeInternalName()); + if (existsOtherCriterionTypeByName(criterionType)) { + return true; + } + return uniqueByInternalName(criterionType) != null; + } + + @Override + public CriterionType findPredefined(CriterionType criterionType) { + Validate.notNull(criterionType); + Validate.notNull(criterionType.getPredefinedTypeInternalName()); + CriterionType result = uniqueByName(criterionType.getName()); + if (result != null) { + return result; + } + return uniqueByInternalName(criterionType); + } + + private Criteria byInternalName(String predefinedTypeInternalName) { + Criteria result = getSession().createCriteria(CriterionType.class); + result.add(Restrictions.eq("predefinedTypeInternalName", + predefinedTypeInternalName).ignoreCase()); + return result; + } + + private CriterionType uniqueByInternalName(CriterionType criterionType) { + Criteria c = byInternalName(criterionType + .getPredefinedTypeInternalName()); + return (CriterionType) c.uniqueResult(); + } + @Override @Transactional(readOnly = true, propagation = Propagation.REQUIRES_NEW) public boolean existsByNameAnotherTransaction(CriterionType criterionType) { diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/resources/daos/ICriterionTypeDAO.java b/navalplanner-business/src/main/java/org/navalplanner/business/resources/daos/ICriterionTypeDAO.java index ff64e81ee..30c3ab39c 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/resources/daos/ICriterionTypeDAO.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/resources/daos/ICriterionTypeDAO.java @@ -26,6 +26,7 @@ import java.util.List; import org.navalplanner.business.common.daos.IIntegrationEntityDAO; import org.navalplanner.business.common.exceptions.InstanceNotFoundException; import org.navalplanner.business.resources.entities.CriterionType; +import org.navalplanner.business.resources.entities.PredefinedCriterionTypes; import org.navalplanner.business.resources.entities.ResourceEnum; /** @@ -58,4 +59,24 @@ public interface ICriterionTypeDAO List getCriterionTypesByResources( Collection resources); + /** + * Checks if exists the equivalent {@link CriterionType} on the DB for a + * {@link CriterionType} created from a {@link PredefinedCriterionTypes} + * + * @param criterionType + * @return + */ + boolean existsPredefinedType(CriterionType criterionType); + + /** + * Searches for the equivalent {@link CriterionType} on the DB for a + * CriterionType created from a {@link PredefinedCriterionTypes} + * + * @param predefinedCriterionType + * @return null if there is no {@link CriterionType} for the + * predefinedCriterionType. Otherwise the equivalent + * {@link CriterionType} on DB + */ + CriterionType findPredefined(CriterionType predefinedCriterionType); + }