From ec7922d4dbc52fb4efe51ed3fff3dd1b1a6bfc95 Mon Sep 17 00:00:00 2001 From: Manuel Rego Casasnovas Date: Thu, 6 Aug 2009 17:58:36 +0200 Subject: [PATCH] ItEr20S04ArquitecturaServidorItEr19S04: Removing use of OrderService. Javier Moran Rua : Some fixings in OrderModel.java --- .../business/common/IValidable.java | 21 ++++++++++++++++ .../business/orders/daos/IOrderDAO.java | 11 +++++++- .../business/orders/daos/OrderDAO.java | 8 ++++++ .../business/orders/entities/Order.java | 18 ++++++++++++- .../services/TaskElementServiceTest.java | 7 +++--- .../web/common/converters/OrderConverter.java | 8 +++--- .../navalplanner/web/orders/OrderModel.java | 25 +++++++++---------- .../web/planner/OrderPlanningModel.java | 6 ++--- 8 files changed, 80 insertions(+), 24 deletions(-) create mode 100644 navalplanner-business/src/main/java/org/navalplanner/business/common/IValidable.java diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/common/IValidable.java b/navalplanner-business/src/main/java/org/navalplanner/business/common/IValidable.java new file mode 100644 index 000000000..155645bff --- /dev/null +++ b/navalplanner-business/src/main/java/org/navalplanner/business/common/IValidable.java @@ -0,0 +1,21 @@ +package org.navalplanner.business.common; + +import org.navalplanner.business.common.exceptions.ValidationException; + +/** + * Entities implementing this interface have a method checkValid. + * This method validates the business rules of the entity. + * + * @author Manuel Rego Casasnovas + */ +public interface IValidable { + + /** + * Checks if an entity is or not valid. + * + * @throws ValidationException + * if entity is not valid. + */ + void checkValid() throws ValidationException; + +} diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/orders/daos/IOrderDAO.java b/navalplanner-business/src/main/java/org/navalplanner/business/orders/daos/IOrderDAO.java index b6b5209db..8b277bd45 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/orders/daos/IOrderDAO.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/orders/daos/IOrderDAO.java @@ -1,5 +1,7 @@ package org.navalplanner.business.orders.daos; +import java.util.List; + import org.navalplanner.business.common.daos.IGenericDAO; import org.navalplanner.business.orders.entities.Order; @@ -9,4 +11,11 @@ import org.navalplanner.business.orders.entities.Order; */ public interface IOrderDAO extends IGenericDAO { -} \ No newline at end of file + /** + * Gets all the orders. + * + * @return A {@link List} of {@link Order} objects + */ + List getOrders(); + +} diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/orders/daos/OrderDAO.java b/navalplanner-business/src/main/java/org/navalplanner/business/orders/daos/OrderDAO.java index 374645591..61db0af9d 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/orders/daos/OrderDAO.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/orders/daos/OrderDAO.java @@ -1,5 +1,7 @@ package org.navalplanner.business.orders.daos; +import java.util.List; + import org.navalplanner.business.common.daos.GenericDAOHibernate; import org.navalplanner.business.orders.entities.Order; import org.springframework.beans.factory.config.BeanDefinition; @@ -14,4 +16,10 @@ import org.springframework.stereotype.Repository; @Scope(BeanDefinition.SCOPE_SINGLETON) public class OrderDAO extends GenericDAOHibernate implements IOrderDAO { + + @Override + public List getOrders() { + return list(Order.class); + } + } \ No newline at end of file diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/Order.java b/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/Order.java index c31347e84..551176d7e 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/Order.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/Order.java @@ -8,13 +8,15 @@ import org.hibernate.validator.NotEmpty; import org.hibernate.validator.NotNull; import org.hibernate.validator.Valid; import org.navalplanner.business.common.BaseEntity; +import org.navalplanner.business.common.IValidable; +import org.navalplanner.business.common.exceptions.ValidationException; import org.navalplanner.business.planner.entities.TaskElement; /** * It represents an {@link Order} with its related information.
* @author Óscar González Fernández */ -public class Order extends BaseEntity implements IOrderLineGroup { +public class Order extends BaseEntity implements IOrderLineGroup, IValidable { private static Date copy(Date date) { return date != null ? new Date(date.getTime()) : date; @@ -143,4 +145,18 @@ public class Order extends BaseEntity implements IOrderLineGroup { return false; } + @Override + public void checkValid() throws ValidationException { + if (this.isEndDateBeforeStart()) { + throw new ValidationException("endDate must be after startDate"); + } + + for (OrderElement orderElement : this.getOrderElements()) { + if (!orderElement.checkAtLeastOneHoursGroup()) { + throw new ValidationException( + "At least one HoursGroup is needed for each OrderElement"); + } + } + } + } diff --git a/navalplanner-business/src/test/java/org/navalplanner/business/test/planner/services/TaskElementServiceTest.java b/navalplanner-business/src/test/java/org/navalplanner/business/test/planner/services/TaskElementServiceTest.java index 6580a69b7..9703139bd 100644 --- a/navalplanner-business/src/test/java/org/navalplanner/business/test/planner/services/TaskElementServiceTest.java +++ b/navalplanner-business/src/test/java/org/navalplanner/business/test/planner/services/TaskElementServiceTest.java @@ -18,12 +18,12 @@ import org.junit.Test; import org.junit.matchers.JUnitMatchers; import org.junit.runner.RunWith; import org.navalplanner.business.common.exceptions.ValidationException; +import org.navalplanner.business.orders.daos.IOrderDAO; import org.navalplanner.business.orders.entities.HoursGroup; import org.navalplanner.business.orders.entities.Order; import org.navalplanner.business.orders.entities.OrderElement; import org.navalplanner.business.orders.entities.OrderLine; import org.navalplanner.business.orders.entities.OrderLineGroup; -import org.navalplanner.business.orders.services.IOrderService; import org.navalplanner.business.planner.entities.Dependency; import org.navalplanner.business.planner.entities.Task; import org.navalplanner.business.planner.entities.TaskElement; @@ -51,7 +51,7 @@ public class TaskElementServiceTest { private SessionFactory sessionFactory; @Autowired - private IOrderService orderService; + private IOrderDAO orderDAO; private HoursGroup associatedHoursGroup; @@ -87,7 +87,8 @@ public class TaskElementServiceTest { order.setInitDate(new Date()); order.add(orderLine); try { - orderService.save(order); + order.checkValid(); + orderDAO.save(order); sessionFactory.getCurrentSession().flush(); } catch (ValidationException e) { throw new RuntimeException(e); diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/common/converters/OrderConverter.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/common/converters/OrderConverter.java index 583284fa5..b3542a7e0 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/common/converters/OrderConverter.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/common/converters/OrderConverter.java @@ -1,12 +1,13 @@ package org.navalplanner.web.common.converters; import org.navalplanner.business.common.exceptions.InstanceNotFoundException; +import org.navalplanner.business.orders.daos.IOrderDAO; import org.navalplanner.business.orders.entities.Order; -import org.navalplanner.business.orders.services.IOrderService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.config.BeanDefinition; import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; /** * A {@link IConverter} for {@link Order}
@@ -17,12 +18,13 @@ import org.springframework.stereotype.Component; public class OrderConverter implements IConverter { @Autowired - private IOrderService orderService; + private IOrderDAO orderDAO; @Override + @Transactional(readOnly = true) public Order asObject(String stringRepresentation) { try { - return orderService.find(Long.parseLong(stringRepresentation)); + return orderDAO.find(Long.parseLong(stringRepresentation)); } catch (InstanceNotFoundException e) { throw new RuntimeException(e); } 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 04a353de8..655d0cf01 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 @@ -11,10 +11,10 @@ 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.orders.daos.IOrderDAO; import org.navalplanner.business.orders.entities.IOrderLineGroup; import org.navalplanner.business.orders.entities.Order; import org.navalplanner.business.orders.entities.OrderElement; -import org.navalplanner.business.orders.services.IOrderService; import org.navalplanner.business.planner.services.ITaskElementService; import org.navalplanner.business.resources.daos.ICriterionDAO; import org.navalplanner.business.resources.entities.Criterion; @@ -45,7 +45,8 @@ public class OrderModel implements IOrderModel { private static final Map> mapCriterions = new HashMap>(); - private final IOrderService orderService; + @Autowired + private IOrderDAO orderDAO; private Order order; @@ -57,24 +58,22 @@ public class OrderModel implements IOrderModel { @Autowired private IOrderElementModel orderElementModel; - private final ITaskElementService taskElementService; - @Autowired private ICriterionDAO criterionDAO; @Autowired - public OrderModel(IOrderService orderService, - ITaskElementService taskElementService) { - Validate.notNull(orderService); + private ITaskElementService taskElementService; + + @Autowired + public OrderModel(ITaskElementService taskElementService) { Validate.notNull(taskElementService); - this.orderService = orderService; this.taskElementService = taskElementService; } @Override @Transactional(readOnly = true) public List getOrders() { - return orderService.getOrders(); + return orderDAO.getOrders(); } private void loadCriterions() { @@ -99,7 +98,7 @@ public class OrderModel implements IOrderModel { private Order getFromDB(Order order) { try { - return orderService.find(order.getId()); + return orderDAO.find(order.getId()); } catch (InstanceNotFoundException e) { throw new RuntimeException(e); } @@ -121,8 +120,7 @@ public class OrderModel implements IOrderModel { InvalidValue[] invalidValues = orderValidator.getInvalidValues(order); if (invalidValues.length > 0) throw new ValidationException(invalidValues); - - this.orderService.save(order); + this.orderDAO.save(order); } private void reattachCriterions() { @@ -139,9 +137,10 @@ public class OrderModel implements IOrderModel { } @Override + @Transactional public void remove(Order order) { try { - this.orderService.remove(order); + this.orderDAO.remove(order.getId()); } catch (InstanceNotFoundException e) { throw new RuntimeException(e); } diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/OrderPlanningModel.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/OrderPlanningModel.java index 0fcb4327a..49a8cfa72 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/OrderPlanningModel.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/OrderPlanningModel.java @@ -7,8 +7,8 @@ import java.util.List; import java.util.Set; import org.navalplanner.business.common.exceptions.InstanceNotFoundException; +import org.navalplanner.business.orders.daos.IOrderDAO; import org.navalplanner.business.orders.entities.Order; -import org.navalplanner.business.orders.services.IOrderService; import org.navalplanner.business.planner.entities.TaskElement; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.config.BeanDefinition; @@ -26,7 +26,7 @@ import org.zkoss.ganttz.adapters.PlannerConfiguration; public abstract class OrderPlanningModel implements IOrderPlanningModel { @Autowired - private IOrderService orderService; + private IOrderDAO orderDAO; private PlanningState planningState; @@ -160,7 +160,7 @@ public abstract class OrderPlanningModel implements IOrderPlanningModel { private Order reload(Order order) { try { - return orderService.find(order.getId()); + return orderDAO.find(order.getId()); } catch (InstanceNotFoundException e) { throw new RuntimeException(e); }