Index: lams_common/src/java/org/lamsfoundation/lams/util/svg/ActivityTreeNodeComparator.java =================================================================== diff -u --- lams_common/src/java/org/lamsfoundation/lams/util/svg/ActivityTreeNodeComparator.java (revision 0) +++ lams_common/src/java/org/lamsfoundation/lams/util/svg/ActivityTreeNodeComparator.java (revision 0b02d389a59265642e50850e05c5bc0319a5dcf2) @@ -0,0 +1,62 @@ +/**************************************************************** + * Copyright (C) 2005 LAMS Foundation (http://lamsfoundation.org) + * ============================================================= + * License Information: http://lamsfoundation.org/licensing/lams/2.0/ + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2.0 + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 * USA + * + * http://www.gnu.org/licenses/gpl.txt + * **************************************************************** + */ + +/* $Id$ */ +package org.lamsfoundation.lams.util.svg; + +import java.io.Serializable; +import java.util.Comparator; + +import org.lamsfoundation.lams.learningdesign.dto.AuthoringActivityDTO; + +/** + * The activity order comparator used for sorted set. Order id is used as + * the primary comparing criteria as it is unique within a complex activity. + * If they are the same, activity id are used for comparison to ensure the + * sorted set won't treat two activities with the same order id as the + * same activity. + * + * @author Andrey Balan + */ +public class ActivityTreeNodeComparator implements Comparator { + + /** + * Compare the order. + * @see java.util.Comparator#compare(java.lang.Object, java.lang.Object) + */ + public int compare(ActivityTreeNode treeNode1, ActivityTreeNode treeNode2) { + AuthoringActivityDTO activity1 = treeNode1.getActivity(); + AuthoringActivityDTO activity2 = treeNode2.getActivity(); + + if(activity1.getOrderID()==null||activity2.getOrderID()==null) + return activity1.getActivityID().compareTo(activity2.getActivityID()); + + int orderDiff = activity1.getOrderID().compareTo(activity2.getOrderID()); + //return order id compare result if they are not the same + if(orderDiff!=0) + return orderDiff; + //if order id are the same, compare activity id. + else + return activity1.getActivityID().compareTo(activity2.getActivityID()); + } + +} Index: lams_common/src/java/org/lamsfoundation/lams/util/svg/SVGGenerator.java =================================================================== diff -u -r07e000ffd4772f1832cb87aba7b843a4e824a449 -r0b02d389a59265642e50850e05c5bc0319a5dcf2 --- lams_common/src/java/org/lamsfoundation/lams/util/svg/SVGGenerator.java (.../SVGGenerator.java) (revision 07e000ffd4772f1832cb87aba7b843a4e824a449) +++ lams_common/src/java/org/lamsfoundation/lams/util/svg/SVGGenerator.java (.../SVGGenerator.java) (revision 0b02d389a59265642e50850e05c5bc0319a5dcf2) @@ -29,11 +29,13 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; +import java.util.TreeSet; import org.apache.batik.dom.svg.SVGDOMImplementation; import org.apache.commons.lang.StringUtils; import org.jdom.JDOMException; import org.lamsfoundation.lams.learningdesign.Activity; +import org.lamsfoundation.lams.learningdesign.ActivityDTOOrderComparator; import org.lamsfoundation.lams.learningdesign.dto.AuthoringActivityDTO; import org.lamsfoundation.lams.learningdesign.dto.LearningDesignDTO; import org.lamsfoundation.lams.learningdesign.dto.TransitionDTO; @@ -369,7 +371,9 @@ startingPoint.setAttributeNS(null, "style", "fill:#000000"); g.appendChild(startingPoint); - Iterator sequenceNodeIterator = node.getChildren().iterator(); + TreeSet sequenceNodes = new TreeSet(new ActivityTreeNodeComparator()); + sequenceNodes.addAll(node.getChildren()); + Iterator sequenceNodeIterator = sequenceNodes.iterator(); for (int sequenceIndex = -1; sequenceNodeIterator.hasNext() && (sequenceIndex < 4); sequenceIndex++) { ActivityTreeNode sequenceNode = sequenceNodeIterator.next(); double previousActivityPointX = startingPointX + BRANCHING_ACTIVITY_POINT/2;