diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/resources/entities/Criterion.java b/navalplanner-business/src/main/java/org/navalplanner/business/resources/entities/Criterion.java index 708349a08..1445a6f13 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/resources/entities/Criterion.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/resources/entities/Criterion.java @@ -119,7 +119,7 @@ public class Criterion extends IntegrationEntity implements ICriterion { return getCaptionFor(ResourceEnum.WORKER, criteria); } - public static String getCaptionForCriterionsFrom( + public static String getCaptionFor( GenericResourceAllocation allocation) { return getCaptionFor(allocation.getResourceType(), allocation.getCriterions()); @@ -138,7 +138,7 @@ public class Criterion extends IntegrationEntity implements ICriterion { } List result = new ArrayList(); for (Criterion each : criteria) { - result.add(each.getName()); + result.add(each.getCompleteName()); } return StringUtils.join(result, ","); } @@ -395,4 +395,10 @@ public class Criterion extends IntegrationEntity implements ICriterion { public Boolean isCodeAutogenerated() { return getType() != null ? getType().isCodeAutogenerated() : false; } + + @Override + public String toString() { + return String.format("%s :: %s", type, name); + } + } diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/resources/entities/CriterionType.java b/navalplanner-business/src/main/java/org/navalplanner/business/resources/entities/CriterionType.java index 523f60784..a023e123d 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/resources/entities/CriterionType.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/resources/entities/CriterionType.java @@ -551,4 +551,9 @@ public class CriterionType extends IntegrationEntity implements + EntitySequence.CODE_SEPARATOR_CHILDREN + criterionCode); } } + + public String toString() { + return name; + } + } diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/resources/entities/Machine.java b/navalplanner-business/src/main/java/org/navalplanner/business/resources/entities/Machine.java index 0a1c57282..608587ad6 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/resources/entities/Machine.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/resources/entities/Machine.java @@ -136,4 +136,10 @@ public class Machine extends Resource { public ResourceEnum getType() { return type; } + + @Override + public String toString() { + return String.format("MACHINE: %s", name); + } + } 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 3e35d3893..d01c30ce0 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 @@ -55,6 +55,7 @@ import org.navalplanner.business.common.exceptions.ValidationException; import org.navalplanner.business.costcategories.entities.ResourcesCostCategoryAssignment; import org.navalplanner.business.planner.entities.AvailabilityCalculator; import org.navalplanner.business.planner.entities.DayAssignment; +import org.navalplanner.business.planner.entities.ResourceAllocation; import org.navalplanner.business.resources.daos.IResourceDAO; import org.navalplanner.business.scenarios.entities.Scenario; import org.navalplanner.business.workingday.EffortDuration; @@ -114,6 +115,10 @@ public abstract class Resource extends IntegrationEntity { return resources; } + public static String getCaptionFor(ResourceAllocation resourceAllocation) { + return getCaptionFor(resourceAllocation.getAssociatedResources()); + } + public static String getCaptionFor(List resources) { List values = new ArrayList(); for (Resource each: resources) { diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/limitingresources/LimitingResourcesController.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/limitingresources/LimitingResourcesController.java index 85a639921..026ab0cb3 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/limitingresources/LimitingResourcesController.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/limitingresources/LimitingResourcesController.java @@ -249,7 +249,7 @@ public class LimitingResourcesController extends GenericForwardComposer { return (resource != null) ? resource.getName() : ""; } else if (resourceAllocation instanceof GenericResourceAllocation) { GenericResourceAllocation genericAllocation = (GenericResourceAllocation) resourceAllocation; - return Criterion.getCaptionForCriterionsFrom(genericAllocation); + return Criterion.getCaptionFor(genericAllocation); } return StringUtils.EMPTY; } diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/allocation/GenericAllocationRow.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/allocation/GenericAllocationRow.java index b5d82c36f..51ca57e58 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/allocation/GenericAllocationRow.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/allocation/GenericAllocationRow.java @@ -90,7 +90,7 @@ public class GenericAllocationRow extends AllocationRow { .byCriteria(resourceAllocation.getCriterions()) .byResourceType(type).execute()); result.setName(Criterion - .getCaptionForCriterionsFrom(resourceAllocation)); + .getCaptionFor(resourceAllocation)); return result; } diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/limiting/allocation/LimitingAllocationRow.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/limiting/allocation/LimitingAllocationRow.java index b101e8bc6..1de79b0bc 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/limiting/allocation/LimitingAllocationRow.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/limiting/allocation/LimitingAllocationRow.java @@ -26,7 +26,6 @@ import java.util.HashSet; import java.util.List; import java.util.Set; -import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.math.NumberUtils; import org.navalplanner.business.planner.entities.GenericResourceAllocation; import org.navalplanner.business.planner.entities.ResourceAllocation; @@ -35,6 +34,7 @@ import org.navalplanner.business.planner.entities.Task; import org.navalplanner.business.resources.entities.Criterion; import org.navalplanner.business.resources.entities.Resource; import org.navalplanner.business.resources.entities.ResourceEnum; +import org.navalplanner.business.resources.entities.Worker; import org.navalplanner.web.common.components.NewAllocationSelector.AllocationType; /** @@ -127,8 +127,19 @@ public class LimitingAllocationRow { } public AllocationType getAllocationType() { - return (resourceAllocation instanceof SpecificResourceAllocation) ? AllocationType.SPECIFIC - : AllocationType.GENERIC_WORKERS; + if (resourceAllocation instanceof SpecificResourceAllocation) { + return AllocationType.SPECIFIC; + } else if (isWorker()) { + return AllocationType.GENERIC_WORKERS; + } + return AllocationType.GENERIC_MACHINES; + } + + public boolean isWorker() { + if (resources != null && !resources.isEmpty()) { + return ((Resource) resources.iterator().next()) instanceof Worker; + } + return false; } public String getAllocationTypeStr() { @@ -137,24 +148,17 @@ public class LimitingAllocationRow { public String getAllocation() { final AllocationType type = getAllocationType(); - if (AllocationType.GENERIC_WORKERS.equals(type)) { - final GenericResourceAllocation generic = (GenericResourceAllocation) resourceAllocation; - return Criterion.getCaptionForCriterionsFrom(generic); + if (AllocationType.GENERIC_WORKERS.equals(type) + || AllocationType.GENERIC_MACHINES.equals(type)) { + return Criterion + .getCaptionFor((GenericResourceAllocation) resourceAllocation); } if (AllocationType.SPECIFIC.equals(type)) { - return formatResources(resourceAllocation.getAssociatedResources()); + return Resource.getCaptionFor(resourceAllocation); } return ""; } - private String formatResources(List resources) { - List resourcesNames = new ArrayList(); - for (Resource each: resources) { - resourcesNames.add(each.getName()); - } - return StringUtils.join(resourcesNames, ","); - } - public int getHours() { return hours; } diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/limiting/allocation/LimitingResourceAllocationModel.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/limiting/allocation/LimitingResourceAllocationModel.java index 2fecc3044..84d539019 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/limiting/allocation/LimitingResourceAllocationModel.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/limiting/allocation/LimitingResourceAllocationModel.java @@ -29,6 +29,7 @@ import java.util.Collections; import java.util.List; import java.util.Set; +import org.hibernate.Hibernate; import org.navalplanner.business.common.IAdHocTransactionService; import org.navalplanner.business.common.IOnTransaction; import org.navalplanner.business.orders.daos.IHoursGroupDAO; @@ -37,6 +38,7 @@ import org.navalplanner.business.orders.entities.HoursGroup; import org.navalplanner.business.orders.entities.TaskSource; import org.navalplanner.business.planner.daos.ITaskElementDAO; import org.navalplanner.business.planner.daos.ITaskSourceDAO; +import org.navalplanner.business.planner.entities.GenericResourceAllocation; import org.navalplanner.business.planner.entities.ResourceAllocation; import org.navalplanner.business.planner.entities.Task; import org.navalplanner.business.planner.entities.TaskElement; @@ -96,14 +98,40 @@ public class LimitingResourceAllocationModel implements ILimitingResourceAllocat private LimitingResourceAllocationController limitingResourceAllocationController; @Override + @Transactional(readOnly=true) public void init(IContextWithPlannerTask context, Task task, PlanningState planningState) { this.context = context; this.task = task; this.planningState = planningState; + + initializeCriteria(task); limitingAllocationRows = LimitingAllocationRow.toRows(task); } + private void initializeCriteria(Task task) { + for (ResourceAllocation each: task.getLimitingResourceAllocations()) { + if (isGeneric(each)) { + initializeCriteria((GenericResourceAllocation) each); + } + } + } + + private boolean isGeneric(ResourceAllocation resourceAllocation) { + return resourceAllocation instanceof GenericResourceAllocation; + } + + private void initializeCriteria(GenericResourceAllocation generic) { + for (Criterion each : generic.getCriterions()) { + initializeCriterion(each); + } + } + + private void initializeCriterion(Criterion criterion) { + criterionDAO.reattach(criterion); + Hibernate.initialize(criterion.getType()); + } + @Override @Transactional(readOnly=true) public Integer getOrderHours() { @@ -118,6 +146,7 @@ public class LimitingResourceAllocationModel implements ILimitingResourceAllocat public void addGeneric(ResourceEnum resourceType, Collection criteria, Collection resources) { + if (resources.isEmpty()) { getMessagesForUser() .showMessage(Level.ERROR,