diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/ws/common/impl/DateConverter.java b/navalplanner-webapp/src/main/java/org/navalplanner/ws/common/impl/DateConverter.java
deleted file mode 100644
index 30372d2f7..000000000
--- a/navalplanner-webapp/src/main/java/org/navalplanner/ws/common/impl/DateConverter.java
+++ /dev/null
@@ -1,75 +0,0 @@
-/*
- * This file is part of NavalPlan
- *
- * 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.common.impl;
-
-import java.util.Date;
-
-import javax.xml.datatype.XMLGregorianCalendar;
-
-import org.joda.time.LocalDate;
-
-/**
- * A converter from java.util.Date to/from
- * javax.xml.datatype.XMLGregorianCalendar.
- *
- * @author Fernando Bellas Permuy
- */
-public class DateConverter {
-
- private DateConverter() {}
-
- /**
- * It converts a XMLGregorianCalendar representing a
- * xsd:date XML type to a Date.
- *
- * If the date passed as a parameter is null, it also returns
- * null.
- */
- public final static Date toDate(XMLGregorianCalendar date) {
-
- if (date == null) {
- return null;
- } else {
- return date.toGregorianCalendar().getTime();
- }
-
- }
-
- /**
- * It converts a XMLGregorianCalendar representing a
- * xsd:date XML type to a Joda's LocalDate.
- *
- *
- * If the date passed as a parameter is null, it also returns
- * null.
- */
- public final static LocalDate toLocalDate(XMLGregorianCalendar date) {
-
- if (date == null) {
- return null;
- } else {
- return new LocalDate(date.getYear(), date.getMonth(),
- date.getDay());
- }
-
- }
-
-}
diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/ws/resources/api/CriterionSatisfactionDTO.java b/navalplanner-webapp/src/main/java/org/navalplanner/ws/resources/api/CriterionSatisfactionDTO.java
index 1924bfde1..8a6275741 100644
--- a/navalplanner-webapp/src/main/java/org/navalplanner/ws/resources/api/CriterionSatisfactionDTO.java
+++ b/navalplanner-webapp/src/main/java/org/navalplanner/ws/resources/api/CriterionSatisfactionDTO.java
@@ -20,9 +20,9 @@
package org.navalplanner.ws.resources.api;
+import java.util.Date;
+
import javax.xml.bind.annotation.XmlAttribute;
-import javax.xml.bind.annotation.XmlSchemaType;
-import javax.xml.datatype.XMLGregorianCalendar;
import org.navalplanner.ws.common.api.IntegrationEntityDTO;
@@ -42,18 +42,16 @@ public class CriterionSatisfactionDTO extends IntegrationEntityDTO {
public String criterionName;
@XmlAttribute(name="start-date")
- @XmlSchemaType(name="date")
- public XMLGregorianCalendar startDate;
+ public Date startDate;
@XmlAttribute(name="end-date")
- @XmlSchemaType(name="date")
- public XMLGregorianCalendar endDate;
+ public Date endDate;
public CriterionSatisfactionDTO() {}
public CriterionSatisfactionDTO(String code,
String criterionTypeName, String criterionName,
- XMLGregorianCalendar startDate, XMLGregorianCalendar endDate) {
+ Date startDate, Date endDate) {
super(code);
this.criterionTypeName = criterionTypeName;
@@ -70,7 +68,7 @@ public class CriterionSatisfactionDTO extends IntegrationEntityDTO {
*/
public CriterionSatisfactionDTO(
String criterionTypeName, String criterionName,
- XMLGregorianCalendar startDate, XMLGregorianCalendar endDate) {
+ Date startDate, Date endDate) {
this(generateCode(), criterionTypeName, criterionName, startDate,
endDate);
diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/ws/resources/api/IResourceService.java b/navalplanner-webapp/src/main/java/org/navalplanner/ws/resources/api/IResourceService.java
index 5324fe3e6..21ada44da 100644
--- a/navalplanner-webapp/src/main/java/org/navalplanner/ws/resources/api/IResourceService.java
+++ b/navalplanner-webapp/src/main/java/org/navalplanner/ws/resources/api/IResourceService.java
@@ -35,6 +35,8 @@ import org.navalplanner.ws.common.api.InstanceConstraintViolationsListDTO;
*/
public interface IResourceService {
+ public ResourceListDTO getResources();
+
public InstanceConstraintViolationsListDTO addResources(
ResourceListDTO resources);
diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/ws/resources/api/ResourcesCostCategoryAssignmentDTO.java b/navalplanner-webapp/src/main/java/org/navalplanner/ws/resources/api/ResourcesCostCategoryAssignmentDTO.java
index a40eb2141..d3a173b79 100644
--- a/navalplanner-webapp/src/main/java/org/navalplanner/ws/resources/api/ResourcesCostCategoryAssignmentDTO.java
+++ b/navalplanner-webapp/src/main/java/org/navalplanner/ws/resources/api/ResourcesCostCategoryAssignmentDTO.java
@@ -19,9 +19,9 @@
*/
package org.navalplanner.ws.resources.api;
+import java.util.Date;
+
import javax.xml.bind.annotation.XmlAttribute;
-import javax.xml.bind.annotation.XmlSchemaType;
-import javax.xml.datatype.XMLGregorianCalendar;
import org.navalplanner.ws.common.api.IntegrationEntityDTO;
@@ -39,18 +39,15 @@ public class ResourcesCostCategoryAssignmentDTO extends IntegrationEntityDTO {
public String costCategoryName;
@XmlAttribute(name="start-date")
- @XmlSchemaType(name="date")
- public XMLGregorianCalendar startDate;
+ public Date startDate;
@XmlAttribute(name="end-date")
- @XmlSchemaType(name="date")
- public XMLGregorianCalendar endDate;
+ public Date endDate;
public ResourcesCostCategoryAssignmentDTO() {}
public ResourcesCostCategoryAssignmentDTO(String code,
- String costCategoryName, XMLGregorianCalendar startDate,
- XMLGregorianCalendar endDate) {
+ String costCategoryName, Date startDate, Date endDate) {
super(code);
this.costCategoryName = costCategoryName;
@@ -64,9 +61,8 @@ public class ResourcesCostCategoryAssignmentDTO extends IntegrationEntityDTO {
* to facilitate the implementation of test cases that add new instances
* (such instances will have a unique code).
*/
- public ResourcesCostCategoryAssignmentDTO(
- String costCategoryName, XMLGregorianCalendar startDate,
- XMLGregorianCalendar endDate) {
+ public ResourcesCostCategoryAssignmentDTO(String costCategoryName,
+ Date startDate, Date endDate) {
this(generateCode(), costCategoryName, startDate, endDate);
diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/ws/resources/impl/ResourceConverter.java b/navalplanner-webapp/src/main/java/org/navalplanner/ws/resources/impl/ResourceConverter.java
index a3c8a9ed9..685a8bce5 100644
--- a/navalplanner-webapp/src/main/java/org/navalplanner/ws/resources/impl/ResourceConverter.java
+++ b/navalplanner-webapp/src/main/java/org/navalplanner/ws/resources/impl/ResourceConverter.java
@@ -22,9 +22,12 @@ package org.navalplanner.ws.resources.impl;
import static org.navalplanner.web.I18nHelper._;
+import java.util.ArrayList;
+import java.util.Date;
import java.util.List;
import org.apache.commons.lang.StringUtils;
+import org.joda.time.LocalDate;
import org.navalplanner.business.common.exceptions.InstanceNotFoundException;
import org.navalplanner.business.common.exceptions.MultipleInstancesException;
import org.navalplanner.business.common.exceptions.ValidationException;
@@ -34,7 +37,6 @@ import org.navalplanner.business.resources.entities.CriterionType;
import org.navalplanner.business.resources.entities.Machine;
import org.navalplanner.business.resources.entities.Resource;
import org.navalplanner.business.resources.entities.Worker;
-import org.navalplanner.ws.common.impl.DateConverter;
import org.navalplanner.ws.common.impl.InstanceNotFoundRecoverableErrorException;
import org.navalplanner.ws.common.impl.RecoverableErrorException;
import org.navalplanner.ws.resources.api.CriterionSatisfactionDTO;
@@ -158,9 +160,8 @@ public class ResourceConverter {
StringUtils.trim(criterionSatisfactionDTO.code),
StringUtils.trim(criterionSatisfactionDTO.criterionTypeName),
StringUtils.trim(criterionSatisfactionDTO.criterionName),
- resource,
- DateConverter.toDate(criterionSatisfactionDTO.startDate),
- DateConverter.toDate(criterionSatisfactionDTO.endDate));
+ resource, criterionSatisfactionDTO.startDate,
+ criterionSatisfactionDTO.endDate);
} catch (InstanceNotFoundException e) {
@@ -216,11 +217,14 @@ public class ResourceConverter {
}
try {
+ LocalDate startDate = (assignmentDTO.startDate == null) ? null
+ : LocalDate.fromDateFields(assignmentDTO.startDate);
+ LocalDate endDate = (assignmentDTO.endDate == null) ? null
+ : LocalDate.fromDateFields(assignmentDTO.endDate);
return ResourcesCostCategoryAssignment.createUnvalidated(
- assignmentDTO.code,
- StringUtils.trim(assignmentDTO.costCategoryName), resource,
- DateConverter.toLocalDate(assignmentDTO.startDate),
- DateConverter.toLocalDate(assignmentDTO.endDate));
+ assignmentDTO.code, StringUtils
+ .trim(assignmentDTO.costCategoryName), resource,
+ startDate, endDate);
} catch (InstanceNotFoundException e) {
throw new InstanceNotFoundRecoverableErrorException(
COST_CATEGORY_ENTITY_TYPE, e.getKey().toString());
@@ -302,8 +306,8 @@ public class ResourceConverter {
criterionSatisfaction.updateUnvalidated(
StringUtils.trim(criterionSatisfactionDTO.criterionTypeName),
StringUtils.trim(criterionSatisfactionDTO.criterionName),
- DateConverter.toDate(criterionSatisfactionDTO.startDate),
- DateConverter.toDate(criterionSatisfactionDTO.endDate));
+ criterionSatisfactionDTO.startDate,
+ criterionSatisfactionDTO.endDate);
} catch (InstanceNotFoundException e) {
@@ -351,10 +355,13 @@ public class ResourceConverter {
ResourcesCostCategoryAssignmentDTO i) {
try {
+ LocalDate startDate = (i.startDate == null) ? null : LocalDate
+ .fromDateFields(i.startDate);
+ LocalDate endDate = (i.endDate == null) ? null : LocalDate
+ .fromDateFields(i.endDate);
assignment.updateUnvalidated(
StringUtils.trim(i.costCategoryName),
- DateConverter.toLocalDate(i.startDate),
- DateConverter.toLocalDate(i.endDate));
+ startDate, endDate);
} catch (InstanceNotFoundException e) {
throw new InstanceNotFoundRecoverableErrorException(
COST_CATEGORY_ENTITY_TYPE, e.getKey().toString());
@@ -375,4 +382,66 @@ public class ResourceConverter {
}
-}
+ public static ResourceDTO toDTO(Resource resource) {
+ ResourceDTO resourceDTO;
+ if (resource instanceof Worker) {
+ resourceDTO = toDTO((Worker) resource);
+ } else if (resource instanceof Machine) {
+ resourceDTO = toDTO((Machine) resource);
+ } else {
+ return null;
+ }
+
+ List criterionSatisfactionDTOs = new ArrayList();
+ for (CriterionSatisfaction criterionSatisfaction : resource
+ .getCriterionSatisfactions()) {
+ criterionSatisfactionDTOs.add(toDTO(criterionSatisfaction));
+ }
+ resourceDTO.criterionSatisfactions = criterionSatisfactionDTOs;
+
+ List resourcesCostCategoryAssignmentDTOs = new ArrayList();
+ for (ResourcesCostCategoryAssignment resourcesCostCategoryAssignment : resource
+ .getResourcesCostCategoryAssignments()) {
+ resourcesCostCategoryAssignmentDTOs
+ .add(toDTO(resourcesCostCategoryAssignment));
+ }
+ resourceDTO.resourcesCostCategoryAssignments = resourcesCostCategoryAssignmentDTOs;
+
+ return resourceDTO;
+ }
+
+ private static WorkerDTO toDTO(Worker worker) {
+ return new WorkerDTO(worker.getCode(), worker.getFirstName(), worker
+ .getSurname(), worker.getNif());
+ }
+
+ private static MachineDTO toDTO(Machine machine) {
+ return new MachineDTO(machine.getCode(), machine.getName(), machine
+ .getDescription());
+ }
+
+ private static CriterionSatisfactionDTO toDTO(
+ CriterionSatisfaction criterionSatisfaction) {
+ return new CriterionSatisfactionDTO(criterionSatisfaction.getCode(),
+ criterionSatisfaction.getCriterion().getType().getName(),
+ criterionSatisfaction.getCriterion().getName(),
+ criterionSatisfaction.getStartDate(), criterionSatisfaction
+ .getEndDate());
+ }
+
+ private static ResourcesCostCategoryAssignmentDTO toDTO(
+ ResourcesCostCategoryAssignment resourcesCostCategoryAssignment) {
+ Date initDate = (resourcesCostCategoryAssignment.getInitDate() == null) ? null
+ : resourcesCostCategoryAssignment.getInitDate()
+ .toDateTimeAtStartOfDay().toDate();
+ Date endDate = (resourcesCostCategoryAssignment.getEndDate() == null) ? null
+ : resourcesCostCategoryAssignment.getEndDate()
+ .toDateTimeAtStartOfDay().toDate();
+
+ return new ResourcesCostCategoryAssignmentDTO(
+ resourcesCostCategoryAssignment.getCode(),
+ resourcesCostCategoryAssignment.getCostCategory().getName(),
+ initDate, endDate);
+ }
+
+}
\ No newline at end of file
diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/ws/resources/impl/ResourceServiceREST.java b/navalplanner-webapp/src/main/java/org/navalplanner/ws/resources/impl/ResourceServiceREST.java
index c5caccdbc..82fefa4b2 100644
--- a/navalplanner-webapp/src/main/java/org/navalplanner/ws/resources/impl/ResourceServiceREST.java
+++ b/navalplanner-webapp/src/main/java/org/navalplanner/ws/resources/impl/ResourceServiceREST.java
@@ -20,14 +20,20 @@
package org.navalplanner.ws.resources.impl;
+import java.util.ArrayList;
+import java.util.List;
+
import javax.ws.rs.Consumes;
+import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import org.navalplanner.business.common.daos.IIntegrationEntityDAO;
import org.navalplanner.business.common.exceptions.ValidationException;
+import org.navalplanner.business.resources.daos.IMachineDAO;
import org.navalplanner.business.resources.daos.IResourceDAO;
+import org.navalplanner.business.resources.daos.IWorkerDAO;
import org.navalplanner.business.resources.entities.Resource;
import org.navalplanner.ws.common.api.InstanceConstraintViolationsListDTO;
import org.navalplanner.ws.common.impl.GenericRESTService;
@@ -37,6 +43,7 @@ import org.navalplanner.ws.resources.api.ResourceDTO;
import org.navalplanner.ws.resources.api.ResourceListDTO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
/**
* REST-based implementation of IResourceService.
@@ -53,6 +60,27 @@ public class ResourceServiceREST
@Autowired
private IResourceDAO resourceDAO;
+ @Autowired
+ private IWorkerDAO workerDAO;
+
+ @Autowired
+ private IMachineDAO machineDAO;
+
+ @Override
+ @GET
+ @Transactional(readOnly = true)
+ public ResourceListDTO getResources() {
+ return new ResourceListDTO(findAll());
+ }
+
+ @Override
+ protected List findAll() {
+ List result = new ArrayList();
+ result.addAll(workerDAO.getWorkers());
+ result.addAll(machineDAO.getAll());
+ return toDTO(result);
+ }
+
@Override
@POST
@Consumes("application/xml")
@@ -73,7 +101,7 @@ public class ResourceServiceREST
@Override
protected ResourceDTO toDTO(Resource entity) {
- return null; // This service does not provide finder methods.
+ return ResourceConverter.toDTO(entity);
}
@Override
diff --git a/navalplanner-webapp/src/test/java/org/navalplanner/web/test/ws/resources/api/ResourceServiceTest.java b/navalplanner-webapp/src/test/java/org/navalplanner/web/test/ws/resources/api/ResourceServiceTest.java
index cc8c2cd8f..49c625660 100644
--- a/navalplanner-webapp/src/test/java/org/navalplanner/web/test/ws/resources/api/ResourceServiceTest.java
+++ b/navalplanner-webapp/src/test/java/org/navalplanner/web/test/ws/resources/api/ResourceServiceTest.java
@@ -39,11 +39,6 @@ import java.util.Date;
import java.util.GregorianCalendar;
import java.util.List;
-import javax.xml.datatype.DatatypeConfigurationException;
-import javax.xml.datatype.DatatypeConstants;
-import javax.xml.datatype.DatatypeFactory;
-import javax.xml.datatype.XMLGregorianCalendar;
-
import org.joda.time.LocalDate;
import org.junit.Before;
import org.junit.Test;
@@ -798,12 +793,10 @@ public class ResourceServiceTest {
assertEquals(m1Updated.name, m1Entity.getName()); // Modified.
assertEquals(m1.description, m1Entity.getDescription()); //Not modified.
- assertTrue(datesEquals( // Modified.
- m1s1Updated.startDate,
- m1Entity.getCriterionSatisfactionByCode(m1s1.code).getStartDate()));
- assertTrue(datesEquals( // Not modified.
- m1s1.endDate,
- m1Entity.getCriterionSatisfactionByCode(m1s1.code).getEndDate()));
+ assertTrue(m1s1Updated.startDate.equals(m1Entity
+ .getCriterionSatisfactionByCode(m1s1.code).getStartDate()));
+ assertTrue(m1s1.endDate.equals(m1Entity.getCriterionSatisfactionByCode(
+ m1s1.code).getEndDate())); // Not modified.
m1Entity.getResourcesCostCategoryAssignmentByCode(m1a2.code); // New.
/* Test worker update. */
@@ -812,14 +805,14 @@ public class ResourceServiceTest {
assertEquals(w1Updated.surname, w1Entity.getSurname()); // Modified.
assertEquals(w1.firstName, w1Entity.getFirstName()); // Not modified.
w1Entity.getCriterionSatisfactionByCode(w1s2.code); // New.
- assertTrue(datesEquals( // Modified.
- w1a1Updated.startDate,
- w1Entity.getResourcesCostCategoryAssignmentByCode(w1a1.code).
- getInitDate()));
- assertTrue(datesEquals( // Not modified.
- w1a1.endDate,
- w1Entity.getResourcesCostCategoryAssignmentByCode(w1a1.code).
- getEndDate()));
+
+ Date startDate = w1Entity.getResourcesCostCategoryAssignmentByCode(
+ w1a1.code).getInitDate().toDateTimeAtStartOfDay().toDate();
+ Date endDate = w1Entity.getResourcesCostCategoryAssignmentByCode(
+ w1a1.code).getEndDate().toDateTimeAtStartOfDay().toDate();
+
+ assertTrue(w1a1Updated.startDate.equals(startDate)); // Modified.
+ assertTrue(w1a1.endDate.equals(endDate)); // Not modified.
}
@@ -941,10 +934,10 @@ public class ResourceServiceTest {
private MachineDTO createMachineDTOWithTwoCriterionSatisfactions(
String machineName, String criterionTypeName,
- String criterionName1, XMLGregorianCalendar startDate1,
- XMLGregorianCalendar endDate1,
- String criterionName2, XMLGregorianCalendar startDate2,
- XMLGregorianCalendar endDate2) {
+ String criterionName1, Date startDate1,
+ Date endDate1,
+ String criterionName2, Date startDate2,
+ Date endDate2) {
MachineDTO machineDTO = new MachineDTO(machineName, "desc");
@@ -961,8 +954,7 @@ public class ResourceServiceTest {
private MachineDTO createMachineDTOWithTwoCostsAssignments(
String machineName, String costCategoryName,
- XMLGregorianCalendar startDate1, XMLGregorianCalendar endDate1,
- XMLGregorianCalendar startDate2, XMLGregorianCalendar endDate2) {
+ Date startDate1, Date endDate1, Date startDate2, Date endDate2) {
MachineDTO machineDTO = new MachineDTO(machineName, "desc");
@@ -977,34 +969,9 @@ public class ResourceServiceTest {
}
- private XMLGregorianCalendar getDate(int year, int month, int day) {
-
- try {
- return DatatypeFactory.newInstance().newXMLGregorianCalendarDate(
- year, month, day, DatatypeConstants.FIELD_UNDEFINED);
- } catch (DatatypeConfigurationException e) {
- throw new RuntimeException(e);
- }
-
- }
-
- private boolean datesEquals(XMLGregorianCalendar date1, Date date2) {
-
- GregorianCalendar date2AsGC = new GregorianCalendar();
- date2AsGC.setTime(date2);
-
- return datesEquals(date1.toGregorianCalendar(), date2AsGC);
-
- }
-
- private boolean datesEquals(XMLGregorianCalendar date1, LocalDate date2) {
-
- GregorianCalendar date2AsGC = new GregorianCalendar(
- date2.getYear(), date2.getMonthOfYear()-1, date2.getDayOfMonth());
-
- return datesEquals(date1.toGregorianCalendar(), date2AsGC);
-
-
+ private Date getDate(int year, int month, int day) {
+ return new LocalDate(year, month, day).toDateTimeAtStartOfDay()
+ .toDate();
}
public boolean datesEquals(GregorianCalendar date1,
diff --git a/scripts/rest-clients/export-resources.sh b/scripts/rest-clients/export-resources.sh
new file mode 100755
index 000000000..62a830d96
--- /dev/null
+++ b/scripts/rest-clients/export-resources.sh
@@ -0,0 +1,21 @@
+#!/bin/sh
+
+. ./rest-common-env.sh
+
+printf "Login name: "
+read loginName
+printf "Password: "
+read password
+
+if [ "$1" = "--prod" ]; then
+ baseServiceURL=$PRODUCTION_BASE_SERVICE_URL
+ certificate=$PRODUCTION_CERTIFICATE
+else
+ baseServiceURL=$DEVELOPMENT_BASE_SERVICE_URL
+ certificate=$DEVELOPMENT_CERTIFICATE
+fi
+
+authorization=`./base64.sh $loginName:$password`
+
+curl -sv -X GET $certificate --header "Authorization: Basic $authorization" \
+ $baseServiceURL/resources | tidy -xml -i -q -utf8