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..c1b917a11 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 @@ -30,7 +30,7 @@ import org.apache.commons.lang.Validate; import org.joda.time.LocalDate; import org.zkoss.ganttz.util.Interval; -public class LoadTimeLine { +public class LoadTimeLine implements Comparable{ private final String conceptName; private final List loadPeriods; @@ -196,4 +196,13 @@ public class LoadTimeLine { return result; } -} + public String toString() { + return conceptName; + } + + @Override + public int compareTo(LoadTimeLine o) { + return conceptName.compareTo(o.getConceptName()); + } + +} \ No newline at end of file diff --git a/ganttzk/src/main/java/org/zkoss/ganttz/resourceload/ResourcesLoadPanel.java b/ganttzk/src/main/java/org/zkoss/ganttz/resourceload/ResourcesLoadPanel.java index 655b14069..a4d91ec02 100644 --- a/ganttzk/src/main/java/org/zkoss/ganttz/resourceload/ResourcesLoadPanel.java +++ b/ganttzk/src/main/java/org/zkoss/ganttz/resourceload/ResourcesLoadPanel.java @@ -23,7 +23,10 @@ package org.zkoss.ganttz.resourceload; import static org.zkoss.ganttz.i18n.I18nHelper._; +import java.util.ArrayList; import java.util.List; +import java.util.SortedSet; +import java.util.TreeSet; import org.apache.commons.lang.StringUtils; import org.joda.time.LocalDate; @@ -294,9 +297,33 @@ public class ResourcesLoadPanel extends HtmlMacroComponent { result.addToRoot(loadTimeLine); result = addNodes(result, loadTimeLine); } + return sortModelTree(result); + } + + private MutableTreeModel sortModelTree(MutableTreeModel modelForTree) { + LoadTimeLine root = modelForTree.getRoot(); + MutableTreeModel result = MutableTreeModel.create(LoadTimeLine.class, root); + sortModelTree(result, modelForTree, root); return result; } + private void sortModelTree(MutableTreeModel result, + MutableTreeModel source, LoadTimeLine parent) { + List children = getChildrenInOrderFor(source, parent); + result.add(parent, children); + for (LoadTimeLine each: children) { + sortModelTree(result, source, each); + } + } + + private List getChildrenInOrderFor( + MutableTreeModel modelForTree, LoadTimeLine parent) { + SortedSet result = new TreeSet(); + for (int i = 0; i < modelForTree.getChildCount(parent); i++) { + result.add(modelForTree.getChild(parent, i)); + } + return new ArrayList(result); + } private MutableTreeModel addNodes( MutableTreeModel tree, LoadTimeLine parent) {