diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/common/IntegrationEntity.java b/navalplanner-business/src/main/java/org/navalplanner/business/common/IntegrationEntity.java
index 8c070e774..87587ae11 100644
--- a/navalplanner-business/src/main/java/org/navalplanner/business/common/IntegrationEntity.java
+++ b/navalplanner-business/src/main/java/org/navalplanner/business/common/IntegrationEntity.java
@@ -99,7 +99,7 @@ public abstract class IntegrationEntity extends BaseEntity {
* the private method findIntegrationEntityDAO, which in turn
* calls on the abstract method getIntegrationEntityDAO().
*/
- @AssertTrue(message="code is already being used")
+ @AssertTrue(message="code is already used")
public boolean checkConstraintUniqueCode() {
/* Check if it makes sense to check the constraint .*/
@@ -166,7 +166,8 @@ public abstract class IntegrationEntity extends BaseEntity {
IIntegrationEntityDAO extends IntegrationEntity>
integrationEntityDAO = getIntegrationEntityDAO();
- if (!integrationEntityDAO.getEntityClass().equals(this.getClass())) {
+ if (!integrationEntityDAO.getEntityClass().isAssignableFrom(
+ this.getClass())) {
throw new RuntimeException(this.getClass().getName() + "::" +
"getIntegrationEntityDAO returns an incompatible " +
"DAO: " + integrationEntityDAO.getClass().getName());
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 79253baef..7ca8705b9 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
@@ -24,6 +24,7 @@ import org.navalplanner.business.advance.daos.IAdvanceTypeDAO;
import org.navalplanner.business.calendars.daos.IBaseCalendarDAO;
import org.navalplanner.business.common.daos.IConfigurationDAO;
import org.navalplanner.business.costcategories.daos.ICostCategoryDAO;
+import org.navalplanner.business.costcategories.daos.IResourcesCostCategoryAssignmentDAO;
import org.navalplanner.business.costcategories.daos.ITypeOfWorkHoursDAO;
import org.navalplanner.business.externalcompanies.daos.IExternalCompanyDAO;
import org.navalplanner.business.labels.daos.ILabelDAO;
@@ -35,8 +36,10 @@ import org.navalplanner.business.orders.daos.IOrderDAO;
import org.navalplanner.business.orders.daos.IOrderElementDAO;
import org.navalplanner.business.qualityforms.daos.IQualityFormDAO;
import org.navalplanner.business.resources.daos.ICriterionDAO;
+import org.navalplanner.business.resources.daos.ICriterionSatisfactionDAO;
import org.navalplanner.business.resources.daos.ICriterionTypeDAO;
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.users.daos.IProfileDAO;
import org.navalplanner.business.users.daos.IUserDAO;
@@ -132,6 +135,16 @@ public class Registry {
@Autowired
private IWorkReportDAO workReportDAO;
+ @Autowired
+ private IResourceDAO resourceDAO;
+
+ @Autowired
+ private ICriterionSatisfactionDAO criterionSatisfactionDAO;
+
+ @Autowired
+ private IResourcesCostCategoryAssignmentDAO
+ resourcesCostCategoryAssignmentDAO;
+
private Registry() {
}
@@ -230,4 +243,19 @@ public class Registry {
return getInstance().workReportDAO;
}
+ public static IResourceDAO getResourceDAO() {
+ return getInstance().resourceDAO;
+ }
+
+ public static ICriterionSatisfactionDAO getCriterionSatisfactionDAO() {
+ return getInstance().criterionSatisfactionDAO;
+ }
+
+ public static IResourcesCostCategoryAssignmentDAO
+ getResourcesCostCategoryAssignmentDAO() {
+
+ return getInstance().resourcesCostCategoryAssignmentDAO;
+
+ }
+
}
diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/costcategories/daos/IResourcesCostCategoryAssignmentDAO.java b/navalplanner-business/src/main/java/org/navalplanner/business/costcategories/daos/IResourcesCostCategoryAssignmentDAO.java
index ffd351b4a..c73b8e43f 100644
--- a/navalplanner-business/src/main/java/org/navalplanner/business/costcategories/daos/IResourcesCostCategoryAssignmentDAO.java
+++ b/navalplanner-business/src/main/java/org/navalplanner/business/costcategories/daos/IResourcesCostCategoryAssignmentDAO.java
@@ -20,12 +20,13 @@
package org.navalplanner.business.costcategories.daos;
-import org.navalplanner.business.common.daos.IGenericDAO;
+import org.navalplanner.business.common.daos.IIntegrationEntityDAO;
import org.navalplanner.business.costcategories.entities.ResourcesCostCategoryAssignment;
/**
* @author Jacobo Aragunde Perez
*/
-public interface IResourcesCostCategoryAssignmentDAO extends IGenericDAO {
+public interface IResourcesCostCategoryAssignmentDAO
+ extends IIntegrationEntityDAO {
}
diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/costcategories/daos/ResourcesCostCategoryAssignmentDAO.java b/navalplanner-business/src/main/java/org/navalplanner/business/costcategories/daos/ResourcesCostCategoryAssignmentDAO.java
index 9cc02ddf9..326b11805 100644
--- a/navalplanner-business/src/main/java/org/navalplanner/business/costcategories/daos/ResourcesCostCategoryAssignmentDAO.java
+++ b/navalplanner-business/src/main/java/org/navalplanner/business/costcategories/daos/ResourcesCostCategoryAssignmentDAO.java
@@ -20,7 +20,7 @@
package org.navalplanner.business.costcategories.daos;
-import org.navalplanner.business.common.daos.GenericDAOHibernate;
+import org.navalplanner.business.common.daos.IntegrationEntityDAO;
import org.navalplanner.business.common.exceptions.InstanceNotFoundException;
import org.navalplanner.business.costcategories.entities.ResourcesCostCategoryAssignment;
import org.springframework.beans.factory.config.BeanDefinition;
@@ -32,9 +32,9 @@ import org.springframework.stereotype.Repository;
*/
@Repository
@Scope(BeanDefinition.SCOPE_SINGLETON)
-public class ResourcesCostCategoryAssignmentDAO extends
- GenericDAOHibernate implements
- IResourcesCostCategoryAssignmentDAO {
+public class ResourcesCostCategoryAssignmentDAO
+ extends IntegrationEntityDAO
+ implements IResourcesCostCategoryAssignmentDAO {
@Override
public void remove(Long id) throws InstanceNotFoundException {
diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/costcategories/entities/ResourcesCostCategoryAssignment.java b/navalplanner-business/src/main/java/org/navalplanner/business/costcategories/entities/ResourcesCostCategoryAssignment.java
index 342e747fe..334ef67c2 100644
--- a/navalplanner-business/src/main/java/org/navalplanner/business/costcategories/entities/ResourcesCostCategoryAssignment.java
+++ b/navalplanner-business/src/main/java/org/navalplanner/business/costcategories/entities/ResourcesCostCategoryAssignment.java
@@ -26,17 +26,18 @@ import org.apache.commons.lang.StringUtils;
import org.hibernate.validator.AssertTrue;
import org.hibernate.validator.NotNull;
import org.joda.time.LocalDate;
-import org.navalplanner.business.common.BaseEntity;
+import org.navalplanner.business.common.IntegrationEntity;
import org.navalplanner.business.common.Registry;
import org.navalplanner.business.common.exceptions.CreateUnvalidatedException;
import org.navalplanner.business.common.exceptions.InstanceNotFoundException;
+import org.navalplanner.business.costcategories.daos.IResourcesCostCategoryAssignmentDAO;
import org.navalplanner.business.resources.entities.Resource;
/**
* @author Jacobo Aragunde Perez
* @author Fernando Bellas Permuy
*/
-public class ResourcesCostCategoryAssignment extends BaseEntity {
+public class ResourcesCostCategoryAssignment extends IntegrationEntity {
private LocalDate initDate;
@@ -56,8 +57,9 @@ public class ResourcesCostCategoryAssignment extends BaseEntity {
}
public static ResourcesCostCategoryAssignment createUnvalidated(
- String costCategoryName, Resource resource, LocalDate initDate,
- LocalDate endDate) throws CreateUnvalidatedException {
+ String code, String costCategoryName, Resource resource,
+ LocalDate initDate, LocalDate endDate)
+ throws CreateUnvalidatedException {
/* Get CostCategory. */
if (StringUtils.isBlank(costCategoryName)) {
@@ -76,7 +78,7 @@ public class ResourcesCostCategoryAssignment extends BaseEntity {
/* Create instance of ResourcesCostCategoryAssignment. */
ResourcesCostCategoryAssignment assignment =
- create(new ResourcesCostCategoryAssignment());
+ create(new ResourcesCostCategoryAssignment(), code);
assignment.initDate = initDate;
assignment.endDate = endDate;
@@ -150,4 +152,9 @@ public class ResourcesCostCategoryAssignment extends BaseEntity {
return initDate != null;
}
+ @Override
+ protected IResourcesCostCategoryAssignmentDAO getIntegrationEntityDAO() {
+ return Registry.getResourcesCostCategoryAssignmentDAO();
+ }
+
}
diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/resources/daos/CriterionSatisfactionDAO.java b/navalplanner-business/src/main/java/org/navalplanner/business/resources/daos/CriterionSatisfactionDAO.java
index 309e09f0f..67b386d8c 100644
--- a/navalplanner-business/src/main/java/org/navalplanner/business/resources/daos/CriterionSatisfactionDAO.java
+++ b/navalplanner-business/src/main/java/org/navalplanner/business/resources/daos/CriterionSatisfactionDAO.java
@@ -20,7 +20,7 @@
package org.navalplanner.business.resources.daos;
-import org.navalplanner.business.common.daos.GenericDAOHibernate;
+import org.navalplanner.business.common.daos.IntegrationEntityDAO;
import org.navalplanner.business.resources.entities.CriterionSatisfaction;
import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.context.annotation.Scope;
@@ -33,7 +33,7 @@ import org.springframework.stereotype.Repository;
*/
@Repository
@Scope(BeanDefinition.SCOPE_SINGLETON)
-public class CriterionSatisfactionDAO extends
- GenericDAOHibernate implements
- ICriterionSatisfactionDAO {
+public class CriterionSatisfactionDAO
+ extends IntegrationEntityDAO
+ implements ICriterionSatisfactionDAO {
}
diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/resources/daos/ICriterionSatisfactionDAO.java b/navalplanner-business/src/main/java/org/navalplanner/business/resources/daos/ICriterionSatisfactionDAO.java
index 1bef1ddf9..ee01e3320 100644
--- a/navalplanner-business/src/main/java/org/navalplanner/business/resources/daos/ICriterionSatisfactionDAO.java
+++ b/navalplanner-business/src/main/java/org/navalplanner/business/resources/daos/ICriterionSatisfactionDAO.java
@@ -20,14 +20,14 @@
package org.navalplanner.business.resources.daos;
-import org.navalplanner.business.common.daos.IGenericDAO;
+import org.navalplanner.business.common.daos.IIntegrationEntityDAO;
import org.navalplanner.business.resources.entities.CriterionSatisfaction;
/**
* DAO for {@link CriterionSatisfaction}
* @author Óscar González Fernández
*/
-public interface ICriterionSatisfactionDAO extends
- IGenericDAO {
+public interface ICriterionSatisfactionDAO
+ extends IIntegrationEntityDAO {
}
diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/resources/daos/IResourceDAO.java b/navalplanner-business/src/main/java/org/navalplanner/business/resources/daos/IResourceDAO.java
index e7df3a938..79821a6d6 100644
--- a/navalplanner-business/src/main/java/org/navalplanner/business/resources/daos/IResourceDAO.java
+++ b/navalplanner-business/src/main/java/org/navalplanner/business/resources/daos/IResourceDAO.java
@@ -23,7 +23,7 @@ package org.navalplanner.business.resources.daos;
import java.util.Collection;
import java.util.List;
-import org.navalplanner.business.common.daos.IGenericDAO;
+import org.navalplanner.business.common.daos.IIntegrationEntityDAO;
import org.navalplanner.business.planner.entities.Task;
import org.navalplanner.business.resources.entities.Criterion;
import org.navalplanner.business.resources.entities.Machine;
@@ -36,7 +36,7 @@ import org.navalplanner.business.resources.entities.Worker;
* @author Fernando Bellas Permuy
* @author Diego Pino Garcia
*/
-public interface IResourceDAO extends IGenericDAO {
+public interface IResourceDAO extends IIntegrationEntityDAO {
public List getWorkers();
diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/resources/daos/ResourceDAO.java b/navalplanner-business/src/main/java/org/navalplanner/business/resources/daos/ResourceDAO.java
index 08aa08c70..46d4f7704 100644
--- a/navalplanner-business/src/main/java/org/navalplanner/business/resources/daos/ResourceDAO.java
+++ b/navalplanner-business/src/main/java/org/navalplanner/business/resources/daos/ResourceDAO.java
@@ -29,7 +29,7 @@ import java.util.Set;
import org.apache.commons.lang.Validate;
import org.hibernate.Query;
-import org.navalplanner.business.common.daos.GenericDAOHibernate;
+import org.navalplanner.business.common.daos.IntegrationEntityDAO;
import org.navalplanner.business.planner.entities.Task;
import org.navalplanner.business.resources.entities.Criterion;
import org.navalplanner.business.resources.entities.Machine;
@@ -48,8 +48,8 @@ import org.springframework.transaction.annotation.Transactional;
@Repository
@Scope(BeanDefinition.SCOPE_SINGLETON)
@Transactional
-public class ResourceDAO extends GenericDAOHibernate implements
- IResourceDAO {
+public class ResourceDAO extends IntegrationEntityDAO implements
+ IResourceDAO {
@Override
public List getWorkers() {
diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/resources/entities/CriterionSatisfaction.java b/navalplanner-business/src/main/java/org/navalplanner/business/resources/entities/CriterionSatisfaction.java
index 5bade1167..6381764e4 100644
--- a/navalplanner-business/src/main/java/org/navalplanner/business/resources/entities/CriterionSatisfaction.java
+++ b/navalplanner-business/src/main/java/org/navalplanner/business/resources/entities/CriterionSatisfaction.java
@@ -30,17 +30,18 @@ import org.apache.commons.lang.Validate;
import org.apache.commons.lang.builder.ToStringBuilder;
import org.hibernate.validator.AssertTrue;
import org.hibernate.validator.NotNull;
-import org.navalplanner.business.common.BaseEntity;
+import org.navalplanner.business.common.IntegrationEntity;
import org.navalplanner.business.common.Registry;
import org.navalplanner.business.common.exceptions.CreateUnvalidatedException;
import org.navalplanner.business.common.exceptions.InstanceNotFoundException;
+import org.navalplanner.business.resources.daos.ICriterionSatisfactionDAO;
import org.navalplanner.business.resources.daos.ICriterionTypeDAO;
/**
* Declares a interval of time in which the criterion is satisfied
* @author Óscar González Fernández
* @author Fernando Bellas Permuy
*/
-public class CriterionSatisfaction extends BaseEntity {
+public class CriterionSatisfaction extends IntegrationEntity {
public static final Comparator BY_START_COMPARATOR;
@@ -56,28 +57,26 @@ public class CriterionSatisfaction extends BaseEntity {
}
public static CriterionSatisfaction create() {
- CriterionSatisfaction criterionSatisfaction = new CriterionSatisfaction();
- criterionSatisfaction.setNewObject(true);
- return criterionSatisfaction;
+ return create(new CriterionSatisfaction());
}
public static CriterionSatisfaction create(Date startDate,
Criterion criterion, Resource resource) {
- CriterionSatisfaction criterionSatisfaction = new CriterionSatisfaction(
- startDate, criterion, resource);
- criterionSatisfaction.setNewObject(true);
- return criterionSatisfaction;
+
+ return create(
+ new CriterionSatisfaction(startDate, criterion, resource));
+
}
public static CriterionSatisfaction create(Criterion criterion,
Resource resource, Interval interval) {
- CriterionSatisfaction criterionSatisfaction = new CriterionSatisfaction(criterion, resource, interval);
- criterionSatisfaction.setNewObject(true);
- return criterionSatisfaction;
+
+ return create(new CriterionSatisfaction(criterion, resource, interval));
+
}
public static CriterionSatisfaction createUnvalidated(
- String criterionTypeName, String criterionName,
+ String code, String criterionTypeName, String criterionName,
Resource resource, Date startDate, Date finishDate)
throws CreateUnvalidatedException {
@@ -117,7 +116,7 @@ public class CriterionSatisfaction extends BaseEntity {
/* Create instance of CriterionSatisfaction. */
CriterionSatisfaction criterionSatisfaction =
- create(new CriterionSatisfaction());
+ create(new CriterionSatisfaction(), code);
criterionSatisfaction.criterion = criterion;
criterionSatisfaction.resource = resource;
@@ -301,4 +300,9 @@ public class CriterionSatisfaction extends BaseEntity {
return startDate != null;
}
+ @Override
+ protected ICriterionSatisfactionDAO getIntegrationEntityDAO() {
+ return Registry.getCriterionSatisfactionDAO();
+ }
+
}
diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/resources/entities/Machine.java b/navalplanner-business/src/main/java/org/navalplanner/business/resources/entities/Machine.java
index e543352b5..7509154c0 100644
--- a/navalplanner-business/src/main/java/org/navalplanner/business/resources/entities/Machine.java
+++ b/navalplanner-business/src/main/java/org/navalplanner/business/resources/entities/Machine.java
@@ -25,13 +25,8 @@ import java.util.Collections;
import java.util.HashSet;
import java.util.Set;
-import org.apache.commons.lang.StringUtils;
-import org.hibernate.validator.AssertTrue;
import org.hibernate.validator.NotEmpty;
import org.hibernate.validator.Valid;
-import org.navalplanner.business.common.Registry;
-import org.navalplanner.business.common.exceptions.InstanceNotFoundException;
-import org.navalplanner.business.resources.daos.IMachineDAO;
/**
* Entity
@@ -41,8 +36,6 @@ import org.navalplanner.business.resources.daos.IMachineDAO;
*/
public class Machine extends Resource {
- private String code;
-
private String name;
private String description;
@@ -67,9 +60,8 @@ public class Machine extends Resource {
public static Machine createUnvalidated(String code, String name,
String description) {
- Machine machine = create(new Machine());
+ Machine machine = create(new Machine(), code);
- machine.code = code;
machine.name = name;
machine.description = description;
@@ -77,29 +69,17 @@ public class Machine extends Resource {
}
+ /**
+ * Used by Hibernate. Do not use!
+ */
protected Machine() {
}
- protected Machine(String code, String name, String description) {
- this.code = code;
- this.name = name;
- this.description = description;
- }
-
public static Machine create() {
return create(new Machine());
}
- @NotEmpty(message="machine code not specified")
- public String getCode() {
- return code;
- }
-
- public void setCode(String code) {
- this.code = code;
- }
-
@NotEmpty(message="machine name not specified")
public String getName() {
return name;
@@ -114,7 +94,7 @@ public class Machine extends Resource {
}
public String getShortDescription() {
- return code + " :: " + name;
+ return getCode() + " :: " + name;
}
public void setDescription(String description) {
@@ -127,45 +107,6 @@ public class Machine extends Resource {
return compositedCriterion.isSatisfiedBy(this);
}
- @AssertTrue(message="machine code has to be unique. It is already used")
- public boolean checkConstraintUniqueCode() {
-
- /* Check if it makes sense to check the constraint .*/
- if (!isCodeSpecified()) {
- return true;
- }
-
- /* Check the constraint. */
- boolean result;
- if (isNewObject()) {
- result = !existsMachineWithTheCode();
- } else {
- result = isIfExistsTheExistentMachineThisOne();
- }
- return result;
-
- }
-
- private boolean isCodeSpecified() {
- return !StringUtils.isBlank(code);
- }
-
- private boolean existsMachineWithTheCode() {
- IMachineDAO machineDAO = Registry.getMachineDAO();
- return machineDAO.existsMachineWithCodeInAnotherTransaction(code);
- }
-
- private boolean isIfExistsTheExistentMachineThisOne() {
- IMachineDAO machineDAO = Registry.getMachineDAO();
- try {
- Machine machine =
- machineDAO.findUniqueByCodeInAnotherTransaction(code);
- return machine.getId().equals(getId());
- } catch (InstanceNotFoundException e) {
- return true;
- }
- }
-
@Override
protected boolean isCriterionSatisfactionOfCorrectType(
CriterionSatisfaction c) {
diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/resources/entities/Resource.java b/navalplanner-business/src/main/java/org/navalplanner/business/resources/entities/Resource.java
index e9b03d990..1b55943d1 100644
--- a/navalplanner-business/src/main/java/org/navalplanner/business/resources/entities/Resource.java
+++ b/navalplanner-business/src/main/java/org/navalplanner/business/resources/entities/Resource.java
@@ -43,13 +43,14 @@ import org.navalplanner.business.calendars.entities.BaseCalendar;
import org.navalplanner.business.calendars.entities.IWorkHours;
import org.navalplanner.business.calendars.entities.ResourceCalendar;
import org.navalplanner.business.calendars.entities.SameWorkHoursEveryDay;
-import org.navalplanner.business.common.BaseEntity;
+import org.navalplanner.business.common.IntegrationEntity;
import org.navalplanner.business.common.Registry;
import org.navalplanner.business.common.exceptions.InstanceNotFoundException;
import org.navalplanner.business.common.exceptions.MultipleInstancesException;
import org.navalplanner.business.common.exceptions.ValidationException;
import org.navalplanner.business.costcategories.entities.ResourcesCostCategoryAssignment;
import org.navalplanner.business.planner.entities.DayAssignment;
+import org.navalplanner.business.resources.daos.IResourceDAO;
/**
* This class acts as the base class for all resources.
@@ -57,7 +58,7 @@ import org.navalplanner.business.planner.entities.DayAssignment;
* @author Susana Montes Pedreira
* @author Jacobo Aragunde Perez
*/
-public abstract class Resource extends BaseEntity{
+public abstract class Resource extends IntegrationEntity {
public static List machines(
Collection extends Resource> resources) {
@@ -941,6 +942,18 @@ public abstract class Resource extends BaseEntity{
}
+ @AssertTrue(message="criterion satisfaction codes must be unique inside " +
+ "a resource")
+ public boolean checkConstraintNonRepeatedCriterionSatisfactionCodes() {
+ return getFirstRepeatedCode(criterionSatisfactions) == null;
+ }
+
+ @AssertTrue(message="resources cost category assignment codes must be " +
+ "unique inside a resource")
+ public boolean checkConstraintNonRepeatedResourcesCostCategoryAssignmentCodes() {
+ return getFirstRepeatedCode(resourcesCostCategoryAssignments) == null;
+ }
+
protected boolean isCriterionSatisfactionOfCorrectType(
CriterionSatisfaction c) {
@@ -948,4 +961,8 @@ public abstract class Resource extends BaseEntity{
}
+ protected IResourceDAO getIntegrationEntityDAO() {
+ return Registry.getResourceDAO();
+ }
+
}
diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/resources/entities/Worker.java b/navalplanner-business/src/main/java/org/navalplanner/business/resources/entities/Worker.java
index 4b6d0545e..b5103ef92 100644
--- a/navalplanner-business/src/main/java/org/navalplanner/business/resources/entities/Worker.java
+++ b/navalplanner-business/src/main/java/org/navalplanner/business/resources/entities/Worker.java
@@ -36,21 +36,20 @@ import org.navalplanner.business.common.Registry;
public class Worker extends Resource {
public static Worker create() {
- Worker worker = new Worker();
- worker.setNewObject(true);
- return worker;
+ return create(new Worker());
}
- public static Worker create(String firstName, String surname, String nif) {
- Worker worker = new Worker(firstName, surname, nif);
- worker.setNewObject(true);
- return worker;
- }
-
- public static Worker createUnvalidated(String firstName, String surname,
+ public static Worker create(String firstName, String surname,
String nif) {
- Worker worker = create(new Worker());
+ return create(new Worker(firstName, surname, nif));
+
+ }
+
+ public static Worker createUnvalidated(String code, String firstName,
+ String surname, String nif) {
+
+ Worker worker = create(new Worker(), code);
worker.firstName = firstName;
worker.surname = surname;
diff --git a/navalplanner-business/src/main/resources/org/navalplanner/business/costcategories/entities/CostCategories.hbm.xml b/navalplanner-business/src/main/resources/org/navalplanner/business/costcategories/entities/CostCategories.hbm.xml
index a9b29706d..abde01e03 100644
--- a/navalplanner-business/src/main/resources/org/navalplanner/business/costcategories/entities/CostCategories.hbm.xml
+++ b/navalplanner-business/src/main/resources/org/navalplanner/business/costcategories/entities/CostCategories.hbm.xml
@@ -70,6 +70,8 @@
+
+
diff --git a/navalplanner-business/src/main/resources/org/navalplanner/business/resources/entities/Resources.hbm.xml b/navalplanner-business/src/main/resources/org/navalplanner/business/resources/entities/Resources.hbm.xml
index cdabb89b8..e560a00ec 100644
--- a/navalplanner-business/src/main/resources/org/navalplanner/business/resources/entities/Resources.hbm.xml
+++ b/navalplanner-business/src/main/resources/org/navalplanner/business/resources/entities/Resources.hbm.xml
@@ -12,6 +12,7 @@
Hibernate infers type="integer".
-->
+
@@ -46,7 +47,6 @@
-
@@ -98,6 +98,7 @@
+
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 748099fdc..1924bfde1 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
@@ -24,12 +24,16 @@ import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlSchemaType;
import javax.xml.datatype.XMLGregorianCalendar;
+import org.navalplanner.ws.common.api.IntegrationEntityDTO;
+
/**
* DTO for CriterionSatisfaction entity.
*
* @author Fernando Bellas Permuy
*/
-public class CriterionSatisfactionDTO {
+public class CriterionSatisfactionDTO extends IntegrationEntityDTO {
+
+ public final static String ENTITY_TYPE = "criterion-satisfaction";
@XmlAttribute(name="criterion-type-name")
public String criterionTypeName;
@@ -47,10 +51,11 @@ public class CriterionSatisfactionDTO {
public CriterionSatisfactionDTO() {}
- public CriterionSatisfactionDTO(
+ public CriterionSatisfactionDTO(String code,
String criterionTypeName, String criterionName,
XMLGregorianCalendar startDate, XMLGregorianCalendar endDate) {
+ super(code);
this.criterionTypeName = criterionTypeName;
this.criterionName = criterionName;
this.startDate = startDate;
@@ -58,4 +63,23 @@ public class CriterionSatisfactionDTO {
}
+ /**
+ * This constructor automatically generates a unique code. It is intended
+ * to facilitate the implementation of test cases that add new instances
+ * (such instances will have a unique code).
+ */
+ public CriterionSatisfactionDTO(
+ String criterionTypeName, String criterionName,
+ XMLGregorianCalendar startDate, XMLGregorianCalendar endDate) {
+
+ this(generateCode(), criterionTypeName, criterionName, startDate,
+ endDate);
+
+ }
+
+ @Override
+ public String getEntityType() {
+ return ENTITY_TYPE;
+ }
+
}
diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/ws/resources/api/MachineDTO.java b/navalplanner-webapp/src/main/java/org/navalplanner/ws/resources/api/MachineDTO.java
index 246a3477c..23f97238c 100644
--- a/navalplanner-webapp/src/main/java/org/navalplanner/ws/resources/api/MachineDTO.java
+++ b/navalplanner-webapp/src/main/java/org/navalplanner/ws/resources/api/MachineDTO.java
@@ -29,8 +29,7 @@ import javax.xml.bind.annotation.XmlAttribute;
*/
public class MachineDTO extends ResourceDTO {
- @XmlAttribute
- public String code;
+ public final static String ENTITY_TYPE = "machine";
@XmlAttribute
public String name;
@@ -41,9 +40,23 @@ public class MachineDTO extends ResourceDTO {
public MachineDTO() {}
public MachineDTO(String code, String name, String description) {
- this.code = code;
+ super(code);
this.name = name;
this.description = description;
}
+ /**
+ * This constructor automatically generates a unique code. It is intended
+ * to facilitate the implementation of test cases that add new instances
+ * (such instances will have a unique code).
+ */
+ public MachineDTO(String name, String description) {
+ this(generateCode(), name, description);
+ }
+
+ @Override
+ public String getEntityType() {
+ return ENTITY_TYPE;
+ }
+
}
diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/ws/resources/api/ResourceDTO.java b/navalplanner-webapp/src/main/java/org/navalplanner/ws/resources/api/ResourceDTO.java
index e1ba48f83..a7ba4656d 100644
--- a/navalplanner-webapp/src/main/java/org/navalplanner/ws/resources/api/ResourceDTO.java
+++ b/navalplanner-webapp/src/main/java/org/navalplanner/ws/resources/api/ResourceDTO.java
@@ -27,12 +27,14 @@ import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlElementWrapper;
+import org.navalplanner.ws.common.api.IntegrationEntityDTO;
+
/**
* DTO for Resource entity.
*
* @author Fernando Bellas Permuy
*/
-public abstract class ResourceDTO {
+public abstract class ResourceDTO extends IntegrationEntityDTO {
@XmlAttribute(name="calendar-name")
public String calendarName;
@@ -48,4 +50,10 @@ public abstract class ResourceDTO {
resourcesCostCategoryAssignments =
new ArrayList();
+ protected ResourceDTO() {}
+
+ protected ResourceDTO(String code) {
+ super(code);
+ }
+
}
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 b3004e7ea..a40eb2141 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
@@ -23,12 +23,17 @@ import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlSchemaType;
import javax.xml.datatype.XMLGregorianCalendar;
+import org.navalplanner.ws.common.api.IntegrationEntityDTO;
+
/**
* DTO for ResourcesCostCategoryAssignment entity.
*
* @author Fernando Bellas Permuy
*/
-public class ResourcesCostCategoryAssignmentDTO {
+public class ResourcesCostCategoryAssignmentDTO extends IntegrationEntityDTO {
+
+ public final static String ENTITY_TYPE =
+ "resources-cost-category-assignment";
@XmlAttribute(name="cost-category-name")
public String costCategoryName;
@@ -43,13 +48,33 @@ public class ResourcesCostCategoryAssignmentDTO {
public ResourcesCostCategoryAssignmentDTO() {}
- public ResourcesCostCategoryAssignmentDTO(String costCategoryName,
- XMLGregorianCalendar startDate, XMLGregorianCalendar endDate) {
+ public ResourcesCostCategoryAssignmentDTO(String code,
+ String costCategoryName, XMLGregorianCalendar startDate,
+ XMLGregorianCalendar endDate) {
+ super(code);
this.costCategoryName = costCategoryName;
this.startDate = startDate;
this.endDate = endDate;
}
+ /**
+ * This constructor automatically generates a unique code. It is intended
+ * 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) {
+
+ this(generateCode(), costCategoryName, startDate, endDate);
+
+ }
+
+ @Override
+ public String getEntityType() {
+ return ENTITY_TYPE;
+ }
+
}
diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/ws/resources/api/WorkerDTO.java b/navalplanner-webapp/src/main/java/org/navalplanner/ws/resources/api/WorkerDTO.java
index 5aea49125..cdeb73eb1 100644
--- a/navalplanner-webapp/src/main/java/org/navalplanner/ws/resources/api/WorkerDTO.java
+++ b/navalplanner-webapp/src/main/java/org/navalplanner/ws/resources/api/WorkerDTO.java
@@ -29,6 +29,8 @@ import javax.xml.bind.annotation.XmlAttribute;
*/
public class WorkerDTO extends ResourceDTO {
+ public final static String ENTITY_TYPE = "worker";
+
@XmlAttribute(name="first-name")
public String firstName;
@@ -40,10 +42,28 @@ public class WorkerDTO extends ResourceDTO {
public WorkerDTO() {}
- public WorkerDTO(String firstName, String surname, String nif) {
+ public WorkerDTO(String code, String firstName, String surname,
+ String nif) {
+
+ super(code);
this.firstName = firstName;
this.surname = surname;
this.nif = nif;
+
+ }
+
+ /**
+ * This constructor automatically generates a unique code. It is intended
+ * to facilitate the implementation of test cases that add new instances
+ * (such instances will have a unique code).
+ */
+ public WorkerDTO(String firstName, String surname, String nif) {
+ this(generateCode(), firstName, surname, nif);
+ }
+
+ @Override
+ public String getEntityType() {
+ return ENTITY_TYPE;
}
}
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 4da3d47c4..a255570ea 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
@@ -76,16 +76,23 @@ public class ResourceConverter {
private final static Machine createResourceWithBasicData(
MachineDTO machineDTO) {
- return Machine.createUnvalidated(StringUtils.trim(machineDTO.code),
+
+ return Machine.createUnvalidated
+ (StringUtils.trim(machineDTO.code),
StringUtils.trim(machineDTO.name),
StringUtils.trim(machineDTO.description));
+
}
private final static Worker createResourceWithBasicData(
WorkerDTO workerDTO) {
- return Worker.createUnvalidated(StringUtils.trim(workerDTO.firstName),
+
+ return Worker.createUnvalidated(
+ StringUtils.trim(workerDTO.code),
+ StringUtils.trim(workerDTO.firstName),
StringUtils.trim(workerDTO.surname),
StringUtils.trim(workerDTO.nif));
+
}
private static void addCriterionSatisfactions(Resource resource,
@@ -109,6 +116,7 @@ public class ResourceConverter {
throws CreateUnvalidatedException {
return CriterionSatisfaction.createUnvalidated(
+ StringUtils.trim(criterionSatisfactionDTO.code),
StringUtils.trim(criterionSatisfactionDTO.criterionTypeName),
StringUtils.trim(criterionSatisfactionDTO.criterionName),
resource,
@@ -154,7 +162,7 @@ public class ResourceConverter {
throws CreateUnvalidatedException {
return ResourcesCostCategoryAssignment.createUnvalidated(
- assignmentDTO.costCategoryName, resource,
+ assignmentDTO.code, assignmentDTO.costCategoryName, resource,
DateConverter.toLocalDate(assignmentDTO.startDate),
DateConverter.toLocalDate(assignmentDTO.endDate));
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 fcaadb28f..c7609cfa7 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
@@ -88,8 +88,8 @@ public class ResourceServiceREST implements IResourceService {
} catch (CreateUnvalidatedException e) {
instanceConstraintViolationsDTO =
InstanceConstraintViolationsDTO.create(
- Util.generateInstanceId(instanceNumber,
- getUserProvidedId(resourceDTO)),
+ Util.generateInstanceConstraintViolationsDTOId(
+ (long) instanceNumber, resourceDTO),
e.getMessage());
}
@@ -102,10 +102,10 @@ public class ResourceServiceREST implements IResourceService {
instanceConstraintViolationsDTO =
InstanceConstraintViolationsDTO.create(
- Util.generateInstanceId(instanceNumber,
- getUserProvidedId(resourceDTO)),
- getDuplicatedImportedResourceErrorMessage(
- resourceDTO));
+ Util.generateInstanceConstraintViolationsDTOId(
+ (long) instanceNumber, resourceDTO),
+ getDuplicatedImportedResourceErrorMessage(
+ resourceDTO));
} else {
@@ -125,9 +125,8 @@ public class ResourceServiceREST implements IResourceService {
} catch (ValidationException e) {
instanceConstraintViolationsDTO =
ConstraintViolationConverter.toDTO(
- Util.generateInstanceId(instanceNumber,
- getUserProvidedId(resourceDTO)),
- e.getInvalidValues());
+ Util.generateInstanceConstraintViolationsDTOId(
+ (long) instanceNumber, resourceDTO), e);
}
}
diff --git a/navalplanner-webapp/src/test/java/org/navalplanner/web/test/ws/common/Util.java b/navalplanner-webapp/src/test/java/org/navalplanner/web/test/ws/common/Util.java
index 0934aaefd..2922c349f 100644
--- a/navalplanner-webapp/src/test/java/org/navalplanner/web/test/ws/common/Util.java
+++ b/navalplanner-webapp/src/test/java/org/navalplanner/web/test/ws/common/Util.java
@@ -20,6 +20,7 @@
package org.navalplanner.web.test.ws.common;
+import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import java.util.List;
@@ -66,6 +67,8 @@ public class Util {
InstanceConstraintViolationsListDTO
instanceConstraintViolationsListDTO) {
+ assertNotNull(instanceConstraintViolationsListDTO.
+ instanceConstraintViolationsList);
assertTrue(
instanceConstraintViolationsListDTO.
instanceConstraintViolationsList.toString(),
@@ -82,9 +85,13 @@ public class Util {
instanceConstraintViolationsListDTO.
instanceConstraintViolationsList;
+ assertNotNull(instanceConstraintViolationsListDTO.
+ instanceConstraintViolationsList);
assertTrue(
instanceConstraintViolationsList.toString(),
instanceConstraintViolationsList.size() == 1);
+ assertNotNull(instanceConstraintViolationsList.get(0).
+ constraintViolations);
assertTrue(
instanceConstraintViolationsList.get(0).
constraintViolations.toString(),
@@ -101,12 +108,14 @@ public class Util {
instanceConstraintViolationsListDTO.
instanceConstraintViolationsList;
+ assertNotNull(instanceConstraintViolationsList);
assertTrue(
instanceConstraintViolationsList.toString(),
instanceConstraintViolationsList.size() == numberOfInstances);
for (InstanceConstraintViolationsDTO i :
instanceConstraintViolationsList) {
+ assertNotNull(i.constraintViolations);
assertTrue(
i.constraintViolations.toString(),
i.constraintViolations.size() == 1);
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 45fed1158..709796b85 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
@@ -193,7 +193,8 @@ public class ResourceServiceTest {
public void testAddWorkerWithExistingFirstNameSurnameAndNif() {
/* Create a worker. */
- Worker w1 = Worker.createUnvalidated(getUniqueName(), "surname", "nif");
+ Worker w1 = Worker.createUnvalidated(getUniqueName(), getUniqueName(),
+ "surname", "nif");
saveResource(w1);
/*
diff --git a/scripts/rest-clients/resources-sample-mini.xml b/scripts/rest-clients/resources-sample-mini.xml
index a07fd00d4..3c17bdb59 100644
--- a/scripts/rest-clients/resources-sample-mini.xml
+++ b/scripts/rest-clients/resources-sample-mini.xml
@@ -7,6 +7,7 @@
@@ -24,15 +27,17 @@
-
diff --git a/scripts/rest-clients/resources-sample.xml b/scripts/rest-clients/resources-sample.xml
index 61f691e97..ef71f7cd7 100644
--- a/scripts/rest-clients/resources-sample.xml
+++ b/scripts/rest-clients/resources-sample.xml
@@ -12,13 +12,11 @@
-
-
-
@@ -50,6 +50,7 @@
@@ -59,6 +60,7 @@
@@ -69,27 +71,34 @@
+
+
+
-
+
-
-
-
-
+
@@ -111,9 +118,10 @@
-
+
-
+
-
+
@@ -143,33 +153,35 @@
-
+
-
-
+
+
-
-
@@ -187,9 +201,10 @@
-
+
-
+
-
+
-
+
-
+
+
+
+