diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/HoursGroup.java b/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/HoursGroup.java
index 0b8908db8..a9cb03174 100644
--- a/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/HoursGroup.java
+++ b/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/HoursGroup.java
@@ -109,7 +109,7 @@ public class HoursGroup implements Cloneable {
public Criterion getCriterionByType(ICriterionType> type) {
for (Criterion criterion : criterions) {
- if (criterion.getType().equals(type.getName())) {
+ if (criterion.getType().equals(type)) {
return criterion;
}
}
@@ -118,8 +118,9 @@ public class HoursGroup implements Cloneable {
}
public Criterion getCriterionByType(String type) {
+ // TODO: Check if hoursgroup has criterions
for (Criterion criterion : criterions) {
- if (criterion.getType().equals(type)) {
+ if (criterion.getType().getName().equals(type)) {
return criterion;
}
}
diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/OrderLine.java b/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/OrderLine.java
index 41761cefd..1b10aacc5 100644
--- a/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/OrderLine.java
+++ b/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/OrderLine.java
@@ -6,6 +6,8 @@ import java.util.HashSet;
import java.util.List;
import java.util.Set;
+import org.navalplanner.business.resources.entities.Criterion;
+
public class OrderLine extends OrderElement {
public static OrderLine createOrderLineWithUnfixedHours(int hours) {
@@ -321,7 +323,9 @@ public class OrderLine extends OrderElement {
@Override
public void forceLoadHourGroups() {
for (HoursGroup hoursGroup : hoursGroups) {
- hoursGroup.getWorkingHours();
+ for (Criterion c : hoursGroup.getCriterions()) {
+ c.getType().getName();
+ }
}
}
diff --git a/navalplanner-business/src/main/resources/org/navalplanner/business/orders/entities/Orders.hbm.xml b/navalplanner-business/src/main/resources/org/navalplanner/business/orders/entities/Orders.hbm.xml
index 0ee81b8c6..c527e27dd 100644
--- a/navalplanner-business/src/main/resources/org/navalplanner/business/orders/entities/Orders.hbm.xml
+++ b/navalplanner-business/src/main/resources/org/navalplanner/business/orders/entities/Orders.hbm.xml
@@ -65,7 +65,7 @@
-
getCriterionTypes();
diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/OrderElementModel.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/OrderElementModel.java
index 0afe31da9..5a6ee7005 100644
--- a/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/OrderElementModel.java
+++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/OrderElementModel.java
@@ -1,5 +1,6 @@
package org.navalplanner.web.orders;
+import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -25,6 +26,8 @@ public class OrderElementModel implements IOrderElementModel {
private OrderElement orderElement;
+ private OrderModel order;
+
@Autowired
private IOrderElementDao orderElementDao;
@@ -46,7 +49,7 @@ public class OrderElementModel implements IOrderElementModel {
@Override
@Transactional(readOnly = true)
- public void setCurrent(OrderElement orderElement) {
+ public void setCurrent(OrderElement orderElement, OrderModel order) {
// FIXME Review reattachment
boolean wasTransient = orderElement.isTransient();
Set transientHoursGroups = orderElement
@@ -60,36 +63,36 @@ public class OrderElementModel implements IOrderElementModel {
hoursGroup.makeTransientAgain();
}
this.orderElement = orderElement;
+ this.order = order;
}
@Override
public List getCriterionTypes() {
- List criterionTypes = criterionTypeService.getAll();
+ List result = new ArrayList();
- if (mapCriterionTypes.isEmpty()) {
- for (CriterionType criterionType : criterionTypes) {
- mapCriterionTypes.put(criterionType.getName(), criterionType);
- }
- }
+ if (mapCriterionTypes.isEmpty())
+ loadCriterionTypes();
+ result.addAll(mapCriterionTypes.values());
- return criterionTypes;
+ return result;
}
@Override
public CriterionType getCriterionTypeByName(String name) {
- if (mapCriterionTypes.isEmpty()) {
- for (CriterionType criterionType : criterionTypeService
- .getAll()) {
- mapCriterionTypes.put(criterionType.getName(), criterionType);
- }
- }
+ if (mapCriterionTypes.isEmpty())
+ loadCriterionTypes();
return mapCriterionTypes.get(name);
}
- @Override
- public List getCriterionsFor(CriterionType type) {
- return (List) criterionService.getCriterionsFor(type);
+ private void loadCriterionTypes() {
+ for (CriterionType criterionType : criterionTypeService.getAll()) {
+ mapCriterionTypes.put(criterionType.getName(), criterionType);
+ }
}
+ @Override
+ public List getCriterionsFor(CriterionType type) {
+ return (List) order.getCriterionsFor(type);
+ }
}
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 0702b3a4a..8ecb66995 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
@@ -1,7 +1,10 @@
package org.navalplanner.web.orders;
+import java.util.ArrayList;
import java.util.Date;
+import java.util.HashMap;
import java.util.List;
+import java.util.Map;
import org.apache.commons.lang.Validate;
import org.hibernate.validator.ClassValidator;
@@ -13,6 +16,10 @@ 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.entities.Criterion;
+import org.navalplanner.business.resources.entities.CriterionType;
+import org.navalplanner.business.resources.services.CriterionService;
+import org.navalplanner.business.resources.services.CriterionTypeService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.context.annotation.Scope;
@@ -21,12 +28,22 @@ import org.springframework.transaction.annotation.Transactional;
/**
* Model for UI operations related to {@link Order}.
+ *
* @author Óscar González Fernández
+ * @author Diego Pino García
*/
@Service
@Scope(BeanDefinition.SCOPE_PROTOTYPE)
public class OrderModel implements IOrderModel {
+ @Autowired
+ CriterionService criterionService;
+
+ @Autowired
+ CriterionTypeService criterionTypeService;
+
+ private static final Map> mapCriterions = new HashMap>();
+
private final IOrderService orderService;
private Order order;
@@ -56,10 +73,23 @@ public class OrderModel implements IOrderModel {
return orderService.getOrders();
}
+ private void loadCriterions() {
+ mapCriterions.clear();
+ List criterionTypes = criterionTypeService.getAll();
+ for (CriterionType criterionType : criterionTypes) {
+ List criterions = new ArrayList(
+ criterionService.getCriterionsFor(criterionType));
+
+ mapCriterions.put(criterionType, criterions);
+ }
+ }
+
@Override
@Transactional(readOnly = true)
public void prepareEditFor(Order order) {
Validate.notNull(order);
+ loadCriterions();
+
this.order = getFromDB(order);
this.orderElementTreeModel = new OrderElementTreeModel(this.order);
}
@@ -74,6 +104,8 @@ public class OrderModel implements IOrderModel {
@Override
public void prepareForCreate() {
+ loadCriterions();
+
this.order = new Order();
this.orderElementTreeModel = new OrderElementTreeModel(this.order);
this.order.setInitDate(new Date());
@@ -85,6 +117,7 @@ public class OrderModel implements IOrderModel {
InvalidValue[] invalidValues = orderValidator.getInvalidValues(order);
if (invalidValues.length > 0)
throw new ValidationException(invalidValues);
+
this.orderService.save(order);
}
@@ -114,7 +147,7 @@ public class OrderModel implements IOrderModel {
@Override
public IOrderElementModel getOrderElementModel(OrderElement orderElement) {
- orderElementModel.setCurrent(orderElement);
+ orderElementModel.setCurrent(orderElement, this);
return orderElementModel;
}
@@ -134,4 +167,8 @@ public class OrderModel implements IOrderModel {
public boolean isAlreadyScheduled(Order order) {
return getFromDB(order).isSomeTaskElementScheduled();
}
+
+ public List getCriterionsFor(CriterionType criterionType) {
+ return mapCriterions.get(criterionType);
+ }
}