ItEr59S04ValidacionEProbasFuncionaisItEr58S04: [Bug #505] Fix bug.

LimitingResourceAllocationModel was introducing new resources
instances instead of using the already existent. This caused to have
more that one instance for the same resource.
This commit is contained in:
Óscar González Fernández 2010-06-13 18:33:47 +02:00
parent 46600cbc8b
commit 4e134d00e1
4 changed files with 23 additions and 12 deletions

View file

@ -25,6 +25,7 @@ import java.util.List;
import org.navalplanner.business.orders.entities.AggregatedHoursGroup;
import org.navalplanner.business.planner.entities.Task;
import org.navalplanner.web.planner.allocation.INewAllocationsAdder;
import org.navalplanner.web.planner.order.PlanningState;
/**
* Contract for {@link Task}.
@ -41,6 +42,6 @@ public interface ILimitingResourceAllocationModel extends INewAllocationsAdder {
List<LimitingAllocationRow> getResourceAllocationRows();
void init(Task task);
void init(Task task, PlanningState planningState);
}

View file

@ -30,8 +30,8 @@ import org.navalplanner.business.planner.entities.ResourceAllocation;
import org.navalplanner.web.common.IMessagesForUser;
import org.navalplanner.web.common.Util;
import org.navalplanner.web.common.components.NewAllocationSelector;
import org.navalplanner.web.planner.allocation.ResourceAllocationController;
import org.navalplanner.web.planner.allocation.ResourceAllocationController.HoursRendererColumn;
import org.navalplanner.web.planner.order.PlanningState;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.context.annotation.Scope;
@ -95,9 +95,10 @@ public class LimitingResourceAllocationController extends GenericForwardComposer
* @param planningState
*/
public void init(org.navalplanner.business.planner.entities.Task task,
PlanningState planningState,
IMessagesForUser messagesForUser) {
try {
resourceAllocationModel.init(task);
resourceAllocationModel.init(task, planningState);
tabLimitingWorkerSearch.setDisabled(existsResourceAllocationWithDayAssignments());
limitingNewAllocationSelector.setAllocationsAdder(resourceAllocationModel);
gridLimitingOrderElementHours.setModel(new ListModelList(

View file

@ -40,6 +40,7 @@ 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.Resource;
import org.navalplanner.web.planner.order.PlanningState;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.context.annotation.Scope;
@ -74,9 +75,12 @@ public class LimitingResourceAllocationModel implements ILimitingResourceAllocat
private List<LimitingAllocationRow> limitingAllocationRows = new ArrayList<LimitingAllocationRow>();
private PlanningState planningState;
@Override
public void init(Task task) {
public void init(Task task, PlanningState planningState) {
this.task = task;
this.planningState = planningState;
limitingAllocationRows = LimitingAllocationRow.toRows(task);
}
@ -94,15 +98,18 @@ public class LimitingResourceAllocationModel implements ILimitingResourceAllocat
public void addGeneric(Set<Criterion> criteria,
Collection<? extends Resource> resources) {
if (resources.size() >= 1) {
reattachResources(resources);
addGenericResourceAllocation(criteria, resources);
planningState.reassociateResourcesWithSession();
addGenericResourceAllocation(criteria, reloadResources(resources));
}
}
private void reattachResources(Collection<? extends Resource> resources) {
private List<Resource> reloadResources(
Collection<? extends Resource> resources) {
List<Resource> result = new ArrayList<Resource>();
for (Resource each: resources) {
resourceDAO.reattach(each);
result.add(resourceDAO.findExistingEntity(each.getId()));
}
return result;
}
private void addGenericResourceAllocation(Set<Criterion> criteria,
@ -142,9 +149,10 @@ public class LimitingResourceAllocationModel implements ILimitingResourceAllocat
@Transactional(readOnly = true)
public void addSpecific(Collection<? extends Resource> resources) {
if (resources.size() >= 1) {
Resource resource = getFirstChild(resources);
resourceDAO.reattach(resource);
addSpecificResourceAllocation(resource);
planningState.reassociateResourcesWithSession();
List<Resource> reloaded = reloadResources(
Collections.singleton(getFirstChild(resources)));
addSpecificResourceAllocation(getFirstChild(reloaded));
}
}

View file

@ -167,7 +167,8 @@ public class EditTaskController extends GenericForwardComposer {
showNonLimitingResourcesTab();
} else if (ResourceAllocationTypeEnum.LIMITING_RESOURCES
.equals(resourceAllocationType)) {
limitingResourceAllocationController.init(asTask(taskElement), messagesForUser);
limitingResourceAllocationController.init(asTask(taskElement),
planningState, messagesForUser);
showLimitingResourcesTab();
}