From f5316e0882873a05f1af71268c8c8d4585238579 Mon Sep 17 00:00:00 2001 From: Diego Pino Garcia Date: Thu, 30 Jul 2009 13:34:27 +0200 Subject: [PATCH] ItEr19S10CUIntroducionPartesTraballoManualmenteItEr18S11 [Fix bug] Show distinguished code for OrderElement --- .../orders/daos/IOrderElementDao.java | 12 +++++++ .../business/orders/daos/OrderElementDao.java | 13 ++++++++ .../test/orders/daos/OrderElementDAOTest.java | 32 +++++++++++++++++++ .../web/workreports/IWorkReportModel.java | 9 ++++++ .../workreports/WorkReportCRUDController.java | 12 +++++-- .../web/workreports/WorkReportModel.java | 7 ++++ 6 files changed, 82 insertions(+), 3 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 1712ac5bc..7a1b9ebd2 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 @@ -2,6 +2,7 @@ package org.navalplanner.business.orders.daos; import java.util.List; import org.navalplanner.business.common.daos.IGenericDao; +import org.navalplanner.business.common.exceptions.InstanceNotFoundException; import org.navalplanner.business.orders.entities.OrderElement; /** @@ -21,6 +22,17 @@ public interface IOrderElementDao extends IGenericDao { * @return the {@link OrderElement} found */ public OrderElement findByCode(OrderElement parent, String code); + public List findParent( OrderElement orderElement); + + /** + * Returns the unique code that distinguishes an OrderElement (unique path + * from root to OrderElement) + * + * @param orderElement must be attached + * @return + */ + public String getDistinguishedCode(OrderElement orderElement) + throws InstanceNotFoundException; } 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 b0af09670..70d416d7a 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 @@ -5,6 +5,7 @@ import java.util.List; import org.hibernate.Criteria; import org.hibernate.criterion.Restrictions; import org.navalplanner.business.common.daos.impl.GenericDaoHibernate; +import org.navalplanner.business.common.exceptions.InstanceNotFoundException; import org.navalplanner.business.orders.entities.OrderElement; import org.springframework.beans.factory.config.BeanDefinition; import org.springframework.context.annotation.Scope; @@ -41,4 +42,16 @@ public class OrderElementDao extends GenericDaoHibernate Restrictions.idEq(orderElement.getId())); return ((List) c.list()); } + + public String getDistinguishedCode(OrderElement orderElement) + throws InstanceNotFoundException { + String code = orderElement.getCode(); + + while (orderElement.getParent() != null) { + OrderElement parent = find(orderElement.getParent().getId()); + code = parent.getCode() + "-" + code; + orderElement = parent; + } + return code; + } } 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 0373cce16..5d14259f4 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 @@ -9,7 +9,9 @@ import java.util.UUID; import org.junit.Test; import org.junit.runner.RunWith; +import org.navalplanner.business.common.exceptions.InstanceNotFoundException; import org.navalplanner.business.orders.daos.IOrderElementDao; +import org.navalplanner.business.orders.entities.OrderElement; import org.navalplanner.business.orders.entities.OrderLine; import org.navalplanner.business.orders.entities.OrderLineGroup; import org.springframework.beans.factory.annotation.Autowired; @@ -96,4 +98,34 @@ public class OrderElementDAOTest { orderLineGroup, orderLine.getCode()); assertTrue(found != null && found.getCode().equals(orderLine.getCode())); } + + @Test + public void testFindDistinguishedCode() { + // Create OrderLineGroupLine + OrderLineGroup orderLineGroup = createValidOrderLineGroup(); + orderElementDAO.save(orderLineGroup); + orderLineGroup.setCode(((Long) orderLineGroup.getId()).toString()); + orderElementDAO.save(orderLineGroup); + + // Create OrderLineGroup + OrderLine orderLine = createValidOrderLine(); + orderElementDAO.save(orderLine); + orderLine.setCode(((Long) orderLine.getId()).toString()); + orderLine.setParent(orderLineGroup); + orderElementDAO.save(orderLine); + + try { + String distinguishedCode = orderElementDAO + .getDistinguishedCode(orderLine); + String code = orderLine.getCode(); + OrderElement orderElement = orderLine; + while (orderElement.getParent() != null) { + code = orderLine.getParent().getCode() + "-" + code; + orderElement = orderElement.getParent(); + } + assertTrue(distinguishedCode.equals(code)); + } catch (InstanceNotFoundException e) { + + } + } } 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 08802c0b2..a548675b3 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 @@ -85,4 +85,13 @@ public interface IWorkReportModel { */ boolean isEditing(); + /** + * Returns distinguished code for {@link OrderElement} + * + * @param orderElement + * @return + */ + String getDistinguishedCode(OrderElement orderElement) + throws InstanceNotFoundException; + } 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 b7d958755..57db26b1f 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 @@ -398,9 +398,15 @@ public class WorkReportCRUDController extends GenericForwardComposer implements @Override public String get() { - return (workReportLine.getOrderElement() != null) ? workReportLine - .getOrderElement().getCode() - : ""; + if (workReportLine.getOrderElement() != null) { + try { + return workReportModel + .getDistinguishedCode(workReportLine + .getOrderElement()); + } catch (InstanceNotFoundException e) { + } + } + return ""; } }, new Util.Setter() { 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 4d5955431..ec9d46bde 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 @@ -184,4 +184,11 @@ public class WorkReportModel implements IWorkReportModel { public boolean isEditing() { return editing; } + + @Override + @Transactional(readOnly = true) + public String getDistinguishedCode(OrderElement orderElement) throws InstanceNotFoundException { + orderElementDAO.save(orderElement); + return orderElementDAO.getDistinguishedCode(orderElement); + } }