From ca57ad2b2d258da8659a716fe58276c5f6757464 Mon Sep 17 00:00:00 2001 From: Susana Montes Pedreira Date: Fri, 9 Jul 2010 11:52:37 +0200 Subject: [PATCH] ItEr60S04ValidacionEProbasFuncionaisItEr59S04 : Fixing bug in the type of work hours class. adds the checkConstraintUniqueName method to check if the name is unique. --- .../daos/ITypeOfWorkHoursDAO.java | 6 ++++ .../daos/TypeOfWorkHoursDAO.java | 23 +++++++++++++ .../entities/TypeOfWorkHours.java | 24 ++++++++++++++ .../rest-clients/type-work-hours-sample.xml | 33 +++++++++++++++---- 4 files changed, 80 insertions(+), 6 deletions(-) diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/costcategories/daos/ITypeOfWorkHoursDAO.java b/navalplanner-business/src/main/java/org/navalplanner/business/costcategories/daos/ITypeOfWorkHoursDAO.java index fc6ddff69..ddd5a95ed 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/costcategories/daos/ITypeOfWorkHoursDAO.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/costcategories/daos/ITypeOfWorkHoursDAO.java @@ -46,4 +46,10 @@ public interface ITypeOfWorkHoursDAO extends TypeOfWorkHours findUniqueByCodeInAnotherTransaction(String code) throws InstanceNotFoundException; + + TypeOfWorkHours findUniqueByNameInAnotherTransaction(String name) + throws InstanceNotFoundException; + + TypeOfWorkHours findUniqueByName(String name) + throws InstanceNotFoundException; } diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/costcategories/daos/TypeOfWorkHoursDAO.java b/navalplanner-business/src/main/java/org/navalplanner/business/costcategories/daos/TypeOfWorkHoursDAO.java index c3c1ecd26..002335882 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/costcategories/daos/TypeOfWorkHoursDAO.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/costcategories/daos/TypeOfWorkHoursDAO.java @@ -102,4 +102,27 @@ public class TypeOfWorkHoursDAO extends IntegrationEntityDAO throws InstanceNotFoundException { return findUniqueByCode(code); } + + @Override + @Transactional(readOnly = true, propagation = Propagation.REQUIRES_NEW) + public TypeOfWorkHours findUniqueByNameInAnotherTransaction(String name) + throws InstanceNotFoundException { + return findUniqueByName(name); + } + + @Override + public TypeOfWorkHours findUniqueByName(String name) + throws InstanceNotFoundException { + + Criteria c = getSession().createCriteria(TypeOfWorkHours.class); + c.add(Restrictions.eq("name", name.trim()).ignoreCase()); + + TypeOfWorkHours found = (TypeOfWorkHours) c.uniqueResult(); + if (found == null) { + throw new InstanceNotFoundException(name, TypeOfWorkHours.class + .getName()); + } + return found; + } + } diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/costcategories/entities/TypeOfWorkHours.java b/navalplanner-business/src/main/java/org/navalplanner/business/costcategories/entities/TypeOfWorkHours.java index c1bd42561..e27ee5e8d 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/costcategories/entities/TypeOfWorkHours.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/costcategories/entities/TypeOfWorkHours.java @@ -23,9 +23,11 @@ package org.navalplanner.business.costcategories.entities; import java.math.BigDecimal; import org.apache.commons.lang.StringUtils; +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.costcategories.daos.ITypeOfWorkHoursDAO; /** @@ -124,4 +126,26 @@ public class TypeOfWorkHours extends IntegrationEntity { protected ITypeOfWorkHoursDAO getIntegrationEntityDAO() { return Registry.getTypeOfWorkHoursDAO(); } + + @AssertTrue(message = "the type of work hours name has to be unique. It is already used") + public boolean checkConstraintUniqueName() { + + if (StringUtils.isBlank(name)) { + return true; + } + + try { + /* Check the constraint. */ + TypeOfWorkHours type = Registry.getTypeOfWorkHoursDAO() + .findUniqueByNameInAnotherTransaction(name); + if (isNewObject()) { + return false; + } else { + return type.getId().equals(getId()); + } + } catch (InstanceNotFoundException e) { + return true; + } + } + } diff --git a/scripts/rest-clients/type-work-hours-sample.xml b/scripts/rest-clients/type-work-hours-sample.xml index 431965275..f066575a3 100644 --- a/scripts/rest-clients/type-work-hours-sample.xml +++ b/scripts/rest-clients/type-work-hours-sample.xml @@ -1,9 +1,30 @@ - - - + + + + + + + + + + + + + + + + + + + + + + + + + + +