ItEr49S11CUEngadirModeloTraballoAOrganizacionTraballoItEr48S12: Fix bug propagate IndirectCriterions in HoursGroup for OrderLines
This commit is contained in:
parent
bd9222912b
commit
f176adce21
3 changed files with 94 additions and 10 deletions
|
|
@ -259,12 +259,18 @@ public abstract class CriterionRequirementHandler<T, S, R> implements
|
|||
|
||||
protected abstract List<T> getChildren(T orderElement);
|
||||
|
||||
private void updateCriterionRequirementsIntoOrderLine(S orderLine) {
|
||||
public void updateCriterionRequirementsIntoOrderLine(S orderLine) {
|
||||
for (HoursGroup hoursGroup : getHoursGroups(orderLine)) {
|
||||
hoursGroup.updateMyCriterionRequirements();
|
||||
}
|
||||
}
|
||||
|
||||
public void propagateIndirectCriterionRequirementsKeepingValid(S orderLine) {
|
||||
for (HoursGroup hoursGroup : getHoursGroups(orderLine)) {
|
||||
hoursGroup.propagateIndirectCriterionRequirementsKeepingValid();
|
||||
}
|
||||
}
|
||||
|
||||
void transformDirectToIndirectIfNeeded(T orderElement,
|
||||
Set<IndirectCriterionRequirement> currents) {
|
||||
for (DirectCriterionRequirement direct : getDirectCriterionRequirement(orderElement)) {
|
||||
|
|
@ -561,7 +567,7 @@ public abstract class CriterionRequirementHandler<T, S, R> implements
|
|||
* attribute
|
||||
*
|
||||
*/
|
||||
public void copyIndirectCriterionRequirementFromOriginalToOrderLineGroupChildren(
|
||||
public void propagateIndirectCriterionRequirementsForOrderLineGroupKeepingValid(
|
||||
R orderLineGroup,
|
||||
DirectCriterionRequirement parent) {
|
||||
|
||||
|
|
|
|||
|
|
@ -24,7 +24,9 @@ import static org.navalplanner.business.i18n.I18nHelper._;
|
|||
import java.math.BigDecimal;
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.UUID;
|
||||
|
||||
|
|
@ -319,6 +321,31 @@ public class HoursGroup extends BaseEntity implements Cloneable,
|
|||
criterionRequirementHandler.addNewsIndirects(this, currentIndirects);
|
||||
}
|
||||
|
||||
public void propagateIndirectCriterionRequirementsKeepingValid() {
|
||||
updateMyCriterionRequirements();
|
||||
|
||||
// Set valid value as original value for every indirect
|
||||
Map<Criterion, Boolean> mapCriterionToValid = createCriterionToValidMap(origin
|
||||
.getIndirectCriterionRequirement());
|
||||
|
||||
for (CriterionRequirement each : criterionRequirements) {
|
||||
if (each instanceof IndirectCriterionRequirement) {
|
||||
IndirectCriterionRequirement indirect = (IndirectCriterionRequirement) each;
|
||||
indirect.setValid(mapCriterionToValid.get(each.getCriterion()));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private Map<Criterion, Boolean> createCriterionToValidMap(
|
||||
Set<IndirectCriterionRequirement> indirects) {
|
||||
Map<Criterion, Boolean> result = new HashMap<Criterion, Boolean>();
|
||||
|
||||
for (IndirectCriterionRequirement each : indirects) {
|
||||
result.put(each.getCriterion(), each.isValid());
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
private Set<CriterionRequirement> getCriterionRequirementsFromParent() {
|
||||
return (parentOrderLine != null) ? parentOrderLine
|
||||
.getCriterionRequirements() : orderLineTemplate
|
||||
|
|
|
|||
|
|
@ -28,10 +28,12 @@ import org.navalplanner.business.i18n.I18nHelper;
|
|||
import org.navalplanner.business.orders.entities.CriterionRequirementOrderElementHandler;
|
||||
import org.navalplanner.business.orders.entities.HoursGroup;
|
||||
import org.navalplanner.business.orders.entities.OrderElement;
|
||||
import org.navalplanner.business.orders.entities.OrderLine;
|
||||
import org.navalplanner.business.orders.entities.OrderLineGroup;
|
||||
import org.navalplanner.business.orders.entities.SchedulingState;
|
||||
import org.navalplanner.business.orders.entities.TreeNodeOnListWithSchedulingState;
|
||||
import org.navalplanner.business.requirements.entities.DirectCriterionRequirement;
|
||||
import org.navalplanner.business.requirements.entities.IndirectCriterionRequirement;
|
||||
import org.navalplanner.business.trees.ITreeParentNode;
|
||||
|
||||
/**
|
||||
|
|
@ -103,14 +105,40 @@ public class OrderLineGroupTemplate extends OrderElementTemplate implements
|
|||
List<OrderElementTemplate> result = buildChildrenTemplates(beingBuilt,
|
||||
group.getChildren());
|
||||
beingBuilt.children = result;
|
||||
beingBuilt.copyIndirectRequirementsFromOriginalDirectRequirements();
|
||||
beingBuilt.propagateIndirectCriterionRequirements();
|
||||
return beingBuilt;
|
||||
}
|
||||
|
||||
public void copyIndirectRequirementsFromOriginalDirectRequirements() {
|
||||
for (DirectCriterionRequirement each: getDirectCriterionRequirements()) {
|
||||
/**
|
||||
* Propagates {@link IndirectCriterionRequirement} for order to template,
|
||||
* preserving the original value of 'valid' field
|
||||
*
|
||||
* This method is meant to be used the first time an
|
||||
* {@link OrderElementTemplate} was created out from an {@link OrderElement}
|
||||
* and it's needed to propagate its criteria while preserving the original
|
||||
* value of 'valid' field in {@link IndirectCriterionRequirement}
|
||||
*/
|
||||
private void propagateIndirectCriterionRequirements() {
|
||||
propagateIndirectCriterionRequirementsForOrderLineGroup(this);
|
||||
propagateIndirectCriterionRequirementsForOrderLines(this);
|
||||
}
|
||||
|
||||
private void propagateIndirectCriterionRequirementsForOrderLineGroup(
|
||||
OrderLineGroupTemplate orderLineGroup) {
|
||||
for (DirectCriterionRequirement each : getDirectCriterionRequirements()) {
|
||||
criterionRequirementTemplateHandler
|
||||
.copyIndirectCriterionRequirementFromOriginalToOrderLineGroupChildren(this, each);
|
||||
.propagateIndirectCriterionRequirementsForOrderLineGroupKeepingValid(
|
||||
orderLineGroup, each);
|
||||
}
|
||||
}
|
||||
|
||||
private void propagateIndirectCriterionRequirementsForOrderLines(
|
||||
OrderLineGroupTemplate orderLineGroup) {
|
||||
for (OrderElementTemplate each : orderLineGroup.getChildren()) {
|
||||
if (each instanceof OrderLineTemplate) {
|
||||
criterionRequirementTemplateHandler
|
||||
.propagateIndirectCriterionRequirementsKeepingValid((OrderLineTemplate) each);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -198,17 +226,40 @@ public class OrderLineGroupTemplate extends OrderElementTemplate implements
|
|||
for (OrderElementTemplate each : children) {
|
||||
each.createElement(parent);
|
||||
}
|
||||
copyIndirectCriterionRequirementFromOriginalToOrderLineGroupChildren(parent);
|
||||
propagateIndirectCriterionRequirements(parent);
|
||||
return parent;
|
||||
}
|
||||
|
||||
private void copyIndirectCriterionRequirementFromOriginalToOrderLineGroupChildren(OrderLineGroup orderElement) {
|
||||
for (DirectCriterionRequirement each: orderElement.getDirectCriterionRequirement()) {
|
||||
criterionRequirementOrderElementHandler.copyIndirectCriterionRequirementFromOriginalToOrderLineGroupChildren(
|
||||
/**
|
||||
* Propagates {@link IndirectCriterionRequirement} from template to order,
|
||||
* preserving the original value of 'valid' field
|
||||
*/
|
||||
private void propagateIndirectCriterionRequirements(OrderLineGroup orderLineGroup) {
|
||||
propagateIndirectCriterionRequirementsForOrderLineGroup(orderLineGroup);
|
||||
propagateIndirectCriterionRequirementsForOrderLines(orderLineGroup);
|
||||
}
|
||||
|
||||
private void propagateIndirectCriterionRequirementsForOrderLineGroup(
|
||||
OrderLineGroup orderElement) {
|
||||
|
||||
for (DirectCriterionRequirement each : orderElement
|
||||
.getDirectCriterionRequirement()) {
|
||||
criterionRequirementOrderElementHandler
|
||||
.propagateIndirectCriterionRequirementsForOrderLineGroupKeepingValid(
|
||||
orderElement, each);
|
||||
}
|
||||
}
|
||||
|
||||
private void propagateIndirectCriterionRequirementsForOrderLines(
|
||||
OrderLineGroup orderLineGroup) {
|
||||
for (OrderElement each : orderLineGroup.getChildren()) {
|
||||
if (each instanceof OrderLine) {
|
||||
criterionRequirementOrderElementHandler
|
||||
.propagateIndirectCriterionRequirementsKeepingValid((OrderLine) each);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public OrderLineGroup createElement() {
|
||||
OrderLineGroup orderLineGroup = OrderLineGroup.create();
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue