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 417e5f2e0..771c1b45e 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
@@ -1,12 +1,15 @@
package org.navalplanner.business.resources.daos;
+import java.util.List;
+
import org.navalplanner.business.common.daos.IGenericDAO;
import org.navalplanner.business.resources.entities.Resource;
+import org.navalplanner.business.resources.entities.Worker;
/**
* DAO interface for the Resource entity.
- *
* @author Fernando Bellas Permuy
- *
*/
-public interface IResourceDAO extends IGenericDAO {}
+public interface IResourceDAO extends IGenericDAO {
+ 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 60cc4d588..2eb1bb338 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
@@ -1,18 +1,24 @@
package org.navalplanner.business.resources.daos;
+import java.util.List;
+
import org.navalplanner.business.common.daos.GenericDAOHibernate;
import org.navalplanner.business.resources.entities.Resource;
+import org.navalplanner.business.resources.entities.Worker;
import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Repository;
/**
* Hibernate DAO for the Resource entity.
- *
* @author Fernando Bellas Permuy
- *
*/
@Repository
@Scope(BeanDefinition.SCOPE_SINGLETON)
-public class ResourceDAO extends GenericDAOHibernate
- implements IResourceDAO {}
+public class ResourceDAO extends GenericDAOHibernate implements
+ IResourceDAO {
+ @Override
+ public List getWorkers() {
+ return list(Worker.class);
+ }
+}
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 b9fb6c7bb..a30325f88 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
@@ -1,4 +1,3 @@
-
package org.navalplanner.business.resources.entities;
import java.util.ArrayList;
@@ -29,7 +28,7 @@ import org.navalplanner.business.common.BaseEntity;
* @author Fernando Bellas Permuy
* @author Susana Montes Pedreira
*/
-public abstract class Resource extends BaseEntity {
+public abstract class Resource extends BaseEntity{
private ResourceCalendar calendar;
@@ -370,7 +369,19 @@ public abstract class Resource extends BaseEntity {
return criterionSatisfactions.contains(satisfaction);
}
- public void checkNotOverlaps(List types) {
+ public void checkNotOverlaps() {
+ checkNotOverlaps(getRelatedTypes());
+ }
+
+ private List getRelatedTypes() {
+ List types = new ArrayList();
+ for (CriterionSatisfaction criterionSatisfaction : getAllSatisfactions()) {
+ types.add(criterionSatisfaction.getCriterion().getType());
+ }
+ return types;
+ }
+
+ private void checkNotOverlaps(List types) {
for (CriterionType criterionType : types) {
if (!criterionType.allowSimultaneousCriterionsPerResource()) {
List satisfactions = query().from(
diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/resources/services/IResourceService.java b/navalplanner-business/src/main/java/org/navalplanner/business/resources/services/IResourceService.java
deleted file mode 100644
index 8febbb7fe..000000000
--- a/navalplanner-business/src/main/java/org/navalplanner/business/resources/services/IResourceService.java
+++ /dev/null
@@ -1,55 +0,0 @@
-package org.navalplanner.business.resources.services;
-
-import java.util.List;
-import java.util.Set;
-
-import org.navalplanner.business.common.exceptions.InstanceNotFoundException;
-import org.navalplanner.business.common.exceptions.ValidationException;
-import org.navalplanner.business.resources.entities.ICriterion;
-import org.navalplanner.business.resources.entities.Resource;
-import org.navalplanner.business.resources.entities.Worker;
-
-/**
- * Interface for the resource management service.
- * @author Fernando Bellas Permuy
- */
-public interface IResourceService {
-
- /**
- * It updates or inserts the resource passed as a parameter. If the resource
- * is a composite resource, updating or inserting is cascaded to the
- * resources contained in it.
- * @throws ValidationException
- */
- public void saveResource(Resource resource);
-
- /**
- * It checks if the version of the detached object passed as a parameter is
- * older than the one in the database. If it is older, it throws
- * org.springframework.dao.OptimisticLockingFailureException.
- * It can not be called as part of a READ-WRITE transaction.
- */
- public void checkVersion(Resource resource);
-
- public Resource findResource(Long resourceId)
- throws InstanceNotFoundException;
-
- public int getResourceDailyCapacity(Long resourceId)
- throws InstanceNotFoundException;
-
- /**
- * It removes a resource. If the resource is a composite resource, the
- * resources contained in it are not removed.
- */
- public void removeResource(Long resourceId)
- throws InstanceNotFoundException;
-
- public List getWorkers();
-
- public List getResources();
-
- public List getResources(Class klass);
-
- public Set getSetOfResourcesSatisfying(ICriterion criterion);
-
-}
diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/resources/services/ResourceServiceImpl.java b/navalplanner-business/src/main/java/org/navalplanner/business/resources/services/ResourceServiceImpl.java
deleted file mode 100644
index 7aa1e9285..000000000
--- a/navalplanner-business/src/main/java/org/navalplanner/business/resources/services/ResourceServiceImpl.java
+++ /dev/null
@@ -1,100 +0,0 @@
-package org.navalplanner.business.resources.services;
-
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-
-import org.navalplanner.business.common.exceptions.InstanceNotFoundException;
-import org.navalplanner.business.resources.daos.ICriterionTypeDAO;
-import org.navalplanner.business.resources.daos.IResourceDAO;
-import org.navalplanner.business.resources.entities.CriterionType;
-import org.navalplanner.business.resources.entities.ICriterion;
-import org.navalplanner.business.resources.entities.Resource;
-import org.navalplanner.business.resources.entities.Worker;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.config.BeanDefinition;
-import org.springframework.context.annotation.Scope;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-
-/**
- * Implementation of the resource management service. Resource DAOs are
- * autowired.
- * @author Fernando Bellas Permuy
- */
-@Service
-@Scope(BeanDefinition.SCOPE_SINGLETON)
-@Transactional
-public class ResourceServiceImpl implements IResourceService {
-
- @Autowired
- private IResourceDAO resourceDao;
-
- @Autowired
- private ICriterionTypeDAO criterionTypeDAO;
-
-
- @Transactional
- public void saveResource(Resource resource) {
- checkResourceIsOk(resource);
- resourceDao.save(resource);
- }
-
- @Transactional(readOnly = true)
- public void checkVersion(Resource resource) {
- resourceDao.checkVersion(resource);
- }
-
- private void checkResourceIsOk(Resource resource) {
- List types = criterionTypeDAO.getCriterionTypes();
- resource.checkNotOverlaps(types);
- }
-
- @Transactional(readOnly = true)
- public Resource findResource(Long resourceId)
- throws InstanceNotFoundException {
-
- return resourceDao.find(resourceId);
-
- }
-
- @Transactional(readOnly = true)
- public int getResourceDailyCapacity(Long resourceId)
- throws InstanceNotFoundException {
-
- return resourceDao.find(resourceId).getDailyCapacity();
-
- }
-
- public void removeResource(Long resourceId)
- throws InstanceNotFoundException {
- resourceDao.remove(resourceId);
- }
-
- @Override
- public List getWorkers() {
- return resourceDao.list(Worker.class);
- }
-
- @Override
- public Set getSetOfResourcesSatisfying(ICriterion criterion) {
- List resources = resourceDao.list(Resource.class);
- HashSet result = new HashSet();
- for (Resource resource : resources) {
- if (criterion.isSatisfiedBy(resource)) {
- result.add(resource);
- }
- }
- return result;
- }
-
- @Override
- public List getResources() {
- return resourceDao.list(Resource.class);
- }
-
- @Override
- public List getResources(Class klass) {
- return resourceDao.list(klass);
- }
-}
diff --git a/navalplanner-business/src/test/java/org/navalplanner/business/test/resources/services/ResourceServiceTest.java b/navalplanner-business/src/test/java/org/navalplanner/business/test/resources/services/ResourceServiceTest.java
deleted file mode 100644
index 1df73523c..000000000
--- a/navalplanner-business/src/test/java/org/navalplanner/business/test/resources/services/ResourceServiceTest.java
+++ /dev/null
@@ -1,182 +0,0 @@
-package org.navalplanner.business.test.resources.services;
-
-import static org.hamcrest.CoreMatchers.equalTo;
-import static org.hamcrest.CoreMatchers.not;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertThat;
-import static org.junit.Assert.fail;
-import static org.navalplanner.business.BusinessGlobalNames.BUSINESS_SPRING_CONFIG_FILE;
-import static org.navalplanner.business.test.BusinessGlobalNames.BUSINESS_SPRING_CONFIG_TEST_FILE;
-
-import org.hibernate.validator.ClassValidator;
-import org.hibernate.validator.InvalidStateException;
-import org.hibernate.validator.InvalidValue;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.navalplanner.business.common.IAdHocTransactionService;
-import org.navalplanner.business.common.IOnTransaction;
-import org.navalplanner.business.common.exceptions.InstanceNotFoundException;
-import org.navalplanner.business.resources.daos.ICriterionDAO;
-import org.navalplanner.business.resources.daos.ICriterionTypeDAO;
-import org.navalplanner.business.resources.daos.IResourceDAO;
-import org.navalplanner.business.resources.entities.Criterion;
-import org.navalplanner.business.resources.entities.CriterionWithItsType;
-import org.navalplanner.business.resources.entities.ICriterion;
-import org.navalplanner.business.resources.entities.Worker;
-import org.navalplanner.business.resources.services.IResourceService;
-import org.navalplanner.business.test.resources.daos.CriterionDAOTest;
-import org.navalplanner.business.test.resources.entities.CriterionTest;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.test.annotation.NotTransactional;
-import org.springframework.test.context.ContextConfiguration;
-import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
-import org.springframework.transaction.annotation.Transactional;
-
-/**
- * A class for testing ResourceService. The service and the
- * resource DAOs are autowired.
- * @author Fernando Bellas Permuy
- */
-@RunWith(SpringJUnit4ClassRunner.class)
-@ContextConfiguration(locations = { BUSINESS_SPRING_CONFIG_FILE,
- BUSINESS_SPRING_CONFIG_TEST_FILE })
-@Transactional
-public class ResourceServiceTest {
-
- @Autowired
- private IResourceService resourceService;
-
- @Autowired
- private IResourceDAO resourceDao;
-
- @Autowired
- private ICriterionDAO criterionDAO;
-
- @Autowired
- private ICriterionTypeDAO criterionTypeDAO;
-
- @Autowired
- private IAdHocTransactionService adHocTransactionService;
-
- private Worker worker;
-
- private Worker[] invalidWorkers;
-
- private Criterion criterion;
-
- @Test
- public void afterRemovingASavedWorkerNoLongerExists()
- throws InstanceNotFoundException {
- givenSavedWorker();
- resourceService.removeResource(worker.getId());
- assertFalse(resourceDao.exists(worker.getId()));
- }
-
- private void givenSavedWorker() {
- this.worker = new Worker("worker-1", "worker-2-surname", "11111111A", 8);
- resourceService.saveResource(this.worker);
- }
-
- @Test
- public void getWorkersReturnsTheNewlyCreatedResources() {
- final int previousWorkers = resourceService.getWorkers().size();
- givenSavedWorker();
- givenSavedWorker();
- assertEquals("Two workers has been saved", previousWorkers + 2,
- resourceService.getWorkers().size());
- }
-
- @Test
- public void invalidValuesAreReportedByClassValidator() {
- givenInvalidWorkers();
- for (Worker invalidWorker : invalidWorkers) {
- thenHasSomeInvalidValue(invalidWorker);
- }
- }
-
- @Test
- @NotTransactional
- public void invalidWorkerCannotBeSaved() {
- givenInvalidWorkers();
- for (Worker invalidWorker : invalidWorkers) {
- thenCannotBeSaved(invalidWorker);
- }
- }
-
- private void thenCannotBeSaved(Worker invalidWorker) {
- try {
- resourceService.saveResource(invalidWorker);
- fail("must send invalid state exception");
- } catch (InvalidStateException e) {
- // ok
- }
- }
-
- private void thenHasSomeInvalidValue(Worker invalidWorker) {
- ClassValidator workerValidator = new ClassValidator(
- Worker.class);
- InvalidValue[] invalidValues = workerValidator
- .getInvalidValues(invalidWorker);
- assertEquals(1, invalidValues.length);
- }
-
- private void givenInvalidWorkers() {
- invalidWorkers = new Worker[] {
- new Worker("first name", null, "233233", 3),
- new Worker("first name", "second name", "233233", -1),
- new Worker(null, "second name", "233233", 3),
- new Worker("first name", "second name", null, 3) };
- }
-
- @Test
- @NotTransactional
- public void versionIsIncreased() {
- givenSavedWorker();
-
- long versionValueAfterSave = worker.getVersion();
- worker.setFirstName("blabla");
- resourceService.saveResource(worker);
-
- assertThat(worker.getVersion(), not(equalTo(versionValueAfterSave)));
- }
-
- @Test
- @NotTransactional
- public void versionIsIncreasedWhenAddingSatisfactions() throws Exception {
- givenSavedWorker();
- givenCriterion();
-
- long versionValueAfterSave = worker.getVersion();
-
- worker.addSatisfaction(new CriterionWithItsType(criterion.getType(),
- criterion));
- resourceService.saveResource(worker);
-
- assertThat(worker.getVersion(), not(equalTo(versionValueAfterSave)));
- }
-
- private void givenCriterion() {
- this.criterion = CriterionDAOTest.createValidCriterion();
- adHocTransactionService.onTransaction(new IOnTransaction() {
-
- @Override
- public Void execute() {
- criterionTypeDAO.save(criterion.getType());
- criterionDAO.save(criterion);
- return null;
- }
- });
- }
-
- @Test
- public void setOfResourcesSatisfyingReturnTheResourcesMatchedByCriterion() {
- givenSavedWorker();
-
- ICriterion criterion = CriterionTest.justThisResourcesCriterion(worker);
-
- assertEquals(1, resourceService.getSetOfResourcesSatisfying(
- criterion).size());
- }
-
-}
diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/common/converters/ResourceConverter.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/common/converters/ResourceConverter.java
index 95217b611..fbc5e04cc 100644
--- a/navalplanner-webapp/src/main/java/org/navalplanner/web/common/converters/ResourceConverter.java
+++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/common/converters/ResourceConverter.java
@@ -1,12 +1,13 @@
package org.navalplanner.web.common.converters;
import org.navalplanner.business.common.exceptions.InstanceNotFoundException;
+import org.navalplanner.business.resources.daos.IResourceDAO;
import org.navalplanner.business.resources.entities.Resource;
-import org.navalplanner.business.resources.services.IResourceService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;
+import org.springframework.transaction.annotation.Transactional;
/**
* A {@link IConverter} for {@link Resource}
@@ -17,13 +18,14 @@ import org.springframework.stereotype.Component;
public class ResourceConverter implements IConverter {
@Autowired
- private IResourceService resourceService;
+ private IResourceDAO resourceDAO;
@Override
+ @Transactional(readOnly = true)
public Resource asObject(String stringRepresentation) {
long id = Long.parseLong(stringRepresentation);
try {
- return resourceService.findResource(id);
+ return resourceDAO.find(id);
} catch (InstanceNotFoundException e) {
throw new RuntimeException(e);
}
diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/resources/criterion/CriterionsModel.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/resources/criterion/CriterionsModel.java
index c49bf5ab7..cb5353d24 100644
--- a/navalplanner-webapp/src/main/java/org/navalplanner/web/resources/criterion/CriterionsModel.java
+++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/resources/criterion/CriterionsModel.java
@@ -13,13 +13,13 @@ import org.navalplanner.business.common.exceptions.InstanceNotFoundException;
import org.navalplanner.business.common.exceptions.ValidationException;
import org.navalplanner.business.resources.daos.ICriterionDAO;
import org.navalplanner.business.resources.daos.ICriterionTypeDAO;
+import org.navalplanner.business.resources.daos.IResourceDAO;
import org.navalplanner.business.resources.entities.Criterion;
import org.navalplanner.business.resources.entities.CriterionType;
import org.navalplanner.business.resources.entities.CriterionWithItsType;
import org.navalplanner.business.resources.entities.ICriterionType;
import org.navalplanner.business.resources.entities.Resource;
import org.navalplanner.business.resources.entities.Worker;
-import org.navalplanner.business.resources.services.IResourceService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.context.annotation.Scope;
@@ -46,7 +46,7 @@ public class CriterionsModel implements ICriterionsModel {
private ICriterionTypeDAO criterionTypeDAO;
@Autowired
- private IResourceService resourceService;
+ private IResourceDAO resourceDAO;
private ICriterionType> criterionType;
@@ -179,7 +179,7 @@ public class CriterionsModel implements ICriterionsModel {
Validate.notNull(resourceType, "resourceType must be not null");
Validate.notNull(criterion, "criterion must be not null");
List result = new ArrayList();
- for (T r : resourceService.getResources(resourceType)) {
+ for (T r : resourceDAO.list(resourceType)) {
if (criterion.isSatisfiedBy(r)) {
result.add(r);
}
@@ -188,8 +188,9 @@ public class CriterionsModel implements ICriterionsModel {
}
@Override
+ @Transactional(readOnly = true)
public List getAllWorkers() {
- return resourceService.getWorkers();
+ return resourceDAO.getWorkers();
}
@Override
@@ -203,9 +204,10 @@ public class CriterionsModel implements ICriterionsModel {
public void activateAll(Collection extends Resource> resources) {
for (Resource resource : resources) {
Resource reloaded = find(resource.getId());
- reloaded.addSatisfaction(new CriterionWithItsType(criterionType,
- criterion));
- resourceService.saveResource(reloaded);
+ reloaded
+ .addSatisfaction(new CriterionWithItsType(criterionType, criterion));
+ resourceDAO.save(reloaded);
+ reloaded.checkNotOverlaps();
}
}
@@ -214,15 +216,17 @@ public class CriterionsModel implements ICriterionsModel {
public void deactivateAll(Collection extends Resource> resources) {
for (Resource resource : resources) {
Resource reloaded = find(resource.getId());
- reloaded.finish(new CriterionWithItsType(criterionType, criterion));
- resourceService.saveResource(reloaded);
+ reloaded.finish(new CriterionWithItsType(criterionType,
+ criterion));
+ resourceDAO.save(reloaded);
+ reloaded.checkNotOverlaps();
}
}
private Resource find(Long id) {
Resource reloaded;
try {
- reloaded = resourceService.findResource(id);
+ reloaded = resourceDAO.find(id);
} catch (InstanceNotFoundException e) {
throw new RuntimeException(e);
}
diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/resources/worker/IWorkerModel.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/resources/worker/IWorkerModel.java
index e241a1976..e2e942e8c 100644
--- a/navalplanner-webapp/src/main/java/org/navalplanner/web/resources/worker/IWorkerModel.java
+++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/resources/worker/IWorkerModel.java
@@ -3,11 +3,14 @@ package org.navalplanner.web.resources.worker;
import java.util.Collection;
import java.util.List;
import java.util.Map;
+import java.util.Set;
import org.navalplanner.business.common.exceptions.ValidationException;
import org.navalplanner.business.resources.entities.Criterion;
import org.navalplanner.business.resources.entities.CriterionSatisfaction;
+import org.navalplanner.business.resources.entities.ICriterion;
import org.navalplanner.business.resources.entities.ICriterionType;
+import org.navalplanner.business.resources.entities.Resource;
import org.navalplanner.business.resources.entities.Worker;
/**
@@ -88,4 +91,7 @@ public interface IWorkerModel {
void unassignSatisfactions(
Collection extends CriterionSatisfaction> satisfactions);
+ void setWorker(Worker worker);
+
+ Set getSetOfResourcesSatisfying(ICriterion criterion);
}
\ No newline at end of file
diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/resources/worker/WorkerModel.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/resources/worker/WorkerModel.java
index d08408512..f88346dd3 100644
--- a/navalplanner-webapp/src/main/java/org/navalplanner/web/resources/worker/WorkerModel.java
+++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/resources/worker/WorkerModel.java
@@ -16,15 +16,16 @@ import org.hibernate.validator.InvalidValue;
import org.navalplanner.business.common.exceptions.InstanceNotFoundException;
import org.navalplanner.business.common.exceptions.ValidationException;
import org.navalplanner.business.resources.daos.ICriterionDAO;
+import org.navalplanner.business.resources.daos.IResourceDAO;
import org.navalplanner.business.resources.entities.Criterion;
import org.navalplanner.business.resources.entities.CriterionSatisfaction;
import org.navalplanner.business.resources.entities.CriterionWithItsType;
+import org.navalplanner.business.resources.entities.ICriterion;
import org.navalplanner.business.resources.entities.ICriterionType;
import org.navalplanner.business.resources.entities.Interval;
import org.navalplanner.business.resources.entities.PredefinedCriterionTypes;
import org.navalplanner.business.resources.entities.Resource;
import org.navalplanner.business.resources.entities.Worker;
-import org.navalplanner.business.resources.services.IResourceService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.context.annotation.Scope;
@@ -40,22 +41,25 @@ import org.springframework.transaction.annotation.Transactional;
@Scope(BeanDefinition.SCOPE_PROTOTYPE)
public class WorkerModel implements IWorkerModel {
- private final IResourceService resourceService;
+ @Autowired
+ private IResourceDAO resourceDAO;
+
private final ICriterionType>[] laboralRelatedTypes = {
PredefinedCriterionTypes.LEAVE,
PredefinedCriterionTypes.WORK_RELATIONSHIP };
private Worker worker;
private ClassValidator workerValidator;
+
private final ICriterionDAO criterionDAO;
private IMultipleCriterionActiveAssigner localizationsAssigner;
@Autowired
- public WorkerModel(IResourceService resourceService,
+ public WorkerModel(IResourceDAO resourceDAO,
ICriterionDAO criterionDAO) {
- Validate.notNull(resourceService);
+ Validate.notNull(resourceDAO);
Validate.notNull(criterionDAO);
- this.resourceService = resourceService;
+ this.resourceDAO = resourceDAO;
this.workerValidator = new ClassValidator(Worker.class);
this.criterionDAO = criterionDAO;
}
@@ -69,7 +73,8 @@ public class WorkerModel implements IWorkerModel {
throw new ValidationException(invalidValues);
}
getLocalizationsAssigner().applyChanges();
- resourceService.saveResource(worker);
+ resourceDAO.save(worker);
+ worker.checkNotOverlaps();
worker = null;
localizationsAssigner = null;
}
@@ -77,7 +82,7 @@ public class WorkerModel implements IWorkerModel {
@Override
@Transactional(readOnly = true)
public List getWorkers() {
- return resourceService.getWorkers();
+ return resourceDAO.getWorkers();
}
@Override
@@ -99,7 +104,7 @@ public class WorkerModel implements IWorkerModel {
public void prepareEditFor(Worker worker) {
Validate.notNull(worker, "worker must be not null");
try {
- this.worker = (Worker) resourceService.findResource(worker.getId());
+ this.worker = (Worker) resourceDAO.find(worker.getId());
forceLoadSatisfactions(this.worker);
localizationsAssigner = new MultipleCriterionActiveAssigner(
criterionDAO, this.worker,
@@ -124,7 +129,7 @@ public class WorkerModel implements IWorkerModel {
/* Check worker's version. */
Worker worker = getWorker();
- resourceService.checkVersion(worker);
+ resourceDAO.checkVersion(worker);
/* Add criterion satisfaction. */
edited.setResource(worker);
@@ -157,7 +162,7 @@ public class WorkerModel implements IWorkerModel {
/* Check worker's version. */
Worker worker = getWorker();
- resourceService.checkVersion(worker);
+ resourceDAO.checkVersion(worker);
/* Remove criterion satisfaction. */
worker.removeCriterionSatisfaction(satisfaction);
@@ -170,7 +175,7 @@ public class WorkerModel implements IWorkerModel {
/* Check worker's version. */
Worker worker = getWorker();
- resourceService.checkVersion(worker);
+ resourceDAO.checkVersion(worker);
/* Assign criteria. */
getLocalizationsAssigner().assign(criteria);
@@ -183,7 +188,7 @@ public class WorkerModel implements IWorkerModel {
/* Check worker's version. */
Worker worker = getWorker();
- resourceService.checkVersion(worker);
+ resourceDAO.checkVersion(worker);
/* Unassign criterion satisfactions. */
getLocalizationsAssigner().unassign(satisfactions);
@@ -384,4 +389,22 @@ public class WorkerModel implements IWorkerModel {
public List getLaboralRelatedCriterionSatisfactions() {
return worker.query().oneOf(laboralRelatedTypes).result();
}
-}
\ No newline at end of file
+
+ @Override
+ public void setWorker(Worker worker) {
+ this.worker = worker;
+ }
+
+ @Override
+ @Transactional(readOnly = true)
+ public Set getSetOfResourcesSatisfying(ICriterion criterion) {
+ List resources = resourceDAO.list(Resource.class);
+ HashSet result = new HashSet();
+ for (Resource resource : resources) {
+ if (criterion.isSatisfiedBy(resource)) {
+ result.add(resource);
+ }
+ }
+ return result;
+ }
+}
diff --git a/navalplanner-webapp/src/test/java/org/navalplanner/web/resources/CriterionModelTest.java b/navalplanner-webapp/src/test/java/org/navalplanner/web/resources/CriterionModelTest.java
index 57c1c8538..e88cbc42c 100644
--- a/navalplanner-webapp/src/test/java/org/navalplanner/web/resources/CriterionModelTest.java
+++ b/navalplanner-webapp/src/test/java/org/navalplanner/web/resources/CriterionModelTest.java
@@ -2,21 +2,15 @@ package org.navalplanner.web.resources;
import static org.hamcrest.CoreMatchers.equalTo;
import static org.junit.Assert.assertThat;
-import static org.junit.Assert.assertTrue;
import static org.navalplanner.business.BusinessGlobalNames.BUSINESS_SPRING_CONFIG_FILE;
import static org.navalplanner.web.WebappGlobalNames.WEBAPP_SPRING_CONFIG_FILE;
import static org.navalplanner.web.test.WebappGlobalNames.WEBAPP_SPRING_CONFIG_TEST_FILE;
-import java.util.Collection;
import java.util.List;
import java.util.UUID;
-import javax.management.RuntimeErrorException;
-
import org.hibernate.SessionFactory;
import org.hibernate.validator.InvalidStateException;
-import org.junit.Assert;
-import org.junit.Assume;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.navalplanner.business.common.IAdHocTransactionService;
@@ -26,15 +20,9 @@ import org.navalplanner.business.common.exceptions.ValidationException;
import org.navalplanner.business.resources.daos.ICriterionDAO;
import org.navalplanner.business.resources.daos.ICriterionTypeDAO;
import org.navalplanner.business.resources.entities.Criterion;
-import org.navalplanner.business.resources.entities.CriterionSatisfaction;
import org.navalplanner.business.resources.entities.CriterionType;
-import org.navalplanner.business.resources.entities.CriterionWithItsType;
-import org.navalplanner.business.resources.entities.ICriterion;
import org.navalplanner.business.resources.entities.ICriterionType;
import org.navalplanner.business.resources.entities.PredefinedCriterionTypes;
-import org.navalplanner.business.resources.entities.Resource;
-import org.navalplanner.business.resources.entities.Worker;
-import org.navalplanner.business.resources.services.IResourceService;
import org.navalplanner.web.resources.criterion.CriterionsModel;
import org.navalplanner.web.resources.criterion.ICriterionsModel;
import org.springframework.beans.factory.annotation.Autowired;
diff --git a/navalplanner-webapp/src/test/java/org/navalplanner/web/resources/WorkerModelTest.java b/navalplanner-webapp/src/test/java/org/navalplanner/web/resources/WorkerModelTest.java
index d48e3c39d..a8a3a2d07 100644
--- a/navalplanner-webapp/src/test/java/org/navalplanner/web/resources/WorkerModelTest.java
+++ b/navalplanner-webapp/src/test/java/org/navalplanner/web/resources/WorkerModelTest.java
@@ -11,10 +11,10 @@ import org.junit.Test;
import org.navalplanner.business.common.exceptions.InstanceNotFoundException;
import org.navalplanner.business.common.exceptions.ValidationException;
import org.navalplanner.business.resources.daos.ICriterionDAO;
+import org.navalplanner.business.resources.daos.IResourceDAO;
import org.navalplanner.business.resources.entities.Criterion;
import org.navalplanner.business.resources.entities.PredefinedCriterionTypes;
import org.navalplanner.business.resources.entities.Worker;
-import org.navalplanner.business.resources.services.IResourceService;
import org.navalplanner.web.resources.worker.WorkerModel;
/**
@@ -26,7 +26,7 @@ public class WorkerModelTest {
@Test
public void testWorkerValid() throws ValidationException,
InstanceNotFoundException {
- IResourceService resourceServiceMock = createMock(IResourceService.class);
+ IResourceDAO resourceDAOMock = createMock(IResourceDAO.class);
ICriterionDAO criterionServiceMock = createMock(ICriterionDAO.class);
Worker workerToReturn = new Worker();
workerToReturn.setDailyHours(2);
@@ -39,12 +39,13 @@ public class WorkerModelTest {
criterionServiceMock
.findByType(PredefinedCriterionTypes.LOCATION_GROUP))
.andReturn(criterions).anyTimes();
- expect(resourceServiceMock.findResource(workerToReturn.getId()))
+ expect(resourceDAOMock.find(workerToReturn.getId()))
.andReturn(workerToReturn);
- resourceServiceMock.saveResource(workerToReturn);
- replay(resourceServiceMock, criterionServiceMock);
+ resourceDAOMock.save(workerToReturn);
+ workerToReturn.checkNotOverlaps();
+ replay(resourceDAOMock, criterionServiceMock);
// perform actions
- WorkerModel workerModel = new WorkerModel(resourceServiceMock,
+ WorkerModel workerModel = new WorkerModel(resourceDAOMock,
criterionServiceMock);
workerModel.prepareEditFor(workerToReturn);
@@ -54,7 +55,7 @@ public class WorkerModelTest {
@Test(expected = ValidationException.class)
public void testWorkerInvalid() throws ValidationException,
InstanceNotFoundException {
- IResourceService resourceServiceMock = createMock(IResourceService.class);
+ IResourceDAO resourceDAOMock = createMock(IResourceDAO.class);
ICriterionDAO criterionServiceMock = createMock(ICriterionDAO.class);
Worker workerToReturn = new Worker();
// expectations
@@ -63,11 +64,11 @@ public class WorkerModelTest {
criterionServiceMock
.findByType(PredefinedCriterionTypes.LOCATION_GROUP))
.andReturn(criterions).anyTimes();
- expect(resourceServiceMock.findResource(workerToReturn.getId()))
+ expect(resourceDAOMock.find(workerToReturn.getId()))
.andReturn(workerToReturn);
- replay(resourceServiceMock, criterionServiceMock);
+ replay(resourceDAOMock, criterionServiceMock);
// perform actions
- WorkerModel workerModel = new WorkerModel(resourceServiceMock,
+ WorkerModel workerModel = new WorkerModel(resourceDAOMock,
criterionServiceMock);
workerModel.prepareEditFor(workerToReturn);
workerModel.save();