diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/AggregatedHoursGroup.java b/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/AggregatedHoursGroup.java index e388b9de3..6731360e1 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/AggregatedHoursGroup.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/AggregatedHoursGroup.java @@ -29,6 +29,7 @@ import java.util.Map; import java.util.Set; import java.util.Map.Entry; +import org.apache.commons.lang.StringUtils; import org.navalplanner.business.resources.entities.Criterion; /** @@ -52,6 +53,14 @@ public class AggregatedHoursGroup { return result; } + public static int sum(Collection aggregated) { + int result = 0; + for (AggregatedHoursGroup each : aggregated) { + result += each.getHours(); + } + return result; + } + private static Map, List> byCriterions( Collection hours) { Map, List> result = new HashMap, List>(); @@ -83,4 +92,26 @@ public class AggregatedHoursGroup { return hoursGroup; } + public int getHours() { + int result = 0; + for (HoursGroup each : hoursGroup) { + result += each.getWorkingHours(); + } + return result; + } + + public String getCriterionsJoinedByComma() { + List criterionNames = asNames(criterions); + Collections.sort(criterionNames); + return StringUtils.join(criterionNames, ", "); + } + + private List asNames(Set criterions) { + List result = new ArrayList(); + for (Criterion each : criterions) { + result.add(each.getName()); + } + return result; + } + } diff --git a/navalplanner-business/src/test/java/org/navalplanner/business/test/orders/entities/AggregatedHoursGroupTest.java b/navalplanner-business/src/test/java/org/navalplanner/business/test/orders/entities/AggregatedHoursGroupTest.java index 33443b516..4bf4b893f 100644 --- a/navalplanner-business/src/test/java/org/navalplanner/business/test/orders/entities/AggregatedHoursGroupTest.java +++ b/navalplanner-business/src/test/java/org/navalplanner/business/test/orders/entities/AggregatedHoursGroupTest.java @@ -48,13 +48,11 @@ public class AggregatedHoursGroupTest { private Criterion criterion1; private Criterion criterion2; - private Criterion criterion3; @Before public void setUpCriterions() { criterion1 = createNiceMock(Criterion.class); criterion2 = createNiceMock(Criterion.class); - criterion3 = createNiceMock(Criterion.class); } @Test @@ -76,6 +74,27 @@ public class AggregatedHoursGroupTest { withHours(h4, h5)))); } + @Test + public void getHoursReturnTheSumOfAllHours() { + HoursGroup h1 = createHoursGroupWithCriterions(criterion1, criterion2); + h1.setWorkingHours(10); + HoursGroup h2 = createHoursGroupWithCriterions(criterion1, criterion2); + h2.setWorkingHours(5); + AggregatedHoursGroup aggregate = AggregatedHoursGroup.aggregate(h1, h2) + .get(0); + assertThat(aggregate.getHours(), equalTo(15)); + } + + @Test + public void sumAllAggregatedHours() { + HoursGroup h1 = createHoursGroupWithCriterions(criterion1, criterion2); + h1.setWorkingHours(10); + HoursGroup h2 = createHoursGroupWithCriterions(criterion1); + h2.setWorkingHours(5); + List list = AggregatedHoursGroup.aggregate(h1, h2); + assertThat(AggregatedHoursGroup.sum(list), equalTo(15)); + } + private static abstract class AggregatedHoursGroupMatcher extends BaseMatcher {