Index: lams_build/lib/lams/lams.jar =================================================================== diff -u -r05db875c7974d705f89231416ff6dfe91a5e70f1 -rd3b9b5d94b98da06dcce673877406d8e580a114e Binary files differ Index: lams_central/src/java/org/lamsfoundation/lams/authoring/ObjectExtractor.java =================================================================== diff -u -rfbde508c149cfd2d5feace69820dae423afe3fbc -rd3b9b5d94b98da06dcce673877406d8e580a114e --- lams_central/src/java/org/lamsfoundation/lams/authoring/ObjectExtractor.java (.../ObjectExtractor.java) (revision fbde508c149cfd2d5feace69820dae423afe3fbc) +++ lams_central/src/java/org/lamsfoundation/lams/authoring/ObjectExtractor.java (.../ObjectExtractor.java) (revision d3b9b5d94b98da06dcce673877406d8e580a114e) @@ -45,6 +45,7 @@ import org.lamsfoundation.lams.learningdesign.CompetenceMapping; import org.lamsfoundation.lams.learningdesign.ComplexActivity; import org.lamsfoundation.lams.learningdesign.ConditionGateActivity; +import org.lamsfoundation.lams.learningdesign.FloatingActivity; import org.lamsfoundation.lams.learningdesign.GateActivity; import org.lamsfoundation.lams.learningdesign.Group; import org.lamsfoundation.lams.learningdesign.Grouping; @@ -1332,11 +1333,23 @@ buildParallelActivity((ParallelActivity) activity, activityDetails); } else if (activity instanceof BranchingActivity) { buildBranchingActivity((BranchingActivity) activity, activityDetails); - } else { + } else if (activity instanceof FloatingActivity) { + buildFloatingActivity((FloatingActivity) activity, activityDetails); + } else { buildSequenceActivity((SequenceActivity) activity, activityDetails); } } + private void buildFloatingActivity(FloatingActivity floatingActivity, Hashtable activityDetails) + throws WDDXProcessorConversionException, ObjectExtractorException { + if (keyExists(activityDetails, WDDXTAGS.MAX_ACTIVITIES)) { + floatingActivity.setMaxNumberOfActivities(WDDXProcessor.convertToInteger(activityDetails, WDDXTAGS.MAX_ACTIVITIES)); + } + + SystemTool systemTool = getSystemTool(SystemTool.FLOATING_ACTIVITIES); + floatingActivity.setSystemTool(systemTool); + } + private void buildBranchingActivity(BranchingActivity branchingActivity, Hashtable activityDetails) throws WDDXProcessorConversionException, ObjectExtractorException { if (branchingActivity.isChosenBranchingActivity()) { Index: lams_common/conf/hibernate/mappings/org/lamsfoundation/lams/learningdesign/Activity.hbm.xml =================================================================== diff -u -r8386a3fecd9c7baf6ed69d499016dedd8a83eac6 -rd3b9b5d94b98da06dcce673877406d8e580a114e --- lams_common/conf/hibernate/mappings/org/lamsfoundation/lams/learningdesign/Activity.hbm.xml (.../Activity.hbm.xml) (revision 8386a3fecd9c7baf6ed69d499016dedd8a83eac6) +++ lams_common/conf/hibernate/mappings/org/lamsfoundation/lams/learningdesign/Activity.hbm.xml (.../Activity.hbm.xml) (revision d3b9b5d94b98da06dcce673877406d8e580a114e) @@ -356,6 +356,20 @@ @hibernate.class + + + @hibernate.class + + + @hibernate.property column="max_number_of_options" length="5" + true + + + + + + + Index: lams_common/db/sql/insert_types_data.sql =================================================================== diff -u -r05db875c7974d705f89231416ff6dfe91a5e70f1 -rd3b9b5d94b98da06dcce673877406d8e580a114e --- lams_common/db/sql/insert_types_data.sql (.../insert_types_data.sql) (revision 05db875c7974d705f89231416ff6dfe91a5e70f1) +++ lams_common/db/sql/insert_types_data.sql (.../insert_types_data.sql) (revision d3b9b5d94b98da06dcce673877406d8e580a114e) @@ -82,6 +82,7 @@ INSERT INTO lams_learning_activity_type VALUES (12, 'BRANCHING_TOOL'); INSERT INTO lams_learning_activity_type VALUES (13, 'OPTIONS_WITH_SEQUENCES'); INSERT INTO lams_learning_activity_type VALUES (14, 'GATE_CONDITION'); +INSERT INTO lams_learning_activity_type VALUES (15, 'FLOATING'); INSERT INTO lams_gate_activity_level VALUES (1, 'LEARNER'); INSERT INTO lams_gate_activity_level VALUES (2, 'GROUP'); @@ -225,6 +226,14 @@ 'monitoring/gateExportPortfolio?mode=teacher', 'monitoring/gate.do?method=viewGate', 'monitoring/gate.do?method=viewGate', now() ); +INSERT INTO lams_system_tool (system_tool_id, learning_activity_type_id, tool_display_name, description, + learner_url, learner_preview_url, learner_progress_url, export_pfolio_learner_url, + export_pfolio_class_url, monitor_url, contribute_url, create_date_time) +VALUES (11, 15, 'Floating Activities', 'A collection of floating activities', + NULL, NULL, null, 'monitoring/floatingExportPortfolio?mode=learner', + 'monitoring/floatingExportPortfolio?mode=teacher', 'monitoring/floating.do?method=viewFloating', + 'monitoring/floating.do?method=viewFloating', now() ); + -- Supported Locales INSERT INTO lams_supported_locale (locale_id, language_iso_code, country_iso_code, description, direction, fckeditor_code) VALUES (1, 'en', 'AU', 'English (Australia)', 'LTR', 'en-au'); Index: lams_common/src/java/org/lamsfoundation/lams/learningdesign/Activity.java =================================================================== diff -u -r8386a3fecd9c7baf6ed69d499016dedd8a83eac6 -rd3b9b5d94b98da06dcce673877406d8e580a114e --- lams_common/src/java/org/lamsfoundation/lams/learningdesign/Activity.java (.../Activity.java) (revision 8386a3fecd9c7baf6ed69d499016dedd8a83eac6) +++ lams_common/src/java/org/lamsfoundation/lams/learningdesign/Activity.java (.../Activity.java) (revision d3b9b5d94b98da06dcce673877406d8e580a114e) @@ -78,6 +78,7 @@ public static final int TOOL_BRANCHING_ACTIVITY_TYPE = 12; public static final int OPTIONS_WITH_SEQUENCES_TYPE = 13; public static final int CONDITION_GATE_ACTIVITY_TYPE = 14; + public static final int FLOATING_ACTIVITY_TYPE = 15; /** *************************************************************** */ /******************************************************************************************************************* @@ -367,6 +368,10 @@ activity = new OptionsWithSequencesActivity(); activity.setActivityCategoryID(Activity.CATEGORY_SYSTEM); break; + case FLOATING_ACTIVITY_TYPE: + activity = new FloatingActivity(); + activity.setActivityCategoryID(Activity.CATEGORY_SYSTEM); + break; default: activity = new GroupingActivity(); activity.setActivityCategoryID(Activity.CATEGORY_SYSTEM); @@ -993,6 +998,15 @@ return getActivityTypeId().intValue() == Activity.TOOL_BRANCHING_ACTIVITY_TYPE; } + /** + * Check up whether an activity is floating activity. + * + * @return is this activity a floating activity + */ + public boolean isFloatingActivity() { + return getActivityTypeId().intValue() == Activity.FLOATING_ACTIVITY_TYPE; + } + public boolean isActivityReadOnly() { return readOnly.equals(Boolean.TRUE); } Index: lams_common/src/java/org/lamsfoundation/lams/learningdesign/FloatingActivity.java =================================================================== diff -u --- lams_common/src/java/org/lamsfoundation/lams/learningdesign/FloatingActivity.java (revision 0) +++ lams_common/src/java/org/lamsfoundation/lams/learningdesign/FloatingActivity.java (revision d3b9b5d94b98da06dcce673877406d8e580a114e) @@ -0,0 +1,191 @@ +/**************************************************************** + * Copyright (C) 2005 LAMS Foundation (http://lamsfoundation.org) + * ============================================================= + * License Information: http://lamsfoundation.org/licensing/lams/2.0/ + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2.0 + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 + * USA + * + * http://www.gnu.org/licenses/gpl.txt + * **************************************************************** + */ +/* $$Id$$ */ +package org.lamsfoundation.lams.learningdesign; + +import java.io.Serializable; +import java.util.Date; +import java.util.Set; + +import org.apache.commons.lang.builder.ToStringBuilder; +import org.lamsfoundation.lams.learningdesign.strategy.FloatingActivityStrategy; +import org.lamsfoundation.lams.tool.SystemTool; + + +/** + * @author Mitchell Seaton + * @version 2.3 + * + * @hibernate.class +*/ +public class FloatingActivity extends ComplexActivity implements Serializable { + + /** preset value for maximum number of floating activities in a design */ + public static final int MAX_NO_OF_ACTIVITIES = 6; + + /** nullable persistent field */ + private Integer maxNumberOfActivities; + private SystemTool systemTool; + + /** full constructor */ + public FloatingActivity(Long activityId, + Integer id, + String description, + String title, + Integer xcoord, + Integer ycoord, + Integer orderId, + Boolean defineLater, + java.util.Date createDateTime, + LearningLibrary learningLibrary, + Activity parentActivity, + Activity libraryActivity, + Integer parentUIID, + LearningDesign learningDesign, + Grouping grouping, + Integer activityTypeId, + Transition transitionTo, + Transition transitionFrom, + String languageFile, + Boolean stopAfterActivity, + Set inputActivities, + Set activities, + Activity defaultActivity, + Integer maxNumberOfActivities, + SystemTool sysTool, + Set branchActivityEntries) { + super(activityId, + id, + description, + title, + xcoord, + ycoord, + orderId, + defineLater, + createDateTime, + learningLibrary, + parentActivity, + libraryActivity, + parentUIID, + learningDesign, + grouping, + activityTypeId, + transitionTo, + transitionFrom, + languageFile, + stopAfterActivity, + inputActivities, + activities, + defaultActivity, + branchActivityEntries); + this.maxNumberOfActivities = maxNumberOfActivities; + this.systemTool = sysTool; + super.activityStrategy = new FloatingActivityStrategy(this); + } + + /** default constructor */ + public FloatingActivity() { + super.activityStrategy = new FloatingActivityStrategy(this); + } + + /** minimal constructor */ + public FloatingActivity(Long activityId, + Boolean defineLater, + java.util.Date createDateTime, + org.lamsfoundation.lams.learningdesign.LearningLibrary learningLibrary, + org.lamsfoundation.lams.learningdesign.Activity parentActivity, + org.lamsfoundation.lams.learningdesign.LearningDesign learningDesign, + org.lamsfoundation.lams.learningdesign.Grouping grouping, + Integer activityTypeId, + Transition transitionTo, + Transition transitionFrom, + Set activities) { + super(activityId, + defineLater, + createDateTime, + learningLibrary, + parentActivity, + learningDesign, + grouping, + activityTypeId, + transitionTo, + transitionFrom, + activities); + super.activityStrategy = new FloatingActivityStrategy(this); + } + public Activity createCopy(int uiidOffset){ + FloatingActivity newFloatingActivity = new FloatingActivity(); + copyToNewComplexActivity(newFloatingActivity, uiidOffset); + + /** OptionsActivity Specific Attributes */ + newFloatingActivity.setMaxNumberOfActivities(this.getMaxNumberOfActivities()); + + return newFloatingActivity; + } + + /** + * @hibernate.property column="max_number_of_options" length="5" + */ + public Integer getMaxNumberOfActivities() { + return this.maxNumberOfActivities; + } + + /** + * Get the maximum number of options, guaranteed not to return null. If the + * value is null in the database, returns the number of activities + * in this optional activity. + */ + public Integer getMaxNumberOfActivitiesNotNull() { + return maxNumberOfActivities!=null ? maxNumberOfActivities : getActivities().size(); + } + + public void setMaxNumberOfActivities(Integer maxNumberOfActivities) { + this.maxNumberOfActivities = maxNumberOfActivities; + } + + /** + * @hibernate.many-to-one lazy="false" + * @hibernate.column name="system_tool_id" + */ + public SystemTool getSystemTool() { + return systemTool; + } + + public void setSystemTool(SystemTool systemTool) { + this.systemTool = systemTool; + } + + public String toString() { + return new ToStringBuilder(this) + .append("activityId", getActivityId()) + .toString(); + } + + /** + * @see org.lamsfoundation.lams.util.Nullable#isNull() + */ + public boolean isNull() + { + return false; + } +} Index: lams_common/src/java/org/lamsfoundation/lams/learningdesign/dao/hibernate/ActivityDAO.java =================================================================== diff -u -r209087915bc219f430c282ad00e5d1e6462f9b5f -rd3b9b5d94b98da06dcce673877406d8e580a114e --- lams_common/src/java/org/lamsfoundation/lams/learningdesign/dao/hibernate/ActivityDAO.java (.../ActivityDAO.java) (revision 209087915bc219f430c282ad00e5d1e6462f9b5f) +++ lams_common/src/java/org/lamsfoundation/lams/learningdesign/dao/hibernate/ActivityDAO.java (.../ActivityDAO.java) (revision d3b9b5d94b98da06dcce673877406d8e580a114e) @@ -30,6 +30,7 @@ import org.lamsfoundation.lams.learningdesign.Activity; import org.lamsfoundation.lams.learningdesign.ChosenBranchingActivity; import org.lamsfoundation.lams.learningdesign.ConditionGateActivity; +import org.lamsfoundation.lams.learningdesign.FloatingActivity; import org.lamsfoundation.lams.learningdesign.GroupBranchingActivity; import org.lamsfoundation.lams.learningdesign.GroupingActivity; import org.lamsfoundation.lams.learningdesign.LearningDesign; @@ -110,6 +111,8 @@ return getActivityByActivityId(activityId, ToolBranchingActivity.class); case Activity.OPTIONS_WITH_SEQUENCES_TYPE: return getActivityByActivityId(activityId, OptionsWithSequencesActivity.class); + case Activity.FLOATING_ACTIVITY_TYPE: + return getActivityByActivityId(activityId, FloatingActivity.class); default: break; } Index: lams_common/src/java/org/lamsfoundation/lams/learningdesign/dto/AuthoringActivityDTO.java =================================================================== diff -u -r8386a3fecd9c7baf6ed69d499016dedd8a83eac6 -rd3b9b5d94b98da06dcce673877406d8e580a114e --- lams_common/src/java/org/lamsfoundation/lams/learningdesign/dto/AuthoringActivityDTO.java (.../AuthoringActivityDTO.java) (revision 8386a3fecd9c7baf6ed69d499016dedd8a83eac6) +++ lams_common/src/java/org/lamsfoundation/lams/learningdesign/dto/AuthoringActivityDTO.java (.../AuthoringActivityDTO.java) (revision d3b9b5d94b98da06dcce673877406d8e580a114e) @@ -34,6 +34,7 @@ import org.lamsfoundation.lams.learningdesign.CompetenceMapping; import org.lamsfoundation.lams.learningdesign.ComplexActivity; import org.lamsfoundation.lams.learningdesign.ConditionGateActivity; +import org.lamsfoundation.lams.learningdesign.FloatingActivity; import org.lamsfoundation.lams.learningdesign.GateActivity; import org.lamsfoundation.lams.learningdesign.Grouping; import org.lamsfoundation.lams.learningdesign.GroupingActivity; @@ -132,6 +133,9 @@ /** Maximum number of activities to be attempted */ private Integer maxOptions; + /** Maximum number of floating activities allow */ + private Integer maxActivities; + /** Minimum number of activities to be attempted */ private Integer minOptions; @@ -333,7 +337,9 @@ addParallelActivityAttributes((ParallelActivity) activity); } else if (activity.isBranchingActivity()) { addBranchingActivityAttributes((BranchingActivity) activity); - } else { + } else if (activity.isFloatingActivity()) { + addFloatingActivityAttributes((FloatingActivity) activity); + } else { addSequenceActivityAttributes((SequenceActivity) activity, branchMappings); } @@ -364,7 +370,11 @@ endXCoord = activity.getEndXcoord(); endYCoord = activity.getEndYcoord(); } - + + private void addFloatingActivityAttributes(FloatingActivity floatingActivity) { + maxActivities = floatingActivity.getMaxNumberOfActivities(); + } + private void addSequenceActivityAttributes(SequenceActivity activity, ArrayList branchMappings) { @@ -609,6 +619,13 @@ } /** + * @return Returns the maxActivities. + */ + public Integer getMaxActivities() { + return maxActivities; + } + + /** * @return Returns the maxOptions. */ public Integer getMaxOptions() { @@ -1025,6 +1042,16 @@ } /** + * @param maxActivities + * The maxActivities to set. + */ + public void setMaxActivities(Integer maxActivities) { + if (!maxActivities.equals(WDDXTAGS.NUMERIC_NULL_VALUE_INTEGER)) { + this.maxActivities = maxActivities; + } + } + + /** * @param maxOptions * The maxOptions to set. */ Index: lams_common/src/java/org/lamsfoundation/lams/learningdesign/strategy/FloatingActivityStrategy.java =================================================================== diff -u --- lams_common/src/java/org/lamsfoundation/lams/learningdesign/strategy/FloatingActivityStrategy.java (revision 0) +++ lams_common/src/java/org/lamsfoundation/lams/learningdesign/strategy/FloatingActivityStrategy.java (revision d3b9b5d94b98da06dcce673877406d8e580a114e) @@ -0,0 +1,73 @@ +/**************************************************************** + * Copyright (C) 2005 LAMS Foundation (http://lamsfoundation.org) + * ============================================================= + * License Information: http://lamsfoundation.org/licensing/lams/2.0/ + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2.0 + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 + * USA + * + * http://www.gnu.org/licenses/gpl.txt + * **************************************************************** + */ +/* $$Id$$ */ +package org.lamsfoundation.lams.learningdesign.strategy; + +import org.lamsfoundation.lams.learningdesign.Activity; +import org.lamsfoundation.lams.learningdesign.ComplexActivity; +import org.lamsfoundation.lams.learningdesign.FloatingActivity; + + +/** + * + * Progress calculation strategy for floating activity. + * @author Mitchell Seaton + * @version 2.3 + */ +public class FloatingActivityStrategy extends ComplexActivityStrategy +{ + private FloatingActivity floatingActivity = null; + + public FloatingActivityStrategy(FloatingActivity floatingActivity) { + this.floatingActivity = floatingActivity; + } + + /** + * Return the next activity for a incomplete floating activity. The next activity will calculated by the normal progress state. + * + * @see org.lamsfoundation.lams.learningdesign.strategy.ComplexActivityStrategy#getNextActivityByParent(Activity, Activity) + */ + public Activity getNextActivityByParent(ComplexActivity parent, Activity currentChild) + { + return null; + } + + /** + * Return the completion status of children activities within a options + * activity. For now a floating activity will not have a progress status dependent on the children. + * There is no rule for a minimum number of activities to be completed. + * + * @see org.lamsfoundation.lams.learningdesign.strategy.ComplexActivityStrategy#isComplete(int, org.lamsfoundation.lams.learningdesign.ComplexActivity) + */ + protected boolean isComplete(int numOfCompletedActivities) + { + return true; + } + + /** + * Get the strategy's activity as a Complex Activity. + */ + protected ComplexActivity getComplexActivity() { + return floatingActivity; + } +} Index: lams_common/src/java/org/lamsfoundation/lams/tool/SystemTool.java =================================================================== diff -u -r05db875c7974d705f89231416ff6dfe91a5e70f1 -rd3b9b5d94b98da06dcce673877406d8e580a114e --- lams_common/src/java/org/lamsfoundation/lams/tool/SystemTool.java (.../SystemTool.java) (revision 05db875c7974d705f89231416ff6dfe91a5e70f1) +++ lams_common/src/java/org/lamsfoundation/lams/tool/SystemTool.java (.../SystemTool.java) (revision d3b9b5d94b98da06dcce673877406d8e580a114e) @@ -49,6 +49,7 @@ public static final Long TOOL_BASED_BRANCHING = new Long(8); public static final Long SEQUENCE = new Long(9); public static final Long CONDITION_GATE = new Long(10); + public static final Long FLOATING_ACTIVITIES = new Long(11); /** identifier field */ private Long systemToolId; Index: lams_common/src/java/org/lamsfoundation/lams/util/wddx/WDDXTAGS.java =================================================================== diff -u -r8386a3fecd9c7baf6ed69d499016dedd8a83eac6 -rd3b9b5d94b98da06dcce673877406d8e580a114e --- lams_common/src/java/org/lamsfoundation/lams/util/wddx/WDDXTAGS.java (.../WDDXTAGS.java) (revision 8386a3fecd9c7baf6ed69d499016dedd8a83eac6) +++ lams_common/src/java/org/lamsfoundation/lams/util/wddx/WDDXTAGS.java (.../WDDXTAGS.java) (revision d3b9b5d94b98da06dcce673877406d8e580a114e) @@ -110,6 +110,9 @@ // yet public static final String INPUT_TOOL_ACTIVITY_UIID = "toolActivityUIID"; + /** FloatingActivity specific tags */ + public static final String MAX_ACTIVITIES = "maxActivities"; + /** OptionsActivity specific tags */ public static final String MAX_OPTIONS = "maxOptions"; public static final String MIN_OPTIONS = "minOptions";