Index: lams_central/src/java/org/lamsfoundation/lams/authoring/ObjectExtractor.java =================================================================== diff -u -r16a5b2f2dde415a97b2ed52505ec0f705775ce09 -r15f183cf38e6dae8159453d08af2e18ec6645fbc --- lams_central/src/java/org/lamsfoundation/lams/authoring/ObjectExtractor.java (.../ObjectExtractor.java) (revision 16a5b2f2dde415a97b2ed52505ec0f705775ce09) +++ lams_central/src/java/org/lamsfoundation/lams/authoring/ObjectExtractor.java (.../ObjectExtractor.java) (revision 15f183cf38e6dae8159453d08af2e18ec6645fbc) @@ -26,8 +26,10 @@ import java.util.Hashtable; import java.util.Iterator; import java.util.List; +import java.util.Set; import java.util.Vector; +import org.apache.log4j.Logger; import org.lamsfoundation.lams.learningdesign.Activity; import org.lamsfoundation.lams.learningdesign.ChosenGrouping; import org.lamsfoundation.lams.learningdesign.GateActivity; @@ -61,13 +63,24 @@ import org.lamsfoundation.lams.usermanagement.dao.hibernate.UserDAO; import org.lamsfoundation.lams.usermanagement.dao.hibernate.WorkspaceFolderDAO; import org.lamsfoundation.lams.util.wddx.WDDXProcessor; +import org.lamsfoundation.lams.util.wddx.WDDXTAGS; import org.lamsfoundation.lams.util.wddx.WDDXProcessorConversionException; /** * @author Manpreet Minhas * * This is a utitlity class for extracting the * information from the WDDX packet sent by the FLASH. + * + * The following rules are applied: + * The client sends a subset of all possible data. + * If a field is included, then the value associated with this field should + * be persisted (the value maybe a new value or an unchanged value) + * If a field is not included then the server should assume that the value + * is unchanged. + * If the value of a field is one of the special null values, then null + * should be persisted. + * */ public class ObjectExtractor { @@ -82,6 +95,9 @@ protected ToolDAO toolDAO = null; protected GroupDAO groupDAO = null; + protected Logger log = Logger.getLogger(ObjectExtractor.class); + + public ObjectExtractor(UserDAO userDAO, LearningDesignDAO learningDesignDAO, ActivityDAO activityDAO, WorkspaceFolderDAO workspaceFolderDAO, @@ -110,66 +126,108 @@ //get the core learning design stuff //LearningDesign learningDesign = new LearningDesign(); - learningDesign.setLearningDesignUIID(WDDXProcessor.convertToInteger(table,"learningDesignUIID")); - learningDesign.setDescription(WDDXProcessor.convertToString(table,"description")); - learningDesign.setTitle(WDDXProcessor.convertToString(table,"title")); - learningDesign.setMaxID(WDDXProcessor.convertToInteger(table,"maxID")); - learningDesign.setValidDesign(WDDXProcessor.convertToBoolean(table,"validDesign")); - learningDesign.setReadOnly(WDDXProcessor.convertToBoolean(table,"readOnly")); - learningDesign.setDateReadOnly(WDDXProcessor.convertToDate(table,"dateReadOnly")); - learningDesign.setOfflineInstructions(WDDXProcessor.convertToString(table,"offlineInstructions")); - learningDesign.setOnlineInstructions(WDDXProcessor.convertToString(table,"onlineInstructions")); - learningDesign.setHelpText(WDDXProcessor.convertToString(table,"helpText")); - learningDesign.setCopyTypeID(WDDXProcessor.convertToInteger(table,"copyTypeID")); - learningDesign.setCreateDateTime(WDDXProcessor.convertToDate(table,"createDateTime")); - learningDesign.setVersion(WDDXProcessor.convertToString(table,"version")); - learningDesign.setDuration(WDDXProcessor.convertToLong(table,"duration")); - learningDesign.setLastModifiedDateTime(WDDXProcessor.convertToDate(table,"lastModifiedDateTime")); + if (keyExists(table, WDDXTAGS.LEARNING_DESIGN_UIID)) + learningDesign.setLearningDesignUIID(WDDXProcessor.convertToInteger(table,WDDXTAGS.LEARNING_DESIGN_UIID)); + if (keyExists(table, WDDXTAGS.DESCRIPTION)) + learningDesign.setDescription(WDDXProcessor.convertToString(table,WDDXTAGS.DESCRIPTION)); + if (keyExists(table, WDDXTAGS.TITLE)) + learningDesign.setTitle(WDDXProcessor.convertToString(table, WDDXTAGS.TITLE)); + if (keyExists(table, WDDXTAGS.MAX_ID)) + learningDesign.setMaxID(WDDXProcessor.convertToInteger(table,WDDXTAGS.MAX_ID)); + if (keyExists(table, WDDXTAGS.VALID_DESIGN)) + learningDesign.setValidDesign(WDDXProcessor.convertToBoolean(table,WDDXTAGS.VALID_DESIGN)); + if (keyExists(table, WDDXTAGS.READ_ONLY)) + learningDesign.setReadOnly(WDDXProcessor.convertToBoolean(table,WDDXTAGS.READ_ONLY)); + if (keyExists(table, WDDXTAGS.DATE_READ_ONLY)) + learningDesign.setDateReadOnly(WDDXProcessor.convertToDate(table, WDDXTAGS.DATE_READ_ONLY)); + if (keyExists(table, WDDXTAGS.OFFLINE_INSTRUCTIONS)) + learningDesign.setOfflineInstructions(WDDXProcessor.convertToString(table,WDDXTAGS.OFFLINE_INSTRUCTIONS)); + if (keyExists(table, WDDXTAGS.ONLINE_INSTRUCTIONS)) + learningDesign.setOnlineInstructions(WDDXProcessor.convertToString(table,WDDXTAGS.ONLINE_INSTRUCTIONS)); + if (keyExists(table, WDDXTAGS.HELP_TEXT)) + learningDesign.setHelpText(WDDXProcessor.convertToString(table,WDDXTAGS.HELP_TEXT)); + if (keyExists(table, WDDXTAGS.COPY_TYPE)) + learningDesign.setCopyTypeID(WDDXProcessor.convertToInteger(table,WDDXTAGS.COPY_TYPE)); + if (keyExists(table, WDDXTAGS.CREATION_DATE)) + learningDesign.setCreateDateTime(WDDXProcessor.convertToDate(table,WDDXTAGS.CREATION_DATE)); + if (keyExists(table, WDDXTAGS.VERSION)) + learningDesign.setVersion(WDDXProcessor.convertToString(table,WDDXTAGS.VERSION)); + if (keyExists(table, WDDXTAGS.DURATION)) + learningDesign.setDuration(WDDXProcessor.convertToLong(table,WDDXTAGS.DURATION)); + if (keyExists(table, WDDXTAGS.LAST_MODIFIED_DATE)) + learningDesign.setLastModifiedDateTime(WDDXProcessor.convertToDate(table,WDDXTAGS.LAST_MODIFIED_DATE)); // not required at authoring time. - learningDesign.setLessonOrgName(WDDXProcessor.convertToString(table,"lessonOrgName")); - learningDesign.setLessonName(WDDXProcessor.convertToString(table,"lessonName")); - learningDesign.setLessonStartDateTime(WDDXProcessor.convertToDate(table,"lessonStartDateTime")); - learningDesign.setLessonID(WDDXProcessor.convertToLong(table,"lessionID")); - learningDesign.setLessonOrgID(WDDXProcessor.convertToLong(table,"lessionOrgID")); - learningDesign.setDuration(WDDXProcessor.convertToLong(table,"duration")); + if (keyExists(table, WDDXTAGS.LESSON_ORG_NAME)) + learningDesign.setLessonOrgName(WDDXProcessor.convertToString(table,WDDXTAGS.LESSON_ORG_NAME)); + if (keyExists(table, WDDXTAGS.LESSON_NAME)) + learningDesign.setLessonName(WDDXProcessor.convertToString(table,WDDXTAGS.LESSON_NAME)); + if (keyExists(table, WDDXTAGS.LESSON_START_DATETIME)) + learningDesign.setLessonStartDateTime(WDDXProcessor.convertToDate(table,WDDXTAGS.LESSON_START_DATETIME)); + if (keyExists(table, WDDXTAGS.LESSON_ID)) + learningDesign.setLessonID(WDDXProcessor.convertToLong(table,WDDXTAGS.LESSON_ID)); + if (keyExists(table, WDDXTAGS.LESSON_ORG_ID)) + learningDesign.setLessonOrgID(WDDXProcessor.convertToLong(table,WDDXTAGS.LESSON_ORG_ID)); + if (keyExists(table, WDDXTAGS.DURATION)) + learningDesign.setDuration(WDDXProcessor.convertToLong(table,WDDXTAGS.DURATION)); - Integer userId = WDDXProcessor.convertToInteger(table,"userID"); - if( userId != null ) { - User user = userDAO.getUserById(userId); - if(user!=null) { - learningDesign.setUser(user); - } else { - throw new ObjectExtractorException("userID missing"); + if (keyExists(table, WDDXTAGS.USER_ID)) + { + Integer userId = WDDXProcessor.convertToInteger(table,WDDXTAGS.USER_ID); + if( userId != null ) { + User user = userDAO.getUserById(userId); + if(user!=null) { + learningDesign.setUser(user); + } else { + throw new ObjectExtractorException("userID missing"); + } } + //else dont do anything. } - - Long licenseID = WDDXProcessor.convertToLong(table,"licenseID"); - if( licenseID!=null ){ - License license = licenseDAO.getLicenseByID(licenseID); - learningDesign.setLicense(license); - } else { - learningDesign.setLicense(null); - } - learningDesign.setLicenseText(WDDXProcessor.convertToString(table,"licenseText")); + + if (keyExists(table, WDDXTAGS.LICENCE_ID)) + { + Long licenseID = WDDXProcessor.convertToLong(table,WDDXTAGS.LICENCE_ID); + if( licenseID!=null ){ + License license = licenseDAO.getLicenseByID(licenseID); + learningDesign.setLicense(license); + } else { + learningDesign.setLicense(null); //special null value set + } + } + if (keyExists(table, WDDXTAGS.LICENSE_TEXT)) + learningDesign.setLicenseText(WDDXProcessor.convertToString(table,WDDXTAGS.LICENSE_TEXT)); - Integer workspaceFolderID = WDDXProcessor.convertToInteger(table,"workspaceFolderID"); - if( workspaceFolderID!=null ){ - WorkspaceFolder workspaceFolder = workspaceFolderDAO.getWorkspaceFolderByID(workspaceFolderID); - learningDesign.setWorkspaceFolder(workspaceFolder); + if (keyExists(table, WDDXTAGS.WORKSPACE_FOLDER_ID)) + { + Integer workspaceFolderID = WDDXProcessor.convertToInteger(table, WDDXTAGS.WORKSPACE_FOLDER_ID); + if( workspaceFolderID!=null ){ + WorkspaceFolder workspaceFolder = workspaceFolderDAO.getWorkspaceFolderByID(workspaceFolderID); + learningDesign.setWorkspaceFolder(workspaceFolder); + } + else + { + learningDesign.setWorkspaceFolder(null); + } } - Long parentLearningDesignID = WDDXProcessor.convertToLong(table,"parentLearningDesignID"); - if( parentLearningDesignID != null ){ - LearningDesign parent = learningDesignDAO.getLearningDesignById(parentLearningDesignID); - learningDesign.setParentLearningDesign(parent); + if (keyExists(table, WDDXTAGS.PARENT_DESIGN_ID)) + { + Long parentLearningDesignID = WDDXProcessor.convertToLong(table,WDDXTAGS.PARENT_DESIGN_ID); + if( parentLearningDesignID != null ){ + LearningDesign parent = learningDesignDAO.getLearningDesignById(parentLearningDesignID); + learningDesign.setParentLearningDesign(parent); + } + else + learningDesign.setParentLearningDesign(null); } + learningDesignDAO.insert(learningDesign); - + // now process the "parts" of the learning design - parseActivities((Vector)table.get("activities"),learningDesign); - parseTransitions((Vector)table.get("transitions"),learningDesign); + parseActivities((Vector)table.get(WDDXTAGS.ACTIVITIES),learningDesign); + parseTransitions((Vector)table.get(WDDXTAGS.TRANSITIONS),learningDesign); learningDesign.setFirstActivity(learningDesign.calculateFirstActivity()); learningDesignDAO.update(learningDesign); @@ -179,22 +237,47 @@ private void parseActivities(List activitiesList, LearningDesign learningDesign) throws WDDXProcessorConversionException, ObjectExtractorException { - HashSet set = new HashSet(); + HashSet updatedSet = new HashSet(); + Set currentActivities = learningDesign.getActivities(); if(activitiesList!=null){ Iterator iterator = activitiesList.iterator(); while(iterator.hasNext()){ Hashtable activityDetails = (Hashtable)iterator.next(); Activity activity = extractActivityObject(activityDetails,learningDesign); activityDAO.insert(activity); - set.add(activity); + currentActivities.add(activity); + updatedSet.add(activity); //used to keep track of which ids that are still in use } } - // TODO: Need to double check that the toolID/toolContentID combinations match entries in lams_tool_content table, or put FK on table. - learningDesign.setActivities(set); + + + //Iterate through currentActivities, and see which activity is present in the updatedSet, if not, then this activity must be deleted. + + Iterator itr = currentActivities.iterator(); + + while (itr.hasNext()) + { + Activity activity = (Activity)itr.next(); + Long activityId = activity.getActivityId(); + if (!updatedSet.contains(activity)) + { + // This will leave orphan content in the tool tables. It will be removed by the tool content cleaning job, + //which may be run from the admin screen or via a cron job + + itr.remove(); //removes object from collection; + //call activityDAO method if needed to delete this activity + activityDAO.delete(activity); + + } + } + //TODO: Need to double check that the toolID/toolContentID combinations match entries in lams_tool_content table, or put FK on table. + learningDesign.setActivities(currentActivities); learningDesignDAO.update(learningDesign); } private void parseTransitions(List transitionsList, LearningDesign learningDesign) throws WDDXProcessorConversionException{ - HashSet set = new HashSet(); + + HashSet set = new HashSet(); + Set currentTransitions = learningDesign.getTransitions(); if(transitionsList!=null){ Iterator iterator= transitionsList.iterator(); while(iterator.hasNext()){ @@ -204,75 +287,121 @@ set.add(transition); } } + learningDesign.setTransitions(set); learningDesignDAO.update(learningDesign); + + } public Activity extractActivityObject(Hashtable activityDetails, LearningDesign design) throws WDDXProcessorConversionException, ObjectExtractorException { - Integer activityTypeID = WDDXProcessor.convertToInteger(activityDetails, "activityTypeID"); - if ( activityTypeID == null ) { - throw new ObjectExtractorException("activityTypeID missing"); - } + Integer activityUUID = WDDXProcessor.convertToInteger(activityDetails,"activityUIID"); + Activity activity = null; + //get the activity with the particular activity uuid, if null, then new object needs to be created. + Activity existingActivity = activityDAO.getActivityByUIID(activityUUID, design); + if (existingActivity == null) + { + Integer activityTypeID = WDDXProcessor.convertToInteger(activityDetails, "activityTypeID"); + if ( activityTypeID == null ) { + throw new ObjectExtractorException("activityTypeID missing"); + } + + Activity activityObject = Activity.getActivityInstance(activityTypeID.intValue()); + processActivityType(activityObject,activityDetails); + activity =(Activity)activityObject; + } + else + { + activity = existingActivity; //otherwise load existing activity + } - Activity activityObject = Activity.getActivityInstance(activityTypeID.intValue()); - processActivityType(activityObject,activityDetails); - Activity activity =(Activity)activityObject; - activity.setActivityTypeId(activityTypeID); - activity.setActivityUIID(WDDXProcessor.convertToInteger(activityDetails,"activityUIID")); - activity.setDescription(WDDXProcessor.convertToString(activityDetails,"description")); - activity.setTitle(WDDXProcessor.convertToString(activityDetails,"title")); - activity.setHelpText(WDDXProcessor.convertToString(activityDetails,"helpText")); - activity.setXcoord(WDDXProcessor.convertToInteger(activityDetails, "xCoord")); - activity.setYcoord(WDDXProcessor.convertToInteger(activityDetails, "yCoord")); + + //activity.setActivityTypeId(activityTypeID); + if (keyExists(activityDetails, WDDXTAGS.ACTIVITY_TYPE_ID)) + activity.setActivityTypeId(WDDXProcessor.convertToInteger(activityDetails, WDDXTAGS.ACTIVITY_TYPE_ID)); + if (keyExists(activityDetails, WDDXTAGS.ACTIVITY_UIID)) + activity.setActivityUIID(WDDXProcessor.convertToInteger(activityDetails,WDDXTAGS.ACTIVITY_UIID)); + if (keyExists(activityDetails, WDDXTAGS.DESCRIPTION)) + activity.setDescription(WDDXProcessor.convertToString(activityDetails,WDDXTAGS.DESCRIPTION)); + if (keyExists(activityDetails, WDDXTAGS.TITLE)) + activity.setTitle(WDDXProcessor.convertToString(activityDetails,WDDXTAGS.TITLE)); + if (keyExists(activityDetails, WDDXTAGS.HELP_TEXT)) + activity.setHelpText(WDDXProcessor.convertToString(activityDetails,WDDXTAGS.HELP_TEXT)); + if (keyExists(activityDetails, WDDXTAGS.XCOORD)) + activity.setXcoord(WDDXProcessor.convertToInteger(activityDetails, WDDXTAGS.XCOORD)); + if (keyExists(activityDetails, WDDXTAGS.YCOORD)) + activity.setYcoord(WDDXProcessor.convertToInteger(activityDetails, WDDXTAGS.YCOORD)); - Integer parentUIID = WDDXProcessor.convertToInteger(activityDetails, "parentUIID"); - if( parentUIID!=null ) { - Activity parentActivity = activityDAO.getActivityByUIID(parentUIID,design); - activity.setParentActivity(parentActivity); - activity.setParentUIID(parentUIID); - } else { - activity.setParentActivity(null); - activity.setParentUIID(null); - } + if (keyExists(activityDetails, WDDXTAGS.PARENT_UIID)) + { + Integer parentUIID = WDDXProcessor.convertToInteger(activityDetails, WDDXTAGS.PARENT_UIID); + if( parentUIID!=null ) { + Activity parentActivity = activityDAO.getActivityByUIID(parentUIID,design); + activity.setParentActivity(parentActivity); + activity.setParentUIID(parentUIID); + } else { + activity.setParentActivity(null); + activity.setParentUIID(null); + } + } - Long groupingID = WDDXProcessor.convertToLong(activityDetails,"groupingID"); - Integer groupingUIID = WDDXProcessor.convertToInteger(activityDetails,"groupingUIID"); - if( groupingID!=null ){ - Grouping grouping = groupingDAO.getGroupingById(groupingID); - activity.setGrouping(grouping); - activity.setGroupingUIID(groupingUIID); - } else { - activity.setGrouping(null); - activity.setGroupingUIID(null); - } + if (keyExists(activityDetails, WDDXTAGS.GROUPING_ID)) + { + Long groupingID = WDDXProcessor.convertToLong(activityDetails,WDDXTAGS.GROUPING_ID); + Integer groupingUIID = WDDXProcessor.convertToInteger(activityDetails,WDDXTAGS.GROUPING_UIID); + if( groupingID!=null ){ + Grouping grouping = groupingDAO.getGroupingById(groupingID); + activity.setGrouping(grouping); + activity.setGroupingUIID(groupingUIID); + } else { + activity.setGrouping(null); + activity.setGroupingUIID(null); + } + } - activity.setOrderId(WDDXProcessor.convertToInteger(activityDetails,"orderID")); - activity.setDefineLater(WDDXProcessor.convertToBoolean(activityDetails,"defineLater")); + if (keyExists(activityDetails, WDDXTAGS.ORDER_ID)) + activity.setOrderId(WDDXProcessor.convertToInteger(activityDetails,WDDXTAGS.ORDER_ID)); + if (keyExists(activityDetails, WDDXTAGS.DEFINE_LATER)) + activity.setDefineLater(WDDXProcessor.convertToBoolean(activityDetails,WDDXTAGS.DEFINE_LATER)); + activity.setLearningDesign(design); - Long learningLibraryID = WDDXProcessor.convertToLong(activityDetails,"learningLibraryID"); - if( learningLibraryID!=null ){ - LearningLibrary library = learningLibraryDAO.getLearningLibraryById(learningLibraryID); - activity.setLearningLibrary(library); - } else { - activity.setLearningLibrary(null); + if (keyExists(activityDetails, WDDXTAGS.LEARNING_LIBRARY_ID)) + { + Long learningLibraryID = WDDXProcessor.convertToLong(activityDetails,WDDXTAGS.LEARNING_LIBRARY_ID); + if( learningLibraryID!=null ){ + LearningLibrary library = learningLibraryDAO.getLearningLibraryById(learningLibraryID); + activity.setLearningLibrary(library); + } else { + activity.setLearningLibrary(null); + } } - activity.setCreateDateTime(WDDXProcessor.convertToDate(activityDetails,"createDateTime")); - activity.setRunOffline(WDDXProcessor.convertToBoolean(activityDetails,"runOffline")); - activity.setActivityCategoryID(WDDXProcessor.convertToInteger(activityDetails,"activityCategoryID")); - activity.setLibraryActivityUiImage(WDDXProcessor.convertToString(activityDetails,"libraryActivityUiImage")); + if (keyExists(activityDetails, WDDXTAGS.CREATION_DATE)) + activity.setCreateDateTime(WDDXProcessor.convertToDate(activityDetails,WDDXTAGS.CREATION_DATE)); + if (keyExists(activityDetails, WDDXTAGS.RUN_OFFLINE)) + activity.setRunOffline(WDDXProcessor.convertToBoolean(activityDetails,WDDXTAGS.RUN_OFFLINE)); + if (keyExists(activityDetails, WDDXTAGS.ACTIVITY_CATEGORY_ID)) + activity.setActivityCategoryID(WDDXProcessor.convertToInteger(activityDetails,WDDXTAGS.ACTIVITY_CATEGORY_ID)); + if (keyExists(activityDetails, WDDXTAGS.LIBRARY_IMAGE)) + activity.setLibraryActivityUiImage(WDDXProcessor.convertToString(activityDetails,WDDXTAGS.LIBRARY_IMAGE)); - Long libraryActivityID = WDDXProcessor.convertToLong(activityDetails,"libraryActivityID"); - if( libraryActivityID != null ){ - Activity libraryActivity = activityDAO.getActivityByActivityId(libraryActivityID); - activity.setLibraryActivity(libraryActivity); - } else { - activity.setLibraryActivity(null); + if (keyExists(activityDetails, WDDXTAGS.LIBRARY_ACTIVITY)) + { + Long libraryActivityID = WDDXProcessor.convertToLong(activityDetails,WDDXTAGS.LIBRARY_ACTIVITY); + if( libraryActivityID != null ){ + Activity libraryActivity = activityDAO.getActivityByActivityId(libraryActivityID); + activity.setLibraryActivity(libraryActivity); + } else { + activity.setLibraryActivity(null); + } } - activity.setApplyGrouping(WDDXProcessor.convertToBoolean(activityDetails,"applyGrouping")); - activity.setGroupingSupportType(WDDXProcessor.convertToInteger(activityDetails,"groupingSupportType")); + if (keyExists(activityDetails, WDDXTAGS.APPLY_GROUPING)) + activity.setApplyGrouping(WDDXProcessor.convertToBoolean(activityDetails,WDDXTAGS.APPLY_GROUPING)); + if (keyExists(activityDetails, WDDXTAGS.GROUPING_SUPPORT_TYPE)) + activity.setGroupingSupportType(WDDXProcessor.convertToInteger(activityDetails,WDDXTAGS.GROUPING_SUPPORT_TYPE)); + return activity; } private void processActivityType(Activity activity, Hashtable activityDetails) @@ -297,7 +426,7 @@ } private void buildGroupingActivity(GroupingActivity groupingActivity,Hashtable activityDetails) throws WDDXProcessorConversionException, ObjectExtractorException { - Hashtable groupingDetails = (Hashtable) activityDetails.get("groupingDTO"); + Hashtable groupingDetails = (Hashtable) activityDetails.get(WDDXTAGS.GROUPING_DTO); if( groupingDetails != null ){ Grouping grouping = extractGroupingObject(groupingDetails); groupingActivity.setCreateGrouping(grouping); @@ -309,19 +438,23 @@ } private void buildOptionsActivity(OptionsActivity optionsActivity,Hashtable activityDetails) throws WDDXProcessorConversionException{ - optionsActivity.setMaxNumberOfOptions(WDDXProcessor.convertToInteger(activityDetails,"maxOptions")); - optionsActivity.setMinNumberOfOptions(WDDXProcessor.convertToInteger(activityDetails,"minOptions")); - optionsActivity.setOptionsInstructions(WDDXProcessor.convertToString(activityDetails,"optionsInstructions")); + optionsActivity.setMaxNumberOfOptions(WDDXProcessor.convertToInteger(activityDetails,WDDXTAGS.MAX_OPTIONS)); + optionsActivity.setMinNumberOfOptions(WDDXProcessor.convertToInteger(activityDetails,WDDXTAGS.MIN_OPTIONS)); + optionsActivity.setOptionsInstructions(WDDXProcessor.convertToString(activityDetails,WDDXTAGS.OPTIONS_INSTRUCTIONS)); } private void buildParallelActivity(ParallelActivity activity,Hashtable activityDetails) throws WDDXProcessorConversionException{ } private void buildSequenceActivity(SequenceActivity activity,Hashtable activityDetails) throws WDDXProcessorConversionException{ } private void buildToolActivity(ToolActivity toolActivity,Hashtable activityDetails) throws WDDXProcessorConversionException{ - toolActivity.setToolContentId(WDDXProcessor.convertToLong(activityDetails,"toolContentID")); - Tool tool =toolDAO.getToolByID(WDDXProcessor.convertToLong(activityDetails,"toolID")); - toolActivity.setTool(tool); + if (keyExists(activityDetails, WDDXTAGS.TOOL_CONTENT_ID)) + toolActivity.setToolContentId(WDDXProcessor.convertToLong(activityDetails,WDDXTAGS.TOOL_CONTENT_ID)); + if (keyExists(activityDetails, WDDXTAGS.TOOL_ID)) + { + Tool tool =toolDAO.getToolByID(WDDXProcessor.convertToLong(activityDetails,WDDXTAGS.TOOL_ID)); + toolActivity.setTool(tool); + } } private void buildGateActivity(Object activity,Hashtable activityDetails) throws WDDXProcessorConversionException{ if(activity instanceof SynchGateActivity) @@ -331,24 +464,24 @@ else buildScheduleGateActivity((ScheduleGateActivity)activity,activityDetails); GateActivity gateActivity = (GateActivity)activity ; - gateActivity.setGateActivityLevelId(WDDXProcessor.convertToInteger(activityDetails,"gateActivityLevelID")); - gateActivity.setGateOpen(WDDXProcessor.convertToBoolean(activityDetails,"gateOpen")); + gateActivity.setGateActivityLevelId(WDDXProcessor.convertToInteger(activityDetails,WDDXTAGS.GATE_ACTIVITY_LEVEL_ID)); + gateActivity.setGateOpen(WDDXProcessor.convertToBoolean(activityDetails,WDDXTAGS.GATE_OPEN)); } private void buildSynchGateActivity(SynchGateActivity activity,Hashtable activityDetails) throws WDDXProcessorConversionException{ } private void buildPermissionGateActivity(PermissionGateActivity activity,Hashtable activityDetails) throws WDDXProcessorConversionException{ } private static void buildScheduleGateActivity(ScheduleGateActivity activity,Hashtable activityDetails) throws WDDXProcessorConversionException{ - activity.setGateStartDateTime(WDDXProcessor.convertToDate(activityDetails,"gateStartDateTime")); - activity.setGateEndDateTime(WDDXProcessor.convertToDate(activityDetails,"gateEndDateTime")); - activity.setGateStartTimeOffset(WDDXProcessor.convertToLong(activityDetails,"gateStartTimeOffset")); - activity.setGateEndTimeOffset(WDDXProcessor.convertToLong(activityDetails,"gateEndTimeOffset")); + activity.setGateStartDateTime(WDDXProcessor.convertToDate(activityDetails,WDDXTAGS.GATE_START_DATE)); + activity.setGateEndDateTime(WDDXProcessor.convertToDate(activityDetails,WDDXTAGS.GATE_END_DATE)); + activity.setGateStartTimeOffset(WDDXProcessor.convertToLong(activityDetails,WDDXTAGS.GATE_START_OFFSET)); + activity.setGateEndTimeOffset(WDDXProcessor.convertToLong(activityDetails,WDDXTAGS.GATE_END_OFFSET)); } public Grouping extractGroupingObject(Hashtable groupingDetails) throws WDDXProcessorConversionException, ObjectExtractorException{ - Integer groupingType=WDDXProcessor.convertToInteger(groupingDetails,"groupingType"); + Integer groupingType=WDDXProcessor.convertToInteger(groupingDetails,WDDXTAGS.GROUPING_TYPE_ID); if ( groupingType == null ) { throw new ObjectExtractorException("groupingType missing"); } @@ -363,21 +496,21 @@ createLessonClass((LessonClass)object, groupingDetails); Grouping grouping = (Grouping)object; - grouping.setGroupingId(WDDXProcessor.convertToLong(groupingDetails,"groupingID")); - grouping.setGroupingUIID(WDDXProcessor.convertToInteger(groupingDetails,"groupingUIID")); - grouping.setMaxNumberOfGroups(WDDXProcessor.convertToInteger(groupingDetails,"maxNumberOfGroups")); + grouping.setGroupingId(WDDXProcessor.convertToLong(groupingDetails,WDDXTAGS.GROUPING_ID)); + grouping.setGroupingUIID(WDDXProcessor.convertToInteger(groupingDetails,WDDXTAGS.GROUPING_UIID)); + grouping.setMaxNumberOfGroups(WDDXProcessor.convertToInteger(groupingDetails,WDDXTAGS.MAX_NUMBER_OF_GROUPS)); groupingDAO.insert(grouping); return grouping; } private void createRandomGrouping(RandomGrouping randomGrouping,Hashtable groupingDetails) throws WDDXProcessorConversionException{ - randomGrouping.setLearnersPerGroup(WDDXProcessor.convertToInteger(groupingDetails,"learnersPerGroup")); - randomGrouping.setNumberOfGroups(WDDXProcessor.convertToInteger(groupingDetails,"numberOfGroups")); + randomGrouping.setLearnersPerGroup(WDDXProcessor.convertToInteger(groupingDetails,WDDXTAGS.LEARNERS_PER_GROUP)); + randomGrouping.setNumberOfGroups(WDDXProcessor.convertToInteger(groupingDetails,WDDXTAGS.NUMBER_OF_GROUPS)); } private void createChosenGrouping(ChosenGrouping chosenGrouping,Hashtable groupingDetails) throws WDDXProcessorConversionException{ } private void createLessonClass(LessonClass lessonClass, Hashtable groupingDetails) throws WDDXProcessorConversionException{ - Group group = groupDAO.getGroupById(WDDXProcessor.convertToLong(groupingDetails,"staffGroupID")); + Group group = groupDAO.getGroupById(WDDXProcessor.convertToLong(groupingDetails,WDDXTAGS.STAFF_GROUP_ID)); if(group!=null) lessonClass.setStaffGroup(group); } @@ -391,35 +524,41 @@ * @throws WDDXProcessorConversionException */ private Transition extractTransitionObject(Hashtable transitionDetails, LearningDesign learningDesign) throws WDDXProcessorConversionException{ - Transition transition = new Transition(); - Long transitionID= WDDXProcessor.convertToLong(transitionDetails,"transitionID"); + Long transitionID= WDDXProcessor.convertToLong(transitionDetails,WDDXTAGS.TRANSITION_ID); if ( transitionID != null ) transition.setTransitionId(transitionID); - transition.setTransitionUIID(WDDXProcessor.convertToInteger(transitionDetails,"transitionUIID")); + transition.setTransitionUIID(WDDXProcessor.convertToInteger(transitionDetails,WDDXTAGS.TRANSITION_UIID)); - Integer toUIID=WDDXProcessor.convertToInteger(transitionDetails,"toUIID"); + Integer toUIID=WDDXProcessor.convertToInteger(transitionDetails,WDDXTAGS.TO_ACTIVITY_UIID); if(toUIID!=null){ Activity toActivity = activityDAO.getActivityByUIID(toUIID, learningDesign); transition.setToActivity(toActivity); transition.setToUIID(toUIID); } - Integer fromUIID=WDDXProcessor.convertToInteger(transitionDetails,"fromUIID"); + Integer fromUIID=WDDXProcessor.convertToInteger(transitionDetails,WDDXTAGS.FROM_ACTIVITY_UIID); if(fromUIID!=null){ Activity fromActivity = activityDAO.getActivityByUIID(fromUIID, learningDesign); transition.setFromActivity(fromActivity); transition.setFromUIID(fromUIID); } - transition.setDescription(WDDXProcessor.convertToString(transitionDetails,"description")); - transition.setTitle(WDDXProcessor.convertToString(transitionDetails,"title")); - transition.setCreateDateTime(WDDXProcessor.convertToDate(transitionDetails,"createDateTime")); + transition.setDescription(WDDXProcessor.convertToString(transitionDetails,WDDXTAGS.DESCRIPTION)); + transition.setTitle(WDDXProcessor.convertToString(transitionDetails,WDDXTAGS.TITLE)); + transition.setCreateDateTime(WDDXProcessor.convertToDate(transitionDetails,WDDXTAGS.CREATION_DATE)); transition.setLearningDesign(learningDesign); return transition; } + private boolean keyExists(Hashtable table, String key) + { + if (table.containsKey(key)) + return true; + else + return false; + } }