Index: lams_build/lib/lams/lams.jar =================================================================== diff -u -r87b20aa68aff94feca9cc3aee00d40c2781aa009 -ra7351da17f548464a76295a73e9cc17450a6ff39 Binary files differ Index: lams_common/conf/hibernate/mappings/org/lamsfoundation/lams/learningdesign/Activity.hbm.xml =================================================================== diff -u -ra94909694731838faabd950b35db3ec905f28529 -ra7351da17f548464a76295a73e9cc17450a6ff39 --- lams_common/conf/hibernate/mappings/org/lamsfoundation/lams/learningdesign/Activity.hbm.xml (.../Activity.hbm.xml) (revision a94909694731838faabd950b35db3ec905f28529) +++ lams_common/conf/hibernate/mappings/org/lamsfoundation/lams/learningdesign/Activity.hbm.xml (.../Activity.hbm.xml) (revision a7351da17f548464a76295a73e9cc17450a6ff39) @@ -259,14 +259,23 @@ @hibernate.class - - - - @hibernate.many-to-one not-null="false" - @hibernate.column name="first_activity_id" - - - + + + + @hibernate.many-to-one not-null="false" + @hibernate.column name="first_activity_id" + + + + + + @hibernate.set lazy="true" inverse="true" cascade="none" + @hibernate.collection-key column="sequence_activity_id" + @hibernate.collection-one-to-many class="org.lamsfoundation.lams.learningdesign.GroupBranchActivityEntry" + + + + @hibernate.class @@ -287,7 +296,6 @@ @hibernate.property column="end_ycoord" length="11" - @hibernate.class Index: lams_common/src/java/org/lamsfoundation/lams/learningdesign/ActivityTitleComparator.java =================================================================== diff -u --- lams_common/src/java/org/lamsfoundation/lams/learningdesign/ActivityTitleComparator.java (revision 0) +++ lams_common/src/java/org/lamsfoundation/lams/learningdesign/ActivityTitleComparator.java (revision a7351da17f548464a76295a73e9cc17450a6ff39) @@ -0,0 +1,60 @@ +/*************************************************************************** + * 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.learningdesign; + +import java.io.Serializable; +import java.util.Comparator; + +/** + * The activity name comparator used for sorted set, sorting on the activity's name then order id + * then activity id. This comparator will impose orderings that are inconsistent with equals. + * + * Only use for classes that are in the Activity hierarchy. + * + * Uses the ActivityOrderComparator for reuse purposes only - if the name is the same in both + * activities then it calls ActivityOrderComparator to do the other comparisons. Do not assume that + * it will always extend the ActivityOrderComparator. + */ +public class ActivityTitleComparator extends ActivityOrderComparator implements Comparator, Serializable { + + /** + * Compare the order. + * @see java.util.Comparator#compare(java.lang.Object, java.lang.Object) + */ + public int compare(Object o1, Object o2) { + Activity activity1 = (Activity)o1; + Activity activity2 = (Activity)o2; + + int orderDiff = 0; + + if(activity1.getTitle()!=null) { + if ( activity2.getTitle() == null ) + orderDiff = 1; + else + orderDiff = activity1.getTitle().compareTo(activity2.getTitle()); + } + + return orderDiff != 0 ? orderDiff : super.compare(o1, o2); + } + +} Index: lams_common/src/java/org/lamsfoundation/lams/learningdesign/BranchingActivity.java =================================================================== diff -u -ra94909694731838faabd950b35db3ec905f28529 -ra7351da17f548464a76295a73e9cc17450a6ff39 --- lams_common/src/java/org/lamsfoundation/lams/learningdesign/BranchingActivity.java (.../BranchingActivity.java) (revision a94909694731838faabd950b35db3ec905f28529) +++ lams_common/src/java/org/lamsfoundation/lams/learningdesign/BranchingActivity.java (.../BranchingActivity.java) (revision a7351da17f548464a76295a73e9cc17450a6ff39) @@ -96,9 +96,8 @@ this.startYcoord = startYcoord; this.endXcoord = endXcoord; this.endYcoord = endYcoord; + } - } - /** default constructor */ public BranchingActivity() { super.activityStrategy = new BranchingActivityStrategy(this); @@ -181,6 +180,7 @@ public void setStartYcoord(Integer startYcoord) { this.startYcoord = startYcoord; } + + - } Index: lams_common/src/java/org/lamsfoundation/lams/learningdesign/ComplexActivity.java =================================================================== diff -u -r08950e1090443c3423a3d1c587416a2fccd8bbdf -ra7351da17f548464a76295a73e9cc17450a6ff39 --- lams_common/src/java/org/lamsfoundation/lams/learningdesign/ComplexActivity.java (.../ComplexActivity.java) (revision 08950e1090443c3423a3d1c587416a2fccd8bbdf) +++ lams_common/src/java/org/lamsfoundation/lams/learningdesign/ComplexActivity.java (.../ComplexActivity.java) (revision a7351da17f548464a76295a73e9cc17450a6ff39) @@ -34,6 +34,7 @@ import org.apache.commons.lang.builder.ToStringBuilder; import org.lamsfoundation.lams.learningdesign.dto.AuthoringActivityDTO; import org.lamsfoundation.lams.learningdesign.strategy.ComplexActivityStrategy; +import org.lamsfoundation.lams.learningdesign.strategy.SimpleActivityStrategy; import org.lamsfoundation.lams.lesson.LearnerProgress; /** @@ -194,4 +195,9 @@ return dtoSet; } + + public ComplexActivityStrategy getComplexActivityStrategy() { + return activityStrategy; + } + } \ No newline at end of file Index: lams_common/src/java/org/lamsfoundation/lams/learningdesign/ContributionTypes.java =================================================================== diff -u -r9481bb9c6f8c0e4d6fbed6b230a41c77feda64c6 -ra7351da17f548464a76295a73e9cc17450a6ff39 --- lams_common/src/java/org/lamsfoundation/lams/learningdesign/ContributionTypes.java (.../ContributionTypes.java) (revision 9481bb9c6f8c0e4d6fbed6b230a41c77feda64c6) +++ lams_common/src/java/org/lamsfoundation/lams/learningdesign/ContributionTypes.java (.../ContributionTypes.java) (revision a7351da17f548464a76295a73e9cc17450a6ff39) @@ -36,7 +36,7 @@ public static final Integer SCHEDULE_GATE = new Integer(5); public static final Integer CHOSEN_GROUPING = new Integer(6); public static final Integer CONTRIBUTION = new Integer(7); - public static final Integer SYSTEM_GATE = new Integer(7); - + public static final Integer SYSTEM_GATE = new Integer(8); + public static final Integer CHOSEN_BRANCHING = new Integer(9); } Index: lams_common/src/java/org/lamsfoundation/lams/learningdesign/GroupBranchActivityEntry.java =================================================================== diff -u -r4ca1b4e69d135a796d7db5eab3206e24e9503619 -ra7351da17f548464a76295a73e9cc17450a6ff39 --- lams_common/src/java/org/lamsfoundation/lams/learningdesign/GroupBranchActivityEntry.java (.../GroupBranchActivityEntry.java) (revision 4ca1b4e69d135a796d7db5eab3206e24e9503619) +++ lams_common/src/java/org/lamsfoundation/lams/learningdesign/GroupBranchActivityEntry.java (.../GroupBranchActivityEntry.java) (revision a7351da17f548464a76295a73e9cc17450a6ff39) @@ -25,6 +25,7 @@ import java.io.Serializable; +import org.apache.commons.lang.builder.CompareToBuilder; import org.apache.commons.lang.builder.EqualsBuilder; import org.apache.commons.lang.builder.HashCodeBuilder; import org.apache.commons.lang.builder.ToStringBuilder; @@ -40,7 +41,7 @@ * * @hibernate.class table="lams_group_branch_activity" */ -public class GroupBranchActivityEntry implements Serializable { +public class GroupBranchActivityEntry implements Serializable, Comparable { /** identifier field */ private Long entryId; @@ -175,4 +176,12 @@ return new GroupBranchActivityEntryDTO(this); } + public int compareTo(Object other) { + GroupBranchActivityEntry castOther = (GroupBranchActivityEntry) other; + return new CompareToBuilder() + .append(this.getEntryId(), castOther.getEntryId()) + .append(this.getEntryUIID(), castOther.getEntryUIID()) + .toComparison(); + } + } Index: lams_common/src/java/org/lamsfoundation/lams/learningdesign/SequenceActivity.java =================================================================== diff -u -reb0c055d846fcd1fda55eca93baef21971207d60 -ra7351da17f548464a76295a73e9cc17450a6ff39 --- lams_common/src/java/org/lamsfoundation/lams/learningdesign/SequenceActivity.java (.../SequenceActivity.java) (revision eb0c055d846fcd1fda55eca93baef21971207d60) +++ lams_common/src/java/org/lamsfoundation/lams/learningdesign/SequenceActivity.java (.../SequenceActivity.java) (revision a7351da17f548464a76295a73e9cc17450a6ff39) @@ -25,6 +25,7 @@ import java.io.Serializable; import java.util.Date; +import java.util.Set; import java.util.SortedSet; import org.apache.commons.lang.builder.ToStringBuilder; @@ -40,6 +41,8 @@ /** nullable persistent field */ private Activity firstActivity; + private Set branchEntries; + /** full constructor */ public SequenceActivity(Long activityId, Integer id, @@ -60,7 +63,8 @@ Transition transitionTo, Transition transitionFrom, String languageFile, - SortedSet activities) { + SortedSet activities, + Set branchEntries) { super(activityId, id, description, @@ -82,6 +86,8 @@ languageFile, activities); super.activityStrategy = new SequenceActivityStrategy(this); + this.branchEntries = branchEntries; + } @@ -156,4 +162,19 @@ this.firstActivity = firstActivity; } + /** + * Get the set of the branch to group mappings used for this branching activity. The set contains GroupBranchActivityEntry entries + * + * @hibernate.set lazy="true" inverse="true" cascade="none" + * @hibernate.collection-key column="branch_activity_id" + * @hibernate.collection-one-to-many class="org.lamsfoundation.lams.learningdesign.GroupBranchActivityEntry" + */ + public Set getBranchEntries() { + return branchEntries; + } + + public void setBranchEntries(Set branchEntries) { + this.branchEntries = branchEntries; + } + } Index: lams_common/src/java/org/lamsfoundation/lams/learningdesign/strategy/BranchingActivityStrategy.java =================================================================== diff -u -r968fb2185fee5e44b7c4b30e5753805ef05e01df -ra7351da17f548464a76295a73e9cc17450a6ff39 --- lams_common/src/java/org/lamsfoundation/lams/learningdesign/strategy/BranchingActivityStrategy.java (.../BranchingActivityStrategy.java) (revision 968fb2185fee5e44b7c4b30e5753805ef05e01df) +++ lams_common/src/java/org/lamsfoundation/lams/learningdesign/strategy/BranchingActivityStrategy.java (.../BranchingActivityStrategy.java) (revision a7351da17f548464a76295a73e9cc17450a6ff39) @@ -23,14 +23,13 @@ /* $$Id$$ */ package org.lamsfoundation.lams.learningdesign.strategy; +import java.util.ArrayList; import java.util.Iterator; -import java.util.Set; -import java.util.TreeSet; import org.lamsfoundation.lams.learningdesign.Activity; -import org.lamsfoundation.lams.learningdesign.ActivityOrderComparator; import org.lamsfoundation.lams.learningdesign.BranchingActivity; import org.lamsfoundation.lams.learningdesign.ComplexActivity; +import org.lamsfoundation.lams.learningdesign.ContributionTypes; import org.lamsfoundation.lams.learningdesign.NullActivity; @@ -89,5 +88,18 @@ return branchingActivity; } + + /** + * Setup contribution type for chosen branching activities. + * @param contributionTypes the list that holds contribution types. + */ + protected void setUpContributionType(ArrayList contributionTypes) + { + if ( branchingActivity != null && branchingActivity.isChosenBranchingActivity()) { + contributionTypes.add(ContributionTypes.CHOSEN_BRANCHING); + } + } + + } Index: lams_common/src/java/org/lamsfoundation/lams/learningdesign/strategy/ComplexActivityStrategy.java =================================================================== diff -u -r08950e1090443c3423a3d1c587416a2fccd8bbdf -ra7351da17f548464a76295a73e9cc17450a6ff39 --- lams_common/src/java/org/lamsfoundation/lams/learningdesign/strategy/ComplexActivityStrategy.java (.../ComplexActivityStrategy.java) (revision 08950e1090443c3423a3d1c587416a2fccd8bbdf) +++ lams_common/src/java/org/lamsfoundation/lams/learningdesign/strategy/ComplexActivityStrategy.java (.../ComplexActivityStrategy.java) (revision a7351da17f548464a76295a73e9cc17450a6ff39) @@ -24,6 +24,7 @@ package org.lamsfoundation.lams.learningdesign.strategy; import java.io.Serializable; +import java.util.ArrayList; import java.util.Iterator; import org.lamsfoundation.lams.learningdesign.Activity; @@ -39,7 +40,7 @@ * @author Jacky Fang 2005-2-23 * @version 1.1 */ -public abstract class ComplexActivityStrategy implements Serializable +public abstract class ComplexActivityStrategy implements Serializable, IContributionTypeStrategy { /** *

Check up all children completion status for a complex activity.

@@ -108,4 +109,32 @@ protected Activity getActivity() { return getComplexActivity(); } + + //--------------------------------------------------------------------- + // Implementation of IContributeTypeStrategy + //--------------------------------------------------------------------- + /** + * Template method that get contribute type according its sub concrete + * activity. + * @param activity the activity that has contribute type. + * @return an array of contribute types. + */ + public Integer[] getContributionType() + { + ArrayList contributionTypes = new ArrayList(); + + //abstract method to polymorphically setup contribute type. + setUpContributionType(contributionTypes); + + return (Integer[])contributionTypes.toArray(new Integer[contributionTypes.size()]); + } + + /** + * Setup contribution type polymorphically according its activity type. + * Most complex activities don't have a contribution type, so default to setting up nothing + * @param contributionTypes the list that holds contribution types. + */ + protected void setUpContributionType(ArrayList contributionTypes) { + + } } Index: lams_common/src/java/org/lamsfoundation/lams/learningdesign/strategy/IContributionTypeStrategy.java =================================================================== diff -u --- lams_common/src/java/org/lamsfoundation/lams/learningdesign/strategy/IContributionTypeStrategy.java (revision 0) +++ lams_common/src/java/org/lamsfoundation/lams/learningdesign/strategy/IContributionTypeStrategy.java (revision a7351da17f548464a76295a73e9cc17450a6ff39) @@ -0,0 +1,39 @@ +/*************************************************************************** + * 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.learningdesign.strategy; + +/** + * Methods for a strategy that gets the contribution types. Is used for both + * simple and complex activity strategies. + */ +public interface IContributionTypeStrategy +{ + + /** + * Get contribute type according its sub concrete activity. + * @param activity the activity that has contribute type. + * @return an array of contribute types. + */ + public Integer[] getContributionType(); + +} Index: lams_common/src/java/org/lamsfoundation/lams/learningdesign/strategy/SimpleActivityStrategy.java =================================================================== diff -u -r08950e1090443c3423a3d1c587416a2fccd8bbdf -ra7351da17f548464a76295a73e9cc17450a6ff39 --- lams_common/src/java/org/lamsfoundation/lams/learningdesign/strategy/SimpleActivityStrategy.java (.../SimpleActivityStrategy.java) (revision 08950e1090443c3423a3d1c587416a2fccd8bbdf) +++ lams_common/src/java/org/lamsfoundation/lams/learningdesign/strategy/SimpleActivityStrategy.java (.../SimpleActivityStrategy.java) (revision a7351da17f548464a76295a73e9cc17450a6ff39) @@ -46,7 +46,7 @@ * @author Minhas * @version 1.1 */ -public abstract class SimpleActivityStrategy implements Serializable +public abstract class SimpleActivityStrategy implements Serializable, IContributionTypeStrategy { //---------------------------------------------------------------------