Index: lams_build/lib/lams/lams-central.jar =================================================================== diff -u -rbf8ce059dfa31884501f811a5428c93c968a0611 -r97612142f4697066beb66064e83ff31fef1712b9 Binary files differ Index: lams_build/lib/lams/lams.jar =================================================================== diff -u -r23211f44c3c9c17bf1f48b16985cba850fbdbf78 -r97612142f4697066beb66064e83ff31fef1712b9 Binary files differ Index: lams_central/src/java/org/lamsfoundation/lams/authoring/ObjectExtractor.java =================================================================== diff -u -r75c2d483b799dcf9614657788178b410e55c4235 -r97612142f4697066beb66064e83ff31fef1712b9 --- lams_central/src/java/org/lamsfoundation/lams/authoring/ObjectExtractor.java (.../ObjectExtractor.java) (revision 75c2d483b799dcf9614657788178b410e55c4235) +++ lams_central/src/java/org/lamsfoundation/lams/authoring/ObjectExtractor.java (.../ObjectExtractor.java) (revision 97612142f4697066beb66064e83ff31fef1712b9) @@ -148,7 +148,7 @@ protected HashMap groupings = new HashMap(); protected HashMap groups = new HashMap(); protected HashMap branchEntries = new HashMap(); - protected HashMap firstChildToSequenceMap = new HashMap(); + protected HashMap defaultActivityMap = new HashMap(); /* can't delete as we go as they are linked to other items - keep a list and delete at the end. */ protected Set groupingsToDelete = new HashSet(); protected LearningDesign learningDesign = null; @@ -428,7 +428,7 @@ parseActivitiesToMatchUpParentandInputActivities((Vector)table.get(WDDXTAGS.ACTIVITIES)); parseTransitions((Vector)table.get(WDDXTAGS.TRANSITIONS)); parseBranchMappings((Vector)table.get(WDDXTAGS.BRANCH_MAPPINGS)); - progressFirstActivityWithinSequence(); + progressDefaultChildActivities(); learningDesign.setFirstActivity(learningDesign.calculateFirstActivity()); learningDesignDAO.insertOrUpdate(learningDesign); @@ -438,21 +438,22 @@ return learningDesign; } - /** Link SequenceActivities up with their firstActivity entries + /** Link SequenceActivities up with their firstActivity entries and BranchingActivities with their + * default branch. * @throws WDDXProcessorConversionException */ - private void progressFirstActivityWithinSequence() throws WDDXProcessorConversionException { + private void progressDefaultChildActivities() throws WDDXProcessorConversionException { - if ( firstChildToSequenceMap.size() > 0 ) { - for ( Integer firstChildUIID : firstChildToSequenceMap.keySet() ) { - SequenceActivity sequence = firstChildToSequenceMap.get(firstChildUIID); - Activity childActivity = newActivityMap.get(firstChildUIID); - if ( childActivity == null ) { - String msg = "Unable to find first child activity ("+firstChildUIID - +") for the sequence activity ("+sequence + if ( defaultActivityMap.size() > 0 ) { + for ( Integer defaultChildUIID : defaultActivityMap.keySet() ) { + ComplexActivity complex = defaultActivityMap.get(defaultChildUIID); + Activity defaultActivity = newActivityMap.get(defaultChildUIID); + if ( defaultActivity == null ) { + String msg = "Unable to find the default child activity ("+defaultChildUIID + +") for the activity ("+complex +") referred to in First Child to Sequence map."; throw new WDDXProcessorConversionException(msg); } else { - sequence.setDefaultActivity(childActivity); + complex.setDefaultActivity(defaultActivity); } } @@ -754,19 +755,15 @@ } } - // match up activity to input activities based on UIID + // match up activity to input activities based on UIID. At present there will be only one input activity existingActivity.getInputActivities().clear(); - if ( keyExists(activityDetails, WDDXTAGS.INPUT_ACTIVITIES) ) { - List inputActivities = (List) activityDetails.get(WDDXTAGS.INPUT_ACTIVITIES); - Iterator iter = inputActivities.iterator(); - while ( iter.hasNext() ) { - Integer inputActivityUIID = (Integer) iter.next(); - Activity inputActivity = newActivityMap.get(inputActivityUIID); - if ( inputActivity == null ) { - throw new ObjectExtractorException("Input activity "+inputActivityUIID+" missing for activity "+existingActivity.getTitle()+": "+existingActivity.getActivityUIID()); - } - existingActivity.getInputActivities().add(inputActivity); + Integer inputActivityUIID = WDDXProcessor.convertToInteger(activityDetails, WDDXTAGS.INPUT_TOOL_ACTIVITY_UIID); + if ( inputActivityUIID != null ) { + Activity inputActivity = newActivityMap.get(inputActivityUIID); + if ( inputActivity == null ) { + throw new ObjectExtractorException("Input activity "+inputActivityUIID+" missing for activity "+existingActivity.getTitle()+": "+existingActivity.getActivityUIID()); } + existingActivity.getInputActivities().add(inputActivity); } activityDAO.update(existingActivity); @@ -942,22 +939,28 @@ buildToolActivity((ToolActivity)activity,activityDetails); else if(activity.isGateActivity()) buildGateActivity(activity,activityDetails); - else if(activity.isBranchingActivity()) - buildBranchingActivity((BranchingActivity)activity,activityDetails); else buildComplexActivity((ComplexActivity)activity,activityDetails); } - private void buildComplexActivity(ComplexActivity activity,Hashtable activityDetails) throws WDDXProcessorConversionException{ + private void buildComplexActivity(ComplexActivity activity,Hashtable activityDetails) throws WDDXProcessorConversionException, ObjectExtractorException{ // clear all the children - will be built up again by parseActivitiesToMatchUpParentActivityByParentUIID // we don't use all-delete-orphan on the activities relationship so we can do this clear. activity.getActivities().clear(); + + activity.setDefaultActivity(null); + Integer defaultActivityMapUIID = WDDXProcessor.convertToInteger(activityDetails, WDDXTAGS.DEFAULT_ACTIVITY_UIID); + if ( defaultActivityMapUIID != null ) { + defaultActivityMap.put(defaultActivityMapUIID, activity); + } + if(activity instanceof OptionsActivity) buildOptionsActivity((OptionsActivity)activity,activityDetails); else if (activity instanceof ParallelActivity) buildParallelActivity((ParallelActivity)activity,activityDetails); - else + else if ( activity instanceof BranchingActivity) + buildBranchingActivity((BranchingActivity)activity,activityDetails); + else buildSequenceActivity((SequenceActivity)activity,activityDetails); - } private void buildBranchingActivity(BranchingActivity branchingActivity,Hashtable activityDetails) throws WDDXProcessorConversionException, ObjectExtractorException { @@ -1012,10 +1015,6 @@ private void buildParallelActivity(ParallelActivity activity,Hashtable activityDetails) throws WDDXProcessorConversionException{ } private void buildSequenceActivity(SequenceActivity activity,Hashtable activityDetails) throws WDDXProcessorConversionException{ - Integer firstActivityUIID = WDDXProcessor.convertToInteger(activityDetails, WDDXTAGS.DEFAULT_ACTIVITY_UIID); - if ( firstActivityUIID != null ) { - firstChildToSequenceMap.put(firstActivityUIID, (SequenceActivity)activity); - } } private void buildToolActivity(ToolActivity toolActivity,Hashtable activityDetails) throws WDDXProcessorConversionException{ @@ -1349,8 +1348,15 @@ entry.setGroup(group); entry.setCondition(condition); - - groupingDAO.update(group); + + if ( sequenceActivity.getBranchEntries() == null ) { + sequenceActivity.setBranchEntries(new HashSet()); + } + sequenceActivity.getBranchEntries().add(entry); + + if ( group != null ) + groupingDAO.update(group); + return entry; } @@ -1386,6 +1392,7 @@ condition = new BranchCondition(null, conditionUIID, WDDXProcessor.convertToInteger(conditionTable,WDDXTAGS.ORDER_ID), WDDXProcessor.convertToString(conditionTable,WDDXTAGS.CONDITION_NAME), + WDDXProcessor.convertToString(conditionTable,WDDXTAGS.CONDITION_DISPLAY_NAME), WDDXProcessor.convertToString(conditionTable,WDDXTAGS.CONDITION_TYPE), WDDXProcessor.convertToString(conditionTable,WDDXTAGS.CONDITION_START_VALUE), WDDXProcessor.convertToString(conditionTable,WDDXTAGS.CONDITION_END_VALUE), Index: lams_central/src/java/org/lamsfoundation/lams/authoring/service/AuthoringService.java =================================================================== diff -u -r9214a5d232a6d9d60d5a482517b168724ce40f50 -r97612142f4697066beb66064e83ff31fef1712b9 --- lams_central/src/java/org/lamsfoundation/lams/authoring/service/AuthoringService.java (.../AuthoringService.java) (revision 9214a5d232a6d9d60d5a482517b168724ce40f50) +++ lams_central/src/java/org/lamsfoundation/lams/authoring/service/AuthoringService.java (.../AuthoringService.java) (revision 97612142f4697066beb66064e83ff31fef1712b9) @@ -44,6 +44,7 @@ import org.hibernate.id.IdentifierGenerator; import org.hibernate.id.UUIDHexGenerator; import org.lamsfoundation.lams.authoring.IObjectExtractor; +import org.lamsfoundation.lams.authoring.service.EditOnFlyProcessor; import org.lamsfoundation.lams.dao.hibernate.BaseDAO; import org.lamsfoundation.lams.learningdesign.Activity; import org.lamsfoundation.lams.learningdesign.BranchingActivity; @@ -717,8 +718,8 @@ newLearningDesign.setUser(user); newLearningDesign.setWorkspaceFolder(workspaceFolder); learningDesignDAO.insert(newLearningDesign); - updateDesignActivities(originalLearningDesign,newLearningDesign); - updateDesignTransitions(originalLearningDesign,newLearningDesign); + HashMap newActivities = updateDesignActivities(originalLearningDesign,newLearningDesign); + updateDesignTransitions(originalLearningDesign,newLearningDesign, newActivities); // set first activity assumes that the transitions are all set up correctly. newLearningDesign.setFirstActivity(newLearningDesign.calculateFirstActivity()); newLearningDesign.setLearningDesignUIID(originalLearningDesign.getLearningDesignUIID()); @@ -776,8 +777,9 @@ * * @param originalLearningDesign The LearningDesign to be copied * @param newLearningDesign The copy of the originalLearningDesign + * @return Map of all the new activities, where the key is the UIID value. This is used as an input to updateDesignTransitions */ - private void updateDesignActivities(LearningDesign originalLearningDesign, LearningDesign newLearningDesign){ + private HashMap updateDesignActivities(LearningDesign originalLearningDesign, LearningDesign newLearningDesign){ HashMap newActivities = new HashMap(); // key is UIID HashMap newGroupings = new HashMap(); // key is UIID @@ -834,18 +836,28 @@ } } } - } + + if ( activity.getInputActivities() != null && activity.getInputActivities().size() > 0 ) { + Set newInputActivities = new HashSet(); + Iterator inputIter = activity.getInputActivities().iterator(); + while (inputIter.hasNext()) { + Activity elem = (Activity) inputIter.next(); + newInputActivities.add(newActivities.get(elem.getActivityUIID())); + } + activity.getInputActivities().clear(); + activity.getInputActivities().addAll(newInputActivities); + } } - - // fix up the input activities // The activities collection in the learning design may already exist (as we have already done a save on the design). // If so, we can't just override the existing collection as the cascade causes an error. // newLearningDesign.getActivities() will create a new TreeSet(new ActivityOrderComparator()) if there isn't an existing set newLearningDesign.getActivities().clear(); newLearningDesign.getActivities().addAll(activities); + return newActivities; + } /** As part of updateDesignActivities(), process an activity and, via recursive calls, the activity's child activities. Need to keep track @@ -882,7 +894,7 @@ * @param originalLearningDesign The LearningDesign to be copied * @param newLearningDesign The copy of the originalLearningDesign */ - public void updateDesignTransitions(LearningDesign originalLearningDesign, LearningDesign newLearningDesign){ + public void updateDesignTransitions(LearningDesign originalLearningDesign, LearningDesign newLearningDesign, HashMap newActivities){ HashSet newTransitions = new HashSet(); Set oldTransitions = originalLearningDesign.getTransitions(); Iterator iterator = oldTransitions.iterator(); @@ -892,11 +904,11 @@ Activity toActivity = null; Activity fromActivity=null; if(newTransition.getToUIID()!=null) { - toActivity = activityDAO.getActivityByUIID(newTransition.getToUIID(),newLearningDesign); + toActivity = newActivities.get(newTransition.getToUIID()); toActivity.setTransitionTo(newTransition); } if(newTransition.getFromUIID()!=null) { - fromActivity = activityDAO.getActivityByUIID(newTransition.getFromUIID(),newLearningDesign); + fromActivity = newActivities.get(newTransition.getFromUIID()); fromActivity.setTransitionFrom(newTransition); } newTransition.setToActivity(toActivity); Index: lams_common/conf/hibernate/mappings/org/lamsfoundation/lams/learningdesign/BranchCondition.hbm.xml =================================================================== diff -u -r87ec6bd0708e9da634182eacca8c74e442bc748f -r97612142f4697066beb66064e83ff31fef1712b9 --- lams_common/conf/hibernate/mappings/org/lamsfoundation/lams/learningdesign/BranchCondition.hbm.xml (.../BranchCondition.hbm.xml) (revision 87ec6bd0708e9da634182eacca8c74e442bc748f) +++ lams_common/conf/hibernate/mappings/org/lamsfoundation/lams/learningdesign/BranchCondition.hbm.xml (.../BranchCondition.hbm.xml) (revision 97612142f4697066beb66064e83ff31fef1712b9) @@ -30,6 +30,9 @@ @hibernate.property column="name" length="255" + + @hibernate.property column="display_name" length="255" + @hibernate.property column="type" length="255" Index: lams_common/db/model/lams_11.clay =================================================================== diff -u -r23211f44c3c9c17bf1f48b16985cba850fbdbf78 -r97612142f4697066beb66064e83ff31fef1712b9 --- lams_common/db/model/lams_11.clay (.../lams_11.clay) (revision 23211f44c3c9c17bf1f48b16985cba850fbdbf78) +++ lams_common/db/model/lams_11.clay (.../lams_11.clay) (revision 97612142f4697066beb66064e83ff31fef1712b9) @@ -5421,11 +5421,11 @@ - + - + @@ -5463,8 +5463,8 @@ - + @@ -5580,11 +5580,11 @@ - + - + @@ -5606,7 +5606,7 @@ - + @@ -5626,28 +5626,35 @@ + + + + + + + - + - + - + Index: lams_common/db/sql/create_lams_11_tables.sql =================================================================== diff -u -r23211f44c3c9c17bf1f48b16985cba850fbdbf78 -r97612142f4697066beb66064e83ff31fef1712b9 --- lams_common/db/sql/create_lams_11_tables.sql (.../create_lams_11_tables.sql) (revision 23211f44c3c9c17bf1f48b16985cba850fbdbf78) +++ lams_common/db/sql/create_lams_11_tables.sql (.../create_lams_11_tables.sql) (revision 97612142f4697066beb66064e83ff31fef1712b9) @@ -574,22 +574,23 @@ )TYPE=InnoDB; CREATE TABLE lams_branch_condition ( - condition_id BIGINT(20) NOT NULL + condition_id BIGINT(20) NOT NULL AUTO_INCREMENT , condition_ui_id INT(11) - , order_id INT(11) NOT NULL DEFAULT 0 + , order_id INT(11) , name VARCHAR(255) NOT NULL + , display_name VARCHAR(255) , type VARCHAR(255) NOT NULL - , startValue VARCHAR(255) - , endValue VARCHAR(255) - , exactMatch VARCHAR(255) + , start_value VARCHAR(255) + , end_value VARCHAR(255) + , exact_match_value VARCHAR(255) , entry_id BIGINT(20) NOT NULL , PRIMARY KEY (condition_id) )TYPE=InnoDB; CREATE TABLE lams_branch_activity_entry ( entry_id BIGINT(20) NOT NULL AUTO_INCREMENT , entry_ui_id INT(11) - , group_id BIGINT(20) NOT NULL + , group_id BIGINT(20) , sequence_activity_id BIGINT(20) NOT NULL , branch_activity_id BIGINT(20) NOT NULL , condition_id BIGINT(20) Index: lams_common/db/sql/updatescripts/alter_21_branching.sql =================================================================== diff -u -r23211f44c3c9c17bf1f48b16985cba850fbdbf78 -r97612142f4697066beb66064e83ff31fef1712b9 --- lams_common/db/sql/updatescripts/alter_21_branching.sql (.../alter_21_branching.sql) (revision 23211f44c3c9c17bf1f48b16985cba850fbdbf78) +++ lams_common/db/sql/updatescripts/alter_21_branching.sql (.../alter_21_branching.sql) (revision 97612142f4697066beb66064e83ff31fef1712b9) @@ -18,22 +18,23 @@ CREATE TABLE lams_branch_condition ( - condition_id BIGINT(20) NOT NULL + condition_id BIGINT(20) NOT NULL AUTO_INCREMENT , condition_ui_id INT(11) - , order_id INT(11) NOT NULL DEFAULT 0 + , order_id INT(11) , name VARCHAR(255) NOT NULL + , display_name VARCHAR(255) , type VARCHAR(255) NOT NULL - , startValue VARCHAR(255) - , endValue VARCHAR(255) - , exactMatch VARCHAR(255) + , start_value VARCHAR(255) + , end_value VARCHAR(255) + , exact_match_value VARCHAR(255) , entry_id BIGINT(20) NOT NULL , PRIMARY KEY (condition_id) )TYPE=InnoDB; CREATE TABLE lams_branch_activity_entry ( entry_id BIGINT(20) NOT NULL AUTO_INCREMENT , entry_ui_id INT(11) - , group_id BIGINT(20) NOT NULL + , group_id BIGINT(20) , sequence_activity_id BIGINT(20) NOT NULL , branch_activity_id BIGINT(20) NOT NULL , condition_id BIGINT(20) Index: lams_common/src/java/org/lamsfoundation/lams/learningdesign/Activity.java =================================================================== diff -u -r09048f91f2dcbb6b63449f3c1fb9e1a09221a35e -r97612142f4697066beb66064e83ff31fef1712b9 --- lams_common/src/java/org/lamsfoundation/lams/learningdesign/Activity.java (.../Activity.java) (revision 09048f91f2dcbb6b63449f3c1fb9e1a09221a35e) +++ lams_common/src/java/org/lamsfoundation/lams/learningdesign/Activity.java (.../Activity.java) (revision 97612142f4697066beb66064e83ff31fef1712b9) @@ -1034,7 +1034,11 @@ newActivity.setOrderId(this.getOrderId()); newActivity.setReadOnly(this.getReadOnly()); newActivity.setStopAfterActivity(this.isStopAfterActivity()); - + + if ( this.getInputActivities()!=null && this.getInputActivities().size() > 0 ) { + newActivity.setInputActivities(new HashSet()); + newActivity.getInputActivities().addAll(this.getInputActivities()); + } } Index: lams_common/src/java/org/lamsfoundation/lams/learningdesign/BranchCondition.java =================================================================== diff -u -r87ec6bd0708e9da634182eacca8c74e442bc748f -r97612142f4697066beb66064e83ff31fef1712b9 --- lams_common/src/java/org/lamsfoundation/lams/learningdesign/BranchCondition.java (.../BranchCondition.java) (revision 87ec6bd0708e9da634182eacca8c74e442bc748f) +++ lams_common/src/java/org/lamsfoundation/lams/learningdesign/BranchCondition.java (.../BranchCondition.java) (revision 97612142f4697066beb66064e83ff31fef1712b9) @@ -25,8 +25,13 @@ import java.util.HashSet; +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; import org.lamsfoundation.lams.learningdesign.dto.BranchConditionDTO; +import org.lamsfoundation.lams.tool.ToolOutput; +import org.lamsfoundation.lams.tool.ToolOutputValue; /** @@ -36,12 +41,13 @@ * * There should be one branch condition for each ToolOutputBranchActivityEntry. */ -public class BranchCondition { +public class BranchCondition implements Comparable { private Long conditionId; private Integer conditionUIID; private Integer orderId; private String name; + private String displayName; private String type; private String startValue; private String endValue; @@ -53,11 +59,12 @@ /** full constructor */ public BranchCondition(Long conditionId, Integer conditionUIID, Integer orderId, - String name, String type, String startValue, String endValue, String exactMatchValue) { + String name, String displayName, String type, String startValue, String endValue, String exactMatchValue) { this.conditionId = conditionId; this.conditionUIID = conditionUIID; this.orderId = orderId; this.name = name; + this.displayName = displayName; this.type = type; this.startValue = startValue; this.endValue = endValue; @@ -109,6 +116,16 @@ this.name = name; } /** + * The display name is a name shown to the user so they can link a condition to a branch. + * @hibernate.property column="display_name" length="255" + */ + public String getDisplayName() { + return displayName; + } + public void setDisplayName(String displayName) { + this.displayName = displayName; + } + /** * @hibernate.property column="type" length="255" */ public String getType() { @@ -155,6 +172,7 @@ .append("conditionUIID", conditionUIID) .append("orderId", orderId) .append("name", name) + .append("displayName", displayName) .append("type", type) .append("startValue", startValue) .append("endValue", endValue) @@ -172,7 +190,101 @@ /** Create a new BranchCondition based on itself, leaving conditionId as null */ public BranchCondition clone() { - return new BranchCondition(null, conditionUIID, orderId, name, type, startValue, endValue, exactMatchValue); + return new BranchCondition(null, conditionUIID, orderId, name, displayName, type, startValue, endValue, exactMatchValue); } + public int compareTo(Object arg0) { + BranchCondition other = (BranchCondition) arg0; + return new CompareToBuilder() + .append(orderId, other.getOrderId()) + .append(conditionId, other.getConditionId()) + .append(name, other.getName()) + .append(conditionUIID, other.getConditionUIID()) + .toComparison(); + } + + public int hashCode() { + return new HashCodeBuilder() + .append(orderId) + .append(conditionId) + .append(name) + .append(conditionUIID) + .toHashCode(); + } + + public boolean equals(Object arg0) { + BranchCondition other = (BranchCondition) arg0; + return new EqualsBuilder() + .append(orderId, other.getOrderId()) + .append(conditionId, other.getConditionId()) + .append(name, other.getName()) + .append(conditionUIID, other.getConditionUIID()) + .isEquals(); + } + + /** Is this condition met? */ + public boolean isMet(ToolOutput output) { + if ( output != null ) { + if ( exactMatchValue != null ) { + return exactMatchMet(output.getValue()); + } else if ( startValue != null ) { + return inRange(output.getValue()); + } + } + return false; + } + + public boolean exactMatchMet(ToolOutputValue outputValue) { + if ( "OUTPUT_LONG".equals(type) ) { + Long exactMatchObj = exactMatchValue != null ? Long.parseLong(exactMatchValue) : null; + Long actualValue = outputValue.getLong(); + return ( actualValue != null && actualValue.equals(exactMatchObj)); + } else if ( "OUTPUT_DOUBLE".equals(type) ) { + Double exactMatchObj = exactMatchValue != null ? Double.parseDouble(exactMatchValue) : null; + Double actualValue = outputValue.getDouble(); + return ( actualValue != null && actualValue.equals(exactMatchObj)); + } else if ( "OUTPUT_BOOLEAN".equals(type) ) { + Boolean exactMatchObj = exactMatchValue != null ? Boolean.parseBoolean(exactMatchValue) : null; + Boolean actualValue = outputValue.getBoolean(); + return ( actualValue != null && actualValue.equals(exactMatchObj)); + } else if ( "OUTPUT_STRING".equals(type) ) { + Double actualValue = outputValue.getDouble(); + return ( actualValue != null && actualValue.equals(exactMatchValue)); + } + return false; + } + + public boolean inRange(ToolOutputValue outputValue) { + if ( "OUTPUT_LONG".equals(type) ) { + Long startValueLong = startValue != null ? Long.parseLong(startValue) : null; + Long endValueLong = endValue != null ? Long.parseLong(endValue) : null; + Long actualValue = outputValue.getLong(); + return ( actualValue != null && + ( startValueLong==null || actualValue.compareTo(startValueLong) >= 0 ) && + ( endValueLong==null || actualValue.compareTo(endValueLong) <= 0 )) ; + } else if ( "OUTPUT_DOUBLE".equals(type) ) { + Double startValueDouble = startValue != null ? Double.parseDouble(startValue) : null; + Double endValueDouble = endValue != null ? Double.parseDouble(endValue) : null; + Double actualValue = outputValue.getDouble(); + return ( actualValue != null && + ( startValueDouble==null || actualValue.compareTo(startValueDouble) >= 0 ) && + ( endValueDouble==null || actualValue.compareTo(endValueDouble) <= 0 )); + } else if ( "OUTPUT_BOOLEAN".equals(type) ) { + // this is a nonsense, but we'll code it just in case. What order is a boolean? True greater than false? + Boolean startValueBoolean = startValue != null ? Boolean.parseBoolean(startValue) : null; + Boolean endValueBoolean = endValue != null ? Boolean.parseBoolean(endValue) : null; + Boolean actualValue = outputValue.getBoolean(); + return ( actualValue != null && + ( startValueBoolean==null || actualValue.compareTo(startValueBoolean) >= 0 ) && + ( endValueBoolean==null || actualValue.compareTo(endValueBoolean) <= 0 )); + + } else if ( "OUTPUT_STRING".equals(type) ) { + String actualValue = outputValue.getString(); + return ( actualValue != null && + ( startValue==null || actualValue.compareTo(startValue) >= 0 ) && + ( endValue==null || actualValue.compareTo(endValue) <= 0 )); + } + return false; + } + } Index: lams_common/src/java/org/lamsfoundation/lams/learningdesign/ChosenBranchingActivity.java =================================================================== diff -u -r09048f91f2dcbb6b63449f3c1fb9e1a09221a35e -r97612142f4697066beb66064e83ff31fef1712b9 --- lams_common/src/java/org/lamsfoundation/lams/learningdesign/ChosenBranchingActivity.java (.../ChosenBranchingActivity.java) (revision 09048f91f2dcbb6b63449f3c1fb9e1a09221a35e) +++ lams_common/src/java/org/lamsfoundation/lams/learningdesign/ChosenBranchingActivity.java (.../ChosenBranchingActivity.java) (revision 97612142f4697066beb66064e83ff31fef1712b9) @@ -135,7 +135,7 @@ ChosenBranchingActivity newBranchingActivity = new ChosenBranchingActivity(); copyBranchingFields(newBranchingActivity); - copyToNewActivity(newBranchingActivity); + copyToNewComplexActivity(newBranchingActivity); return newBranchingActivity; } Index: lams_common/src/java/org/lamsfoundation/lams/learningdesign/ComplexActivity.java =================================================================== diff -u -r09048f91f2dcbb6b63449f3c1fb9e1a09221a35e -r97612142f4697066beb66064e83ff31fef1712b9 --- lams_common/src/java/org/lamsfoundation/lams/learningdesign/ComplexActivity.java (.../ComplexActivity.java) (revision 09048f91f2dcbb6b63449f3c1fb9e1a09221a35e) +++ lams_common/src/java/org/lamsfoundation/lams/learningdesign/ComplexActivity.java (.../ComplexActivity.java) (revision 97612142f4697066beb66064e83ff31fef1712b9) @@ -228,5 +228,10 @@ public ComplexActivityStrategy getComplexActivityStrategy() { return activityStrategy; } + + protected void copyToNewComplexActivity(ComplexActivity newComplex) { + copyToNewActivity(newComplex); + newComplex.setDefaultActivity(this.getDefaultActivity()); + } } \ No newline at end of file Index: lams_common/src/java/org/lamsfoundation/lams/learningdesign/GroupBranchingActivity.java =================================================================== diff -u -r09048f91f2dcbb6b63449f3c1fb9e1a09221a35e -r97612142f4697066beb66064e83ff31fef1712b9 --- lams_common/src/java/org/lamsfoundation/lams/learningdesign/GroupBranchingActivity.java (.../GroupBranchingActivity.java) (revision 09048f91f2dcbb6b63449f3c1fb9e1a09221a35e) +++ lams_common/src/java/org/lamsfoundation/lams/learningdesign/GroupBranchingActivity.java (.../GroupBranchingActivity.java) (revision 97612142f4697066beb66064e83ff31fef1712b9) @@ -135,7 +135,7 @@ GroupBranchingActivity newBranchingActivity = new GroupBranchingActivity(); copyBranchingFields(newBranchingActivity); - copyToNewActivity(newBranchingActivity); + copyToNewComplexActivity(newBranchingActivity); return newBranchingActivity; } Index: lams_common/src/java/org/lamsfoundation/lams/learningdesign/OptionsActivity.java =================================================================== diff -u -r09048f91f2dcbb6b63449f3c1fb9e1a09221a35e -r97612142f4697066beb66064e83ff31fef1712b9 --- lams_common/src/java/org/lamsfoundation/lams/learningdesign/OptionsActivity.java (.../OptionsActivity.java) (revision 09048f91f2dcbb6b63449f3c1fb9e1a09221a35e) +++ lams_common/src/java/org/lamsfoundation/lams/learningdesign/OptionsActivity.java (.../OptionsActivity.java) (revision 97612142f4697066beb66064e83ff31fef1712b9) @@ -134,7 +134,7 @@ } public Activity createCopy(){ OptionsActivity newOptionsActivity = new OptionsActivity(); - copyToNewActivity(newOptionsActivity); + copyToNewComplexActivity(newOptionsActivity); /** OptionsActivity Specific Attributes */ newOptionsActivity.setMaxNumberOfOptions(this.getMaxNumberOfOptions()); Index: lams_common/src/java/org/lamsfoundation/lams/learningdesign/ParallelActivity.java =================================================================== diff -u -r09048f91f2dcbb6b63449f3c1fb9e1a09221a35e -r97612142f4697066beb66064e83ff31fef1712b9 --- lams_common/src/java/org/lamsfoundation/lams/learningdesign/ParallelActivity.java (.../ParallelActivity.java) (revision 09048f91f2dcbb6b63449f3c1fb9e1a09221a35e) +++ lams_common/src/java/org/lamsfoundation/lams/learningdesign/ParallelActivity.java (.../ParallelActivity.java) (revision 97612142f4697066beb66064e83ff31fef1712b9) @@ -123,7 +123,7 @@ public Activity createCopy(){ ParallelActivity newParallelActivity = new ParallelActivity(); - copyToNewActivity(newParallelActivity); + copyToNewComplexActivity(newParallelActivity); return newParallelActivity; } Index: lams_common/src/java/org/lamsfoundation/lams/learningdesign/SequenceActivity.java =================================================================== diff -u -rf59547396d16e3e71f6c8e6bcd6d5a65f3a1af7f -r97612142f4697066beb66064e83ff31fef1712b9 --- lams_common/src/java/org/lamsfoundation/lams/learningdesign/SequenceActivity.java (.../SequenceActivity.java) (revision f59547396d16e3e71f6c8e6bcd6d5a65f3a1af7f) +++ lams_common/src/java/org/lamsfoundation/lams/learningdesign/SequenceActivity.java (.../SequenceActivity.java) (revision 97612142f4697066beb66064e83ff31fef1712b9) @@ -136,7 +136,7 @@ */ public Activity createCopy(){ SequenceActivity newSequenceActivity = new SequenceActivity(); - copyToNewActivity(newSequenceActivity); + copyToNewComplexActivity(newSequenceActivity); newSequenceActivity.defaultActivity = this.defaultActivity; if ( this.getBranchEntries() != null && this.getBranchEntries().size() > 0) { Index: lams_common/src/java/org/lamsfoundation/lams/learningdesign/ToolBranchingActivity.java =================================================================== diff -u -r09048f91f2dcbb6b63449f3c1fb9e1a09221a35e -r97612142f4697066beb66064e83ff31fef1712b9 --- lams_common/src/java/org/lamsfoundation/lams/learningdesign/ToolBranchingActivity.java (.../ToolBranchingActivity.java) (revision 09048f91f2dcbb6b63449f3c1fb9e1a09221a35e) +++ lams_common/src/java/org/lamsfoundation/lams/learningdesign/ToolBranchingActivity.java (.../ToolBranchingActivity.java) (revision 97612142f4697066beb66064e83ff31fef1712b9) @@ -136,7 +136,7 @@ ToolBranchingActivity newBranchingActivity = new ToolBranchingActivity(); copyBranchingFields(newBranchingActivity); - copyToNewActivity(newBranchingActivity); + copyToNewComplexActivity(newBranchingActivity); return newBranchingActivity; } Index: lams_common/src/java/org/lamsfoundation/lams/learningdesign/dto/AuthoringActivityDTO.java =================================================================== diff -u -r09048f91f2dcbb6b63449f3c1fb9e1a09221a35e -r97612142f4697066beb66064e83ff31fef1712b9 --- lams_common/src/java/org/lamsfoundation/lams/learningdesign/dto/AuthoringActivityDTO.java (.../AuthoringActivityDTO.java) (revision 09048f91f2dcbb6b63449f3c1fb9e1a09221a35e) +++ lams_common/src/java/org/lamsfoundation/lams/learningdesign/dto/AuthoringActivityDTO.java (.../AuthoringActivityDTO.java) (revision 97612142f4697066beb66064e83ff31fef1712b9) @@ -219,6 +219,9 @@ /** List of the UIIDs of the activities that are input activities for this activity */ private ArrayList inputActivities; + /** List of the UIIDs of the activities that are input activities for this activity */ + private Integer toolActivityUIID; + /** Used by a sequence activity to determine the start of the transition based sequence and used by tool * based branching to determine the default branch. */ private Integer defaultActivityUIID; @@ -249,7 +252,7 @@ Boolean applyGrouping,Integer groupingSupportType, Integer groupingType,GroupingDTO groupingDTO, Boolean readOnly, Boolean initialised, Boolean stopAfterActivity, - ArrayList inputActivities, Integer defaultActivityUIID, + ArrayList inputActivities, Integer toolActivityUIID, Integer defaultActivityUIID, Integer startXCoord, Integer startYCoord, Integer endXCoord, Integer endYCoord) { super(); this.activityID = activityID; @@ -295,6 +298,7 @@ this.readOnly = readOnly; this.initialised = initialised; this.stopAfterActivity=stopAfterActivity; + this.toolActivityUIID=toolActivityUIID; this.inputActivities=inputActivities; // Complex Activity field this.defaultActivityUIID = defaultActivityUIID; @@ -353,6 +357,7 @@ while ( iter.hasNext() ) { Activity inputAct = (Activity) iter.next(); list.add(inputAct.getActivityUIID()); + this.toolActivityUIID=inputAct.getActivityUIID(); } this.inputActivities = list; } @@ -1081,4 +1086,10 @@ public void setInputActivities(ArrayList inputActivities) { this.inputActivities = inputActivities; } + public Integer getToolActivityUIID() { + return toolActivityUIID; + } + public void setToolActivityUIID(Integer toolActivityUIID) { + this.toolActivityUIID = toolActivityUIID; + } } Index: lams_common/src/java/org/lamsfoundation/lams/learningdesign/dto/BranchConditionDTO.java =================================================================== diff -u -rfd0b269633a65dde2faf9fa5b755181326c44c12 -r97612142f4697066beb66064e83ff31fef1712b9 --- lams_common/src/java/org/lamsfoundation/lams/learningdesign/dto/BranchConditionDTO.java (.../BranchConditionDTO.java) (revision fd0b269633a65dde2faf9fa5b755181326c44c12) +++ lams_common/src/java/org/lamsfoundation/lams/learningdesign/dto/BranchConditionDTO.java (.../BranchConditionDTO.java) (revision 97612142f4697066beb66064e83ff31fef1712b9) @@ -40,6 +40,7 @@ private Integer conditionUIID; private Integer orderID; private String name; + private String displayName; private String type; private String startValue; private String endValue; @@ -50,6 +51,7 @@ this.conditionUIID = condition.getConditionUIID(); this.orderID = condition.getOrderId(); this.name = condition.getName(); + this.displayName = condition.getDisplayName(); this.type = condition.getType(); this.startValue = condition.getStartValue(); this.endValue = condition.getEndValue(); @@ -121,5 +123,13 @@ .append("exactMatchValue", exactMatchValue) .toString(); } + + public String getDisplayName() { + return displayName; + } + + public void setDisplayName(String displayName) { + this.displayName = displayName; + } } Index: lams_common/src/java/org/lamsfoundation/lams/tool/ToolSessionManager.java =================================================================== diff -u -r08950e1090443c3423a3d1c587416a2fccd8bbdf -r97612142f4697066beb66064e83ff31fef1712b9 --- lams_common/src/java/org/lamsfoundation/lams/tool/ToolSessionManager.java (.../ToolSessionManager.java) (revision 08950e1090443c3423a3d1c587416a2fccd8bbdf) +++ lams_common/src/java/org/lamsfoundation/lams/tool/ToolSessionManager.java (.../ToolSessionManager.java) (revision 97612142f4697066beb66064e83ff31fef1712b9) @@ -24,10 +24,10 @@ package org.lamsfoundation.lams.tool; import java.util.List; +import java.util.SortedMap; import org.lamsfoundation.lams.tool.exception.DataMissingException; import org.lamsfoundation.lams.tool.exception.ToolException; -import org.lamsfoundation.lams.usermanagement.User; @@ -91,4 +91,39 @@ public void removeToolSession(Long toolSessionId) throws DataMissingException, ToolException; + /** Get all the outputs that match the list of names. + * + * If names is null, then all possible output will be returned. If names is an array of length 0, then no output will be returned. + * + * The toolSessionId and learnerId will be used to determine the data on which the outputs are to be based. If the output is for + * the entire group/class (e.g. average mark) then the tool can ignore the learnerId. + * + * If the learnerId is null, then return the outputs based on all learners in that toolSession. If the + * output is nonsense for all learners, then return an "empty" but valid answer. For example, for a mark + * you might return 0. + * + * Note: the learnerId may not be the userId of the current user as the current user may be a staff member. + * + * The tool's output will be returned in a map, where the key is the "name" for each output and the ToolOutput is the output for + * that "name". At present, if there are multiple attempts at an activity for one learner, we assume each attempt would have a + * different toolSessionId, and hence getToolOutput[] would be called multiple times. This may not be a valid assumption. + */ + public SortedMap getToolOutput(List names, Long toolSessionId, Long learnerId); + + /** + * Get the outputs for a particular tool output name. + * + * The toolSessionId and learnerId will be used to determine the data on which the outputs are to be based. If the output is for + * the entire group/class (e.g. average mark) then the tool can ignore the learnerId. + * + * If the learnerId is null, then return the outputs based on all learners in that toolSession. If the + * output is nonsense for all learners, then return an "empty" but valid answer. For example, for a mark + * you might return 0. + * + * Note: the learnerId may not be the userId of the current user as the current user may be a staff member. + */ + public ToolOutput getToolOutput(String name, Long toolSessionId, Long learnerId); + + + } Index: lams_common/src/java/org/lamsfoundation/lams/tool/service/ILamsCoreToolService.java =================================================================== diff -u -r530c208895bfea0ba15e8bd8f1c799b163c059c9 -r97612142f4697066beb66064e83ff31fef1712b9 --- lams_common/src/java/org/lamsfoundation/lams/tool/service/ILamsCoreToolService.java (.../ILamsCoreToolService.java) (revision 530c208895bfea0ba15e8bd8f1c799b163c059c9) +++ lams_common/src/java/org/lamsfoundation/lams/tool/service/ILamsCoreToolService.java (.../ILamsCoreToolService.java) (revision 97612142f4697066beb66064e83ff31fef1712b9) @@ -31,12 +31,16 @@ import org.lamsfoundation.lams.learningdesign.Activity; import org.lamsfoundation.lams.learningdesign.ToolActivity; import org.lamsfoundation.lams.lesson.Lesson; +import org.lamsfoundation.lams.tool.Tool; +import org.lamsfoundation.lams.tool.ToolOutput; import org.lamsfoundation.lams.tool.ToolOutputDefinition; import org.lamsfoundation.lams.tool.ToolSession; +import org.lamsfoundation.lams.tool.ToolSessionManager; import org.lamsfoundation.lams.tool.exception.DataMissingException; import org.lamsfoundation.lams.tool.exception.LamsToolServiceException; import org.lamsfoundation.lams.tool.exception.ToolException; import org.lamsfoundation.lams.usermanagement.User; +import org.springframework.beans.factory.NoSuchBeanDefinitionException; /** *

This interface defines the service that lams tool package offers to other @@ -186,6 +190,66 @@ public SortedMap getOutputDefinitionsFromTool(Long toolContentId) throws ToolException; /** + * Ask a tool for one particular ToolOutput, based on the given toolSessionId. If the tool doesn't + * have any content matching the toolSessionId then should return an "empty" but valid set of data. e.g + * an empty mark would be 0. + * + * This functionality relies on a method added to the Tool Contract in LAMS 2.1. + * + * @throws ToolException + */ + public ToolOutput getOutputFromTool(String conditionName, Long toolSessionId, Integer learnerId) throws ToolException; + + /** + * Ask a tool for one particular ToolOutput, based on the given toolSessionId. If the tool doesn't + * have any content matching the toolSessionId then should return an "empty" but valid set of data. e.g + * an empty mark would be 0. + * + * This functionality relies on a method added to the Tool Contract in LAMS 2.1. + * + * @throws ToolException + */ + public ToolOutput getOutputFromTool(String conditionName, ToolSession toolSession, Integer learnerId) throws ToolException; + + /** + * Ask a tool for a set of ToolOutputs, based on the given toolSessionId. + * + * If conditionName array is null, then return all the outputs for the tool, otherwise just restrict the + * outputs to the given list. If it is empty, then no outputs will be returned. + * + * If the learnerId is null, then return the outputs based on all learners in that toolSession. If the + * output is nonsense for all learners, then return an "empty" but valid answer. For example, for a mark + * you might return 0. + * + * If there isn't any content matching the toolSessionId then should return an "empty" but valid set of data. e.g + * an empty mark would be 0. + * + * This functionality relies on a method added to the Tool Contract in LAMS 2.1. + * + * @throws ToolException + */ + public SortedMap getOutputFromTool(List names, Long toolSessionId, Integer learnerId) throws ToolException; + + /** + * Ask a tool for a set of ToolOutputs, based on the given toolSessionId. + * + * If conditionName array is null, then return all the outputs for the tool, otherwise just restrict the + * outputs to the given list. If it is empty, then no outputs will be returned. + * + * If the learnerId is null, then return the outputs based on all learners in that toolSession. If the + * output is nonsense for all learners, then return an "empty" but valid answer. For example, for a mark + * you might return 0. + * + * If there isn't any content matching the toolSessionId then should return an "empty" but valid set of data. e.g + * an empty mark would be 0. + * + * This functionality relies on a method added to the Tool Contract in LAMS 2.1. + * + * @throws ToolException + */ + public SortedMap getOutputFromTool(List names, ToolSession toolSession, Integer learnerId) throws ToolException; + + /** * Update the tool session data. * @param toolSession the new tool session object. */ Index: lams_common/src/java/org/lamsfoundation/lams/tool/service/LamsCoreToolService.java =================================================================== diff -u -r530c208895bfea0ba15e8bd8f1c799b163c059c9 -r97612142f4697066beb66064e83ff31fef1712b9 --- lams_common/src/java/org/lamsfoundation/lams/tool/service/LamsCoreToolService.java (.../LamsCoreToolService.java) (revision 530c208895bfea0ba15e8bd8f1c799b163c059c9) +++ lams_common/src/java/org/lamsfoundation/lams/tool/service/LamsCoreToolService.java (.../LamsCoreToolService.java) (revision 97612142f4697066beb66064e83ff31fef1712b9) @@ -39,6 +39,7 @@ import org.lamsfoundation.lams.tool.ToolContent; import org.lamsfoundation.lams.tool.ToolContentIDGenerator; import org.lamsfoundation.lams.tool.ToolContentManager; +import org.lamsfoundation.lams.tool.ToolOutput; import org.lamsfoundation.lams.tool.ToolOutputDefinition; import org.lamsfoundation.lams.tool.ToolSession; import org.lamsfoundation.lams.tool.ToolSessionManager; @@ -50,7 +51,6 @@ import org.lamsfoundation.lams.tool.exception.ToolException; import org.lamsfoundation.lams.usermanagement.User; import org.lamsfoundation.lams.util.WebUtil; -import org.lamsfoundation.lams.util.wddx.FlashMessage; import org.lamsfoundation.lams.web.util.AttributeNames; import org.springframework.beans.BeansException; import org.springframework.beans.factory.NoSuchBeanDefinitionException; @@ -327,9 +327,7 @@ * have any content matching the toolContentId then it should create the OutputDefinitions based * on the tool's default content. * - * This functionality relies on a method added to the Tool Contract in LAMS 2.1, so if the tool - * doesn't support the required method, it writes out an error to the log but doesn't throw - * an exception - just returns an empty map. + * This functionality relies on a method added to the Tool Contract in LAMS 2.1. * * @param toolContentId * @return SortedMap of ToolOutputDefinitions with the key being the name of each definition @@ -355,7 +353,7 @@ ToolContentManager contentManager = (ToolContentManager) findToolService(tool); return contentManager.getToolOutputDefinitions(toolContentId); } catch ( NoSuchBeanDefinitionException e ) { - String message = "A tool which is defined in the database appears to missing from the classpath. Unable to copy the tool content. ToolContentId "+toolContentId; + String message = "A tool which is defined in the database appears to missing from the classpath. Unable to get the tool output definitions. ToolContentId "+toolContentId; log.error(message,e); throw new ToolException(message,e); } catch ( java.lang.AbstractMethodError e ) { @@ -366,8 +364,131 @@ } + /** + * Ask a tool for one particular ToolOutput, based on the given toolSessionId. If the tool doesn't + * have any content matching the toolSessionId then should return an "empty" but valid set of data. e.g + * an empty mark would be 0. + * + * This functionality relies on a method added to the Tool Contract in LAMS 2.1. + * + * @throws ToolException + */ + public ToolOutput getOutputFromTool(String conditionName, Long toolSessionId, Integer learnerId) throws ToolException { + + ToolSession session = (ToolSession) toolSessionDAO.getToolSession(toolSessionId); + return getOutputFromTool(conditionName, session, learnerId); + } + /** + * Ask a tool for one particular ToolOutput, based on the given toolSessionId. If the tool doesn't + * have any content matching the toolSessionId then should return an "empty" but valid set of data. e.g + * an empty mark would be 0. + * + * This functionality relies on a method added to the Tool Contract in LAMS 2.1. + * + * @throws ToolException + */ + public ToolOutput getOutputFromTool(String conditionName, ToolSession toolSession, Integer learnerId) throws ToolException { + + if ( toolSession == null ) { + String error = "The toolSession is not valid. Unable to get the tool output"; + log.error(error); + throw new DataMissingException(error); + } + + Tool tool = toolSession.getToolActivity().getTool(); + if ( tool == null ) { + String error = "The tool for toolSession "+ toolSession.getToolSessionId() + " is missing."; + log.error(error); + throw new DataMissingException(error); + } + + try { + ToolSessionManager sessionManager = (ToolSessionManager) findToolService(tool); + Long longLearnerId = learnerId != null ? new Long(learnerId.longValue()) : null; + return sessionManager.getToolOutput(conditionName, toolSession.getToolSessionId(), longLearnerId); + } catch ( NoSuchBeanDefinitionException e ) { + String message = "A tool which is defined in the database appears to missing from the classpath. Unable to gt the tol output. toolSession "+toolSession.getToolSessionId(); + log.error(message,e); + throw new ToolException(message,e); + } catch ( java.lang.AbstractMethodError e ) { + String message = "Tool "+tool.getToolDisplayName()+" doesn't support the getToolOutput(name, toolSessionId, learnerId) method so no output definitions can be accessed."; + log.error(message,e); + throw new ToolException(message,e); + } + } + + /** + * Ask a tool for a set of ToolOutputs, based on the given toolSessionId. + * + * If conditionName array is null, then return all the outputs for the tool, otherwise just restrict the + * outputs to the given list. If it is empty, then no outputs will be returned. + * + * If the learnerId is null, then return the outputs based on all learners in that toolSession. If the + * output is nonsense for all learners, then return an "empty" but valid answer. For example, for a mark + * you might return 0. + * + * If there isn't any content matching the toolSessionId then should return an "empty" but valid set of data. e.g + * an empty mark would be 0. + * + * This functionality relies on a method added to the Tool Contract in LAMS 2.1. + * + * @throws ToolException + */ + public SortedMap getOutputFromTool(List names, Long toolSessionId, Integer learnerId) throws ToolException { + ToolSession session = (ToolSession) toolSessionDAO.getToolSession(toolSessionId); + return getOutputFromTool(names, session, learnerId); + } + + /** + * Ask a tool for a set of ToolOutputs, based on the given toolSessionId. + * + * If conditionName array is null, then return all the outputs for the tool, otherwise just restrict the + * outputs to the given list. If it is empty, then no outputs will be returned. + * + * If the learnerId is null, then return the outputs based on all learners in that toolSession. If the + * output is nonsense for all learners, then return an "empty" but valid answer. For example, for a mark + * you might return 0. + * + * If there isn't any content matching the toolSessionId then should return an "empty" but valid set of data. e.g + * an empty mark would be 0. + * + * This functionality relies on a method added to the Tool Contract in LAMS 2.1. + * + * @throws ToolException + */ + public SortedMap getOutputFromTool(List names, ToolSession toolSession, Integer learnerId) throws ToolException { + + if ( toolSession == null ) { + String error = "The toolSession is not valid. Unable to get the tool output"; + log.error(error); + throw new DataMissingException(error); + } + + Tool tool = toolSession.getToolActivity().getTool(); + if ( tool == null ) { + String error = "The tool for toolSession "+ toolSession.getToolSessionId() + " is missing."; + log.error(error); + throw new DataMissingException(error); + } + + try { + ToolSessionManager sessionManager = (ToolSessionManager) findToolService(tool); + Long longLearnerId = learnerId != null ? new Long(learnerId.longValue()) : null; + return sessionManager.getToolOutput(names, toolSession.getToolSessionId(), longLearnerId); + } catch ( NoSuchBeanDefinitionException e ) { + String message = "A tool which is defined in the database appears to missing from the classpath. Unable to gt the tol output. toolSession "+toolSession.getToolSessionId(); + log.error(message,e); + throw new ToolException(message,e); + } catch ( java.lang.AbstractMethodError e ) { + String message = "Tool "+tool.getToolDisplayName()+" doesn't support the getToolOutput(name, toolSessionId, learnerId) method so no output definitions can be accessed."; + log.error(message,e); + throw new ToolException(message,e); + } + } + + /** * @see org.lamsfoundation.lams.tool.service.ILamsCoreToolService#updateToolSession(org.lamsfoundation.lams.tool.ToolSession) */ public void updateToolSession(ToolSession toolSession) Index: lams_common/src/java/org/lamsfoundation/lams/util/wddx/WDDXTAGS.java =================================================================== diff -u -r87ec6bd0708e9da634182eacca8c74e442bc748f -r97612142f4697066beb66064e83ff31fef1712b9 --- lams_common/src/java/org/lamsfoundation/lams/util/wddx/WDDXTAGS.java (.../WDDXTAGS.java) (revision 87ec6bd0708e9da634182eacca8c74e442bc748f) +++ lams_common/src/java/org/lamsfoundation/lams/util/wddx/WDDXTAGS.java (.../WDDXTAGS.java) (revision 97612142f4697066beb66064e83ff31fef1712b9) @@ -95,7 +95,8 @@ public static final String APPLY_GROUPING = "applyGrouping"; public static final String GROUPING_SUPPORT_TYPE = "groupingSupportType"; public static final String STOP_AFTER_ACTIVITY = "stopAfterActivity"; - public static final String INPUT_ACTIVITIES = "inputActivities"; + public static final String INPUT_ACTIVITIES = "inputActivities"; // not used yet + public static final String INPUT_TOOL_ACTIVITY_UIID = "toolActivityUIID"; /** OptionsActivity specific tags*/ public static final String MAX_OPTIONS="maxOptions"; @@ -206,6 +207,7 @@ public static final String CONDITION_UIID = "conditionUIID"; // reuse ORDER_ID for the OrderId field public static final String CONDITION_NAME = "name"; + public static final String CONDITION_DISPLAY_NAME = "displayName"; public static final String CONDITION_TYPE = "type"; public static final String CONDITION_START_VALUE = "startValue"; public static final String CONDITION_END_VALUE = "endValue"; Index: lams_learning/src/java/org/lamsfoundation/lams/learning/service/LearnerService.java =================================================================== diff -u -r23211f44c3c9c17bf1f48b16985cba850fbdbf78 -r97612142f4697066beb66064e83ff31fef1712b9 --- lams_learning/src/java/org/lamsfoundation/lams/learning/service/LearnerService.java (.../LearnerService.java) (revision 23211f44c3c9c17bf1f48b16985cba850fbdbf78) +++ lams_learning/src/java/org/lamsfoundation/lams/learning/service/LearnerService.java (.../LearnerService.java) (revision 97612142f4697066beb66064e83ff31fef1712b9) @@ -27,15 +27,19 @@ import java.sql.Timestamp; import java.util.ArrayList; import java.util.Date; +import java.util.HashMap; import java.util.Iterator; import java.util.List; +import java.util.Map; import java.util.Set; +import java.util.TreeMap; import org.apache.log4j.Logger; import org.lamsfoundation.lams.learning.progress.ProgressEngine; import org.lamsfoundation.lams.learning.progress.ProgressException; import org.lamsfoundation.lams.learning.web.util.ActivityMapping; import org.lamsfoundation.lams.learningdesign.Activity; +import org.lamsfoundation.lams.learningdesign.BranchCondition; import org.lamsfoundation.lams.learningdesign.BranchingActivity; import org.lamsfoundation.lams.learningdesign.GateActivity; import org.lamsfoundation.lams.learningdesign.Group; @@ -44,6 +48,7 @@ import org.lamsfoundation.lams.learningdesign.GroupingActivity; import org.lamsfoundation.lams.learningdesign.SequenceActivity; import org.lamsfoundation.lams.learningdesign.ToolActivity; +import org.lamsfoundation.lams.learningdesign.ToolBranchingActivity; import org.lamsfoundation.lams.learningdesign.dao.IActivityDAO; import org.lamsfoundation.lams.learningdesign.dao.IGroupingDAO; import org.lamsfoundation.lams.lesson.LearnerProgress; @@ -54,6 +59,7 @@ import org.lamsfoundation.lams.lesson.dto.LessonDTO; import org.lamsfoundation.lams.lesson.service.ILessonService; import org.lamsfoundation.lams.lesson.service.LessonServiceException; +import org.lamsfoundation.lams.tool.ToolOutput; import org.lamsfoundation.lams.tool.ToolSession; import org.lamsfoundation.lams.tool.dao.IToolSessionDAO; import org.lamsfoundation.lams.tool.exception.LamsToolServiceException; @@ -696,13 +702,13 @@ */ private LessonDTO[] getLessonDataFor(List lessons) { - List lessonDTOList = new ArrayList(); + List lessonDTOList = new ArrayList(); for(Iterator i=lessons.iterator();i.hasNext();) { Lesson currentLesson = (Lesson)i.next(); lessonDTOList.add(currentLesson.getLessonData()); } - return (LessonDTO[])lessonDTOList.toArray(new LessonDTO[lessonDTOList.size()]); + return lessonDTOList.toArray(new LessonDTO[lessonDTOList.size()]); } /** @@ -718,25 +724,106 @@ throw new LearnerServiceException(error); } - if ( branchingActivity.isToolBranchingActivity() ) { - String message = "Tool based branching not yet supported. Activity was "+branchingActivity; - log.error(message); - throw new LearnerServiceException(message); - - } else { - // assume either isGroupBranchingActivity() || isChosenBranchingActivity() ) - // in both cases, the branch is based on the group the learner is in. - try { + try { + if ( branchingActivity.isToolBranchingActivity() ) { + return determineToolBasedBranch(lesson, (ToolBranchingActivity)branchingActivity, learner); + + } else { + // assume either isGroupBranchingActivity() || isChosenBranchingActivity() ) + // in both cases, the branch is based on the group the learner is in. return determineGroupBasedBranch(lesson, branchingActivity, learner); - } catch ( LessonServiceException e ) { - String message = "determineBranch failed due to "+e.getMessage(); - log.error(message,e); - throw new LearnerServiceException("determineBranch failed due to "+e.getMessage(), e); - } - } + } + } catch ( LessonServiceException e ) { + String message = "determineBranch failed due to "+e.getMessage(); + log.error(message,e); + throw new LearnerServiceException("determineBranch failed due to "+e.getMessage(), e); + } } + /** Get all the conditions for this branching activity, ordered by order id. + * Go through each condition until we find one that passes and that is the required branch. + * If no conditions match, use the branch that is the "default" branch for this branching activity. + */ + private SequenceActivity determineToolBasedBranch(Lesson lesson, ToolBranchingActivity branchingActivity, User learner) + { + Activity defaultBranch = (Activity) branchingActivity.getDefaultActivity(); + SequenceActivity matchedBranch = null; + + // Work out the tool session appropriate for this user and branching activity. We expect there to be only one at this point. + ToolSession toolSession = null; + for ( Activity inputActivity : (Set) branchingActivity.getInputActivities() ) { + toolSession = lamsCoreToolService.getToolSessionByLearner(learner, inputActivity); + } + + if ( toolSession != null ) { + + // Get all the conditions for this branching activity, ordered by order id. + Map conditionsMap = new TreeMap(); + Iterator branchIterator = branchingActivity.getActivities().iterator(); + while ( branchIterator.hasNext() ) { + Activity branchActivity = (Activity) branchIterator.next(); + SequenceActivity branchSequence = (SequenceActivity) activityDAO.getActivityByActivityId(branchActivity.getActivityId(), SequenceActivity.class); + Iterator entryIterator = branchSequence.getBranchEntries().iterator(); + while (entryIterator.hasNext()) { + BranchActivityEntry entry = entryIterator.next(); + if ( entry.getCondition() != null ) { + conditionsMap.put(entry.getCondition(), branchSequence); + } + } + } + + // Go through each condition until we find one that passes and that is the required branch. + // Cache the tool output so that we aren't calling it over an over again. + Map toolOutputMap = new HashMap(); + Iterator conditionIterator = conditionsMap.keySet().iterator(); + + while (matchedBranch==null && conditionIterator.hasNext()) { + BranchCondition condition = conditionIterator.next(); + String conditionName = condition.getName(); + ToolOutput toolOutput = toolOutputMap.get(conditionName); + if ( toolOutput == null ) { + toolOutput = lamsCoreToolService.getOutputFromTool(conditionName, toolSession, learner.getUserId()); + if ( toolOutput == null ) { + log.warn("Condition "+condition+" refers to a tool output "+conditionName+" but tool doesn't return any tool output for that name. Skipping this condition."); + } else { + toolOutputMap.put(conditionName, toolOutput); + } + } + + if ( toolOutput != null && condition.isMet(toolOutput) ) { + matchedBranch = conditionsMap.get(condition); + } + } + } + + // If no conditions match, use the branch that is the "default" branch for this branching activity. + if ( matchedBranch != null ) { + if ( log.isDebugEnabled()) { + log.debug("Found branch "+matchedBranch.getActivityId()+":"+ matchedBranch.getTitle() + +" for branching activity "+branchingActivity.getActivityId()+":"+ branchingActivity.getTitle() + +" for learner "+learner.getUserId()+":"+learner.getLogin()); + } + return matchedBranch; + + } else if ( defaultBranch != null) { + if ( log.isDebugEnabled() ) { + log.debug("Using default branch "+defaultBranch.getActivityId()+":"+ defaultBranch.getTitle() + +" for branching activity "+branchingActivity.getActivityId()+":"+ branchingActivity.getTitle() + +" for learner "+learner.getUserId()+":"+learner.getLogin()); + } + // have to convert it to a real activity of the correct type, as it could be a cglib value + return (SequenceActivity) activityDAO.getActivityByActivityId(defaultBranch.getActivityId(), SequenceActivity.class); + } else { + if ( log.isDebugEnabled() ) { + log.debug("No branches match and no default branch exists. Uable to allocate learner to a branch for the branching activity" + +branchingActivity.getActivityId()+":"+ branchingActivity.getTitle() + +" for learner "+learner.getUserId()+":"+learner.getLogin()); + } + return null; + } + } + private SequenceActivity determineGroupBasedBranch(Lesson lesson, BranchingActivity branchingActivity, User learner) { SequenceActivity sequenceActivity = null; @@ -811,7 +898,7 @@ Group aGroup = null; Iterator groupIter = groups.iterator(); while (!isInGroup && groupIter.hasNext()) { - aGroup = (Group) groupIter.next(); + aGroup = groupIter.next(); isInGroup = aGroup.hasLearner(learner); } Index: lams_tool_chat/src/java/org/lamsfoundation/lams/tool/chat/service/ChatService.java =================================================================== diff -u -rb01b55c28cf872fabcd146845693907e541fa38d -r97612142f4697066beb66064e83ff31fef1712b9 --- lams_tool_chat/src/java/org/lamsfoundation/lams/tool/chat/service/ChatService.java (.../ChatService.java) (revision b01b55c28cf872fabcd146845693907e541fa38d) +++ lams_tool_chat/src/java/org/lamsfoundation/lams/tool/chat/service/ChatService.java (.../ChatService.java) (revision 97612142f4697066beb66064e83ff31fef1712b9) @@ -77,6 +77,7 @@ import org.lamsfoundation.lams.notebook.service.ICoreNotebookService; import org.lamsfoundation.lams.tool.ToolContentImport102Manager; import org.lamsfoundation.lams.tool.ToolContentManager; +import org.lamsfoundation.lams.tool.ToolOutput; import org.lamsfoundation.lams.tool.ToolOutputDefinition; import org.lamsfoundation.lams.tool.ToolSessionExportOutputData; import org.lamsfoundation.lams.tool.ToolSessionManager; @@ -246,6 +247,25 @@ // do we need to remove room on jabber server ? } + /** + * Get the tool output for the given tool output names. + * @see org.lamsfoundation.lams.tool.ToolSessionManager#getToolOutput(java.util.List, java.lang.Long, java.lang.Long) + */ + public SortedMap getToolOutput(List names, + Long toolSessionId, Long learnerId) { + return new TreeMap(); + } + + /** + * Get the tool output for the given tool output name. + * @see org.lamsfoundation.lams.tool.ToolSessionManager#getToolOutput(java.lang.String, java.lang.Long, java.lang.Long) + */ + public ToolOutput getToolOutput(String name, Long toolSessionId, + Long learnerId) { + return null; + } + + /* ************ Methods from ToolContentManager ************************* */ public void copyToolContent(Long fromContentId, Long toContentId) Index: lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/service/ForumOutputDefinitionFactory.java =================================================================== diff -u -rb01b55c28cf872fabcd146845693907e541fa38d -r97612142f4697066beb66064e83ff31fef1712b9 --- lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/service/ForumOutputDefinitionFactory.java (.../ForumOutputDefinitionFactory.java) (revision b01b55c28cf872fabcd146845693907e541fa38d) +++ lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/service/ForumOutputDefinitionFactory.java (.../ForumOutputDefinitionFactory.java) (revision 97612142f4697066beb66064e83ff31fef1712b9) @@ -39,7 +39,7 @@ public class ForumOutputDefinitionFactory extends OutputDefinitionFactory { /** The number of posts the learner has made in one forum activity. */ - protected final String OUTPUT_NAME_LEARNER_NUM_POSTS = "learner.number.of.posts"; + protected final static String OUTPUT_NAME_LEARNER_NUM_POSTS = "learner.number.of.posts"; /** * @see org.lamsfoundation.lams.tool.OutputDefinitionFactory#getToolOutputDefinitions(java.lang.Object) Index: lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/service/ForumService.java =================================================================== diff -u -rb01b55c28cf872fabcd146845693907e541fa38d -r97612142f4697066beb66064e83ff31fef1712b9 --- lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/service/ForumService.java (.../ForumService.java) (revision b01b55c28cf872fabcd146845693907e541fa38d) +++ lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/service/ForumService.java (.../ForumService.java) (revision 97612142f4697066beb66064e83ff31fef1712b9) @@ -63,6 +63,7 @@ import org.lamsfoundation.lams.notebook.service.ICoreNotebookService; import org.lamsfoundation.lams.tool.ToolContentImport102Manager; import org.lamsfoundation.lams.tool.ToolContentManager; +import org.lamsfoundation.lams.tool.ToolOutput; import org.lamsfoundation.lams.tool.ToolOutputDefinition; import org.lamsfoundation.lams.tool.ToolSessionExportOutputData; import org.lamsfoundation.lams.tool.ToolSessionManager; @@ -842,7 +843,38 @@ forumToolSessionDao.delete(toolSessionId); } - /* (non-Javadoc) + /** + * Get the tool output for the given tool output names. + * @see org.lamsfoundation.lams.tool.ToolSessionManager#getToolOutput(java.util.List, java.lang.Long, java.lang.Long) + */ + public SortedMap getToolOutput(List names, + Long toolSessionId, Long learnerId) { + + TreeMap map = new TreeMap(); + if ( names == null || names.contains(ForumOutputDefinitionFactory.OUTPUT_NAME_LEARNER_NUM_POSTS)) { + log.error("Forum getToolOutput(): Not implemented properly yet - just returning 0"); + ToolOutput output = new ToolOutput(ForumOutputDefinitionFactory.OUTPUT_NAME_LEARNER_NUM_POSTS, "", new Long(0)); + map.put(ForumOutputDefinitionFactory.OUTPUT_NAME_LEARNER_NUM_POSTS,output); + } + return map; + + } + + /** + * Get the tool output for the given tool output name. + * @see org.lamsfoundation.lams.tool.ToolSessionManager#getToolOutput(java.lang.String, java.lang.Long, java.lang.Long) + */ + public ToolOutput getToolOutput(String name, Long toolSessionId, + Long learnerId) { + if ( ForumOutputDefinitionFactory.OUTPUT_NAME_LEARNER_NUM_POSTS.equals(name) ) { + log.error("Forum getToolOutput(): Not implemented properly yet - just returning 0"); + return new ToolOutput(ForumOutputDefinitionFactory.OUTPUT_NAME_LEARNER_NUM_POSTS, "", new Long(0)); + } + + return null; + } + + /* (non-Javadoc) * @see org.lamsfoundation.lams.tool.sbmt.service.ISubmitFilesService#getDefaultContent(java.lang.Long) */ public Forum getDefaultContent(Long contentID) { Index: lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/service/MCOutputDefinitionFactory.java =================================================================== diff -u -rb01b55c28cf872fabcd146845693907e541fa38d -r97612142f4697066beb66064e83ff31fef1712b9 --- lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/service/MCOutputDefinitionFactory.java (.../MCOutputDefinitionFactory.java) (revision b01b55c28cf872fabcd146845693907e541fa38d) +++ lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/service/MCOutputDefinitionFactory.java (.../MCOutputDefinitionFactory.java) (revision 97612142f4697066beb66064e83ff31fef1712b9) @@ -32,8 +32,8 @@ public class MCOutputDefinitionFactory extends OutputDefinitionFactory { - protected final String OUTPUT_NAME_LEARNER_MARK = "learner.mark"; - protected final String OUTPUT_NAME_LEARNER_ALL_CORRECT = "learner.all.correct"; + protected static final String OUTPUT_NAME_LEARNER_MARK = "learner.mark"; + protected static final String OUTPUT_NAME_LEARNER_ALL_CORRECT = "learner.all.correct"; /** * @see org.lamsfoundation.lams.tool.OutputDefinitionFactory#getToolOutputDefinitions(java.lang.Object) Index: lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/service/McServicePOJO.java =================================================================== diff -u -rb01b55c28cf872fabcd146845693907e541fa38d -r97612142f4697066beb66064e83ff31fef1712b9 --- lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/service/McServicePOJO.java (.../McServicePOJO.java) (revision b01b55c28cf872fabcd146845693907e541fa38d) +++ lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/service/McServicePOJO.java (.../McServicePOJO.java) (revision 97612142f4697066beb66064e83ff31fef1712b9) @@ -58,6 +58,7 @@ import org.lamsfoundation.lams.tool.IToolVO; import org.lamsfoundation.lams.tool.ToolContentImport102Manager; import org.lamsfoundation.lams.tool.ToolContentManager; +import org.lamsfoundation.lams.tool.ToolOutput; import org.lamsfoundation.lams.tool.ToolOutputDefinition; import org.lamsfoundation.lams.tool.ToolSessionExportOutputData; import org.lamsfoundation.lams.tool.ToolSessionManager; @@ -1815,6 +1816,40 @@ } + /** + * Get the tool output for the given tool output names. + * @see org.lamsfoundation.lams.tool.ToolSessionManager#getToolOutput(java.util.List, java.lang.Long, java.lang.Long) + */ + public SortedMap getToolOutput(List names, + Long toolSessionId, Long learnerId) { + + TreeMap output = new TreeMap(); + if ( names == null || names.contains(MCOutputDefinitionFactory.OUTPUT_NAME_LEARNER_MARK) ) { + McQueUsr queUser = getMcUserBySession(learnerId, toolSessionId); + Long mark = queUser != null ? queUser.getLastAttemptTotalMark() : new Long(0); + ToolOutput toolOutput = new ToolOutput(MCOutputDefinitionFactory.OUTPUT_NAME_LEARNER_MARK, + MCOutputDefinitionFactory.OUTPUT_NAME_LEARNER_MARK, mark); + output.put(MCOutputDefinitionFactory.OUTPUT_NAME_LEARNER_MARK, toolOutput); + } + return output; + } + + /** + * Get the tool output for the given tool output name. + * @see org.lamsfoundation.lams.tool.ToolSessionManager#getToolOutput(java.lang.String, java.lang.Long, java.lang.Long) + */ + public ToolOutput getToolOutput(String name, Long toolSessionId, + Long learnerId) { + if ( name != null && name.equals(MCOutputDefinitionFactory.OUTPUT_NAME_LEARNER_MARK) ) { + McQueUsr queUser = getMcUserBySession(learnerId, toolSessionId); + Long mark = queUser != null ? queUser.getLastAttemptTotalMark() : new Long(0); + return new ToolOutput(MCOutputDefinitionFactory.OUTPUT_NAME_LEARNER_MARK, + MCOutputDefinitionFactory.OUTPUT_NAME_LEARNER_MARK, mark); + } + return null; + } + + public IToolVO getToolBySignature(String toolSignature) throws McApplicationException { logger.debug("attempt retrieving tool with signature : " + toolSignature); Index: lams_tool_laqa/src/java/org/lamsfoundation/lams/tool/qa/service/QaServicePOJO.java =================================================================== diff -u -rb01b55c28cf872fabcd146845693907e541fa38d -r97612142f4697066beb66064e83ff31fef1712b9 --- lams_tool_laqa/src/java/org/lamsfoundation/lams/tool/qa/service/QaServicePOJO.java (.../QaServicePOJO.java) (revision b01b55c28cf872fabcd146845693907e541fa38d) +++ lams_tool_laqa/src/java/org/lamsfoundation/lams/tool/qa/service/QaServicePOJO.java (.../QaServicePOJO.java) (revision 97612142f4697066beb66064e83ff31fef1712b9) @@ -57,6 +57,7 @@ import org.lamsfoundation.lams.tool.IToolVO; import org.lamsfoundation.lams.tool.ToolContentImport102Manager; import org.lamsfoundation.lams.tool.ToolContentManager; +import org.lamsfoundation.lams.tool.ToolOutput; import org.lamsfoundation.lams.tool.ToolOutputDefinition; import org.lamsfoundation.lams.tool.ToolSessionExportOutputData; import org.lamsfoundation.lams.tool.ToolSessionManager; @@ -1722,6 +1723,24 @@ throw new ToolException("not yet implemented"); } + /** + * Get the tool output for the given tool output names. + * @see org.lamsfoundation.lams.tool.ToolSessionManager#getToolOutput(java.util.List, java.lang.Long, java.lang.Long) + */ + public SortedMap getToolOutput(List names, + Long toolSessionId, Long learnerId) { + return new TreeMap(); + } + + /** + * Get the tool output for the given tool output name. + * @see org.lamsfoundation.lams.tool.ToolSessionManager#getToolOutput(java.lang.String, java.lang.Long, java.lang.Long) + */ + public ToolOutput getToolOutput(String name, Long toolSessionId, + Long learnerId) { + return null; + } + public IToolVO getToolBySignature(String toolSignature) throws QaApplicationException { logger.debug("attempt retrieving tool with signature : " + toolSignature); Index: lams_tool_larsrc/src/java/org/lamsfoundation/lams/tool/rsrc/service/ResourceServiceImpl.java =================================================================== diff -u -rb01b55c28cf872fabcd146845693907e541fa38d -r97612142f4697066beb66064e83ff31fef1712b9 --- lams_tool_larsrc/src/java/org/lamsfoundation/lams/tool/rsrc/service/ResourceServiceImpl.java (.../ResourceServiceImpl.java) (revision b01b55c28cf872fabcd146845693907e541fa38d) +++ lams_tool_larsrc/src/java/org/lamsfoundation/lams/tool/rsrc/service/ResourceServiceImpl.java (.../ResourceServiceImpl.java) (revision 97612142f4697066beb66064e83ff31fef1712b9) @@ -67,6 +67,7 @@ import org.lamsfoundation.lams.notebook.service.ICoreNotebookService; import org.lamsfoundation.lams.tool.ToolContentImport102Manager; import org.lamsfoundation.lams.tool.ToolContentManager; +import org.lamsfoundation.lams.tool.ToolOutput; import org.lamsfoundation.lams.tool.ToolOutputDefinition; import org.lamsfoundation.lams.tool.ToolSessionExportOutputData; import org.lamsfoundation.lams.tool.ToolSessionManager; @@ -1018,7 +1019,25 @@ public void removeToolSession(Long toolSessionId) throws DataMissingException, ToolException { resourceSessionDao.deleteBySessionId(toolSessionId); } + + /** + * Get the tool output for the given tool output names. + * @see org.lamsfoundation.lams.tool.ToolSessionManager#getToolOutput(java.util.List, java.lang.Long, java.lang.Long) + */ + public SortedMap getToolOutput(List names, + Long toolSessionId, Long learnerId) { + return new TreeMap(); + } + /** + * Get the tool output for the given tool output name. + * @see org.lamsfoundation.lams.tool.ToolSessionManager#getToolOutput(java.lang.String, java.lang.Long, java.lang.Long) + */ + public ToolOutput getToolOutput(String name, Long toolSessionId, + Long learnerId) { + return null; + } + /* ===============Methods implemented from ToolContentImport102Manager =============== */ Index: lams_tool_nb/src/java/org/lamsfoundation/lams/tool/noticeboard/service/NoticeboardServicePOJO.java =================================================================== diff -u -rb01b55c28cf872fabcd146845693907e541fa38d -r97612142f4697066beb66064e83ff31fef1712b9 --- lams_tool_nb/src/java/org/lamsfoundation/lams/tool/noticeboard/service/NoticeboardServicePOJO.java (.../NoticeboardServicePOJO.java) (revision b01b55c28cf872fabcd146845693907e541fa38d) +++ lams_tool_nb/src/java/org/lamsfoundation/lams/tool/noticeboard/service/NoticeboardServicePOJO.java (.../NoticeboardServicePOJO.java) (revision 97612142f4697066beb66064e83ff31fef1712b9) @@ -46,6 +46,7 @@ import org.lamsfoundation.lams.notebook.service.ICoreNotebookService; import org.lamsfoundation.lams.tool.ToolContentImport102Manager; import org.lamsfoundation.lams.tool.ToolContentManager; +import org.lamsfoundation.lams.tool.ToolOutput; import org.lamsfoundation.lams.tool.ToolOutputDefinition; import org.lamsfoundation.lams.tool.ToolSessionExportOutputData; import org.lamsfoundation.lams.tool.ToolSessionManager; @@ -1063,6 +1064,24 @@ removeSession(session); } + /** + * Get the tool output for the given tool output names. + * @see org.lamsfoundation.lams.tool.ToolSessionManager#getToolOutput(java.util.List, java.lang.Long, java.lang.Long) + */ + public SortedMap getToolOutput(List names, + Long toolSessionId, Long learnerId) { + return new TreeMap(); + } + + /** + * Get the tool output for the given tool output name. + * @see org.lamsfoundation.lams.tool.ToolSessionManager#getToolOutput(java.lang.String, java.lang.Long, java.lang.Long) + */ + public ToolOutput getToolOutput(String name, Long toolSessionId, + Long learnerId) { + return null; + } + /* ===============Methods implemented from ToolContentImport102Manager =============== */ Index: lams_tool_notebook/src/java/org/lamsfoundation/lams/tool/notebook/service/NotebookService.java =================================================================== diff -u -rb01b55c28cf872fabcd146845693907e541fa38d -r97612142f4697066beb66064e83ff31fef1712b9 --- lams_tool_notebook/src/java/org/lamsfoundation/lams/tool/notebook/service/NotebookService.java (.../NotebookService.java) (revision b01b55c28cf872fabcd146845693907e541fa38d) +++ lams_tool_notebook/src/java/org/lamsfoundation/lams/tool/notebook/service/NotebookService.java (.../NotebookService.java) (revision 97612142f4697066beb66064e83ff31fef1712b9) @@ -56,6 +56,7 @@ import org.lamsfoundation.lams.notebook.service.ICoreNotebookService; import org.lamsfoundation.lams.tool.ToolContentImport102Manager; import org.lamsfoundation.lams.tool.ToolContentManager; +import org.lamsfoundation.lams.tool.ToolOutput; import org.lamsfoundation.lams.tool.ToolOutputDefinition; import org.lamsfoundation.lams.tool.ToolSessionExportOutputData; import org.lamsfoundation.lams.tool.ToolSessionManager; @@ -160,6 +161,24 @@ // TODO check if cascade worked } + /** + * Get the tool output for the given tool output names. + * @see org.lamsfoundation.lams.tool.ToolSessionManager#getToolOutput(java.util.List, java.lang.Long, java.lang.Long) + */ + public SortedMap getToolOutput(List names, + Long toolSessionId, Long learnerId) { + return new TreeMap(); + } + + /** + * Get the tool output for the given tool output name. + * @see org.lamsfoundation.lams.tool.ToolSessionManager#getToolOutput(java.lang.String, java.lang.Long, java.lang.Long) + */ + public ToolOutput getToolOutput(String name, Long toolSessionId, + Long learnerId) { + return null; + } + /* ************ Methods from ToolContentManager ************************* */ public void copyToolContent(Long fromContentId, Long toContentId) Index: lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/service/SubmitFilesService.java =================================================================== diff -u -rb01b55c28cf872fabcd146845693907e541fa38d -r97612142f4697066beb66064e83ff31fef1712b9 --- lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/service/SubmitFilesService.java (.../SubmitFilesService.java) (revision b01b55c28cf872fabcd146845693907e541fa38d) +++ lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/service/SubmitFilesService.java (.../SubmitFilesService.java) (revision 97612142f4697066beb66064e83ff31fef1712b9) @@ -65,6 +65,7 @@ import org.lamsfoundation.lams.notebook.service.ICoreNotebookService; import org.lamsfoundation.lams.tool.ToolContentImport102Manager; import org.lamsfoundation.lams.tool.ToolContentManager; +import org.lamsfoundation.lams.tool.ToolOutput; import org.lamsfoundation.lams.tool.ToolOutputDefinition; import org.lamsfoundation.lams.tool.ToolSessionExportOutputData; import org.lamsfoundation.lams.tool.ToolSessionManager; @@ -546,6 +547,24 @@ submitFilesSessionDAO.delete(session); } + /** + * Get the tool output for the given tool output names. + * @see org.lamsfoundation.lams.tool.ToolSessionManager#getToolOutput(java.util.List, java.lang.Long, java.lang.Long) + */ + public SortedMap getToolOutput(List names, + Long toolSessionId, Long learnerId) { + return new TreeMap(); + } + + /** + * Get the tool output for the given tool output name. + * @see org.lamsfoundation.lams.tool.ToolSessionManager#getToolOutput(java.lang.String, java.lang.Long, java.lang.Long) + */ + public ToolOutput getToolOutput(String name, Long toolSessionId, + Long learnerId) { + return null; + } + /** * (non-Javadoc) * Index: lams_tool_scribe/src/java/org/lamsfoundation/lams/tool/scribe/service/ScribeService.java =================================================================== diff -u -rb01b55c28cf872fabcd146845693907e541fa38d -r97612142f4697066beb66064e83ff31fef1712b9 --- lams_tool_scribe/src/java/org/lamsfoundation/lams/tool/scribe/service/ScribeService.java (.../ScribeService.java) (revision b01b55c28cf872fabcd146845693907e541fa38d) +++ lams_tool_scribe/src/java/org/lamsfoundation/lams/tool/scribe/service/ScribeService.java (.../ScribeService.java) (revision 97612142f4697066beb66064e83ff31fef1712b9) @@ -58,6 +58,7 @@ import org.lamsfoundation.lams.notebook.service.ICoreNotebookService; import org.lamsfoundation.lams.tool.ToolContentImport102Manager; import org.lamsfoundation.lams.tool.ToolContentManager; +import org.lamsfoundation.lams.tool.ToolOutput; import org.lamsfoundation.lams.tool.ToolOutputDefinition; import org.lamsfoundation.lams.tool.ToolSessionExportOutputData; import org.lamsfoundation.lams.tool.ToolSessionManager; @@ -170,6 +171,24 @@ //TODO check if cascade worked } + /** + * Get the tool output for the given tool output names. + * @see org.lamsfoundation.lams.tool.ToolSessionManager#getToolOutput(java.util.List, java.lang.Long, java.lang.Long) + */ + public SortedMap getToolOutput(List names, + Long toolSessionId, Long learnerId) { + return new TreeMap(); + } + + /** + * Get the tool output for the given tool output name. + * @see org.lamsfoundation.lams.tool.ToolSessionManager#getToolOutput(java.lang.String, java.lang.Long, java.lang.Long) + */ + public ToolOutput getToolOutput(String name, Long toolSessionId, + Long learnerId) { + return null; + } + /* ************ Methods from ToolContentManager ************************* */ public void copyToolContent(Long fromContentId, Long toContentId) Index: lams_tool_survey/src/java/org/lamsfoundation/lams/tool/survey/service/SurveyServiceImpl.java =================================================================== diff -u -rb01b55c28cf872fabcd146845693907e541fa38d -r97612142f4697066beb66064e83ff31fef1712b9 --- lams_tool_survey/src/java/org/lamsfoundation/lams/tool/survey/service/SurveyServiceImpl.java (.../SurveyServiceImpl.java) (revision b01b55c28cf872fabcd146845693907e541fa38d) +++ lams_tool_survey/src/java/org/lamsfoundation/lams/tool/survey/service/SurveyServiceImpl.java (.../SurveyServiceImpl.java) (revision 97612142f4697066beb66064e83ff31fef1712b9) @@ -61,6 +61,7 @@ import org.lamsfoundation.lams.notebook.service.ICoreNotebookService; import org.lamsfoundation.lams.tool.ToolContentImport102Manager; import org.lamsfoundation.lams.tool.ToolContentManager; +import org.lamsfoundation.lams.tool.ToolOutput; import org.lamsfoundation.lams.tool.ToolOutputDefinition; import org.lamsfoundation.lams.tool.ToolSessionExportOutputData; import org.lamsfoundation.lams.tool.ToolSessionManager; @@ -811,6 +812,24 @@ surveySessionDao.deleteBySessionId(toolSessionId); } + /** + * Get the tool output for the given tool output names. + * @see org.lamsfoundation.lams.tool.ToolSessionManager#getToolOutput(java.util.List, java.lang.Long, java.lang.Long) + */ + public SortedMap getToolOutput(List names, + Long toolSessionId, Long learnerId) { + return new TreeMap(); + } + + /** + * Get the tool output for the given tool output name. + * @see org.lamsfoundation.lams.tool.ToolSessionManager#getToolOutput(java.lang.String, java.lang.Long, java.lang.Long) + */ + public ToolOutput getToolOutput(String name, Long toolSessionId, + Long learnerId) { + return null; + } + /* ===============Methods implemented from ToolContentImport102Manager =============== */ /* Sample content for import: Index: lams_tool_vote/src/java/org/lamsfoundation/lams/tool/vote/service/VoteServicePOJO.java =================================================================== diff -u -rb01b55c28cf872fabcd146845693907e541fa38d -r97612142f4697066beb66064e83ff31fef1712b9 --- lams_tool_vote/src/java/org/lamsfoundation/lams/tool/vote/service/VoteServicePOJO.java (.../VoteServicePOJO.java) (revision b01b55c28cf872fabcd146845693907e541fa38d) +++ lams_tool_vote/src/java/org/lamsfoundation/lams/tool/vote/service/VoteServicePOJO.java (.../VoteServicePOJO.java) (revision 97612142f4697066beb66064e83ff31fef1712b9) @@ -58,6 +58,7 @@ import org.lamsfoundation.lams.tool.IToolVO; import org.lamsfoundation.lams.tool.ToolContentImport102Manager; import org.lamsfoundation.lams.tool.ToolContentManager; +import org.lamsfoundation.lams.tool.ToolOutput; import org.lamsfoundation.lams.tool.ToolOutputDefinition; import org.lamsfoundation.lams.tool.ToolSessionExportOutputData; import org.lamsfoundation.lams.tool.ToolSessionManager; @@ -2006,6 +2007,24 @@ } + /** + * Get the tool output for the given tool output names. + * @see org.lamsfoundation.lams.tool.ToolSessionManager#getToolOutput(java.util.List, java.lang.Long, java.lang.Long) + */ + public SortedMap getToolOutput(List names, + Long toolSessionId, Long learnerId) { + return new TreeMap(); + } + + /** + * Get the tool output for the given tool output name. + * @see org.lamsfoundation.lams.tool.ToolSessionManager#getToolOutput(java.lang.String, java.lang.Long, java.lang.Long) + */ + public ToolOutput getToolOutput(String name, Long toolSessionId, + Long learnerId) { + return null; + } + public IToolVO getToolBySignature(String toolSignature) throws VoteApplicationException { logger.debug("attempt retrieving tool with signature : " + toolSignature);