ItEr46S13CUImportacionRecursosProductivosItEr45S11: code added to entities imported by ResourceService.
IMPORTANT: "code" column has been added to tables of the following entitites: Resource, CriterionSatisfaction, and ResourcesCostCategoryAssignment. "code" column has been removed from Machine's table. In consequence, it is better to remove all the database when applying this patch (navaldev, navaldevtest, navalprod, and navaprodtest). This change is compatible with the current Web user interface. The only thing you will notice is that when creating a machine, the form containing the code automatically displays a value in the code field (which, of course, can be changed by the user). Of course, the user interface should be improved to set a blank value or propose a more meaningful code to the user (probably this second option). The service has not been adpated to GenericRESTService yet and duplicate codes in resources *being* imported are not detected yet (GenericRESTService will make this automatically).
This commit is contained in:
parent
be368f6b83
commit
571f814b64
26 changed files with 305 additions and 163 deletions
|
|
@ -99,7 +99,7 @@ public abstract class IntegrationEntity extends BaseEntity {
|
|||
* the private method <code>findIntegrationEntityDAO</code>, which in turn
|
||||
* calls on the abstract method <code>getIntegrationEntityDAO()</code>.
|
||||
*/
|
||||
@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());
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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 <jaragunde@igalia.com>
|
||||
*/
|
||||
public interface IResourcesCostCategoryAssignmentDAO extends IGenericDAO<ResourcesCostCategoryAssignment, Long> {
|
||||
public interface IResourcesCostCategoryAssignmentDAO
|
||||
extends IIntegrationEntityDAO<ResourcesCostCategoryAssignment> {
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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<ResourcesCostCategoryAssignment, Long> implements
|
||||
IResourcesCostCategoryAssignmentDAO {
|
||||
public class ResourcesCostCategoryAssignmentDAO
|
||||
extends IntegrationEntityDAO<ResourcesCostCategoryAssignment>
|
||||
implements IResourcesCostCategoryAssignmentDAO {
|
||||
|
||||
@Override
|
||||
public void remove(Long id) throws InstanceNotFoundException {
|
||||
|
|
|
|||
|
|
@ -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 <jaragunde@igalia.com>
|
||||
* @author Fernando Bellas Permuy <fbellas@udc.es>
|
||||
*/
|
||||
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();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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<CriterionSatisfaction, Long> implements
|
||||
ICriterionSatisfactionDAO {
|
||||
public class CriterionSatisfactionDAO
|
||||
extends IntegrationEntityDAO<CriterionSatisfaction>
|
||||
implements ICriterionSatisfactionDAO {
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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} <br />
|
||||
* @author Óscar González Fernández <ogonzalez@igalia.com>
|
||||
*/
|
||||
public interface ICriterionSatisfactionDAO extends
|
||||
IGenericDAO<CriterionSatisfaction, Long> {
|
||||
public interface ICriterionSatisfactionDAO
|
||||
extends IIntegrationEntityDAO<CriterionSatisfaction> {
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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 <fbellas@udc.es>
|
||||
* @author Diego Pino Garcia <dpino@igalia.com>
|
||||
*/
|
||||
public interface IResourceDAO extends IGenericDAO<Resource, Long> {
|
||||
public interface IResourceDAO extends IIntegrationEntityDAO<Resource> {
|
||||
|
||||
public List<Worker> getWorkers();
|
||||
|
||||
|
|
|
|||
|
|
@ -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<Resource, Long> implements
|
||||
IResourceDAO {
|
||||
public class ResourceDAO extends IntegrationEntityDAO<Resource> implements
|
||||
IResourceDAO {
|
||||
|
||||
@Override
|
||||
public List<Worker> getWorkers() {
|
||||
|
|
|
|||
|
|
@ -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 <br />
|
||||
* @author Óscar González Fernández <ogonzalez@igalia.com>
|
||||
* @author Fernando Bellas Permuy <fbellas@udc.es>
|
||||
*/
|
||||
public class CriterionSatisfaction extends BaseEntity {
|
||||
public class CriterionSatisfaction extends IntegrationEntity {
|
||||
|
||||
public static final Comparator<CriterionSatisfaction> 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();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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) {
|
||||
|
|
|
|||
|
|
@ -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 <smontes@wirelessgalicia.com>
|
||||
* @author Jacobo Aragunde Perez <jaragunde@igalia.com>
|
||||
*/
|
||||
public abstract class Resource extends BaseEntity{
|
||||
public abstract class Resource extends IntegrationEntity {
|
||||
|
||||
public static List<Machine> 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();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -70,6 +70,8 @@
|
|||
</id>
|
||||
<version name="version" access="property" type="long" />
|
||||
|
||||
<property name="code" access="property" not-null="true" unique="true"/>
|
||||
|
||||
<property name="initDate" type="org.joda.time.contrib.hibernate.PersistentLocalDate"/>
|
||||
|
||||
<property name="endDate" type="org.joda.time.contrib.hibernate.PersistentLocalDate"/>
|
||||
|
|
|
|||
|
|
@ -12,6 +12,7 @@
|
|||
Hibernate infers type="integer".
|
||||
-->
|
||||
<version name="version" access="property" type="long" />
|
||||
<property name="code" access="property" not-null="true" unique="true"/>
|
||||
<set access="field" cascade="all-delete-orphan" inverse="true" name="criterionSatisfactions">
|
||||
<key column="resource" not-null="true"/>
|
||||
<one-to-many class="CriterionSatisfaction"/>
|
||||
|
|
@ -46,7 +47,6 @@
|
|||
|
||||
<joined-subclass name="org.navalplanner.business.resources.entities.Machine">
|
||||
<key column="MACHINE_ID"/>
|
||||
<property name="code"/>
|
||||
<property name="name"/>
|
||||
<property name="description"/>
|
||||
<set inverse="true" name="configurationUnits" cascade="all-delete-orphan">
|
||||
|
|
@ -98,6 +98,7 @@
|
|||
</generator>
|
||||
</id>
|
||||
<version name="version" access="property" type="long" />
|
||||
<property name="code" access="property" not-null="true" unique="true"/>
|
||||
<property access="field" name="startDate" not-null="true"/>
|
||||
<property access="field" name="finishDate"/>
|
||||
<property access="field" name="isDeleted"/>
|
||||
|
|
|
|||
|
|
@ -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 <code>CriterionSatisfaction</code> entity.
|
||||
*
|
||||
* @author Fernando Bellas Permuy <fbellas@udc.es>
|
||||
*/
|
||||
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;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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 <code>Resource</code> entity.
|
||||
*
|
||||
* @author Fernando Bellas Permuy <fbellas@udc.es>
|
||||
*/
|
||||
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<ResourcesCostCategoryAssignmentDTO>();
|
||||
|
||||
protected ResourceDTO() {}
|
||||
|
||||
protected ResourceDTO(String code) {
|
||||
super(code);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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 <code>ResourcesCostCategoryAssignment</code> entity.
|
||||
*
|
||||
* @author Fernando Bellas Permuy <fbellas@udc.es>
|
||||
*/
|
||||
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;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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));
|
||||
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
||||
/*
|
||||
|
|
|
|||
|
|
@ -7,6 +7,7 @@
|
|||
<machine code="machineA" name="name" description="desc">
|
||||
<criterion-satisfaction-list>
|
||||
<criterion-satisfaction
|
||||
code="machineA-s1"
|
||||
criterion-type-name="LOCATION_GROUP"
|
||||
criterion-name="TestLocationGroupCriterion"
|
||||
start-date="2009-01-01"
|
||||
|
|
@ -14,9 +15,11 @@
|
|||
</criterion-satisfaction-list>
|
||||
<resources-cost-category-assignment-list>
|
||||
<resources-cost-category-assignment
|
||||
code="machineA-a1"
|
||||
cost-category-name="TestCostCategory"
|
||||
start-date="2001-01-01"/>
|
||||
<resources-cost-category-assignment
|
||||
code="machineA-a2"
|
||||
cost-category-name="TestCostCategory"
|
||||
start-date="2000-01-01"
|
||||
end-date="2000-04-01"/>
|
||||
|
|
@ -24,15 +27,17 @@
|
|||
</machine>
|
||||
|
||||
<!-- [It assumes existence of "TestCalendar" and "TestCostCategory"] OK -->
|
||||
<worker first-name="workerA" surname="surname" nif="nif"
|
||||
<worker code="workerA" first-name="workerA" surname="surname" nif="nif"
|
||||
calendar-name="TestCalendar">
|
||||
<criterion-satisfaction-list>
|
||||
<criterion-satisfaction
|
||||
code="workerA-s1"
|
||||
criterion-type-name="WORK_RELATIONSHIP"
|
||||
criterion-name="hiredResourceWorkingRelationship"
|
||||
start-date="2009-01-01"
|
||||
end-date=""/>
|
||||
<criterion-satisfaction
|
||||
code="workerA-s2"
|
||||
criterion-type-name="LEAVE"
|
||||
criterion-name="paternityLeave"
|
||||
start-date="2009-12-24"
|
||||
|
|
@ -40,9 +45,11 @@
|
|||
</criterion-satisfaction-list>
|
||||
<resources-cost-category-assignment-list>
|
||||
<resources-cost-category-assignment
|
||||
code="workerA-a1"
|
||||
cost-category-name="TestCostCategory"
|
||||
start-date="2001-01-01"/>
|
||||
<resources-cost-category-assignment
|
||||
code="workerA-a2"
|
||||
cost-category-name="TestCostCategory"
|
||||
start-date="2000-01-01"
|
||||
end-date="2000-04-01"/>
|
||||
|
|
|
|||
|
|
@ -12,13 +12,11 @@
|
|||
<!-- OK -->
|
||||
<machine code="m1" name="m1-name" description="m1-desc"/>
|
||||
|
||||
<!-- Missing code and name (description is optional). -->
|
||||
<machine code="" description=""/>
|
||||
|
||||
<!-- Criterion satisfaction of incorrect type. -->
|
||||
<machine code="m2" name="m2-name" description="m2-desc">
|
||||
<criterion-satisfaction-list>
|
||||
<criterion-satisfaction
|
||||
code="m2-a1"
|
||||
criterion-type-name="WORK_RELATIONSHIP"
|
||||
criterion-name="hiredResourceWorkingRelationship"
|
||||
start-date="2009-01-01"
|
||||
|
|
@ -37,9 +35,11 @@
|
|||
<machine code="m5" name="m5-name" description="m5-desc">
|
||||
<resources-cost-category-assignment-list>
|
||||
<resources-cost-category-assignment
|
||||
code="m5-a1"
|
||||
cost-category-name="TestCostCategory"
|
||||
start-date="2001-01-01"/>
|
||||
<resources-cost-category-assignment
|
||||
code="m5-a2"
|
||||
cost-category-name="TestCostCategory"
|
||||
start-date="2000-01-01"
|
||||
end-date="2000-04-01"/>
|
||||
|
|
@ -50,6 +50,7 @@
|
|||
<machine code="m6" name="m6-name" description="m6-desc">
|
||||
<resources-cost-category-assignment-list>
|
||||
<resources-cost-category-assignment
|
||||
code="m6-a1"
|
||||
cost-category-name="TestCostCategory"
|
||||
end-date="2000-01-01"/>
|
||||
</resources-cost-category-assignment-list>
|
||||
|
|
@ -59,6 +60,7 @@
|
|||
<machine code="m7" name="m7-name" description="m7-desc">
|
||||
<resources-cost-category-assignment-list>
|
||||
<resources-cost-category-assignment
|
||||
code="m7-a1"
|
||||
cost-category-name="TestCostCategory"
|
||||
start-date="2000-02-01"
|
||||
end-date="2000-01-01"/>
|
||||
|
|
@ -69,27 +71,34 @@
|
|||
<machine code="m8" name="m8-name" description="m8-desc">
|
||||
<resources-cost-category-assignment-list>
|
||||
<resources-cost-category-assignment
|
||||
code="m8-a1"
|
||||
cost-category-name="TestCostCategory"
|
||||
start-date="2000-02-01"
|
||||
end-date="2000-05-01"/>
|
||||
<resources-cost-category-assignment
|
||||
code="m8-a2"
|
||||
cost-category-name="TestCostCategory"
|
||||
start-date="2000-01-01"
|
||||
end-date="2000-03-01"/>
|
||||
</resources-cost-category-assignment-list>
|
||||
</machine>
|
||||
|
||||
<!-- Missing code and name (description is optional). -->
|
||||
<machine code="" description=""/>
|
||||
|
||||
<!-- *** Workers *** -->
|
||||
|
||||
<!-- OK -->
|
||||
<worker first-name="w1-firstName" surname="w1-surname" nif="w1-nif">
|
||||
<worker code="w1" first-name="w1-firstName" surname="w1-surname" nif="w1-nif">
|
||||
<criterion-satisfaction-list>
|
||||
<criterion-satisfaction
|
||||
code="w1-s1"
|
||||
criterion-type-name="WORK_RELATIONSHIP"
|
||||
criterion-name="hiredResourceWorkingRelationship"
|
||||
start-date="2009-01-01"
|
||||
end-date=""/>
|
||||
<criterion-satisfaction
|
||||
code="w1-s2"
|
||||
criterion-type-name="LEAVE"
|
||||
criterion-name="paternityLeave"
|
||||
start-date="2009-12-24"
|
||||
|
|
@ -97,13 +106,11 @@
|
|||
</criterion-satisfaction-list>
|
||||
</worker>
|
||||
|
||||
<!-- Missing first name, surname, and nif. -->
|
||||
<worker first-name="" nif=""/>
|
||||
|
||||
<!-- Missing start date in criterion satisfaction. -->
|
||||
<worker first-name="w2-firstName" surname="w2-surname" nif="w2-nif">
|
||||
<worker code="w2" first-name="w2-firstName" surname="w2-surname" nif="w2-nif">
|
||||
<criterion-satisfaction-list>
|
||||
<criterion-satisfaction
|
||||
code="w2-s1"
|
||||
criterion-type-name="LEAVE"
|
||||
criterion-name="paternityLeave"
|
||||
end-date="2009-12-25"/>
|
||||
|
|
@ -111,9 +118,10 @@
|
|||
</worker>
|
||||
|
||||
<!-- Non-existent criterion type. -->
|
||||
<worker first-name="w3-firstName" surname="w3-surname" nif="w3-nif">
|
||||
<worker code="w3" first-name="w3-firstName" surname="w3-surname" nif="w3-nif">
|
||||
<criterion-satisfaction-list>
|
||||
<criterion-satisfaction
|
||||
code="w3-s1"
|
||||
criterion-type-name="WORK_RELATIONSHIP_XXX"
|
||||
criterion-name="hiredResourceWorkingRelationship"
|
||||
start-date="2009-01-01"
|
||||
|
|
@ -122,9 +130,10 @@
|
|||
</worker>
|
||||
|
||||
<!-- Non-existent criterion. -->
|
||||
<worker first-name="w4-firstName" surname="w4-surname" nif="w4-nif">
|
||||
<worker code="w4" first-name="w4-firstName" surname="w4-surname" nif="w4-nif">
|
||||
<criterion-satisfaction-list>
|
||||
<criterion-satisfaction
|
||||
code="w4-s1"
|
||||
criterion-type-name="WORK_RELATIONSHIP"
|
||||
criterion-name="hiredResourceWorkingRelationshipXXX"
|
||||
start-date="2009-01-01"
|
||||
|
|
@ -133,9 +142,10 @@
|
|||
</worker>
|
||||
|
||||
<!-- Criterion not specified. -->
|
||||
<worker first-name="w5-firstName" surname="w5-surname" nif="w5-nif">
|
||||
<worker code="w5" first-name="w5-firstName" surname="w5-surname" nif="w5-nif">
|
||||
<criterion-satisfaction-list>
|
||||
<criterion-satisfaction
|
||||
code="w5-s1"
|
||||
criterion-type-name="WORK_RELATIONSHIP"
|
||||
start-date="2009-01-01"
|
||||
end-date=""/>
|
||||
|
|
@ -143,33 +153,35 @@
|
|||
</worker>
|
||||
|
||||
<!-- Criterion type not specified. -->
|
||||
<worker first-name="w6-firstName" surname="w6-surname" nif="w6-nif">
|
||||
<worker code="w6" first-name="w6-firstName" surname="w6-surname" nif="w6-nif">
|
||||
<criterion-satisfaction-list>
|
||||
<criterion-satisfaction
|
||||
code="w6-s1"
|
||||
criterion-name="hiredResourceWorkingRelationship"
|
||||
start-date="2009-01-01"
|
||||
end-date=""/>
|
||||
</criterion-satisfaction-list>
|
||||
</worker>
|
||||
|
||||
<!-- Another worker is being imported with the same first name, surname,
|
||||
and nif. -->
|
||||
<worker first-name="w1-firstName" surname="w1-surname" nif="w1-nif"/>
|
||||
<!-- Missing first name, surname, and nif. -->
|
||||
<worker code="w7" first-name="" nif=""/>
|
||||
|
||||
<!-- OK or not OK depending on the existence of "TestCalendar". -->
|
||||
<worker first-name="w8-firstName" surname="w8-surname" nif="w8-nif"
|
||||
<worker code="w8" first-name="w8-firstName" surname="w8-surname" nif="w8-nif"
|
||||
calendar-name="TestCalendar" />
|
||||
|
||||
<!-- [It assumes existence of "TestCalendar" and "TestCostCategory"] OK -->
|
||||
<worker first-name="w9-firstName" surname="w9-surname" nif="w9-nif"
|
||||
<worker code="w9" first-name="w9-firstName" surname="w9-surname" nif="w9-nif"
|
||||
calendar-name="TestCalendar">
|
||||
<criterion-satisfaction-list>
|
||||
<criterion-satisfaction
|
||||
code="w9-s1"
|
||||
criterion-type-name="WORK_RELATIONSHIP"
|
||||
criterion-name="hiredResourceWorkingRelationship"
|
||||
start-date="2009-01-01"
|
||||
end-date=""/>
|
||||
<criterion-satisfaction
|
||||
code="w9-s2"
|
||||
criterion-type-name="LEAVE"
|
||||
criterion-name="paternityLeave"
|
||||
start-date="2009-12-24"
|
||||
|
|
@ -177,9 +189,11 @@
|
|||
</criterion-satisfaction-list>
|
||||
<resources-cost-category-assignment-list>
|
||||
<resources-cost-category-assignment
|
||||
code="w9-a1"
|
||||
cost-category-name="TestCostCategory"
|
||||
start-date="2001-01-01"/>
|
||||
<resources-cost-category-assignment
|
||||
code="w9-a2"
|
||||
cost-category-name="TestCostCategory"
|
||||
start-date="2000-01-01"
|
||||
end-date="2000-04-01"/>
|
||||
|
|
@ -187,9 +201,10 @@
|
|||
</worker>
|
||||
|
||||
<!-- Negative interval. -->
|
||||
<worker first-name="w10-firstName" surname="w10-surname" nif="w10-nif">
|
||||
<worker code="w10" first-name="w10-firstName" surname="w10-surname" nif="w10-nif">
|
||||
<criterion-satisfaction-list>
|
||||
<criterion-satisfaction
|
||||
code="w10-s1"
|
||||
criterion-type-name="LEAVE"
|
||||
criterion-name="paternityLeave"
|
||||
start-date="2000-02-01"
|
||||
|
|
@ -198,14 +213,16 @@
|
|||
</worker>
|
||||
|
||||
<!-- Criterion satisfaction overlapping in "LEAVE :: paternityLeave". -->
|
||||
<worker first-name="w11-firstName" surname="w11-surname" nif="w11-nif">
|
||||
<worker code="w11" first-name="w11-firstName" surname="w11-surname" nif="w11-nif">
|
||||
<criterion-satisfaction-list>
|
||||
<criterion-satisfaction
|
||||
code="w11-s1"
|
||||
criterion-type-name="LEAVE"
|
||||
criterion-name="paternityLeave"
|
||||
start-date="2000-01-01"
|
||||
end-date="2000-02-01"/>
|
||||
<criterion-satisfaction
|
||||
code="w11-s2"
|
||||
criterion-type-name="LEAVE"
|
||||
criterion-name="paternityLeave"
|
||||
start-date="2000-01-15"
|
||||
|
|
@ -215,14 +232,16 @@
|
|||
|
||||
<!-- Criterion satisfaction overlapping (LEAVE does not allow
|
||||
simultaneous criterion satisfactions in intervals that overlap). -->
|
||||
<worker first-name="w12-firstName" surname="w12-surname" nif="w12-nif">
|
||||
<worker code="w12" first-name="w12-firstName" surname="w12-surname" nif="w12-nif">
|
||||
<criterion-satisfaction-list>
|
||||
<criterion-satisfaction
|
||||
code="w12-s1"
|
||||
criterion-type-name="LEAVE"
|
||||
criterion-name="paternityLeave"
|
||||
start-date="2000-01-01"
|
||||
end-date="2000-02-01"/>
|
||||
<criterion-satisfaction
|
||||
code="w12-s2"
|
||||
criterion-type-name="LEAVE"
|
||||
criterion-name="medicalLeave"
|
||||
start-date="2000-01-15"
|
||||
|
|
@ -234,14 +253,16 @@
|
|||
"TestLocationGroupCriterion2"] OK
|
||||
(LOCATION_GROUP allows simultaneous criterion satisfactions in
|
||||
intervals that overlap). -->
|
||||
<worker first-name="w13-firstName" surname="w13-surname" nif="w13-nif">
|
||||
<worker code="w13" first-name="w13-firstName" surname="w13-surname" nif="w13-nif">
|
||||
<criterion-satisfaction-list>
|
||||
<criterion-satisfaction
|
||||
code="w13-s1"
|
||||
criterion-type-name="LOCATION_GROUP"
|
||||
criterion-name="TestLocationGroupCriterion"
|
||||
start-date="2000-01-01"
|
||||
end-date="2000-02-01"/>
|
||||
<criterion-satisfaction
|
||||
code="w13-s2"
|
||||
criterion-type-name="LOCATION_GROUP"
|
||||
criterion-name="TestLocationGroupCriterion2"
|
||||
start-date="2000-01-15"
|
||||
|
|
@ -252,14 +273,16 @@
|
|||
<!-- [It assumes existence of "TestLocationGroupCriterion" and
|
||||
"TestLocationGroupCriterion2"] Criterion satisfaction overlapping in
|
||||
"LOCATION_GROUP :: TestLocationGroupCriterion". -->
|
||||
<worker first-name="w14-firstName" surname="w14-surname" nif="w14-nif">
|
||||
<worker code="w14" first-name="w14-firstName" surname="w14-surname" nif="w14-nif">
|
||||
<criterion-satisfaction-list>
|
||||
<criterion-satisfaction
|
||||
code="w14-s1"
|
||||
criterion-type-name="LOCATION_GROUP"
|
||||
criterion-name="TestLocationGroupCriterion"
|
||||
start-date="2000-01-01"
|
||||
end-date="2000-02-01"/>
|
||||
<criterion-satisfaction
|
||||
code="w14-s2"
|
||||
criterion-type-name="LOCATION_GROUP"
|
||||
criterion-name="TestLocationGroupCriterion"
|
||||
start-date="2000-01-15"
|
||||
|
|
@ -267,4 +290,8 @@
|
|||
</criterion-satisfaction-list>
|
||||
</worker>
|
||||
|
||||
<!-- Another worker is being imported with the same first name, surname,
|
||||
and nif. -->
|
||||
<worker code="w15" first-name="w1-firstName" surname="w1-surname" nif="w1-nif"/>
|
||||
|
||||
</resource-list>
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue