diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/common/Registry.java b/navalplanner-business/src/main/java/org/navalplanner/business/common/Registry.java
index fcebec0dd..9f23a72d7 100644
--- a/navalplanner-business/src/main/java/org/navalplanner/business/common/Registry.java
+++ b/navalplanner-business/src/main/java/org/navalplanner/business/common/Registry.java
@@ -23,6 +23,8 @@ package org.navalplanner.business.common;
import org.navalplanner.business.advance.daos.IAdvanceTypeDAO;
import org.navalplanner.business.calendars.daos.IBaseCalendarDAO;
import org.navalplanner.business.costcategories.daos.ITypeOfWorkHoursDAO;
+import org.navalplanner.business.labels.daos.ILabelDAO;
+import org.navalplanner.business.labels.daos.ILabelTypeDAO;
import org.navalplanner.business.materials.daos.IMaterialCategoryDAO;
import org.navalplanner.business.materials.daos.IMaterialDAO;
import org.navalplanner.business.qualityforms.daos.IQualityFormDAO;
@@ -80,6 +82,12 @@ public class Registry {
@Autowired
private IBaseCalendarDAO baseCalendarDAO;
+ @Autowired
+ private ILabelDAO labelDAO;
+
+ @Autowired
+ private ILabelTypeDAO labelTypeDAO;
+
private Registry() {
}
@@ -127,4 +135,12 @@ public class Registry {
return getInstance().baseCalendarDAO;
}
-}
+ public static ILabelDAO getLabelDAO() {
+ return getInstance().labelDAO;
+ }
+
+ public static ILabelTypeDAO getLabelTypeDAO() {
+ return getInstance().labelTypeDAO;
+ }
+
+}
\ No newline at end of file
diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/ws/orders/api/LabelDTO.java b/navalplanner-webapp/src/main/java/org/navalplanner/ws/orders/api/LabelDTO.java
new file mode 100644
index 000000000..9fba344b3
--- /dev/null
+++ b/navalplanner-webapp/src/main/java/org/navalplanner/ws/orders/api/LabelDTO.java
@@ -0,0 +1,50 @@
+/*
+ * This file is part of ###PROJECT_NAME###
+ *
+ * Copyright (C) 2009 Fundación para o Fomento da Calidade Industrial e
+ * Desenvolvemento Tecnolóxico de Galicia
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see .
+ */
+
+package org.navalplanner.ws.orders.api;
+
+import javax.xml.bind.annotation.XmlAttribute;
+import javax.xml.bind.annotation.XmlRootElement;
+
+import org.navalplanner.business.labels.entities.Label;
+
+/**
+ * DTO for {@link Label} entity.
+ *
+ * @author Manuel Rego Casasnovas
+ */
+@XmlRootElement(name = "label")
+public class LabelDTO {
+
+ @XmlAttribute
+ public String name;
+
+ @XmlAttribute
+ public String type;
+
+ public LabelDTO() {
+ }
+
+ public LabelDTO(String name, String type) {
+ this.name = name;
+ this.type = type;
+ }
+
+}
diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/ws/orders/api/OrderDTO.java b/navalplanner-webapp/src/main/java/org/navalplanner/ws/orders/api/OrderDTO.java
index 313465a99..52d7978f8 100644
--- a/navalplanner-webapp/src/main/java/org/navalplanner/ws/orders/api/OrderDTO.java
+++ b/navalplanner-webapp/src/main/java/org/navalplanner/ws/orders/api/OrderDTO.java
@@ -22,6 +22,7 @@ package org.navalplanner.ws.orders.api;
import java.util.Date;
import java.util.List;
+import java.util.Set;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlRootElement;
@@ -47,9 +48,10 @@ public class OrderDTO extends OrderLineGroupDTO {
}
public OrderDTO(String name, String code, Date initDate, Date deadline,
- String description, List children,
+ String description, Set labels,
+ List children,
Boolean dependenciesConstraintsHavePriority, String calendarName) {
- super(name, code, initDate, deadline, description, children);
+ super(name, code, initDate, deadline, description, labels, children);
this.dependenciesConstraintsHavePriority = dependenciesConstraintsHavePriority;
this.calendarName = calendarName;
}
diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/ws/orders/api/OrderElementDTO.java b/navalplanner-webapp/src/main/java/org/navalplanner/ws/orders/api/OrderElementDTO.java
index 72f775375..fee52ba66 100644
--- a/navalplanner-webapp/src/main/java/org/navalplanner/ws/orders/api/OrderElementDTO.java
+++ b/navalplanner-webapp/src/main/java/org/navalplanner/ws/orders/api/OrderElementDTO.java
@@ -21,8 +21,11 @@
package org.navalplanner.ws.orders.api;
import java.util.Date;
+import java.util.Set;
import javax.xml.bind.annotation.XmlAttribute;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlElementWrapper;
import javax.xml.bind.annotation.XmlRootElement;
import org.navalplanner.business.orders.entities.OrderElement;
@@ -50,16 +53,21 @@ public class OrderElementDTO {
@XmlAttribute
public String description;
+ @XmlElementWrapper(name = "labels")
+ @XmlElement(name = "label")
+ public Set labels;
+
public OrderElementDTO() {
}
public OrderElementDTO(String name, String code, Date initDate,
- Date deadline, String description) {
+ Date deadline, String description, Set labels) {
this.name = name;
this.code = code;
this.initDate = initDate;
this.deadline = deadline;
this.description = description;
+ this.labels = labels;
}
}
diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/ws/orders/api/OrderLineDTO.java b/navalplanner-webapp/src/main/java/org/navalplanner/ws/orders/api/OrderLineDTO.java
index 5da8c2666..d961d3207 100644
--- a/navalplanner-webapp/src/main/java/org/navalplanner/ws/orders/api/OrderLineDTO.java
+++ b/navalplanner-webapp/src/main/java/org/navalplanner/ws/orders/api/OrderLineDTO.java
@@ -46,8 +46,9 @@ public class OrderLineDTO extends OrderElementDTO {
}
public OrderLineDTO(String name, String code, Date initDate, Date deadline,
- String description, Set hoursGroups) {
- super(name, code, initDate, deadline, description);
+ String description, Set labels,
+ Set hoursGroups) {
+ super(name, code, initDate, deadline, description, labels);
this.hoursGroups = hoursGroups;
}
diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/ws/orders/api/OrderLineGroupDTO.java b/navalplanner-webapp/src/main/java/org/navalplanner/ws/orders/api/OrderLineGroupDTO.java
index 1e6491682..41c37305a 100644
--- a/navalplanner-webapp/src/main/java/org/navalplanner/ws/orders/api/OrderLineGroupDTO.java
+++ b/navalplanner-webapp/src/main/java/org/navalplanner/ws/orders/api/OrderLineGroupDTO.java
@@ -22,6 +22,7 @@ package org.navalplanner.ws.orders.api;
import java.util.Date;
import java.util.List;
+import java.util.Set;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlElementWrapper;
@@ -50,8 +51,9 @@ public class OrderLineGroupDTO extends OrderElementDTO {
}
public OrderLineGroupDTO(String name, String code, Date initDate,
- Date deadline, String description, List children) {
- super(name, code, initDate, deadline, description);
+ Date deadline, String description, Set labels,
+ List children) {
+ super(name, code, initDate, deadline, description, labels);
this.children = children;
}
diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/ws/orders/impl/OrderElementConverter.java b/navalplanner-webapp/src/main/java/org/navalplanner/ws/orders/impl/OrderElementConverter.java
index b44afb7a5..0c7e88c72 100644
--- a/navalplanner-webapp/src/main/java/org/navalplanner/ws/orders/impl/OrderElementConverter.java
+++ b/navalplanner-webapp/src/main/java/org/navalplanner/ws/orders/impl/OrderElementConverter.java
@@ -26,8 +26,12 @@ import java.util.HashSet;
import java.util.List;
import java.util.Set;
+import org.hibernate.NonUniqueResultException;
import org.navalplanner.business.calendars.entities.BaseCalendar;
import org.navalplanner.business.common.Registry;
+import org.navalplanner.business.common.exceptions.InstanceNotFoundException;
+import org.navalplanner.business.labels.entities.Label;
+import org.navalplanner.business.labels.entities.LabelType;
import org.navalplanner.business.orders.entities.HoursGroup;
import org.navalplanner.business.orders.entities.Order;
import org.navalplanner.business.orders.entities.OrderElement;
@@ -37,6 +41,7 @@ import org.navalplanner.business.resources.entities.ResourceEnum;
import org.navalplanner.ws.common.api.ResourceEnumDTO;
import org.navalplanner.ws.common.impl.ResourceEnumConverter;
import org.navalplanner.ws.orders.api.HoursGroupDTO;
+import org.navalplanner.ws.orders.api.LabelDTO;
import org.navalplanner.ws.orders.api.OrderDTO;
import org.navalplanner.ws.orders.api.OrderElementDTO;
import org.navalplanner.ws.orders.api.OrderLineDTO;
@@ -59,6 +64,11 @@ public final class OrderElementConverter {
Date deadline = orderElement.getDeadline();
String description = orderElement.getDescription();
+ Set labels = new HashSet();
+ for (Label label : orderElement.getLabels()) {
+ labels.add(toDTO(label));
+ }
+
if (orderElement instanceof OrderLine) {
Set hoursGroups = new HashSet();
for (HoursGroup hoursGroup : ((OrderLine) orderElement)
@@ -67,7 +77,7 @@ public final class OrderElementConverter {
}
return new OrderLineDTO(name, code, initDate, deadline,
- description, hoursGroups);
+ description, labels, hoursGroups);
} else { // orderElement instanceof OrderLineGroup
List children = new ArrayList();
for (OrderElement element : orderElement.getChildren()) {
@@ -84,15 +94,19 @@ public final class OrderElementConverter {
}
return new OrderDTO(name, code, initDate, deadline,
- description, children,
+ description, labels, children,
dependenciesConstraintsHavePriority, calendarName);
} else { // orderElement instanceof OrderLineGroup
return new OrderLineGroupDTO(name, code, initDate, deadline,
- description, children);
+ description, labels, children);
}
}
}
+ public final static LabelDTO toDTO(Label label) {
+ return new LabelDTO(label.getName(), label.getType().getName());
+ }
+
public final static HoursGroupDTO toDTO(HoursGroup hoursGroup) {
ResourceEnumDTO resourceType = ResourceEnumConverter.toDTO(hoursGroup
.getResourceType());
@@ -141,9 +155,37 @@ public final class OrderElementConverter {
orderElement.setDeadline(orderElementDTO.deadline);
orderElement.setDescription(orderElementDTO.description);
+ if (orderElementDTO.labels != null) {
+ for (LabelDTO labelDTO : orderElementDTO.labels) {
+ orderElement.addLabel(toEntity(labelDTO));
+ }
+ }
+
return orderElement;
}
+ public final static Label toEntity(LabelDTO labelDTO) {
+ LabelType labelType = null;
+ try {
+ labelType = Registry.getLabelTypeDAO().findUniqueByName(
+ labelDTO.type);
+ } catch (NonUniqueResultException e) {
+ throw new RuntimeException(e);
+ } catch (InstanceNotFoundException e) {
+ labelType = LabelType.create(labelDTO.type);
+ Registry.getLabelTypeDAO().save(labelType);
+ }
+
+ Label label = Registry.getLabelDAO().findByNameAndType(labelDTO.name,
+ labelType);
+ if (label == null) {
+ label = Label.create(labelDTO.name);
+ label.setType(labelType);
+ }
+
+ return label;
+ }
+
private static HoursGroup toEntity(HoursGroupDTO hoursGroupDTO) {
ResourceEnum resourceType = ResourceEnumConverter
.fromDTO(hoursGroupDTO.resourceType);