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();