Index: lams_common/conf/hibernate/mappings/org/lamsfoundation/lams/learningdesign/Activity.hbm.xml
===================================================================
diff -u -r968fb2185fee5e44b7c4b30e5753805ef05e01df -reb0c055d846fcd1fda55eca93baef21971207d60
--- lams_common/conf/hibernate/mappings/org/lamsfoundation/lams/learningdesign/Activity.hbm.xml (.../Activity.hbm.xml) (revision 968fb2185fee5e44b7c4b30e5753805ef05e01df)
+++ lams_common/conf/hibernate/mappings/org/lamsfoundation/lams/learningdesign/Activity.hbm.xml (.../Activity.hbm.xml) (revision eb0c055d846fcd1fda55eca93baef21971207d60)
@@ -255,10 +255,18 @@
@hibernate.property column="options_instructions" length="65535"
-
+
- @hibernate.class
+ @hibernate.class
+
+
+
+ @hibernate.many-to-one not-null="false"
+ @hibernate.column name="first_activity_id"
+
+
+
@hibernate.class
Index: lams_common/db/model/lams_11.clay
===================================================================
diff -u -r4ca1b4e69d135a796d7db5eab3206e24e9503619 -reb0c055d846fcd1fda55eca93baef21971207d60
--- lams_common/db/model/lams_11.clay (.../lams_11.clay) (revision 4ca1b4e69d135a796d7db5eab3206e24e9503619)
+++ lams_common/db/model/lams_11.clay (.../lams_11.clay) (revision eb0c055d846fcd1fda55eca93baef21971207d60)
@@ -634,6 +634,19 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
Index: lams_common/db/sql/create_lams_11_tables.sql
===================================================================
diff -u -r4ca1b4e69d135a796d7db5eab3206e24e9503619 -reb0c055d846fcd1fda55eca93baef21971207d60
--- lams_common/db/sql/create_lams_11_tables.sql (.../create_lams_11_tables.sql) (revision 4ca1b4e69d135a796d7db5eab3206e24e9503619)
+++ lams_common/db/sql/create_lams_11_tables.sql (.../create_lams_11_tables.sql) (revision eb0c055d846fcd1fda55eca93baef21971207d60)
@@ -515,6 +515,7 @@
, system_tool_id BIGINT(20)
, read_only TINYINT DEFAULT 0
, initialised TINYINT DEFAULT 0
+ , first_activity_id BIGINT(20)
, PRIMARY KEY (activity_id)
, INDEX (learning_library_id)
, CONSTRAINT FK_lams_learning_activity_7 FOREIGN KEY (learning_library_id)
Index: lams_common/db/sql/updatescripts/alter_21_branching.sql
===================================================================
diff -u -r4ca1b4e69d135a796d7db5eab3206e24e9503619 -reb0c055d846fcd1fda55eca93baef21971207d60
--- lams_common/db/sql/updatescripts/alter_21_branching.sql (.../alter_21_branching.sql) (revision 4ca1b4e69d135a796d7db5eab3206e24e9503619)
+++ lams_common/db/sql/updatescripts/alter_21_branching.sql (.../alter_21_branching.sql) (revision eb0c055d846fcd1fda55eca93baef21971207d60)
@@ -23,6 +23,9 @@
REFERENCES lams_learning_activity (activity_id)
)TYPE=InnoDB;
+ALTER TABLE lams_learning_activity
+ADD COLUMN first_activity_id BIGINT(20);
+
INSERT INTO lams_learning_activity_type VALUES (10, 'BRANCHING_CHOSEN');
INSERT INTO lams_learning_activity_type VALUES (11, 'BRANCHING_GROUP');
INSERT INTO lams_learning_activity_type VALUES (12, 'BRANCHING_TOOL');
Index: lams_common/src/java/org/lamsfoundation/lams/learningdesign/SequenceActivity.java
===================================================================
diff -u -r08950e1090443c3423a3d1c587416a2fccd8bbdf -reb0c055d846fcd1fda55eca93baef21971207d60
--- lams_common/src/java/org/lamsfoundation/lams/learningdesign/SequenceActivity.java (.../SequenceActivity.java) (revision 08950e1090443c3423a3d1c587416a2fccd8bbdf)
+++ lams_common/src/java/org/lamsfoundation/lams/learningdesign/SequenceActivity.java (.../SequenceActivity.java) (revision eb0c055d846fcd1fda55eca93baef21971207d60)
@@ -37,6 +37,9 @@
*/
public class SequenceActivity extends ComplexActivity implements Serializable {
+ /** nullable persistent field */
+ private Activity firstActivity;
+
/** full constructor */
public SequenceActivity(Long activityId,
Integer id,
@@ -123,15 +126,6 @@
return newSequenceActivity;
}
- /**
- * Retrieve the first activity in current sequence activity;
- * @return the first activity;
- */
- public Activity getFirstActivityInSequenceActivity()
- {
- return this.getNextActivityByParent(new NullActivity());
- }
-
public String toString() {
return new ToStringBuilder(this)
.append("activityId", getActivityId())
@@ -147,4 +141,19 @@
return false;
}
+ /** Get the first activity in the sequence. A Sequence activity is like a little learning design, and while is it being
+ * drawn all the the contained activities may not have transitions between them. So Flash needs to know what the first
+ * activity is!
+ * @hibernate.many-to-one not-null="false"
+ * @hibernate.column name="first_activity_id"
+ */
+ public Activity getFirstActivity() {
+ return firstActivity;
+ }
+
+
+ public void setFirstActivity(Activity firstActivity) {
+ this.firstActivity = firstActivity;
+ }
+
}
Index: lams_common/src/java/org/lamsfoundation/lams/learningdesign/dto/AuthoringActivityDTO.java
===================================================================
diff -u -rfcdf3f7584d020b2aeb399a8cb0d0b55fb0e6be4 -reb0c055d846fcd1fda55eca93baef21971207d60
--- lams_common/src/java/org/lamsfoundation/lams/learningdesign/dto/AuthoringActivityDTO.java (.../AuthoringActivityDTO.java) (revision fcdf3f7584d020b2aeb399a8cb0d0b55fb0e6be4)
+++ lams_common/src/java/org/lamsfoundation/lams/learningdesign/dto/AuthoringActivityDTO.java (.../AuthoringActivityDTO.java) (revision eb0c055d846fcd1fda55eca93baef21971207d60)
@@ -173,7 +173,6 @@
private Integer groupingSupportType;
private Integer groupingType;
-
/** The image that represents the icon of this
* activity in the UI*/
@@ -206,6 +205,9 @@
* this activity. e.g. org.lamsfoundation.lams.tool.sbmt.SbmtResources.properties. */
private String languageFile;
+ /** Used by a sequence activity to determine the start of the transition based sequence */
+ private Integer firstActivityUIID;
+
/*****************************************************************************
* Constructors
*****************************************************************************/
@@ -225,7 +227,7 @@
Integer createGroupingUIID, Long libraryActivityID,
Boolean applyGrouping,Integer groupingSupportType,
Integer groupingType,GroupingDTO groupingDTO,
- Boolean readOnly, Boolean initialised) {
+ Boolean readOnly, Boolean initialised, Integer firstActivityUIID) {
super();
this.activityID = activityID;
this.activityUIID = activityUIID;
@@ -269,6 +271,7 @@
//this.groupingDTO = groupingDTO;
this.readOnly = readOnly;
this.initialised = initialised;
+ this.firstActivityUIID = firstActivityUIID;
}
public AuthoringActivityDTO(ToolActivity toolActivity){
super();
@@ -359,7 +362,8 @@
private void addBranchingActivityAttributes(BranchingActivity activity){
}
private void addSequenceActivityAttributes(SequenceActivity activity){
-
+ if ( activity.getFirstActivity() != null )
+ firstActivityUIID = activity.getFirstActivity().getActivityUIID();
}
private void addToolActivityAttributes(ToolActivity toolActivity){
this.toolContentID = toolActivity.getToolContentId();
@@ -978,4 +982,10 @@
public void setInitialised(Boolean initialised) {
this.initialised = initialised;
}
+ public Integer getFirstActivityUIID() {
+ return firstActivityUIID;
+ }
+ public void setFirstActivityUIID(Integer firstActivityUIID) {
+ this.firstActivityUIID = firstActivityUIID;
+ }
}
Index: lams_common/src/java/org/lamsfoundation/lams/learningdesign/service/ExportToolContentService.java
===================================================================
diff -u -r8c80e19ca280ae4a8609b795eea180a6d44400e5 -reb0c055d846fcd1fda55eca93baef21971207d60
--- lams_common/src/java/org/lamsfoundation/lams/learningdesign/service/ExportToolContentService.java (.../ExportToolContentService.java) (revision 8c80e19ca280ae4a8609b795eea180a6d44400e5)
+++ lams_common/src/java/org/lamsfoundation/lams/learningdesign/service/ExportToolContentService.java (.../ExportToolContentService.java) (revision eb0c055d846fcd1fda55eca93baef21971207d60)
@@ -1303,16 +1303,22 @@
Map activityMapper = new HashMap();
Map activityByUIIDMapper = new HashMap();
+ // as we create the activities, we need to record any "first child UIID's for the sequence activity
+ // to process later - we can't process them now as the children won't have been created yet and if we
+ // leave it till later and then find all the sequence activities we are going through the activity
+ // set over and over again for no reason.
+ Map firstChildUIIDToSequenceMapper = new HashMap();
+
for(AuthoringActivityDTO actDto: actDtoList){
- Activity act = getActivity(actDto,groupingMapper,toolMapper);
+ Activity act = getActivity(actDto,groupingMapper,toolMapper,firstChildUIIDToSequenceMapper);
//so far, the activitiy ID is still old one, so setup the mapping relation between old ID and new activity.
activityMapper.put(act.getActivityId(),act);
activityByUIIDMapper.put(act.getActivityUIID(),act);
//if this act is removed, then does not save it into LD
if(!removedActMap.containsKey(actDto.getActivityID()))
actList.add(act);
}
- //rescan the activity list and refresh their parent activity.
+ // rescan the activity list and refresh their parent activity.
for(AuthoringActivityDTO actDto: actDtoList){
Activity act = activityMapper.get(actDto.getActivityID());
if(removedActMap.containsKey(actDto.getActivityID()))
@@ -1344,6 +1350,24 @@
activityDAO.insert(act);
}
+ // process the "first child" for any sequence activities. If the child has been removed then leave it
+ // as null as the progress engine will cope (it will pick a new one based on the lack of an input transition)
+ // and in authoring the author will just have to set up a new first activity
+ if ( firstChildUIIDToSequenceMapper.size() > 0 ) {
+ for ( Integer firstChildUIID : firstChildUIIDToSequenceMapper.keySet() ) {
+ SequenceActivity sequence = firstChildUIIDToSequenceMapper.get(firstChildUIID);
+ Activity childActivity = activityByUIIDMapper.get(firstChildUIID);
+ if ( childActivity == null ) {
+ log.error("Unable to find first child activity ("+firstChildUIID
+ +") for the sequence activity ("+sequence
+ +") referred to in First Child to Sequence map. The activity was probably removed. "
+ +"The first activity should be reset up in authoring "
+ +"otherwise the progress engine will just do the best it can.");
+ } else {
+ sequence.setFirstActivity(childActivity);
+ }
+ }
+ }
// reset first activity UUID for LD if old first removed
//set first as remove activity's next existed one
@@ -1698,7 +1722,8 @@
* @param toolMapper
* @return
*/
- private Activity getActivity(AuthoringActivityDTO actDto, Map groupingList, Map toolMapper) {
+ private Activity getActivity(AuthoringActivityDTO actDto, Map groupingList,
+ Map toolMapper, Map firstChildUIIDToSequenceMapper) {
Activity act = null;
if(actDto == null)
return act;
@@ -1762,6 +1787,9 @@
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();