From 13f19fa1a5af8cb1ea59b1a41f4b6089a11c07be Mon Sep 17 00:00:00 2001 From: Manuel Rego Casasnovas Date: Mon, 10 Aug 2009 14:00:25 +0200 Subject: [PATCH] ItEr21S04ArquitecturaServidorItEr20S04: Removed use of ICriterionTypeService. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Óscar González Fernández Refactored some code in CriterionsBootstrap. Some catchs that did nothing now throw an exception. --- .../bootstrap/CriterionsBootstrap.java | 57 +++++++++++-------- .../resources/daos/CriterionTypeDAO.java | 6 ++ .../resources/daos/ICriterionTypeDAO.java | 2 + .../resources/entities/CriterionType.java | 5 -- .../services/CriterionServiceImpl.java | 15 +++-- .../services/CriterionTypeServiceImpl.java | 1 - .../services/ICriterionTypeService.java | 3 - .../services/ResourceServiceImpl.java | 6 +- .../workreports/entities/WorkReportType.java | 2 +- .../web/orders/OrderElementModel.java | 9 ++- .../navalplanner/web/orders/OrderModel.java | 8 ++- .../resources/criterion/CriterionsModel.java | 9 +-- .../web/workreports/WorkReportTypeModel.java | 7 ++- 13 files changed, 73 insertions(+), 57 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 e10e8106e..620662992 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 @@ -6,13 +6,16 @@ import java.util.List; import java.util.Map; import java.util.Map.Entry; +import javax.management.RuntimeErrorException; + import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.navalplanner.business.common.exceptions.InstanceNotFoundException; import org.navalplanner.business.common.exceptions.ValidationException; +import org.navalplanner.business.resources.daos.ICriterionTypeDAO; import org.navalplanner.business.resources.entities.Criterion; import org.navalplanner.business.resources.entities.CriterionType; import org.navalplanner.business.resources.services.ICriterionService; -import org.navalplanner.business.resources.services.ICriterionTypeService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Component; @@ -34,7 +37,7 @@ public class CriterionsBootstrap implements ICriterionsBootstrap { private ICriterionService criterionService; @Autowired - private ICriterionTypeService criterionTypeService; + private ICriterionTypeDAO criterionTypeDAO; @Autowired private List providers; @@ -45,40 +48,44 @@ public class CriterionsBootstrap implements ICriterionsBootstrap { @Override @Transactional public void loadRequiredData() { - LOG.debug("### loadRequiredData()"); - Map> typesWithCriterions = getTypesWithCriterions(); // Insert predefined criterions for (Entry> entry : typesWithCriterions.entrySet()) { - // Create PredefinedCriterionType - CriterionType criterionType = entry.getKey(); - try { - criterionTypeService.createIfNotExists(criterionType); - } catch (ValidationException e) { - - } - // Retrieve existing criterionType if not exists - if (criterionType.getId() == null) { - criterionType = criterionTypeService.findUniqueByName(criterionType.getName()); - } - + CriterionType criterionType = retrieveOrCreate(entry.getKey()); // Create predefined criterions for criterionType for (String criterionName : entry.getValue()) { - try { - Criterion criterion = new Criterion(criterionName, criterionType); - criterionService.createIfNotExists(criterion); - - LOG.debug("### Create criterion: (" + criterionName + - "; " + criterionType.getName()); - } catch (ValidationException e) { - e.printStackTrace(); - } + ensureCriterionExists(criterionName, criterionType); } } } + private void ensureCriterionExists(String criterionName, + CriterionType criterionType) { + try { + Criterion criterion = new Criterion(criterionName, criterionType); + criterionService.createIfNotExists(criterion); + } catch (ValidationException e) { + throw new RuntimeException(e); + } + } + + private CriterionType retrieveOrCreate(CriterionType criterionType) { + if (!criterionTypeDAO.exists(criterionType.getId()) + && !criterionTypeDAO.existsByName(criterionType)) { + criterionTypeDAO.save(criterionType); + }else{ + try { + criterionType = criterionTypeDAO + .findUniqueByName(criterionType.getName()); + } catch (InstanceNotFoundException e) { + throw new RuntimeException(e); + } + } + return criterionType; + } + private Map> getTypesWithCriterions() { HashMap> result = new HashMap>(); for (ICriterionTypeProvider provider : providers) { 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 0b347d477..5c53c68d8 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 @@ -64,4 +64,10 @@ public class CriterionTypeDAO extends GenericDAOHibernate throw new RuntimeException(ex); } } + + @Override + public List getCriterionTypes() { + return list(CriterionType.class); + } + } 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 7a5f2bb64..dad5a254d 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 @@ -23,4 +23,6 @@ public interface ICriterionTypeDAO extends IGenericDAO { public boolean existsByName(CriterionType criterionType); public void removeByName(CriterionType criterionType); + + List getCriterionTypes(); } diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/resources/entities/CriterionType.java b/navalplanner-business/src/main/java/org/navalplanner/business/resources/entities/CriterionType.java index 980713102..f9fa23f4a 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/resources/entities/CriterionType.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/resources/entities/CriterionType.java @@ -5,8 +5,6 @@ import java.util.Set; import org.apache.commons.lang.builder.EqualsBuilder; import org.hibernate.validator.NotEmpty; import org.navalplanner.business.common.BaseEntity; -import org.navalplanner.business.resources.services.ICriterionTypeService; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; /** @@ -18,9 +16,6 @@ import org.springframework.stereotype.Component; public class CriterionType extends BaseEntity implements ICriterionType { - @Autowired - ICriterionTypeService criterionTypeService; - @NotEmpty private String name; diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/resources/services/CriterionServiceImpl.java b/navalplanner-business/src/main/java/org/navalplanner/business/resources/services/CriterionServiceImpl.java index 695b31a9a..302b6f91d 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/resources/services/CriterionServiceImpl.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/resources/services/CriterionServiceImpl.java @@ -11,6 +11,7 @@ import org.navalplanner.business.common.exceptions.InstanceNotFoundException; import org.navalplanner.business.common.exceptions.ValidationException; import org.navalplanner.business.resources.daos.CriterionDAO; import org.navalplanner.business.resources.daos.ICriterionDAO; +import org.navalplanner.business.resources.daos.ICriterionTypeDAO; import org.navalplanner.business.resources.entities.Criterion; import org.navalplanner.business.resources.entities.CriterionSatisfaction; import org.navalplanner.business.resources.entities.CriterionType; @@ -44,7 +45,7 @@ public class CriterionServiceImpl implements ICriterionService { private IResourceService resourceService; @Autowired - private ICriterionTypeService criterionTypeService; + private ICriterionTypeDAO criterionTypeDAO; public boolean exists(Criterion criterion) { return criterionDAO.exists(criterion.getId()) @@ -91,10 +92,16 @@ public class CriterionServiceImpl implements ICriterionService { } private CriterionType saveCriterionType(CriterionType criterionType) throws ValidationException { - if (criterionTypeService.exists(criterionType)) { - criterionType = criterionTypeService.findUniqueByName(criterionType.getName()); + if (criterionTypeDAO.exists(criterionType.getId()) + || criterionTypeDAO.existsByName(criterionType)) { + try { + criterionType = criterionTypeDAO + .findUniqueByName(criterionType.getName()); + } catch (InstanceNotFoundException e) { + throw new RuntimeException(e); + } } else { - criterionTypeService.save(criterionType); + criterionTypeDAO.save(criterionType); } return criterionType; diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/resources/services/CriterionTypeServiceImpl.java b/navalplanner-business/src/main/java/org/navalplanner/business/resources/services/CriterionTypeServiceImpl.java index 4bf06dc37..5b601dd0a 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/resources/services/CriterionTypeServiceImpl.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/resources/services/CriterionTypeServiceImpl.java @@ -53,7 +53,6 @@ public class CriterionTypeServiceImpl implements ICriterionTypeService { return criterionTypeDAO.list(CriterionType.class); } - @Override public void remove(CriterionType criterionType) throws InstanceNotFoundException { if (criterionType.getId() != null ) { criterionTypeDAO.remove(criterionType.getId()); diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/resources/services/ICriterionTypeService.java b/navalplanner-business/src/main/java/org/navalplanner/business/resources/services/ICriterionTypeService.java index 93574d0a5..a5aa2e49c 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/resources/services/ICriterionTypeService.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/resources/services/ICriterionTypeService.java @@ -3,7 +3,6 @@ package org.navalplanner.business.resources.services; import java.util.List; -import org.navalplanner.business.common.exceptions.InstanceNotFoundException; import org.navalplanner.business.resources.entities.CriterionType; /** @@ -22,8 +21,6 @@ public interface ICriterionTypeService { List getAll(); - void remove(CriterionType criterionType) throws InstanceNotFoundException; - void save(CriterionType entity); } diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/resources/services/ResourceServiceImpl.java b/navalplanner-business/src/main/java/org/navalplanner/business/resources/services/ResourceServiceImpl.java index fad2dc3e4..7aa1e9285 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/resources/services/ResourceServiceImpl.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/resources/services/ResourceServiceImpl.java @@ -5,7 +5,7 @@ import java.util.List; import java.util.Set; import org.navalplanner.business.common.exceptions.InstanceNotFoundException; -import org.navalplanner.business.resources.bootstrap.ICriterionsBootstrap; +import org.navalplanner.business.resources.daos.ICriterionTypeDAO; import org.navalplanner.business.resources.daos.IResourceDAO; import org.navalplanner.business.resources.entities.CriterionType; import org.navalplanner.business.resources.entities.ICriterion; @@ -31,7 +31,7 @@ public class ResourceServiceImpl implements IResourceService { private IResourceDAO resourceDao; @Autowired - private ICriterionTypeService criterionTypeService; + private ICriterionTypeDAO criterionTypeDAO; @Transactional @@ -46,7 +46,7 @@ public class ResourceServiceImpl implements IResourceService { } private void checkResourceIsOk(Resource resource) { - List types = criterionTypeService.getAll(); + List types = criterionTypeDAO.getCriterionTypes(); resource.checkNotOverlaps(types); } diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/workreports/entities/WorkReportType.java b/navalplanner-business/src/main/java/org/navalplanner/business/workreports/entities/WorkReportType.java index cc9aa045b..64d9cd2e0 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/workreports/entities/WorkReportType.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/workreports/entities/WorkReportType.java @@ -14,7 +14,7 @@ public class WorkReportType extends BaseEntity { private String name; - private Set criterionTypes; + private Set criterionTypes = new HashSet(); public WorkReportType() { diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/OrderElementModel.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/OrderElementModel.java index 4f50e06d9..47abad1fa 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/OrderElementModel.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/OrderElementModel.java @@ -9,12 +9,9 @@ import java.util.Set; import org.navalplanner.business.orders.daos.IOrderElementDAO; import org.navalplanner.business.orders.entities.HoursGroup; import org.navalplanner.business.orders.entities.OrderElement; -import org.navalplanner.business.resources.bootstrap.ICriterionsBootstrap; import org.navalplanner.business.resources.daos.ICriterionTypeDAO; import org.navalplanner.business.resources.entities.Criterion; import org.navalplanner.business.resources.entities.CriterionType; -import org.navalplanner.business.resources.services.ICriterionService; -import org.navalplanner.business.resources.services.ICriterionTypeService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.config.BeanDefinition; import org.springframework.context.annotation.Scope; @@ -36,7 +33,7 @@ public class OrderElementModel implements IOrderElementModel { private ICriterionTypeDAO criterionTypeDao; @Autowired - private ICriterionTypeService criterionTypeService; + private ICriterionTypeDAO criterionTypeDAO; private Map mapCriterionTypes = new HashMap(); @@ -59,6 +56,7 @@ public class OrderElementModel implements IOrderElementModel { } @Override + @Transactional(readOnly = true) public List getCriterionTypes() { List result = new ArrayList(); @@ -70,6 +68,7 @@ public class OrderElementModel implements IOrderElementModel { } @Override + @Transactional(readOnly = true) public CriterionType getCriterionTypeByName(String name) { if (mapCriterionTypes.isEmpty()) loadCriterionTypes(); @@ -78,7 +77,7 @@ public class OrderElementModel implements IOrderElementModel { } private void loadCriterionTypes() { - for (CriterionType criterionType : criterionTypeService.getAll()) { + for (CriterionType criterionType : criterionTypeDAO.getCriterionTypes()) { mapCriterionTypes.put(criterionType.getName(), criterionType); } } diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/OrderModel.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/OrderModel.java index 562eae7d6..8778589fa 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/OrderModel.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/OrderModel.java @@ -17,10 +17,10 @@ import org.navalplanner.business.orders.entities.Order; import org.navalplanner.business.orders.entities.OrderElement; import org.navalplanner.business.planner.services.ITaskElementService; import org.navalplanner.business.resources.daos.ICriterionDAO; +import org.navalplanner.business.resources.daos.ICriterionTypeDAO; import org.navalplanner.business.resources.entities.Criterion; import org.navalplanner.business.resources.entities.CriterionType; import org.navalplanner.business.resources.services.ICriterionService; -import org.navalplanner.business.resources.services.ICriterionTypeService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.config.BeanDefinition; import org.springframework.context.annotation.Scope; @@ -41,7 +41,7 @@ public class OrderModel implements IOrderModel { ICriterionService criterionService; @Autowired - ICriterionTypeService criterionTypeService; + ICriterionTypeDAO criterionTypeDAO; private static final Map> mapCriterions = new HashMap>(); @@ -78,7 +78,8 @@ public class OrderModel implements IOrderModel { private void loadCriterions() { mapCriterions.clear(); - List criterionTypes = criterionTypeService.getAll(); + List criterionTypes = criterionTypeDAO + .getCriterionTypes(); for (CriterionType criterionType : criterionTypes) { List criterions = new ArrayList( criterionService.getCriterionsFor(criterionType)); @@ -105,6 +106,7 @@ public class OrderModel implements IOrderModel { } @Override + @Transactional(readOnly = true) public void prepareForCreate() { loadCriterions(); diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/resources/criterion/CriterionsModel.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/resources/criterion/CriterionsModel.java index 7730415d6..f98ebdba5 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/resources/criterion/CriterionsModel.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/resources/criterion/CriterionsModel.java @@ -11,7 +11,7 @@ import org.hibernate.validator.ClassValidator; import org.hibernate.validator.InvalidValue; import org.navalplanner.business.common.exceptions.InstanceNotFoundException; import org.navalplanner.business.common.exceptions.ValidationException; -import org.navalplanner.business.resources.bootstrap.ICriterionsBootstrap; +import org.navalplanner.business.resources.daos.ICriterionTypeDAO; import org.navalplanner.business.resources.entities.Criterion; import org.navalplanner.business.resources.entities.CriterionType; import org.navalplanner.business.resources.entities.CriterionWithItsType; @@ -19,7 +19,6 @@ import org.navalplanner.business.resources.entities.ICriterionType; import org.navalplanner.business.resources.entities.Resource; import org.navalplanner.business.resources.entities.Worker; import org.navalplanner.business.resources.services.ICriterionService; -import org.navalplanner.business.resources.services.ICriterionTypeService; import org.navalplanner.business.resources.services.IResourceService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.config.BeanDefinition; @@ -44,7 +43,7 @@ public class CriterionsModel implements ICriterionsModel { private ICriterionService criterionService; @Autowired - private ICriterionTypeService criterionTypeService; + private ICriterionTypeDAO criterionDAO; @Autowired private IResourceService resourceService; @@ -56,7 +55,7 @@ public class CriterionsModel implements ICriterionsModel { @Override @Transactional(readOnly = true) public List getTypes() { - return criterionTypeService.getAll(); + return criterionDAO.getCriterionTypes(); } @Override @@ -85,6 +84,7 @@ public class CriterionsModel implements ICriterionsModel { } @Override + @Transactional(readOnly = true) public ICriterionType getTypeFor(Criterion criterion) { for (ICriterionType criterionType : getTypes()) { if (criterionType.contains(criterion)) @@ -116,6 +116,7 @@ public class CriterionsModel implements ICriterionsModel { } @Override + @Transactional(readOnly = true) public boolean isApplyableToWorkers(Criterion criterion) { ICriterionType type = getTypeFor(criterion); return type != null && type.criterionCanBeRelatedTo(Worker.class); diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/workreports/WorkReportTypeModel.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/workreports/WorkReportTypeModel.java index 1396abbcd..8f7757ad8 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/workreports/WorkReportTypeModel.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/workreports/WorkReportTypeModel.java @@ -9,8 +9,8 @@ import org.hibernate.validator.ClassValidator; import org.hibernate.validator.InvalidValue; import org.navalplanner.business.common.exceptions.InstanceNotFoundException; import org.navalplanner.business.common.exceptions.ValidationException; +import org.navalplanner.business.resources.daos.ICriterionTypeDAO; import org.navalplanner.business.resources.entities.CriterionType; -import org.navalplanner.business.resources.services.ICriterionTypeService; import org.navalplanner.business.workreports.daos.IWorkReportTypeDAO; import org.navalplanner.business.workreports.entities.WorkReportType; import org.springframework.beans.factory.annotation.Autowired; @@ -30,7 +30,7 @@ import org.springframework.transaction.annotation.Transactional; public class WorkReportTypeModel implements IWorkReportTypeModel { @Autowired - private ICriterionTypeService criterionTypeService; + private ICriterionTypeDAO criterionTypeDAO; @Autowired private IWorkReportTypeDAO workReportTypeDAO; @@ -117,8 +117,9 @@ public class WorkReportTypeModel implements IWorkReportTypeModel { } @Override + @Transactional(readOnly = true) public Set getCriterionTypes() { - return new HashSet(criterionTypeService.getAll()); + return new HashSet(criterionTypeDAO.getCriterionTypes()); } @Override