ItEr47S04ValidacionEProbasFuncionaisItEr46S04: [Bug #272] Fixing bug.

Loading the criterions at PlanningState in order to avoid duplicated instances.
This commit is contained in:
Óscar González Fernández 2010-02-09 12:41:40 +01:00
parent d580601ae7
commit 2ccf19bf24
2 changed files with 39 additions and 2 deletions

View file

@ -746,7 +746,7 @@ public abstract class OrderPlanningModel implements IOrderPlanningModel {
criterionDAO.list(Criterion.class);
forceLoadOfChildren(Arrays.asList(taskElement));
planningState = new PlanningState(taskElement, orderReloaded
.getAssociatedTasks(), allResources);
.getAssociatedTasks(), allResources, criterionDAO);
forceLoadOfDependenciesCollections(planningState.getInitial());
forceLoadOfWorkingHours(planningState.getInitial());
forceLoadOfLabels(planningState.getInitial());

View file

@ -30,7 +30,10 @@ import java.util.Set;
import org.navalplanner.business.planner.entities.TaskElement;
import org.navalplanner.business.planner.entities.TaskGroup;
import org.navalplanner.business.planner.entities.TaskMilestone;
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.Resource;
import org.navalplanner.web.calendars.BaseCalendarModel;
@ -45,10 +48,14 @@ public class PlanningState {
private final TaskGroup rootTask;
private final ICriterionDAO criterionDAO;
public PlanningState(TaskGroup rootTask,
Collection<? extends TaskElement> initialState,
Collection<? extends Resource> initialResources) {
Collection<? extends Resource> initialResources,
ICriterionDAO criterionDAO) {
this.rootTask = rootTask;
this.criterionDAO = criterionDAO;
this.initial = new ArrayList<TaskElement>(initialState);
this.toSave = new HashSet<TaskElement>(initialState);
this.toRemove = new HashSet<TaskElement>();
@ -67,9 +74,28 @@ public class PlanningState {
for (Resource resource : resources) {
resourceDAO.reattach(resource);
}
// ensuring no repeated instances of criterions
reattachCriterions(getExistentCriterions(resources));
addingNewlyCreated(resourceDAO);
}
private void reattachCriterions(Set<Criterion> criterions) {
for (Criterion each : criterions) {
criterionDAO.reattachUnmodifiedEntity(each);
}
}
private Set<Criterion> getExistentCriterions(Set<Resource> resources) {
Set<Criterion> result = new HashSet<Criterion>();
for (Resource resource : resources) {
for (CriterionSatisfaction each : resource
.getCriterionSatisfactions()) {
result.add(each.getCriterion());
}
}
return result;
}
private void addingNewlyCreated(IResourceDAO resourceDAO) {
Set<Resource> newResources = getNewResources(resourceDAO);
doReattachments(newResources);
@ -79,6 +105,8 @@ public class PlanningState {
private <T extends Collection<Resource>> T doReattachments(T result) {
for (Resource each : result) {
reattachCalendarFor(each);
// loading criterions so there are no repeated instances
forceLoadOfCriterions(each);
}
return result;
}
@ -89,6 +117,15 @@ public class PlanningState {
}
}
private void forceLoadOfCriterions(Resource resource) {
Set<CriterionSatisfaction> criterionSatisfactions = resource
.getCriterionSatisfactions();
for (CriterionSatisfaction each : criterionSatisfactions) {
each.getCriterion().getName();
each.getCriterion().getType();
}
}
private Set<Resource> getNewResources(IResourceDAO resourceDAO) {
Set<Resource> result = new HashSet<Resource>(resourceDAO
.list(Resource.class));