ItEr29S16CUCreacionProxectoCategorizacionTraballoItEr10S11: Refactoring Order, now it is a subclass of OrderLineGroup.

This commit is contained in:
Manuel Rego Casasnovas 2009-10-08 12:20:24 +02:00 committed by Javier Moran Rua
parent 8ce8917b31
commit 3ea299d416
7 changed files with 47 additions and 120 deletions

View file

@ -21,15 +21,10 @@
package org.navalplanner.business.orders.entities;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
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.DayAssignment;
@ -41,11 +36,14 @@ import org.navalplanner.business.resources.entities.Resource;
* It represents an {@link Order} with its related information. <br />
* @author Óscar González Fernández <ogonzalez@igalia.com>
*/
public class Order extends BaseEntity implements IOrderLineGroup, IValidable {
public class Order extends OrderLineGroup implements IValidable {
public static Order create() {
Order order = new Order();
order.setNewObject(true);
OrderLineGroup.setupOrderLineGroup(order);
return order;
}
@ -56,61 +54,11 @@ public class Order extends BaseEntity implements IOrderLineGroup, IValidable {
}
private static Date copy(Date date) {
return date != null ? new Date(date.getTime()) : date;
}
@NotEmpty
private String name;
@NotNull
private Date initDate;
private Date endDate;
private String description;
private String responsible;
// TODO turn into a many to one relationship when Customer entity is defined
private String customer;
@Valid
private List<OrderElement> orderElements = new ArrayList<OrderElement>();
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Date getInitDate() {
return copy(initDate);
}
public void setInitDate(Date initDate) {
this.initDate = initDate;
}
public Date getEndDate() {
return copy(endDate);
}
public void setEndDate(Date endDate) {
this.endDate = endDate;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public String getResponsible() {
return responsible;
}
@ -128,55 +76,23 @@ public class Order extends BaseEntity implements IOrderLineGroup, IValidable {
}
public boolean isEndDateBeforeStart() {
return endDate != null && endDate.before(initDate);
}
public void add(OrderElement orderElement) {
getOrderElementsManipulator().add(orderElement);
}
private OrderLineGroupManipulator getOrderElementsManipulator() {
return OrderLineGroupManipulator.createManipulatorForOrder(orderElements);
return getEndDate() != null && getEndDate().before(getInitDate());
}
public List<OrderElement> getOrderElements() {
return new ArrayList<OrderElement>(orderElements);
}
public void remove(OrderElement orderElement) {
getOrderElementsManipulator().remove(orderElement);
}
public void replace(OrderElement oldOrderElement, OrderElement orderElement) {
getOrderElementsManipulator().replace(oldOrderElement, orderElement);
}
@Override
public void up(OrderElement orderElement) {
getOrderElementsManipulator().up(orderElement);
}
@Override
public void down(OrderElement orderElement) {
getOrderElementsManipulator().down(orderElement);
}
@Override
public void add(int position, OrderElement orderElement) {
getOrderElementsManipulator().add(position, orderElement);
return new ArrayList<OrderElement>(getChildren());
}
public List<TaskElement> getAssociatedTasks() {
ArrayList<TaskElement> result = new ArrayList<TaskElement>();
for (OrderElement orderElement : orderElements) {
for (OrderElement orderElement : getChildren()) {
result.addAll(orderElement.getTaskElements());
}
return result;
}
public boolean isSomeTaskElementScheduled() {
for (OrderElement orderElement : orderElements) {
for (OrderElement orderElement : getChildren()) {
if (orderElement.isScheduled())
return true;
}
@ -213,8 +129,9 @@ public class Order extends BaseEntity implements IOrderLineGroup, IValidable {
private List<OrderElement> getAllOrderElements() {
List<OrderElement> result = new ArrayList<OrderElement>(
this.orderElements);
for (OrderElement orderElement : this.orderElements) {
this
.getChildren());
for (OrderElement orderElement : this.getChildren()) {
result.addAll(orderElement.getAllChildren());
}
return result;

View file

@ -98,8 +98,12 @@ public abstract class OrderElement extends BaseEntity {
public abstract List<OrderElement> getChildren();
private static Date copy(Date date) {
return date != null ? new Date(date.getTime()) : date;
}
public Date getInitDate() {
return initDate;
return copy(initDate);
}
public void setInitDate(Date initDate) {
@ -107,7 +111,7 @@ public abstract class OrderElement extends BaseEntity {
}
public Date getEndDate() {
return endDate;
return copy(endDate);
}
public void setEndDate(Date endDate) {

View file

@ -49,15 +49,18 @@ public class OrderLineGroup extends OrderElement implements IOrderLineGroup {
OrderLineGroup result = new OrderLineGroup();
result.setNewObject(true);
setupOrderLineGroup(result);
return result;
}
protected static void setupOrderLineGroup(OrderLineGroup result) {
IndirectAdvanceAssignment indirectAdvanceAssignment = IndirectAdvanceAssignment
.create(true);
AdvanceType advanceType = PredefinedAdvancedTypes.CHILDREN.getType();
indirectAdvanceAssignment
.setAdvanceType(advanceType);
indirectAdvanceAssignment.setAdvanceType(advanceType);
indirectAdvanceAssignment.setOrderElement(result);
result.addIndirectAdvanceAssignment(indirectAdvanceAssignment);
return result;
}
private List<OrderElement> children = new ArrayList<OrderElement>();

View file

@ -1,26 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="org.navalplanner.business.orders.entities">
<class name="Order" table="order_table">
<id name="id" access="property" type="long">
<generator class="hilo" >
<param name="max_lo">100</param>
</generator>
</id>
<version name="version" access="property" type="long" />
<property name="initDate" access="field"></property>
<property name="endDate" access="field"></property>
<property name="name" access="field"></property>
<property name="description" access="field"></property>
<property name="responsible" access="field"></property>
<property name="customer" access="field"></property>
<list name="orderElements" access="field" cascade="all">
<key column="orderId" not-null="false"></key>
<index column="positionInOrder"></index>
<one-to-many class="OrderElement"/>
</list>
</class>
<class name="OrderElement" abstract="true">
<id name="id" access="property" type="long">
<generator class="hilo" >
@ -64,6 +44,14 @@
<key column="INDIRECT_ORDER_ELEMENT_ID" />
<one-to-many class="org.navalplanner.business.advance.entities.IndirectAdvanceAssignment" />
</set>
<joined-subclass name="Order" table="order_table">
<key column="ORDERELEMENTID"></key>
<property name="responsible" access="field"></property>
<property name="customer" access="field"></property>
</joined-subclass>
</joined-subclass>
<joined-subclass name="OrderLine">

View file

@ -105,6 +105,7 @@ public class AddAdvanceAssignmentsToOrderElementTest {
order.setInitDate(CriterionSatisfactionDAOTest.year(2000));
order.setName("name");
order.setResponsible("responsible");
order.setCode("code");
return order;
}

View file

@ -32,9 +32,13 @@ import static org.navalplanner.business.test.BusinessGlobalNames.BUSINESS_SPRING
import java.util.Date;
import java.util.List;
import javax.annotation.Resource;
import org.hibernate.SessionFactory;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.navalplanner.business.IDataBootstrap;
import org.navalplanner.business.common.exceptions.InstanceNotFoundException;
import org.navalplanner.business.common.exceptions.ValidationException;
import org.navalplanner.business.orders.daos.IOrderDAO;
@ -66,6 +70,14 @@ import org.springframework.transaction.annotation.Transactional;
@Transactional
public class TaskElementDAOTest {
@Resource
private IDataBootstrap defaultAdvanceTypesBootstrapListener;
@Before
public void loadRequiredaData() {
defaultAdvanceTypesBootstrapListener.loadRequiredData();
}
@Autowired
private ITaskElementDAO taskElementDAO;
@ -94,6 +106,7 @@ public class TaskElementDAOTest {
Order order = Order.create();
order.setName("bla");
order.setInitDate(new Date());
order.setCode("code");
order.add(orderLine);
try {
order.checkValid();

View file

@ -102,6 +102,7 @@ public class OrderModelTest {
order.setInitDate(year(2000));
order.setName("name");
order.setResponsible("responsible");
order.setCode("code");
return order;
}