[Bug #1038] Added test and fixed bug for repeated labels in WBS.

FEA: ItEr74S07WBSTreeRefactoring
This commit is contained in:
Manuel Rego Casasnovas 2011-05-03 09:51:35 +02:00
parent a468460246
commit 8794d7d032
3 changed files with 53 additions and 1 deletions

View file

@ -579,6 +579,18 @@ public abstract class OrderElement extends IntegrationEntity implements
labels.add(label);
}
protected void updateLabels() {
if (parent != null) {
Set<Label> toRemove = new HashSet<Label>();
for (Label each : labels) {
if (!parent.checkAncestorsNoOtherLabelRepeated(each)) {
toRemove.add(each);
}
}
labels.removeAll(toRemove);
}
}
public void removeLabel(Label label) {
labels.remove(label);
}
@ -1073,7 +1085,7 @@ public abstract class OrderElement extends IntegrationEntity implements
return false;
}
private boolean checkAncestorsNoOtherLabelRepeated(Label newLabel) {
protected boolean checkAncestorsNoOtherLabelRepeated(Label newLabel) {
for (Label label : labels) {
if (label.isEqualTo(newLabel)) {
return false;

View file

@ -92,6 +92,7 @@ public class OrderLineGroup extends OrderElement implements
@Override
protected void onChildAddedAdditionalActions(OrderElement newChild) {
updateCriterionRequirements();
newChild.updateLabels();
}
@Override

View file

@ -207,6 +207,10 @@ public class OrderElementTreeModelTest {
orderElement.addLabel(label);
}
private void addSameLabel(OrderElement orderElement) {
orderElement.addLabel(label);
}
private void addMaterialAssignment(OrderElement orderElement) {
materialAssignment = MaterialAssignment.create(Material
.createUnvalidated("material-code", "material-description",
@ -1083,4 +1087,39 @@ public class OrderElementTreeModelTest {
assertNull(element2.getAdvanceAssignmentByType(advanceType));
}
@Test
public void checkMoveOrderLineWithLabelToOrderLineGroupWithSameLabel() {
model.addElement("element", 100);
model.addElementAt(order.getChildren().get(0), "element2", 50);
OrderLineGroup container = (OrderLineGroup) order.getChildren().get(0);
OrderLine element = null;
OrderLine element2 = null;
for (OrderElement each : container.getChildren()) {
if (each.getName().equals("element")) {
element = (OrderLine) each;
} else if (each.getName().equals("element2")) {
element2 = (OrderLine) each;
}
}
model.unindent(element2);
addLabel(container);
addSameLabel(element2);
model.move(element2, container);
assertTrue(order.getLabels().isEmpty());
assertThat(container.getLabels().size(), equalTo(1));
Label label1 = container.getLabels().iterator().next();
Label label2 = label;
assertThat(container.getLabels().iterator().next(), equalTo(label));
assertTrue(element.getLabels().isEmpty());
assertTrue(element2.getLabels().isEmpty());
}
}