From acede8c059bcce17c985bf0691eedd6938d0f991 Mon Sep 17 00:00:00 2001 From: Manuel Rego Casasnovas Date: Fri, 7 Aug 2009 10:27:41 +0200 Subject: [PATCH] ItEr20S04ArquitecturaServidorItEr19S04: Removed OrderService and OrderServiceTest. Created a new OrderModelTest. --- .../orders/services/IOrderService.java | 28 ----- .../orders/services/OrderService.java | 70 ------------ .../navalplanner/web/orders/IOrderModel.java | 5 + .../navalplanner/web/orders/OrderModel.java | 15 +++ .../web/orders/OrderModelTest.java | 103 +++++++++++------- 5 files changed, 85 insertions(+), 136 deletions(-) delete mode 100644 navalplanner-business/src/main/java/org/navalplanner/business/orders/services/IOrderService.java delete mode 100644 navalplanner-business/src/main/java/org/navalplanner/business/orders/services/OrderService.java rename navalplanner-business/src/test/java/org/navalplanner/business/test/orders/services/OrderServiceTest.java => navalplanner-webapp/src/test/java/org/navalplanner/web/orders/OrderModelTest.java (80%) diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/orders/services/IOrderService.java b/navalplanner-business/src/main/java/org/navalplanner/business/orders/services/IOrderService.java deleted file mode 100644 index 3b8bce09f..000000000 --- a/navalplanner-business/src/main/java/org/navalplanner/business/orders/services/IOrderService.java +++ /dev/null @@ -1,28 +0,0 @@ -package org.navalplanner.business.orders.services; - -import java.util.List; - -import org.navalplanner.business.common.IOnTransaction; -import org.navalplanner.business.common.exceptions.InstanceNotFoundException; -import org.navalplanner.business.common.exceptions.ValidationException; -import org.navalplanner.business.orders.entities.Order; - -/** - * Management of {@link Order}
- * @author Óscar González Fernández - */ -public interface IOrderService { - - void save(Order order) throws ValidationException; - - boolean exists(Order HoursGroup); - - List getOrders(); - - void remove(Order HoursGroup) throws InstanceNotFoundException; - - Order find(Long workerId) throws InstanceNotFoundException; - - public T onTransaction(IOnTransaction onTransaction); - -} diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/orders/services/OrderService.java b/navalplanner-business/src/main/java/org/navalplanner/business/orders/services/OrderService.java deleted file mode 100644 index b808d2862..000000000 --- a/navalplanner-business/src/main/java/org/navalplanner/business/orders/services/OrderService.java +++ /dev/null @@ -1,70 +0,0 @@ -package org.navalplanner.business.orders.services; - -import java.util.List; - -import org.navalplanner.business.common.IOnTransaction; -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.Order; -import org.navalplanner.business.orders.entities.OrderElement; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.config.BeanDefinition; -import org.springframework.context.annotation.Scope; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -/** - * Default implementation of {@link IOrderService}
- * @author Óscar González Fernández - * @author Fernando Bellas Permuy - */ -@Service -@Scope(BeanDefinition.SCOPE_SINGLETON) -@Transactional -public class OrderService implements IOrderService { - - @Autowired - private IOrderDAO orderDAO; - - @Override - @Transactional(readOnly = true) - public boolean exists(Order order) { - return orderDAO.exists(order.getId()); - } - - @Override - public void save(Order order) throws ValidationException { - if (order.isEndDateBeforeStart()) { - throw new ValidationException("endDate must be after startDate"); - } - for (OrderElement orderElement : order.getOrderElements()) { - if (!orderElement.checkAtLeastOneHoursGroup()) { - throw new ValidationException( - "At least one HoursGroup is needed for each OrderElement"); - } - } - orderDAO.save(order); - } - - @Override - public List getOrders() { - return orderDAO.list(Order.class); - } - - @Override - public Order find(Long orderId) throws InstanceNotFoundException { - return orderDAO.find(orderId); - } - - @Override - public void remove(Order order) throws InstanceNotFoundException { - orderDAO.remove(order.getId()); - } - - @Override - public T onTransaction(IOnTransaction onTransaction) { - return onTransaction.execute(); - } - -} diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/IOrderModel.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/IOrderModel.java index 54d2091f4..0337e77f5 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/IOrderModel.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/IOrderModel.java @@ -2,6 +2,7 @@ package org.navalplanner.web.orders; import java.util.List; +import org.navalplanner.business.common.IOnTransaction; import org.navalplanner.business.common.exceptions.ValidationException; import org.navalplanner.business.orders.entities.IOrderLineGroup; import org.navalplanner.business.orders.entities.Order; @@ -37,4 +38,8 @@ public interface IOrderModel { boolean isAlreadyScheduled(Order order); + T onTransaction(IOnTransaction onTransaction); + + void setOrder(Order order); + } 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 655d0cf01..4b3404298 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 @@ -9,6 +9,7 @@ import java.util.Map; import org.apache.commons.lang.Validate; import org.hibernate.validator.ClassValidator; import org.hibernate.validator.InvalidValue; +import org.navalplanner.business.common.IOnTransaction; import org.navalplanner.business.common.exceptions.InstanceNotFoundException; import org.navalplanner.business.common.exceptions.ValidationException; import org.navalplanner.business.orders.daos.IOrderDAO; @@ -120,6 +121,8 @@ public class OrderModel implements IOrderModel { InvalidValue[] invalidValues = orderValidator.getInvalidValues(order); if (invalidValues.length > 0) throw new ValidationException(invalidValues); + + order.checkValid(); this.orderDAO.save(order); } @@ -184,4 +187,16 @@ public class OrderModel implements IOrderModel { public List getCriterionsFor(CriterionType criterionType) { return mapCriterions.get(criterionType); } + + @Override + @Transactional + public T onTransaction(IOnTransaction onTransaction) { + return onTransaction.execute(); + } + + @Override + public void setOrder(Order order) { + this.order = order; + } + } diff --git a/navalplanner-business/src/test/java/org/navalplanner/business/test/orders/services/OrderServiceTest.java b/navalplanner-webapp/src/test/java/org/navalplanner/web/orders/OrderModelTest.java similarity index 80% rename from navalplanner-business/src/test/java/org/navalplanner/business/test/orders/services/OrderServiceTest.java rename to navalplanner-webapp/src/test/java/org/navalplanner/web/orders/OrderModelTest.java index a6f70d7ad..1c5a7f5a4 100644 --- a/navalplanner-business/src/test/java/org/navalplanner/business/test/orders/services/OrderServiceTest.java +++ b/navalplanner-webapp/src/test/java/org/navalplanner/web/orders/OrderModelTest.java @@ -1,4 +1,4 @@ -package org.navalplanner.business.test.orders.services; +package org.navalplanner.web.orders; import static org.hamcrest.CoreMatchers.equalTo; import static org.hamcrest.CoreMatchers.notNullValue; @@ -6,8 +6,11 @@ import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertThat; import static org.junit.Assert.assertTrue; import static org.navalplanner.business.BusinessGlobalNames.BUSINESS_SPRING_CONFIG_FILE; -import static org.navalplanner.business.test.BusinessGlobalNames.BUSINESS_SPRING_CONFIG_TEST_FILE; +import static org.navalplanner.web.WebappGlobalNames.WEBAPP_SPRING_CONFIG_FILE; +import static org.navalplanner.web.test.WebappGlobalNames.WEBAPP_SPRING_CONFIG_TEST_FILE; +import java.util.Calendar; +import java.util.Date; import java.util.List; import java.util.Set; import java.util.UUID; @@ -19,19 +22,18 @@ import org.junit.runner.RunWith; import org.navalplanner.business.common.IOnTransaction; 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.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.Task; import org.navalplanner.business.planner.entities.TaskElement; import org.navalplanner.business.planner.services.ITaskElementService; 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.test.resources.daos.CriterionSatisfactionDAOTest; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.test.annotation.NotTransactional; import org.springframework.test.context.ContextConfiguration; @@ -39,27 +41,37 @@ import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import org.springframework.transaction.annotation.Transactional; /** - * Tests for {@link Order}.
+ * Tests for {@link OrderModel}.
+ * * @author Óscar González Fernández + * @author Manuel Rego Casasnovas */ @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations = { BUSINESS_SPRING_CONFIG_FILE, - BUSINESS_SPRING_CONFIG_TEST_FILE }) + WEBAPP_SPRING_CONFIG_FILE, + WEBAPP_SPRING_CONFIG_TEST_FILE }) @Transactional -public class OrderServiceTest { +public class OrderModelTest { + + public static Date year(int year) { + Calendar calendar = Calendar.getInstance(); + calendar.clear(); + calendar.set(Calendar.YEAR, year); + return calendar.getTime(); + } private static Order createValidOrder() { Order order = new Order(); order.setDescription("description"); order.setCustomer("blabla"); - order.setInitDate(CriterionSatisfactionDAOTest.year(2000)); + order.setInitDate(year(2000)); order.setName("name"); order.setResponsible("responsible"); return order; } @Autowired - private IOrderService orderService; + private IOrderModel orderModel; @Autowired private ITaskElementService taskElementService; @@ -67,6 +79,9 @@ public class OrderServiceTest { @Autowired private ICriterionService criterionService; + @Autowired + private IOrderDAO orderDAO; + @Autowired private SessionFactory sessionFactory; @@ -77,24 +92,28 @@ public class OrderServiceTest { @Test public void testCreation() throws ValidationException { Order order = createValidOrder(); - orderService.save(order); - assertTrue(orderService.exists(order)); + orderModel.setOrder(order); + orderModel.save(); + assertTrue(orderDAO.exists(order.getId())); } @Test public void testListing() throws Exception { - List list = orderService.getOrders(); - orderService.save(createValidOrder()); - assertThat(orderService.getOrders().size(), equalTo(list.size() + 1)); + List list = orderModel.getOrders(); + Order order = createValidOrder(); + orderModel.setOrder(order); + orderModel.save(); + assertThat(orderModel.getOrders().size(), equalTo(list.size() + 1)); } @Test public void testRemove() throws Exception { Order order = createValidOrder(); - orderService.save(order); - assertTrue(orderService.exists(order)); - orderService.remove(order); - assertFalse(orderService.exists(order)); + orderModel.setOrder(order); + orderModel.save(); + assertTrue(orderDAO.exists(order.getId())); + orderModel.remove(order); + assertFalse(orderDAO.exists(order.getId())); } @Test @@ -106,11 +125,12 @@ public class OrderServiceTest { orderLine.setCode("00000000"); orderLine.setWorkHours(10); order.add(orderLine); - orderService.save(order); + orderModel.setOrder(order); + orderModel.save(); taskElementService.convertToScheduleAndSave(order); getSession().flush(); getSession().evict(order); - Order reloaded = orderService.find(order.getId()); + Order reloaded = orderDAO.find(order.getId()); OrderElement e = reloaded.getOrderElements().iterator().next(); assertThat(e.getTaskElements().size(), equalTo(1)); Set taskElements = e.getTaskElements(); @@ -121,23 +141,26 @@ public class OrderServiceTest { task.getOrderElement().dontPoseAsTransientObjectAnymore(); } } - orderService.remove(reloaded); - assertFalse(orderService.exists(reloaded)); + orderModel.remove(reloaded); + orderModel.setOrder(reloaded); + assertFalse(orderDAO.exists(order.getId())); } @Test(expected = ValidationException.class) public void shouldSendValidationExceptionIfEndDateIsBeforeThanStartingDate() throws ValidationException { Order order = createValidOrder(); - order.setEndDate(CriterionSatisfactionDAOTest.year(0)); - orderService.save(order); + order.setEndDate(year(0)); + orderModel.setOrder(order); + orderModel.save(); } @Test public void testFind() throws Exception { Order order = createValidOrder(); - orderService.save(order); - assertThat(orderService.find(order.getId()), notNullValue()); + orderModel.setOrder(order); + orderModel.save(); + assertThat(orderDAO.find(order.getId()), notNullValue()); } @Test @@ -167,13 +190,14 @@ public class OrderServiceTest { orderLineGroup.add(leaf); } - orderService.save(order); - orderService.onTransaction(new IOnTransaction() { + orderModel.setOrder(order); + orderModel.save(); + orderModel.onTransaction(new IOnTransaction() { @Override public Void execute() { try { - Order reloaded = orderService.find(order.getId()); + Order reloaded = orderDAO.find(order.getId()); List elements = reloaded.getOrderElements(); for (int i = 0; i < containers.length; i++) { assertThat(elements.get(i).getId(), @@ -198,7 +222,7 @@ public class OrderServiceTest { } }); - orderService.remove(order); + orderModel.remove(order); } private OrderLine createValidLeaf(String parameter) { @@ -228,13 +252,14 @@ public class OrderServiceTest { HoursGroup hoursGroup = HoursGroup.create(leaf); hoursGroup.setWorkingHours(3); leaf.addHoursGroup(hoursGroup); - orderService.save(order); - orderService.onTransaction(new IOnTransaction() { + orderModel.setOrder(order); + orderModel.save(); + orderModel.onTransaction(new IOnTransaction() { @Override public Void execute() { try { - Order reloaded = orderService.find(order.getId()); + Order reloaded = orderDAO.find(order.getId()); assertFalse(order == reloaded); assertThat(reloaded.getOrderElements().size(), equalTo(1)); OrderLineGroup containerReloaded = (OrderLineGroup) reloaded @@ -245,7 +270,7 @@ public class OrderServiceTest { equalTo(1)); OrderElement leaf = containerReloaded.getChildren().get(0); assertThat(leaf.getHoursGroups().size(), equalTo(1)); - orderService.remove(order); + orderModel.remove(order); } catch (InstanceNotFoundException e) { throw new RuntimeException(e); } @@ -280,14 +305,15 @@ public class OrderServiceTest { hoursGroup.addCriterion(criterion); hoursGroup2.addCriterion(criterion); - orderService.save(order); + orderModel.setOrder(order); + orderModel.save(); - orderService.onTransaction(new IOnTransaction() { + orderModel.onTransaction(new IOnTransaction() { @Override public Void execute() { try { - Order reloaded = orderService.find(order.getId()); + Order reloaded = orderDAO.find(order.getId()); List orderElements = reloaded .getOrderElements(); @@ -322,7 +348,8 @@ public class OrderServiceTest { orderLine.setCode("000000000"); order.add(orderLine); - orderService.save(order); + orderModel.setOrder(order); + orderModel.save(); } }