ItEr08S11HistoriaLaboralTraballador: Add ICriterionOnData that expands the capabilities of a ICriterion.
It lets retrieve all the resources satisfying the criterion.
This commit is contained in:
parent
dcd0f01991
commit
802d60f312
5 changed files with 103 additions and 4 deletions
|
|
@ -3,9 +3,7 @@ package org.navalplanner.business.resources.entities;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Responsible of searching the resources satisfiying some condition or set of
|
* It's a predicate that can be applied on resources <br />
|
||||||
* conditions. <br />
|
|
||||||
* Created at May 12, 2009
|
|
||||||
* @author Óscar González Fernández <ogonzalez@igalia.com>
|
* @author Óscar González Fernández <ogonzalez@igalia.com>
|
||||||
*/
|
*/
|
||||||
public interface ICriterion {
|
public interface ICriterion {
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,18 @@
|
||||||
|
package org.navalplanner.business.resources.entities;
|
||||||
|
|
||||||
|
import java.util.Collection;
|
||||||
|
import java.util.Date;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Expands the capabilities of {@link ICriterion}. It also lets retrieve the
|
||||||
|
* resources satisfying the criterion <br />
|
||||||
|
* @author Óscar González Fernández <ogonzalez@igalia.com>
|
||||||
|
*/
|
||||||
|
public interface ICriterionOnData extends ICriterion {
|
||||||
|
|
||||||
|
Collection<Resource> getResourcesSatisfying();
|
||||||
|
|
||||||
|
Collection<Resource> getResourcesSatisfying(Date start, Date end)
|
||||||
|
throws IllegalArgumentException;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -8,6 +8,7 @@ import org.navalplanner.business.common.exceptions.InstanceNotFoundException;
|
||||||
import org.navalplanner.business.resources.entities.Criterion;
|
import org.navalplanner.business.resources.entities.Criterion;
|
||||||
import org.navalplanner.business.resources.entities.CriterionSatisfaction;
|
import org.navalplanner.business.resources.entities.CriterionSatisfaction;
|
||||||
import org.navalplanner.business.resources.entities.ICriterion;
|
import org.navalplanner.business.resources.entities.ICriterion;
|
||||||
|
import org.navalplanner.business.resources.entities.ICriterionOnData;
|
||||||
import org.navalplanner.business.resources.entities.ICriterionType;
|
import org.navalplanner.business.resources.entities.ICriterionType;
|
||||||
import org.navalplanner.business.resources.entities.Resource;
|
import org.navalplanner.business.resources.entities.Resource;
|
||||||
|
|
||||||
|
|
@ -40,4 +41,6 @@ public interface CriterionService {
|
||||||
|
|
||||||
boolean exists(Criterion criterion);
|
boolean exists(Criterion criterion);
|
||||||
|
|
||||||
|
ICriterionOnData empower(ICriterion criterion);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -12,11 +12,13 @@ import org.navalplanner.business.resources.daos.impl.CriterionSatisfactionDAO;
|
||||||
import org.navalplanner.business.resources.entities.Criterion;
|
import org.navalplanner.business.resources.entities.Criterion;
|
||||||
import org.navalplanner.business.resources.entities.CriterionSatisfaction;
|
import org.navalplanner.business.resources.entities.CriterionSatisfaction;
|
||||||
import org.navalplanner.business.resources.entities.ICriterion;
|
import org.navalplanner.business.resources.entities.ICriterion;
|
||||||
|
import org.navalplanner.business.resources.entities.ICriterionOnData;
|
||||||
import org.navalplanner.business.resources.entities.ICriterionType;
|
import org.navalplanner.business.resources.entities.ICriterionType;
|
||||||
import org.navalplanner.business.resources.entities.Resource;
|
import org.navalplanner.business.resources.entities.Resource;
|
||||||
import org.navalplanner.business.resources.services.CriterionService;
|
import org.navalplanner.business.resources.services.CriterionService;
|
||||||
import org.navalplanner.business.resources.services.ResourceService;
|
import org.navalplanner.business.resources.services.ResourceService;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.context.ApplicationContext;
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -112,4 +114,43 @@ public class CriterionServiceImpl implements CriterionService {
|
||||||
if (!exists(criterion))
|
if (!exists(criterion))
|
||||||
save(criterion);
|
save(criterion);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ICriterionOnData empower(final ICriterion criterion) {
|
||||||
|
final CriterionService criterionService = getProxifiedCriterionService();
|
||||||
|
return new ICriterionOnData() {
|
||||||
|
@Override
|
||||||
|
public boolean isSatisfiedBy(Resource resource) {
|
||||||
|
return criterion.isSatisfiedBy(resource);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isSatisfiedBy(Resource resource, Date start, Date end) {
|
||||||
|
return criterion.isSatisfiedBy(resource, start, end);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Collection<Resource> getResourcesSatisfying() {
|
||||||
|
return criterionService.getResourcesSatisfying(criterion);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Collection<Resource> getResourcesSatisfying(Date start,
|
||||||
|
Date end) throws IllegalArgumentException {
|
||||||
|
return criterionService.getResourcesSatisfying(criterion,
|
||||||
|
start, end);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private ApplicationContext applicationContext;
|
||||||
|
|
||||||
|
// this is a hack to avoid using the this variable in empower method. The
|
||||||
|
// this instance is not proxified because spring uses an transparent proxy,
|
||||||
|
// so it doesn't open the transacion
|
||||||
|
private CriterionService getProxifiedCriterionService() {
|
||||||
|
return (CriterionService) applicationContext.getBeansOfType(
|
||||||
|
CriterionService.class).values().iterator().next();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -13,6 +13,7 @@ import org.junit.Test;
|
||||||
import org.junit.runner.RunWith;
|
import org.junit.runner.RunWith;
|
||||||
import org.navalplanner.business.resources.entities.Criterion;
|
import org.navalplanner.business.resources.entities.Criterion;
|
||||||
import org.navalplanner.business.resources.entities.CriterionSatisfaction;
|
import org.navalplanner.business.resources.entities.CriterionSatisfaction;
|
||||||
|
import org.navalplanner.business.resources.entities.ICriterionOnData;
|
||||||
import org.navalplanner.business.resources.entities.ICriterionType;
|
import org.navalplanner.business.resources.entities.ICriterionType;
|
||||||
import org.navalplanner.business.resources.entities.PredefinedCriterionTypes;
|
import org.navalplanner.business.resources.entities.PredefinedCriterionTypes;
|
||||||
import org.navalplanner.business.resources.entities.Worker;
|
import org.navalplanner.business.resources.entities.Worker;
|
||||||
|
|
@ -23,6 +24,7 @@ import org.navalplanner.business.test.resources.daos.CriterionSatisfactionDAOTes
|
||||||
import org.navalplanner.business.test.resources.entities.ResourceTest;
|
import org.navalplanner.business.test.resources.entities.ResourceTest;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.dao.DataIntegrityViolationException;
|
import org.springframework.dao.DataIntegrityViolationException;
|
||||||
|
import org.springframework.test.annotation.NotTransactional;
|
||||||
import org.springframework.test.context.ContextConfiguration;
|
import org.springframework.test.context.ContextConfiguration;
|
||||||
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
|
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
@ -160,6 +162,44 @@ public class CriterionServiceTest {
|
||||||
.size());
|
.size());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void shouldLetCreateCriterionOnData() {
|
||||||
|
Criterion criterion = CriterionDAOTest.createValidCriterion();
|
||||||
|
criterionService.save(criterion);
|
||||||
|
Worker worker = new Worker("firstName", "surName", "2333232", 10);
|
||||||
|
resourceService.saveResource(worker);
|
||||||
|
CriterionSatisfaction criterionSatisfaction = new CriterionSatisfaction(
|
||||||
|
CriterionSatisfactionDAOTest.year(2000), criterion, worker);
|
||||||
|
criterionService.add(criterionSatisfaction);
|
||||||
|
ICriterionOnData criterionOnData = criterionService.empower(criterion);
|
||||||
|
assertTrue(criterionOnData.isSatisfiedBy(worker));
|
||||||
|
assertEquals(1, criterionOnData.getResourcesSatisfying().size());
|
||||||
|
assertTrue(criterionOnData.getResourcesSatisfying().contains(worker));
|
||||||
|
assertTrue(criterionOnData.getResourcesSatisfying(
|
||||||
|
CriterionSatisfactionDAOTest.year(1990),
|
||||||
|
CriterionSatisfactionDAOTest.year(2005)).isEmpty());
|
||||||
|
assertEquals(1, criterionOnData.getResourcesSatisfying(
|
||||||
|
CriterionSatisfactionDAOTest.year(2001),
|
||||||
|
CriterionSatisfactionDAOTest.year(2005)).size());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@NotTransactional
|
||||||
|
public void shouldntThrowExceptionDueToTransparentProxyGotcha() {
|
||||||
|
Criterion criterion = CriterionDAOTest.createValidCriterion();
|
||||||
|
criterionService.save(criterion);
|
||||||
|
Worker worker = new Worker("firstName", "surName", "2333232", 10);
|
||||||
|
resourceService.saveResource(worker);
|
||||||
|
CriterionSatisfaction criterionSatisfaction = new CriterionSatisfaction(
|
||||||
|
CriterionSatisfactionDAOTest.year(2000), criterion, worker);
|
||||||
|
criterionService.add(criterionSatisfaction);
|
||||||
|
ICriterionOnData criterionOnData = criterionService.empower(criterion);
|
||||||
|
criterionOnData.getResourcesSatisfying();
|
||||||
|
criterionOnData.getResourcesSatisfying(
|
||||||
|
CriterionSatisfactionDAOTest.year(2001),
|
||||||
|
CriterionSatisfactionDAOTest.year(2005));
|
||||||
|
}
|
||||||
|
|
||||||
@Test(expected = IllegalArgumentException.class)
|
@Test(expected = IllegalArgumentException.class)
|
||||||
public void mustBeCorrectInterval() {
|
public void mustBeCorrectInterval() {
|
||||||
Criterion criterion = CriterionDAOTest.createValidCriterion();
|
Criterion criterion = CriterionDAOTest.createValidCriterion();
|
||||||
|
|
@ -225,7 +265,6 @@ public class CriterionServiceTest {
|
||||||
assertEquals(2, criterionService.getSatisfactionsFor(criterionType,
|
assertEquals(2, criterionService.getSatisfactionsFor(criterionType,
|
||||||
CriterionSatisfactionDAOTest.year(1999),
|
CriterionSatisfactionDAOTest.year(1999),
|
||||||
CriterionSatisfactionDAOTest.year(2005)).size());
|
CriterionSatisfactionDAOTest.year(2005)).size());
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue