diff --git a/ganttzk/src/main/java/org/zkoss/ganttz/data/resourceload/LoadTimeLine.java b/ganttzk/src/main/java/org/zkoss/ganttz/data/resourceload/LoadTimeLine.java index 8227ae8d5..044c82d5f 100644 --- a/ganttzk/src/main/java/org/zkoss/ganttz/data/resourceload/LoadTimeLine.java +++ b/ganttzk/src/main/java/org/zkoss/ganttz/data/resourceload/LoadTimeLine.java @@ -23,15 +23,38 @@ package org.zkoss.ganttz.data.resourceload; import java.util.ArrayList; import java.util.Collections; +import java.util.Comparator; import java.util.Date; import java.util.List; +import org.apache.commons.collections.ComparatorUtils; import org.apache.commons.lang.Validate; import org.joda.time.LocalDate; import org.zkoss.ganttz.util.Interval; public class LoadTimeLine { + @SuppressWarnings("unchecked") + private static final Comparator nullSafeComparator = ComparatorUtils + .nullLowComparator(ComparatorUtils.naturalComparator()); + + public static Comparator byStartAndEndDate() { + return new Comparator() { + + @Override + public int compare(LoadTimeLine o1, LoadTimeLine o2) { + int result = nullSafeComparator.compare(o1.getStartPeriod(), + o2.getStartPeriod()); + if (result == 0) { + return nullSafeComparator.compare(o1.getEndPeriod(), + o2.getEndPeriod()); + } + return result; + + } + }; + } + private final String conceptName; private final List loadPeriods; diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/resourceload/ResourceLoadModel.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/resourceload/ResourceLoadModel.java index 14a28cdda..44b519149 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/resourceload/ResourceLoadModel.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/resourceload/ResourceLoadModel.java @@ -26,6 +26,7 @@ import static org.navalplanner.web.I18nHelper._; import java.util.ArrayList; import java.util.Calendar; import java.util.Collection; +import java.util.Collections; import java.util.Date; import java.util.HashMap; import java.util.LinkedHashMap; @@ -457,6 +458,7 @@ public class ResourceLoadModel implements IResourceLoadModel { result.addAll(buildSubLevels(criterion, ResourceAllocation.getOfType( GenericResourceAllocation.class, allocations))); result.add(buildRelatedSpecificAllocations(criterion, allocations)); + Collections.sort(result, LoadTimeLine.byStartAndEndDate()); return result; } @@ -507,6 +509,7 @@ public class ResourceLoadModel implements IResourceLoadModel { onlyGeneric(allocations))); result.addAll(buildTimeLinesForEachResource(criterion, onlySpecific(allocations), getCurrentTimeLineRole(order))); + Collections.sort(result, LoadTimeLine.byStartAndEndDate()); return result; } @@ -755,6 +758,7 @@ public class ResourceLoadModel implements IResourceLoadModel { onlySpecific(sortedByStartDate))); result.addAll(buildTimeLinesForEachCriterion(resource, onlyGeneric(sortedByStartDate))); + Collections.sort(result, LoadTimeLine.byStartAndEndDate()); return result; }