Index: lams_common/conf/hibernate/mappings/org/lamsfoundation/lams/learningdesign/Activity.hbm.xml =================================================================== RCS file: /usr/local/cvsroot/lams_common/conf/hibernate/mappings/org/lamsfoundation/lams/learningdesign/Activity.hbm.xml,v diff -u -r1.31 -r1.32 --- lams_common/conf/hibernate/mappings/org/lamsfoundation/lams/learningdesign/Activity.hbm.xml 11 Jun 2007 23:42:34 -0000 1.31 +++ lams_common/conf/hibernate/mappings/org/lamsfoundation/lams/learningdesign/Activity.hbm.xml 29 Jun 2007 05:16:05 -0000 1.32 @@ -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 =================================================================== RCS file: /usr/local/cvsroot/lams_common/db/model/lams_11.clay,v diff -u -r1.81 -r1.82 --- lams_common/db/model/lams_11.clay 28 Jun 2007 06:44:44 -0000 1.81 +++ lams_common/db/model/lams_11.clay 29 Jun 2007 05:13:56 -0000 1.82 @@ -634,6 +634,19 @@ + + + + + + + + + + + + + Index: lams_common/db/sql/create_lams_11_tables.sql =================================================================== RCS file: /usr/local/cvsroot/lams_common/db/sql/create_lams_11_tables.sql,v diff -u -r1.96 -r1.97 --- lams_common/db/sql/create_lams_11_tables.sql 28 Jun 2007 06:44:58 -0000 1.96 +++ lams_common/db/sql/create_lams_11_tables.sql 29 Jun 2007 05:15:04 -0000 1.97 @@ -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 =================================================================== RCS file: /usr/local/cvsroot/lams_common/db/sql/updatescripts/Attic/alter_21_branching.sql,v diff -u -r1.4 -r1.5 --- lams_common/db/sql/updatescripts/alter_21_branching.sql 28 Jun 2007 06:44:58 -0000 1.4 +++ lams_common/db/sql/updatescripts/alter_21_branching.sql 29 Jun 2007 05:14:52 -0000 1.5 @@ -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 =================================================================== RCS file: /usr/local/cvsroot/lams_common/src/java/org/lamsfoundation/lams/learningdesign/SequenceActivity.java,v diff -u -r1.24 -r1.25 --- lams_common/src/java/org/lamsfoundation/lams/learningdesign/SequenceActivity.java 17 Sep 2006 06:14:16 -0000 1.24 +++ lams_common/src/java/org/lamsfoundation/lams/learningdesign/SequenceActivity.java 29 Jun 2007 05:19:10 -0000 1.25 @@ -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 =================================================================== RCS file: /usr/local/cvsroot/lams_common/src/java/org/lamsfoundation/lams/learningdesign/dto/AuthoringActivityDTO.java,v diff -u -r1.27 -r1.28 --- lams_common/src/java/org/lamsfoundation/lams/learningdesign/dto/AuthoringActivityDTO.java 5 Jun 2007 04:33:18 -0000 1.27 +++ lams_common/src/java/org/lamsfoundation/lams/learningdesign/dto/AuthoringActivityDTO.java 29 Jun 2007 05:19:10 -0000 1.28 @@ -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 =================================================================== RCS file: /usr/local/cvsroot/lams_common/src/java/org/lamsfoundation/lams/learningdesign/service/ExportToolContentService.java,v diff -u -r1.62 -r1.63 --- lams_common/src/java/org/lamsfoundation/lams/learningdesign/service/ExportToolContentService.java 28 Jun 2007 23:52:42 -0000 1.62 +++ lams_common/src/java/org/lamsfoundation/lams/learningdesign/service/ExportToolContentService.java 29 Jun 2007 05:19:10 -0000 1.63 @@ -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();