From 4fdd78604e0d105dee5ed9d5abdbfb184140eec3 Mon Sep 17 00:00:00 2001 From: Diego Pino Garcia Date: Thu, 30 Jul 2009 15:50:50 +0200 Subject: [PATCH] ItEr19S10CUIntroducionPartesTraballoManualmenteItEr18S11: [Fix bug] Find OrderElement by code --- .../orders/daos/IOrderElementDao.java | 12 +++++-- .../business/orders/daos/OrderElementDao.java | 36 ++++++++++++++++--- .../test/orders/daos/OrderElementDAOTest.java | 26 +++++++++++--- .../web/workreports/IWorkReportModel.java | 2 +- .../workreports/WorkReportCRUDController.java | 10 +++--- .../web/workreports/WorkReportModel.java | 10 ++++-- 6 files changed, 76 insertions(+), 20 deletions(-) diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/orders/daos/IOrderElementDao.java b/navalplanner-business/src/main/java/org/navalplanner/business/orders/daos/IOrderElementDao.java index 7a1b9ebd2..1182777c7 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/orders/daos/IOrderElementDao.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/orders/daos/IOrderElementDao.java @@ -12,16 +12,24 @@ import org.navalplanner.business.orders.entities.OrderElement; * @author Susana Montes Pedreira */ public interface IOrderElementDao extends IGenericDao { - public OrderElement findByCode(String code); + public List findByCode(String code); + + public OrderElement findUniqueByCode(String code) + throws InstanceNotFoundException; + + public List findByCodeAndParent(OrderElement parent, + String code); /** * Find an order element with the code passed as parameter * and which is a son of the parent {@link OrderElement} + * * @param parent Parent {@link OrderElement} * @param code code of the {@link OrderElement} to find * @return the {@link OrderElement} found */ - public OrderElement findByCode(OrderElement parent, String code); + public OrderElement findUniqueByCodeAndParent(OrderElement parent, + String code) throws InstanceNotFoundException; public List findParent( OrderElement orderElement); diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/orders/daos/OrderElementDao.java b/navalplanner-business/src/main/java/org/navalplanner/business/orders/daos/OrderElementDao.java index 70d416d7a..884f879d4 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/orders/daos/OrderElementDao.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/orders/daos/OrderElementDao.java @@ -13,6 +13,7 @@ import org.springframework.stereotype.Repository; /** * Dao for {@link OrderElement} + * * @author Manuel Rego Casasnovas * @author Diego Pino GarcĂ­a * @author Susana Montes Pedreira @@ -22,17 +23,42 @@ import org.springframework.stereotype.Repository; public class OrderElementDao extends GenericDaoHibernate implements IOrderElementDao { - public OrderElement findByCode(String code) { + public List findByCode(String code) { Criteria c = getSession().createCriteria(OrderElement.class); c.add(Restrictions.eq("code", code)); - return (OrderElement) c.uniqueResult(); + return (List) c.list(); } - public OrderElement findByCode(OrderElement orderElement, String code) { + public OrderElement findUniqueByCode(String code) + throws InstanceNotFoundException { + List list = findByCode(code); + if (list.size() > 1) { + throw new InstanceNotFoundException(code, OrderElement.class + .getName()); + } + return list.get(0); + } + + public List findByCodeAndParent(OrderElement parent, + String code) { Criteria c = getSession().createCriteria(OrderElement.class); c.add(Restrictions.eq("code", code)); - c.add(Restrictions.eq("parent", orderElement)); - return (OrderElement) c.uniqueResult(); + if (parent != null) { + c.add(Restrictions.eq("parent", parent)); + } else { + c.add(Restrictions.isNull("parent")); + } + return c.list(); + } + + public OrderElement findUniqueByCodeAndParent(OrderElement parent, + String code) throws InstanceNotFoundException { + List list = findByCodeAndParent(parent, code); + if (list.isEmpty() || list.size() > 1) { + throw new InstanceNotFoundException(code, OrderElement.class + .getName()); + } + return list.get(0); } @Override diff --git a/navalplanner-business/src/test/java/org/navalplanner/business/test/orders/daos/OrderElementDAOTest.java b/navalplanner-business/src/test/java/org/navalplanner/business/test/orders/daos/OrderElementDAOTest.java index 5d14259f4..e7dba6fb0 100644 --- a/navalplanner-business/src/test/java/org/navalplanner/business/test/orders/daos/OrderElementDAOTest.java +++ b/navalplanner-business/src/test/java/org/navalplanner/business/test/orders/daos/OrderElementDAOTest.java @@ -1,10 +1,12 @@ package org.navalplanner.business.test.orders.daos; import static junit.framework.Assert.assertNotNull; +import static org.junit.Assert.assertFalse; 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 java.util.List; import java.util.UUID; import org.junit.Test; @@ -68,19 +70,21 @@ public class OrderElementDAOTest { } @Test - public void testFindByCode() { + public void testFindUniqueByCode() throws InstanceNotFoundException { OrderLine orderLine = createValidOrderLine(); orderElementDAO.save(orderLine); orderLine.setCode(((Long) orderLine.getId()).toString()); orderElementDAO.save(orderLine); - OrderLine found = (OrderLine) orderElementDAO.findByCode(orderLine + OrderLine found = (OrderLine) orderElementDAO + .findUniqueByCode(orderLine .getCode()); assertTrue(found != null && found.getCode().equals(orderLine.getCode())); } @Test - public void testFindByCodeAndOrderLineGroup() { + public void testFindUniqueByCodeAndOrderLineGroup() + throws InstanceNotFoundException { // Create OrderLineGroupLine OrderLineGroup orderLineGroup = createValidOrderLineGroup(); orderElementDAO.save(orderLineGroup); @@ -94,11 +98,25 @@ public class OrderElementDAOTest { orderLine.setParent(orderLineGroup); orderElementDAO.save(orderLine); - OrderLine found = (OrderLine) orderElementDAO.findByCode( + OrderLine found = (OrderLine) orderElementDAO + .findUniqueByCodeAndParent( orderLineGroup, orderLine.getCode()); assertTrue(found != null && found.getCode().equals(orderLine.getCode())); } + @Test + public void testFindByCodeInRoot() throws InstanceNotFoundException { + // Create OrderLineGroupLine + OrderLineGroup orderLineGroup = createValidOrderLineGroup(); + orderElementDAO.save(orderLineGroup); + orderLineGroup.setCode(((Long) orderLineGroup.getId()).toString()); + orderElementDAO.save(orderLineGroup); + + List list = orderElementDAO.findByCodeAndParent(null, + orderLineGroup.getCode()); + assertFalse(list.isEmpty()); + } + @Test public void testFindDistinguishedCode() { // Create OrderLineGroupLine diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/workreports/IWorkReportModel.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/workreports/IWorkReportModel.java index a548675b3..f81c5ac26 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/workreports/IWorkReportModel.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/workreports/IWorkReportModel.java @@ -51,7 +51,7 @@ public interface IWorkReportModel { * @param code * @return */ - OrderElement findOrderElement(String code); + OrderElement findOrderElement(String code) throws InstanceNotFoundException; /** * Find a @{link Worker} by nif diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/workreports/WorkReportCRUDController.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/workreports/WorkReportCRUDController.java index 57db26b1f..e69e20564 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/workreports/WorkReportCRUDController.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/workreports/WorkReportCRUDController.java @@ -414,13 +414,13 @@ public class WorkReportCRUDController extends GenericForwardComposer implements @Override public void set(String value) { if (value.length() > 0) { - OrderElement orderElement = workReportModel - .findOrderElement(value); - if (orderElement == null) { + try { + workReportLine.setOrderElement(workReportModel + .findOrderElement(value)); + } catch (InstanceNotFoundException e) { throw new WrongValueException(txtOrder, - "OrderElement not found"); + "OrderElement not found"); } - workReportLine.setOrderElement(orderElement); } } }); diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/workreports/WorkReportModel.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/workreports/WorkReportModel.java index ec9d46bde..426c27051 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/workreports/WorkReportModel.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/workreports/WorkReportModel.java @@ -146,11 +146,15 @@ public class WorkReportModel implements IWorkReportModel { @Override @Transactional - public OrderElement findOrderElement(String orderCode) { + public OrderElement findOrderElement(String orderCode) + throws InstanceNotFoundException { String[] parts = orderCode.split("-"); - OrderElement parent = orderElementDAO.findByCode(parts[0]); + + OrderElement parent = orderElementDAO.findUniqueByCodeAndParent(null, + parts[0]); for (int i = 1; i < parts.length && parent != null; i++) { - OrderElement child = orderElementDAO.findByCode(parent, parts[i]); + OrderElement child = orderElementDAO.findUniqueByCodeAndParent( + parent, parts[i]); parent = child; }