Index: lams_build/lib/lams/lams.jar =================================================================== diff -u -r8900520f786ffcb16e80ef12f3ff867878c640a3 -rd66ffc2bf657d1fe25183aa727b110ed42048d59 Binary files differ Index: lams_central/src/java/org/lamsfoundation/lams/authoring/ObjectExtractor.java =================================================================== diff -u -rcccfd92afaaaa425d74e0023a0497057399465bd -rd66ffc2bf657d1fe25183aa727b110ed42048d59 --- lams_central/src/java/org/lamsfoundation/lams/authoring/ObjectExtractor.java (.../ObjectExtractor.java) (revision cccfd92afaaaa425d74e0023a0497057399465bd) +++ lams_central/src/java/org/lamsfoundation/lams/authoring/ObjectExtractor.java (.../ObjectExtractor.java) (revision d66ffc2bf657d1fe25183aa727b110ed42048d59) @@ -901,6 +901,14 @@ } private void buildBranchingActivity(BranchingActivity branchingActivity,Hashtable activityDetails) throws WDDXProcessorConversionException, ObjectExtractorException { + if ( branchingActivity.isChosenBranchingActivity() ) { + branchingActivity.setSystemTool(systemToolDAO.getSystemToolByID(SystemTool.TEACHER_CHOSEN_BRANCHING)); + } else if ( branchingActivity.isGroupBranchingActivity() ) { + branchingActivity.setSystemTool(systemToolDAO.getSystemToolByID(SystemTool.GROUP_BASED_BRANCHING)); + } else if ( branchingActivity.isToolBranchingActivity() ) { + branchingActivity.setSystemTool(systemToolDAO.getSystemToolByID(SystemTool.TOOL_BASED_BRANCHING)); + } + branchingActivity.setStartXcoord(WDDXProcessor.convertToInteger(activityDetails, WDDXTAGS.START_XCOORD)); branchingActivity.setStartYcoord(WDDXProcessor.convertToInteger(activityDetails, WDDXTAGS.START_YCOORD)); branchingActivity.setEndXcoord(WDDXProcessor.convertToInteger(activityDetails, WDDXTAGS.END_XCOORD)); Index: lams_central/src/java/org/lamsfoundation/lams/authoring/service/AuthoringService.java =================================================================== diff -u -ra21d88d9e4bd19f2ecf4112d6c5dc26270d6010c -rd66ffc2bf657d1fe25183aa727b110ed42048d59 --- lams_central/src/java/org/lamsfoundation/lams/authoring/service/AuthoringService.java (.../AuthoringService.java) (revision a21d88d9e4bd19f2ecf4112d6c5dc26270d6010c) +++ lams_central/src/java/org/lamsfoundation/lams/authoring/service/AuthoringService.java (.../AuthoringService.java) (revision d66ffc2bf657d1fe25183aa727b110ed42048d59) @@ -763,6 +763,9 @@ HashMap newActivities = new HashMap(); // key is UIID HashMap newGroupings = new HashMap(); // key is UIID + // as we create the activities, we need to record any "first child" UIID's for the sequence activity to process later + Map firstChildUIIDToSequence = new HashMap(); + Set oldParentActivities = originalLearningDesign.getParentActivities(); if ( oldParentActivities != null ) { Iterator iterator = oldParentActivities.iterator(); @@ -782,6 +785,18 @@ } } + // fix up any old "first activity" in the sequence activities + for ( Activity activity : activities) { + if ( activity.isSequenceActivity() ) { + SequenceActivity newSeq = (SequenceActivity) activity; + Activity oldFirstActivity = newSeq.getFirstActivity(); + if ( oldFirstActivity != null ) { + Activity newFirstActivity = newActivities.get(oldFirstActivity.getActivityUIID()); + newSeq.setFirstActivity(newFirstActivity); + } + } + } + // Now go back and fix any branch mapping entries - they will still be pointing to old activities. // Need to check if the sets are not null as these are new objects and Hibernate may not have // backed them with collections yet. Index: lams_common/conf/hibernate/mappings/org/lamsfoundation/lams/learningdesign/Activity.hbm.xml =================================================================== diff -u -re1683b7e5ac777deb10d15b0bf41182587ca8373 -rd66ffc2bf657d1fe25183aa727b110ed42048d59 --- lams_common/conf/hibernate/mappings/org/lamsfoundation/lams/learningdesign/Activity.hbm.xml (.../Activity.hbm.xml) (revision e1683b7e5ac777deb10d15b0bf41182587ca8373) +++ lams_common/conf/hibernate/mappings/org/lamsfoundation/lams/learningdesign/Activity.hbm.xml (.../Activity.hbm.xml) (revision d66ffc2bf657d1fe25183aa727b110ed42048d59) @@ -155,73 +155,73 @@ - - @hibernate.class - public abstract - - + + @hibernate.class + + - - @hibernate.class - - - @hibernate.property column="create_grouping_ui_id" length="11" - - - - - - - + + @hibernate.property column="create_grouping_ui_id" length="11" + + + + + + + - - @hibernate.class - - - - - - - - - @hibernate.class - - - @hibernate.property column="gate_start_time_offset" length="20" - true - - - - @hibernate.property column="gate_end_time_offset" length="20" - true - - - - @hibernate.property column="gate_start_date_time" length="19" - true - - - - @hibernate.property column="gate_end_date_time" length="19" - true - - - - - @hibernate.class - - - @hibernate.class - - - @hibernate.class - - + + @hibernate.class + + + + + + + + + + + + + + @hibernate.class - + + @hibernate.property column="gate_start_time_offset" length="20" + true + + + + @hibernate.property column="gate_end_time_offset" length="20" + true + + + + @hibernate.property column="gate_start_date_time" length="19" + true + + + + @hibernate.property column="gate_end_date_time" length="19" + true + + + + + @hibernate.class + + + @hibernate.class + + + @hibernate.class + + + @@ -284,6 +284,11 @@ @hibernate.class public abstract + + + + + @hibernate.property column="start_xcoord" length="11" Index: lams_common/db/sql/insert_types_data.sql =================================================================== diff -u -r6e041b14d83c90f3f910fac33c7755fca1486b3e -rd66ffc2bf657d1fe25183aa727b110ed42048d59 --- lams_common/db/sql/insert_types_data.sql (.../insert_types_data.sql) (revision 6e041b14d83c90f3f910fac33c7755fca1486b3e) +++ lams_common/db/sql/insert_types_data.sql (.../insert_types_data.sql) (revision d66ffc2bf657d1fe25183aa727b110ed42048d59) @@ -181,28 +181,28 @@ learner_url, learner_preview_url, learner_progress_url, export_pfolio_learner_url, export_pfolio_class_url, monitor_url, contribute_url, create_date_time) VALUES (6, 10, 'Monitor Chosen Branching', 'Select between multiple sequence activities, with the branch chosen in monitoring.', - 'learning/branching.do?method=performBranching&type=chosen', 'learning/branching.do?method=performBranching&type=chosen', - 'learning/branching.do?method=viewBranching&mode=teacher&type=chosen', 'learning/branchingExportPortfolio?mode=learner&type=chosen', - 'learning/branchingExportPortfolio?mode=teacher&type=chosen', 'monitoring/branching.do?method=assignBranch&type=chosen', - 'monitoring/branching.do?method=assignBranch&type=chosen', now()); + 'learning/branching.do?method=performBranching', 'learning/branching.do?method=performBranching', + 'learning/branching.do?method=viewBranching&mode=teacher', NULL, + 'monitoring/branchingExportPortfolio?mode=teacher', 'monitoring/branching.do?method=assignBranch', + 'monitoring/branching.do?method=assignBranch', now()); INSERT INTO lams_system_tool (system_tool_id, learning_activity_type_id, tool_display_name, description, learner_url, learner_preview_url, learner_progress_url, export_pfolio_learner_url, export_pfolio_class_url, monitor_url, contribute_url, create_date_time) VALUES (7, 11, 'Group Based Branching', 'Select between multiple sequence activities, with the branch chosen by an existing group.', - 'learning/branching.do?method=performBranching&type=group', 'learning/branching.do?method=performBranching&type=group', - 'learning/branching.do?method=viewBranching&mode=teacher&type=group', 'learning/branchingExportPortfolio?mode=learner&type=group', - 'learning/branchingExportPortfolio?mode=teacher&type=group', 'monitoring/branching.do?method=assignBranch&type=group', - 'monitoring/branching.do?method=assignBranch&type=group', now()); + 'learning/branching.do?method=performBranching', 'learning/branching.do?method=performBranching', + 'learning/branching.do?method=viewBranching&mode=teacher', NULL, + 'monitoring/branchingExportPortfolio?mode=teacher', 'monitoring/branching.do?method=assignBranch', + 'monitoring/branching.do?method=assignBranch', now()); INSERT INTO lams_system_tool (system_tool_id, learning_activity_type_id, tool_display_name, description, learner_url, learner_preview_url, learner_progress_url, export_pfolio_learner_url, export_pfolio_class_url, monitor_url, contribute_url, create_date_time) VALUES (8, 12, 'Tool Output Based Branching', 'Select between multiple sequence activities, with the branch chosen on results of another activity.', - 'learning/branching.do?method=performBranching&type=tool', 'learning/branching.do?method=performBranching&type=tool', - 'learning/branching.do?method=viewBranching&mode=teacher&type=tool', 'learning/branchingExportPortfolio?mode=learner&type=tool', - 'learning/branchingExportPortfolio?mode=teacher&type=tool', 'monitoring/branching.do?method=assignBranch&type=tool', - 'monitoring/branching.do?method=assignBranch&type=tool', now()); + 'learning/branching.do?method=performBranching', 'learning/branching.do?method=performBranching', + 'learning/branching.do?method=viewBranching&mode=teacher', NULL, + 'monitoring/branchingExportPortfolio?mode=teacher', 'monitoring/branching.do?method=assignBranch', + 'monitoring/branching.do?method=assignBranch', now()); -- Supported Locales INSERT INTO lams_supported_locale (locale_id, language_iso_code, country_iso_code, description, direction) Index: lams_common/db/sql/updatescripts/alter_21_branching.sql =================================================================== diff -u -r5c85f79ac6eb2d698a970dfc662f027e4f642141 -rd66ffc2bf657d1fe25183aa727b110ed42048d59 --- lams_common/db/sql/updatescripts/alter_21_branching.sql (.../alter_21_branching.sql) (revision 5c85f79ac6eb2d698a970dfc662f027e4f642141) +++ lams_common/db/sql/updatescripts/alter_21_branching.sql (.../alter_21_branching.sql) (revision d66ffc2bf657d1fe25183aa727b110ed42048d59) @@ -35,35 +35,33 @@ INSERT INTO lams_learning_activity_type VALUES (11, 'BRANCHING_GROUP'); INSERT INTO lams_learning_activity_type VALUES (12, 'BRANCHING_TOOL'); -INSERT INTO lams_system_tool (system_tool_id, learning_activity_type_id, tool_display_name, description, - learner_url, learner_preview_url, learner_progress_url, export_pfolio_learner_url, - export_pfolio_class_url, monitor_url, contribute_url, create_date_time) -VALUES (6, 10, 'Monitor Chosen Branching', 'Select between multiple sequence activities, with the branch chosen in monitoring.', - 'learning/branching.do?method=performBranching&type=chosen', 'learning/branching.do?method=performBranching&type=chosen', - 'learning/branching.do?method=viewBranching&mode=teacher&type=chosen', 'learning/branchingExportPortfolio?mode=learner&type=chosen', - 'learning/branchingExportPortfolio?mode=teacher&type=chosen', 'monitoring/branching.do?method=assignBranch&type=chosen', - 'monitoring/branching.do?method=assignBranch&type=chosen', now()); +INSERT INTO lams_system_tool (system_tool_id, learning_activity_type_id, tool_display_name, description, + learner_url, learner_preview_url, learner_progress_url, export_pfolio_learner_url, + export_pfolio_class_url, monitor_url, contribute_url, create_date_time) +VALUES (6, 10, 'Monitor Chosen Branching', 'Select between multiple sequence activities, with the branch chosen in monitoring.', + 'learning/branching.do?method=performBranching', 'learning/branching.do?method=performBranching', + 'learning/branching.do?method=viewBranching&mode=teacher', NULL, + 'monitoring/branchingExportPortfolio?mode=teacher', 'monitoring/branching.do?method=assignBranch', + 'monitoring/branching.do?method=assignBranch', now()); INSERT INTO lams_system_tool (system_tool_id, learning_activity_type_id, tool_display_name, description, learner_url, learner_preview_url, learner_progress_url, export_pfolio_learner_url, export_pfolio_class_url, monitor_url, contribute_url, create_date_time) VALUES (7, 11, 'Group Based Branching', 'Select between multiple sequence activities, with the branch chosen by an existing group.', - 'learning/branching.do?method=performBranching&type=group', 'learning/branching.do?method=performBranching&type=group', - 'learning/branching.do?method=viewBranching&mode=teacher&type=group', 'learning/branchingExportPortfolio?mode=learner&type=group', - 'learning/branchingExportPortfolio?mode=teacher&type=group', 'monitoring/branching.do?method=assignBranch&type=group', - 'monitoring/branching.do?method=assignBranch&type=group', now()); + 'learning/branching.do?method=performBranching', 'learning/branching.do?method=performBranching', + 'learning/branching.do?method=viewBranching&mode=teacher', NULL, + 'monitoring/branchingExportPortfolio?mode=teacher', 'monitoring/branching.do?method=assignBranch', + 'monitoring/branching.do?method=assignBranch', now()); INSERT INTO lams_system_tool (system_tool_id, learning_activity_type_id, tool_display_name, description, learner_url, learner_preview_url, learner_progress_url, export_pfolio_learner_url, export_pfolio_class_url, monitor_url, contribute_url, create_date_time) -VALUES (8, 12, 'Tool Output Based Branching', 'Select between multiple sequence activities, with the branch chosen on results of another activi\ -ty.', - 'learning/branching.do?method=performBranching&type=tool', 'learning/branching.do?method=performBranching&type=tool', - 'learning/branching.do?method=viewBranching&mode=teacher&type=tool', 'learning/branchingExportPortfolio?mode=learner&type=tool', - 'learning/branchingExportPortfolio?mode=teacher&type=tool', 'monitoring/branching.do?method=assignBranch&type=tool', - 'monitoring/branching.do?method=assignBranch&type=tool', now()); +VALUES (8, 12, 'Tool Output Based Branching', 'Select between multiple sequence activities, with the branch chosen on results of another activity.', + 'learning/branching.do?method=performBranching', 'learning/branching.do?method=performBranching', + 'learning/branching.do?method=viewBranching&mode=teacher', NULL, + 'monitoring/branchingExportPortfolio?mode=teacher', 'monitoring/branching.do?method=assignBranch', + 'monitoring/branching.do?method=assignBranch', now()); - -- support tools having an admin screen ALTER TABLE lams_tool ADD COLUMN admin_url TEXT; Index: lams_common/src/java/org/lamsfoundation/lams/learningdesign/Activity.java =================================================================== diff -u -r968fb2185fee5e44b7c4b30e5753805ef05e01df -rd66ffc2bf657d1fe25183aa727b110ed42048d59 --- lams_common/src/java/org/lamsfoundation/lams/learningdesign/Activity.java (.../Activity.java) (revision 968fb2185fee5e44b7c4b30e5753805ef05e01df) +++ lams_common/src/java/org/lamsfoundation/lams/learningdesign/Activity.java (.../Activity.java) (revision d66ffc2bf657d1fe25183aa727b110ed42048d59) @@ -816,7 +816,7 @@ public boolean isSystemToolActivity() { - return isGateActivity() || isGroupingActivity() || isBranchingActivity(); + return ISystemToolActivity.class.isInstance(this); } public boolean isGateActivity() Index: lams_common/src/java/org/lamsfoundation/lams/learningdesign/BranchingActivity.java =================================================================== diff -u -ra7351da17f548464a76295a73e9cc17450a6ff39 -rd66ffc2bf657d1fe25183aa727b110ed42048d59 --- lams_common/src/java/org/lamsfoundation/lams/learningdesign/BranchingActivity.java (.../BranchingActivity.java) (revision a7351da17f548464a76295a73e9cc17450a6ff39) +++ lams_common/src/java/org/lamsfoundation/lams/learningdesign/BranchingActivity.java (.../BranchingActivity.java) (revision d66ffc2bf657d1fe25183aa727b110ed42048d59) @@ -26,21 +26,23 @@ import java.io.Serializable; import java.util.Set; import org.lamsfoundation.lams.learningdesign.strategy.BranchingActivityStrategy; +import org.lamsfoundation.lams.tool.SystemTool; /** * @author Mitchell Seaton * @version 2.1 * * @hibernate.class */ -abstract public class BranchingActivity extends ComplexActivity implements Serializable { +abstract public class BranchingActivity extends ComplexActivity implements Serializable, ISystemToolActivity { // types are used on the URLS to determine which type of branch is expected // the code should always then check against the activity to make sure it is correct public static final String CHOSEN_TYPE = "chosen"; public static final String GROUP_BASED_TYPE = "group"; public static final String TOOL_BASED_TYPE = "tool"; + private SystemTool systemTool; private Integer startXcoord; private Integer startYcoord; private Integer endXcoord; @@ -70,7 +72,8 @@ Integer startYcoord, Integer endXcoord, Integer endYcoord, - Set activities) { + Set activities, + SystemTool systemTool) { super(activityId, id, description, @@ -92,6 +95,7 @@ languageFile, activities); super.activityStrategy = new BranchingActivityStrategy(this); + this.systemTool = systemTool; this.startXcoord = startXcoord; this.startYcoord = startYcoord; this.endXcoord = endXcoord; @@ -180,7 +184,25 @@ public void setStartYcoord(Integer startYcoord) { this.startYcoord = startYcoord; } - - + /** + * @hibernate.many-to-one lazy="false" + * @hibernate.column name="system_tool_id" + */ + public SystemTool getSystemTool() { + return systemTool; + } + + public void setSystemTool(SystemTool systemTool) { + this.systemTool = systemTool; + } + + public void copyBranchingFields(BranchingActivity newBranchingActivity) { + newBranchingActivity.systemTool = this.systemTool; + newBranchingActivity.startXcoord = this.startXcoord; + newBranchingActivity.startYcoord = this.startYcoord; + newBranchingActivity.endXcoord = this.endXcoord; + newBranchingActivity.endYcoord = this.endYcoord; + } + } Index: lams_common/src/java/org/lamsfoundation/lams/learningdesign/ChosenBranchingActivity.java =================================================================== diff -u -ra94909694731838faabd950b35db3ec905f28529 -rd66ffc2bf657d1fe25183aa727b110ed42048d59 --- lams_common/src/java/org/lamsfoundation/lams/learningdesign/ChosenBranchingActivity.java (.../ChosenBranchingActivity.java) (revision a94909694731838faabd950b35db3ec905f28529) +++ lams_common/src/java/org/lamsfoundation/lams/learningdesign/ChosenBranchingActivity.java (.../ChosenBranchingActivity.java) (revision d66ffc2bf657d1fe25183aa727b110ed42048d59) @@ -27,6 +27,7 @@ import java.util.Set; import org.apache.commons.lang.builder.ToStringBuilder; +import org.lamsfoundation.lams.tool.SystemTool; /** * @author Mitchell Seaton @@ -62,7 +63,8 @@ Integer startYcoord, Integer endXcoord, Integer endYcoord, - Set activities) { + Set activities, + SystemTool systemTool) { super(activityId, id, description, @@ -86,7 +88,8 @@ startYcoord, endXcoord, endYcoord, - activities); + activities, + systemTool); } /** default constructor */ @@ -119,13 +122,15 @@ activities); } /** - * Makes a copy of the BranchingActivity for authoring, preview and monitoring enviornment + * Makes a copy of the BranchingActivity for authoring, preview and monitoring environment * @return BranchingActivity Returns a deep-copy of the originalActivity */ public Activity createCopy(){ ChosenBranchingActivity newBranchingActivity = new ChosenBranchingActivity(); + copyBranchingFields(newBranchingActivity); copyToNewActivity(newBranchingActivity); + return newBranchingActivity; } Index: lams_common/src/java/org/lamsfoundation/lams/learningdesign/GateActivity.java =================================================================== diff -u -r08950e1090443c3423a3d1c587416a2fccd8bbdf -rd66ffc2bf657d1fe25183aa727b110ed42048d59 --- lams_common/src/java/org/lamsfoundation/lams/learningdesign/GateActivity.java (.../GateActivity.java) (revision 08950e1090443c3423a3d1c587416a2fccd8bbdf) +++ lams_common/src/java/org/lamsfoundation/lams/learningdesign/GateActivity.java (.../GateActivity.java) (revision d66ffc2bf657d1fe25183aa727b110ed42048d59) @@ -37,7 +37,7 @@ /** * @hibernate.class */ -public abstract class GateActivity extends SystemToolActivity implements Serializable +public abstract class GateActivity extends SimpleActivity implements Serializable { public static final int LEARNER_GATE_LEVEL = 1; @@ -47,6 +47,9 @@ public static final int CLASS_GATE_LEVEL = 3; /** persistent field */ + private SystemTool systemTool; + + /** persistent field */ private Integer gateActivityLevelId; /** persistent field */ @@ -99,10 +102,10 @@ activityTypeId, transitionTo, transitionFrom, - languageFile, - sysTool); + languageFile); this.gateActivityLevelId = gateActivityLevelId; this.waitingLearners = waitingLearners; + this.systemTool = sysTool; } /** default constructor */ @@ -235,4 +238,18 @@ .toString(); } + public SystemTool getSystemTool() { + return systemTool; + } + + public void setSystemTool(SystemTool systemTool) { + this.systemTool = systemTool; + } + + protected void copyToNewActivity(GateActivity newActivity ) { + + super.copyToNewActivity(newActivity); + newActivity.setSystemTool(this.getSystemTool()); + } + } Index: lams_common/src/java/org/lamsfoundation/lams/learningdesign/GroupBranchingActivity.java =================================================================== diff -u -ra94909694731838faabd950b35db3ec905f28529 -rd66ffc2bf657d1fe25183aa727b110ed42048d59 --- lams_common/src/java/org/lamsfoundation/lams/learningdesign/GroupBranchingActivity.java (.../GroupBranchingActivity.java) (revision a94909694731838faabd950b35db3ec905f28529) +++ lams_common/src/java/org/lamsfoundation/lams/learningdesign/GroupBranchingActivity.java (.../GroupBranchingActivity.java) (revision d66ffc2bf657d1fe25183aa727b110ed42048d59) @@ -27,6 +27,7 @@ import java.util.Set; import org.apache.commons.lang.builder.ToStringBuilder; +import org.lamsfoundation.lams.tool.SystemTool; /** * @author Mitchell Seaton @@ -62,7 +63,8 @@ Integer startYcoord, Integer endXcoord, Integer endYcoord, - Set activities) { + Set activities, + SystemTool systemTool) { super(activityId, id, description, @@ -86,7 +88,8 @@ startYcoord, endXcoord, endYcoord, - activities); + activities, + systemTool); } /** default constructor */ @@ -119,12 +122,13 @@ activities); } /** - * Makes a copy of the BranchingActivity for authoring, preview and monitoring enviornment + * Makes a copy of the BranchingActivity for authoring, preview and monitoring environment * @return BranchingActivity Returns a deep-copy of the originalActivity */ public Activity createCopy(){ GroupBranchingActivity newBranchingActivity = new GroupBranchingActivity(); + copyBranchingFields(newBranchingActivity); copyToNewActivity(newBranchingActivity); return newBranchingActivity; } Index: lams_common/src/java/org/lamsfoundation/lams/learningdesign/GroupingActivity.java =================================================================== diff -u -r08950e1090443c3423a3d1c587416a2fccd8bbdf -rd66ffc2bf657d1fe25183aa727b110ed42048d59 --- lams_common/src/java/org/lamsfoundation/lams/learningdesign/GroupingActivity.java (.../GroupingActivity.java) (revision 08950e1090443c3423a3d1c587416a2fccd8bbdf) +++ lams_common/src/java/org/lamsfoundation/lams/learningdesign/GroupingActivity.java (.../GroupingActivity.java) (revision d66ffc2bf657d1fe25183aa727b110ed42048d59) @@ -37,8 +37,11 @@ * A GroupingActivity creates Grouping. * @author Manpreet Minhas */ -public class GroupingActivity extends SystemToolActivity implements Serializable +public class GroupingActivity extends SimpleActivity implements Serializable { + /** persistent field */ + private SystemTool systemTool; + /** The grouping_ui_id of the Grouping that this activity creates */ private Integer createGroupingUIID; @@ -88,10 +91,10 @@ activityTypeId, transitionTo, transitionFrom, - languageFile, - sysTool); + languageFile); this.createGrouping = createGrouping; this.createGroupingUIID = create_grouping_ui_id; + this.systemTool = sysTool; super.simpleActivityStrategy = new GroupingActivityStrategy(this); } @@ -186,4 +189,19 @@ { return false; } + + public SystemTool getSystemTool() { + return systemTool; + } + + public void setSystemTool(SystemTool systemTool) { + this.systemTool = systemTool; + } + + protected void copyToNewActivity(GroupingActivity newActivity ) { + + super.copyToNewActivity(newActivity); + newActivity.setSystemTool(this.getSystemTool()); + } + } Index: lams_common/src/java/org/lamsfoundation/lams/learningdesign/ISystemToolActivity.java =================================================================== diff -u --- lams_common/src/java/org/lamsfoundation/lams/learningdesign/ISystemToolActivity.java (revision 0) +++ lams_common/src/java/org/lamsfoundation/lams/learningdesign/ISystemToolActivity.java (revision d66ffc2bf657d1fe25183aa727b110ed42048d59) @@ -0,0 +1,45 @@ +/**************************************************************** + * 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 org.lamsfoundation.lams.tool.SystemTool; + +/** + * An activity that implements the ISystemToolActivity interface has a matching record in the lams_system_tool table. + * + * Can't be done easily with regular inheritance as some system tools (Gates, Grouping) are simple activities, whereas + * others (branching) are complex activities. + * + * If you add a new activity that is a system tool, just make sure you set up the system_tool_id column in the + * hibernate mapping, add the system tool to the constructor and add a line to the createCopy method that copies + * the system tool field. + * + */ +public interface ISystemToolActivity { + + public SystemTool getSystemTool(); + + public void setSystemTool(SystemTool systemTool); + +} Index: lams_common/src/java/org/lamsfoundation/lams/learningdesign/LearningDesignProcessor.java =================================================================== diff -u -r08950e1090443c3423a3d1c587416a2fccd8bbdf -rd66ffc2bf657d1fe25183aa727b110ed42048d59 --- lams_common/src/java/org/lamsfoundation/lams/learningdesign/LearningDesignProcessor.java (.../LearningDesignProcessor.java) (revision 08950e1090443c3423a3d1c587416a2fccd8bbdf) +++ lams_common/src/java/org/lamsfoundation/lams/learningdesign/LearningDesignProcessor.java (.../LearningDesignProcessor.java) (revision d66ffc2bf657d1fe25183aa727b110ed42048d59) @@ -99,14 +99,26 @@ ComplexActivity complex = (ComplexActivity) activityDAO.getActivityByActivityId(activity.getActivityId(),SimpleActivity.class); startComplexActivity(complex); - // work through all the child activities for this activity, in order id. - Set children = new TreeSet(new ActivityOrderComparator()); - children.addAll(complex.getActivities()); - Iterator i=children.iterator(); - while ( i.hasNext() ) { - handleActivity((Activity)i.next()); - } - + if ( activity.isSequenceActivity() ) { + // sequence is a funny one - the child activities are linked by transitions rather + // than ordered by order id + SequenceActivity sequenceActivity = (SequenceActivity) complex; + Activity child = sequenceActivity.getNextActivityByParent(new NullActivity()); + while ( ! child.isNull() ) { + handleActivity(child); + child = sequenceActivity.getNextActivityByParent(child); + } + + } else { + // work through all the child activities for this activity, in order id + Set children = new TreeSet(new ActivityOrderComparator()); + children.addAll(complex.getActivities()); + Iterator i=children.iterator(); + while ( i.hasNext() ) { + handleActivity((Activity)i.next()); + } + } + endComplexActivity(complex); } Index: lams_common/src/java/org/lamsfoundation/lams/learningdesign/SequenceActivity.java =================================================================== diff -u -re1683b7e5ac777deb10d15b0bf41182587ca8373 -rd66ffc2bf657d1fe25183aa727b110ed42048d59 --- lams_common/src/java/org/lamsfoundation/lams/learningdesign/SequenceActivity.java (.../SequenceActivity.java) (revision e1683b7e5ac777deb10d15b0bf41182587ca8373) +++ lams_common/src/java/org/lamsfoundation/lams/learningdesign/SequenceActivity.java (.../SequenceActivity.java) (revision d66ffc2bf657d1fe25183aa727b110ed42048d59) @@ -127,12 +127,13 @@ } /** - * Makes a copy of the SequenceActivity for authoring, preview and monitoring enviornment + * Makes a copy of the SequenceActivity for authoring, preview and monitoring environment * @return SequenceActivity Returns a deep-copy of the originalActivity */ public Activity createCopy(){ SequenceActivity newSequenceActivity = new SequenceActivity(); copyToNewActivity(newSequenceActivity); + newSequenceActivity.firstActivity = this.firstActivity; return newSequenceActivity; } Fisheye: Tag d66ffc2bf657d1fe25183aa727b110ed42048d59 refers to a dead (removed) revision in file `lams_common/src/java/org/lamsfoundation/lams/learningdesign/SystemToolActivity.java'. Fisheye: No comparison available. Pass `N' to diff? Index: lams_common/src/java/org/lamsfoundation/lams/learningdesign/ToolBranchingActivity.java =================================================================== diff -u -ra94909694731838faabd950b35db3ec905f28529 -rd66ffc2bf657d1fe25183aa727b110ed42048d59 --- lams_common/src/java/org/lamsfoundation/lams/learningdesign/ToolBranchingActivity.java (.../ToolBranchingActivity.java) (revision a94909694731838faabd950b35db3ec905f28529) +++ lams_common/src/java/org/lamsfoundation/lams/learningdesign/ToolBranchingActivity.java (.../ToolBranchingActivity.java) (revision d66ffc2bf657d1fe25183aa727b110ed42048d59) @@ -27,6 +27,7 @@ import java.util.Set; import org.apache.commons.lang.builder.ToStringBuilder; +import org.lamsfoundation.lams.tool.SystemTool; /** * @author Mitchell Seaton @@ -62,7 +63,8 @@ Integer startYcoord, Integer endXcoord, Integer endYcoord, - Set activities) { + Set activities, + SystemTool systemTool) { super(activityId, id, description, @@ -86,7 +88,8 @@ startYcoord, endXcoord, endYcoord, - activities); + activities, + systemTool); } /** default constructor */ @@ -126,6 +129,7 @@ public Activity createCopy(){ ToolBranchingActivity newBranchingActivity = new ToolBranchingActivity(); + copyBranchingFields(newBranchingActivity); copyToNewActivity(newBranchingActivity); return newBranchingActivity; } Index: lams_common/src/java/org/lamsfoundation/lams/learningdesign/service/ExportToolContentService.java =================================================================== diff -u -r5c85f79ac6eb2d698a970dfc662f027e4f642141 -rd66ffc2bf657d1fe25183aa727b110ed42048d59 --- lams_common/src/java/org/lamsfoundation/lams/learningdesign/service/ExportToolContentService.java (.../ExportToolContentService.java) (revision 5c85f79ac6eb2d698a970dfc662f027e4f642141) +++ lams_common/src/java/org/lamsfoundation/lams/learningdesign/service/ExportToolContentService.java (.../ExportToolContentService.java) (revision d66ffc2bf657d1fe25183aa727b110ed42048d59) @@ -1726,14 +1726,15 @@ */ private Activity getActivity(AuthoringActivityDTO actDto, Map groupingList, Map toolMapper, Map firstChildUIIDToSequenceMapper) { - Activity act = null; + if(actDto == null) - return act; + return null; int type = actDto.getActivityTypeID().intValue(); Grouping newGrouping; - switch(type){ + + Activity act = Activity.getActivityInstance(type); + switch(act.getActivityTypeId()){ case Activity.TOOL_ACTIVITY_TYPE: - act = new ToolActivity(); //get back the toolContent in new system by toolContentID in old system. ToolContent content = toolMapper.get(actDto.getToolContentID()); //if activity can not find matching tool, the content should be null. @@ -1744,22 +1745,19 @@ } break; case Activity.GROUPING_ACTIVITY_TYPE: - act = new GroupingActivity(); newGrouping = groupingList.get(actDto.getCreateGroupingID()); ((GroupingActivity)act).setCreateGrouping(newGrouping); ((GroupingActivity)act).setCreateGroupingUIID(newGrouping.getGroupingUIID()); ((GroupingActivity)act).setSystemTool(systemToolDAO.getSystemToolByID(SystemTool.GROUPING)); break; case Activity.SYNCH_GATE_ACTIVITY_TYPE: - act = new SynchGateActivity(); ((SynchGateActivity)act).setGateActivityLevelId(actDto.getGateActivityLevelID()); //always set false ((SynchGateActivity)act).setGateOpen(false); ((SynchGateActivity)act).setWaitingLearners(null); ((SynchGateActivity)act).setSystemTool(systemToolDAO.getSystemToolByID(SystemTool.SYNC_GATE)); break; case Activity.SCHEDULE_GATE_ACTIVITY_TYPE: - act = new ScheduleGateActivity(); ((ScheduleGateActivity)act).setGateActivityLevelId(actDto.getGateActivityLevelID()); ((ScheduleGateActivity)act).setWaitingLearners(null); //always set false @@ -1772,42 +1770,35 @@ ((ScheduleGateActivity)act).setSystemTool(systemToolDAO.getSystemToolByID(SystemTool.SCHEDULE_GATE)); break; case Activity.PERMISSION_GATE_ACTIVITY_TYPE: - act = new PermissionGateActivity(); ((PermissionGateActivity)act).setGateActivityLevelId(actDto.getGateActivityLevelID()); ((PermissionGateActivity)act).setGateOpen(false); ((PermissionGateActivity)act).setWaitingLearners(null); ((PermissionGateActivity)act).setSystemTool(systemToolDAO.getSystemToolByID(SystemTool.PERMISSION_GATE)); break; case Activity.PARALLEL_ACTIVITY_TYPE: - act = new ParallelActivity(); break; case Activity.OPTIONS_ACTIVITY_TYPE: - act = new OptionsActivity(); ((OptionsActivity)act).setMaxNumberOfOptions(actDto.getMaxOptions()); ((OptionsActivity)act).setMinNumberOfOptions(actDto.getMinOptions()); ((OptionsActivity)act).setOptionsInstructions(actDto.getOptionsInstructions()); break; case Activity.SEQUENCE_ACTIVITY_TYPE: - act = new SequenceActivity(); if ( actDto.getFirstActivityUIID() != null ) { firstChildUIIDToSequenceMapper.put(actDto.getFirstActivityUIID(), (SequenceActivity)act); } break; case Activity.CHOSEN_BRANCHING_ACTIVITY_TYPE: - act = new ChosenBranchingActivity(); + ((BranchingActivity) act).setSystemTool(systemToolDAO.getSystemToolByID(SystemTool.TEACHER_CHOSEN_BRANCHING)); processBranchingFields((BranchingActivity) act, actDto); break; case Activity.GROUP_BRANCHING_ACTIVITY_TYPE: - act = new GroupBranchingActivity(); + ((BranchingActivity) act).setSystemTool(systemToolDAO.getSystemToolByID(SystemTool.GROUP_BASED_BRANCHING)); processBranchingFields((BranchingActivity) act, actDto); break; case Activity.TOOL_BRANCHING_ACTIVITY_TYPE: - act = new ToolBranchingActivity(); + ((BranchingActivity) act).setSystemTool(systemToolDAO.getSystemToolByID(SystemTool.TOOL_BASED_BRANCHING)); processBranchingFields((BranchingActivity) act, actDto); break; - default: - log.error("Unable to determine the activity type. Creating a tool activity. ActivityDTO was "+actDto); - act = new ToolActivity(); } act.setGroupingSupportType(actDto.getGroupingSupportType()); Index: lams_common/src/java/org/lamsfoundation/lams/learningdesign/strategy/SequenceActivityStrategy.java =================================================================== diff -u -r83a60b6d3abdd08250edce24a25a78263cd6b984 -rd66ffc2bf657d1fe25183aa727b110ed42048d59 --- lams_common/src/java/org/lamsfoundation/lams/learningdesign/strategy/SequenceActivityStrategy.java (.../SequenceActivityStrategy.java) (revision 83a60b6d3abdd08250edce24a25a78263cd6b984) +++ lams_common/src/java/org/lamsfoundation/lams/learningdesign/strategy/SequenceActivityStrategy.java (.../SequenceActivityStrategy.java) (revision d66ffc2bf657d1fe25183aa727b110ed42048d59) @@ -60,10 +60,11 @@ * then: If the currentChild is the NullActivity then it will return the first * Activity, otherwise it will return the NullActivity. * - * If no firstActivity exists then it looks for the child activity that doesn't - * have in input transition) with the order id greater the + *

If no firstActivity exists then it looks for the child activity that doesn't + * have in input transition with the order id greater the * currentChild. If the currentChild is the NullActivity then - * it will return the first such child.

+ * it will return the first such child. This case should never be used but it is + * a backup in case the firstChild isn't set for some reason. * * @see org.lamsfoundation.lams.learningdesign.strategy.ComplexActivityStrategy#getNextActivityByParent(Activity, Activity) */ @@ -79,22 +80,19 @@ log.warn("getNextActivityByParent: child activities exist but no firstActivity is set up. Trying to work it out based on transitions. SequenceActivity "+sequenceActivity); Activity inputChild = currentChild; - if ( inputChild != null ) { - if ( inputChild.isNull() ) { - inputChild = null; - } else if ( inputChild.getOrderId() == null ) { - inputChild = null; - } + if ( inputChild == null ) { + inputChild = new NullActivity(); } // getActivities is ordered by order id () - for(Iterator i=sequenceActivity.getActivities().iterator();i.hasNext();) - { + boolean pastCurrentChild = false; + Iterator i=sequenceActivity.getActivities().iterator(); + while ( i.hasNext() ) { Activity curChild = (Activity)i.next(); - if( ( inputChild==null || curChild.getOrderId().longValue() > currentChild.getOrderId().longValue() ) ) { - // we are past the 'currentChild' so look for an activity with no input transition - if ( curChild.getTransitionTo() == null ) - return curChild; + if ( (inputChild.isNull() || pastCurrentChild) && curChild.getTransitionTo() == null ) { + return curChild; + } else if ( inputChild.equals(curChild) ) { + pastCurrentChild = true; } } } Index: lams_common/src/java/org/lamsfoundation/lams/tool/SystemTool.java =================================================================== diff -u -r5c85f79ac6eb2d698a970dfc662f027e4f642141 -rd66ffc2bf657d1fe25183aa727b110ed42048d59 --- lams_common/src/java/org/lamsfoundation/lams/tool/SystemTool.java (.../SystemTool.java) (revision 5c85f79ac6eb2d698a970dfc662f027e4f642141) +++ lams_common/src/java/org/lamsfoundation/lams/tool/SystemTool.java (.../SystemTool.java) (revision d66ffc2bf657d1fe25183aa727b110ed42048d59) @@ -46,7 +46,9 @@ public static final Long SCHEDULE_GATE = new Long(3); public static final Long PERMISSION_GATE = new Long(4); public static final Long SYSTEM_GATE = new Long(5); - public static final Long BRANCHING = new Long(6); + public static final Long TEACHER_CHOSEN_BRANCHING = new Long(6); + public static final Long GROUP_BASED_BRANCHING = new Long(7); + public static final Long TOOL_BASED_BRANCHING = new Long(8); /** identifier field */ private Long systemToolId;