Index: lams_build/lib/lams/lams-central.jar =================================================================== diff -u -rb306fd8e915967e8ce5a771f29dfd69d1e8a89e4 -rb3dbc137e110d79b6aae154a808b7ca6e7de403d Binary files differ Index: lams_build/lib/lams/lams.jar =================================================================== diff -u -rb306fd8e915967e8ce5a771f29dfd69d1e8a89e4 -rb3dbc137e110d79b6aae154a808b7ca6e7de403d Binary files differ Index: lams_central/src/java/org/lamsfoundation/lams/authoring/ObjectExtractor.java =================================================================== diff -u -r56d3e2b01ea43c10d95f83427a82094c724b578c -rb3dbc137e110d79b6aae154a808b7ca6e7de403d --- lams_central/src/java/org/lamsfoundation/lams/authoring/ObjectExtractor.java (.../ObjectExtractor.java) (revision 56d3e2b01ea43c10d95f83427a82094c724b578c) +++ lams_central/src/java/org/lamsfoundation/lams/authoring/ObjectExtractor.java (.../ObjectExtractor.java) (revision b3dbc137e110d79b6aae154a808b7ca6e7de403d) @@ -22,10 +22,11 @@ */ package org.lamsfoundation.lams.authoring; -import java.util.ArrayList; import java.util.HashSet; import java.util.Hashtable; import java.util.Iterator; +import java.util.List; +import java.util.Vector; import org.lamsfoundation.lams.learningdesign.Activity; import org.lamsfoundation.lams.learningdesign.ChosenGrouping; @@ -52,19 +53,15 @@ import org.lamsfoundation.lams.learningdesign.dao.hibernate.LearningLibraryDAO; import org.lamsfoundation.lams.learningdesign.dao.hibernate.LicenseDAO; import org.lamsfoundation.lams.learningdesign.dao.hibernate.TransitionDAO; -import org.lamsfoundation.lams.learningdesign.dto.AuthoringActivityDTO; -import org.lamsfoundation.lams.learningdesign.dto.GroupingDTO; -import org.lamsfoundation.lams.learningdesign.dto.LearningDesignDTO; -import org.lamsfoundation.lams.learningdesign.dto.TransitionDTO; import org.lamsfoundation.lams.lesson.LessonClass; import org.lamsfoundation.lams.tool.Tool; import org.lamsfoundation.lams.tool.dao.hibernate.ToolDAO; import org.lamsfoundation.lams.usermanagement.User; import org.lamsfoundation.lams.usermanagement.WorkspaceFolder; 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.WDDXProcessorConversionException; -import org.lamsfoundation.lams.util.wddx.WDDXTAGS; /** * @author Manpreet Minhas @@ -102,61 +99,98 @@ this.groupDAO = groupDAO; this.transitionDAO = transitionDAO; } - public LearningDesign extractLearningDesignObject(LearningDesignDTO learningDesignDTO)throws Exception{ - LearningDesign learningDesign = LearningDesignDTO.extractLearningDesign(learningDesignDTO); + public LearningDesign extractLearningDesign(Hashtable table) throws WDDXProcessorConversionException, ObjectExtractorException { + + // 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(learningDesignDTO.getUserID()!=null && - !learningDesignDTO.getUserID().equals(WDDXTAGS.NUMERIC_NULL_VALUE_INTEGER)){ - User user = userDAO.getUserById(learningDesignDTO.getUserID()); - if(user!=null) + // 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")); + + 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(!learningDesignDTO.getLicenseID().equals(WDDXTAGS.NUMERIC_NULL_VALUE_LONG)){ - License license = licenseDAO.getLicenseByID(learningDesignDTO.getLicenseID()); - if(license!=null) - learningDesign.setLicense(license); + + Long licenseID = WDDXProcessor.convertToLong(table,"licenseID"); + if( licenseID!=null ){ + License license = licenseDAO.getLicenseByID(licenseID); + learningDesign.setLicense(license); + } else { + learningDesign.setLicense(null); } - if(!learningDesignDTO.getWorkspaceFolderID().equals(WDDXTAGS.NUMERIC_NULL_VALUE_INTEGER)){ - WorkspaceFolder workspaceFolder = workspaceFolderDAO.getWorkspaceFolderByID(learningDesignDTO.getWorkspaceFolderID()); - if(workspaceFolder!=null) - learningDesign.setWorkspaceFolder(workspaceFolder); + learningDesign.setLicenseText(WDDXProcessor.convertToString(table,"licenseText")); + + Integer workspaceFolderID = WDDXProcessor.convertToInteger(table,"workspaceFolderID"); + if( workspaceFolderID!=null ){ + WorkspaceFolder workspaceFolder = workspaceFolderDAO.getWorkspaceFolderByID(workspaceFolderID); + learningDesign.setWorkspaceFolder(workspaceFolder); } - if(!learningDesignDTO.getParentLearningDesignID().equals(WDDXTAGS.NUMERIC_NULL_VALUE_LONG)){ - LearningDesign parent = learningDesignDAO.getLearningDesignById(learningDesignDTO.getParentLearningDesignID()); - if(parent!=null) - learningDesign.setParentLearningDesign(parent); + + Long parentLearningDesignID = WDDXProcessor.convertToLong(table,"parentLearningDesignID"); + if( parentLearningDesignID != null ){ + LearningDesign parent = learningDesignDAO.getLearningDesignById(parentLearningDesignID); + learningDesign.setParentLearningDesign(parent); } + learningDesignDAO.insert(learningDesign); - parseActivities(learningDesignDTO,learningDesign); - parseTransitions(learningDesignDTO,learningDesign); - calculateFirstActivity(learningDesignDTO.getFirstActivityUIID(),learningDesign); + + // now process the "parts" of the learning design + parseActivities((Vector)table.get("activities"),learningDesign); + parseTransitions((Vector)table.get("transitions"),learningDesign); + calculateFirstActivity(WDDXProcessor.convertToInteger(table,"firstActivityUIID"),learningDesign); + return learningDesign; - } - private void parseActivities(LearningDesignDTO learningDesignDTO, LearningDesign learningDesign) throws WDDXProcessorConversionException{ + } + + private void parseActivities(List activitiesList, LearningDesign learningDesign) + throws WDDXProcessorConversionException, ObjectExtractorException { HashSet set = new HashSet(); - if(learningDesignDTO.getActivities()!=null){ - ArrayList table = learningDesignDTO.getActivities(); - Iterator iterator = table.iterator(); + if(activitiesList!=null){ + Iterator iterator = activitiesList.iterator(); while(iterator.hasNext()){ Hashtable activityDetails = (Hashtable)iterator.next(); - AuthoringActivityDTO authoringActivityDTO = new AuthoringActivityDTO(activityDetails); - Activity activity = extractActivityObject(authoringActivityDTO,learningDesign); + Activity activity = extractActivityObject(activityDetails,learningDesign); activityDAO.insert(activity); set.add(activity); } } learningDesign.setActivities(set); learningDesignDAO.update(learningDesign); } - private void parseTransitions(LearningDesignDTO learningDesignDTO, LearningDesign learningDesign) throws WDDXProcessorConversionException{ + private void parseTransitions(List transitionsList, LearningDesign learningDesign) throws WDDXProcessorConversionException{ HashSet set = new HashSet(); - if(learningDesignDTO.getTransitions()!=null){ - ArrayList table = learningDesignDTO.getTransitions(); - Iterator iterator= table.iterator(); + if(transitionsList!=null){ + Iterator iterator= transitionsList.iterator(); while(iterator.hasNext()){ Hashtable transitionDetails = (Hashtable)iterator.next(); - TransitionDTO transitionDTO = new TransitionDTO(transitionDetails); - Transition transition = extractTransitionObject(transitionDTO,learningDesign); + Transition transition = extractTransitionObject(transitionDetails,learningDesign); transitionDAO.insert(transition); set.add(transition); } @@ -165,176 +199,225 @@ learningDesignDAO.update(learningDesign); } /**TODO This function has to be tested with real data*/ - public void calculateFirstActivity(Integer firstID, LearningDesign design)throws Exception{ + public void calculateFirstActivity(Integer firstID, LearningDesign design){ Activity flashFirstActivity = activityDAO.getActivityByUIID(firstID,design); design.setFirstActivity(flashFirstActivity); learningDesignDAO.update(design); } - public Activity extractActivityObject(AuthoringActivityDTO authoringActivityDTO, LearningDesign design){ - Object activityObject = Activity.getActivityInstance(authoringActivityDTO.getActivityTypeID().intValue()); - processActivityType(activityObject,authoringActivityDTO); - Activity activity =(Activity)activityObject; - activity.setActivityUIID(authoringActivityDTO.getActivityUIID()); - activity.setDescription(authoringActivityDTO.getDescription()); - activity.setTitle(authoringActivityDTO.getTitle()); - activity.setHelpText(authoringActivityDTO.getHelpText()); - activity.setXcoord(authoringActivityDTO.getXcoord()); - activity.setYcoord(authoringActivityDTO.getYcoord()); + public Activity extractActivityObject(Hashtable activityDetails, LearningDesign design) throws WDDXProcessorConversionException, ObjectExtractorException { - if(authoringActivityDTO.getParentUIID()!=null && - !authoringActivityDTO.getParentUIID().equals(WDDXTAGS.NUMERIC_NULL_VALUE_INTEGER)){ - Activity parentActivity = activityDAO.getActivityByUIID(authoringActivityDTO.getParentUIID(),design); - if(parentActivity!=null) - activity.setParentActivity(parentActivity); - activity.setParentUIID(authoringActivityDTO.getParentUIID()); + Integer activityTypeID = WDDXProcessor.convertToInteger(activityDetails, "activityTypeID"); + if ( activityTypeID == null ) { + throw new ObjectExtractorException("activityTypeID missing"); } - activity.setActivityTypeId(authoringActivityDTO.getActivityTypeID()); + Object 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")); + + 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(authoringActivityDTO.getGroupingID()!=null && - !authoringActivityDTO.getGroupingID().equals(WDDXTAGS.NUMERIC_NULL_VALUE_LONG)){ - Grouping grouping = groupingDAO.getGroupingById(authoringActivityDTO.getGroupingID()); - if(grouping!=null) - activity.setGrouping(grouping); - activity.setGroupingUIID(authoringActivityDTO.getGroupingUIID()); + 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); } - activity.setOrderId(authoringActivityDTO.getOrderID()); - activity.setDefineLater(authoringActivityDTO.getDefineLater()); + activity.setOrderId(WDDXProcessor.convertToInteger(activityDetails,"orderID")); + activity.setDefineLater(WDDXProcessor.convertToBoolean(activityDetails,"defineLater")); activity.setLearningDesign(design); - if(authoringActivityDTO.getLearningLibraryID()!=null && - !authoringActivityDTO.getLearningLibraryID().equals(WDDXTAGS.NUMERIC_NULL_VALUE_LONG)){ - LearningLibrary library = learningLibraryDAO.getLearningLibraryById(authoringActivityDTO.getLearningLibraryID()); - if(library!=null) - activity.setLearningLibrary(library); + Long learningLibraryID = WDDXProcessor.convertToLong(activityDetails,"learningLibraryID"); + if( learningLibraryID!=null ){ + LearningLibrary library = learningLibraryDAO.getLearningLibraryById(learningLibraryID); + activity.setLearningLibrary(library); + } else { + activity.setLearningLibrary(null); } - activity.setCreateDateTime(authoringActivityDTO.getCreateDateTime()); - activity.setRunOffline(authoringActivityDTO.getRunOffline()); - activity.setActivityCategoryID(authoringActivityDTO.getActivityCategoryID()); - activity.setLibraryActivityUiImage(authoringActivityDTO.getLibraryActivityUiImage()); + 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(authoringActivityDTO.getLibraryActivityID()!=null && - !authoringActivityDTO.getLibraryActivityID().equals(WDDXTAGS.NUMERIC_NULL_VALUE_LONG)){ - Activity libraryActivity = activityDAO.getActivityByActivityId(authoringActivityDTO.getLibraryActivityID()); - if(libraryActivity!=null) - activity.setLibraryActivity(libraryActivity); + Long libraryActivityID = WDDXProcessor.convertToLong(activityDetails,"libraryActivityID"); + if( libraryActivityID != null ){ + Activity libraryActivity = activityDAO.getActivityByActivityId(libraryActivityID); + activity.setLibraryActivity(libraryActivity); + } else { + activity.setLibraryActivity(null); } - activity.setApplyGrouping(authoringActivityDTO.getApplyGrouping()); - activity.setGroupingSupportType(authoringActivityDTO.getGroupingSupportType()); + activity.setApplyGrouping(WDDXProcessor.convertToBoolean(activityDetails,"applyGrouping")); + activity.setGroupingSupportType(WDDXProcessor.convertToInteger(activityDetails,"groupingSupportType")); return activity; } - private void processActivityType(Object activity, AuthoringActivityDTO authoringActivityDTO){ + private void processActivityType(Object activity, Hashtable activityDetails) + throws WDDXProcessorConversionException, ObjectExtractorException { if(activity instanceof GroupingActivity) - buildGroupingActivity((GroupingActivity)activity,authoringActivityDTO); + buildGroupingActivity((GroupingActivity)activity,activityDetails); else if(activity instanceof ToolActivity) - buildToolActivity((ToolActivity)activity,authoringActivityDTO); + buildToolActivity((ToolActivity)activity,activityDetails); else if(activity instanceof GateActivity) - buildGateActivity(activity,authoringActivityDTO); + buildGateActivity(activity,activityDetails); else - buildComplexActivity(activity,authoringActivityDTO); + buildComplexActivity(activity,activityDetails); } - private void buildComplexActivity(Object activity,AuthoringActivityDTO authoringActivityDTO){ + private void buildComplexActivity(Object activity,Hashtable activityDetails) throws WDDXProcessorConversionException{ if(activity instanceof OptionsActivity) - buildOptionsActivity((OptionsActivity)activity,authoringActivityDTO); + buildOptionsActivity((OptionsActivity)activity,activityDetails); else if (activity instanceof ParallelActivity) - buildParallelActivity((ParallelActivity)activity,authoringActivityDTO); + buildParallelActivity((ParallelActivity)activity,activityDetails); else - buildSequenceActivity((SequenceActivity)activity,authoringActivityDTO); + buildSequenceActivity((SequenceActivity)activity,activityDetails); } - private void buildGroupingActivity(GroupingActivity groupingActivity,AuthoringActivityDTO authoringActivityDTO){ - Integer groupingType = authoringActivityDTO.getGroupingType(); - Grouping grouping = extractGroupingObject(authoringActivityDTO.getGroupingDTO()); - groupingActivity.setCreateGrouping(grouping); - groupingActivity.setCreateGroupingUIID(grouping.getGroupingUIID()); + private void buildGroupingActivity(GroupingActivity groupingActivity,Hashtable activityDetails) + throws WDDXProcessorConversionException, ObjectExtractorException { + Hashtable groupingDetails = (Hashtable) activityDetails.get("groupingDTO"); + if( groupingDetails != null ){ + Grouping grouping = extractGroupingObject(groupingDetails); + groupingActivity.setCreateGrouping(grouping); + groupingActivity.setCreateGroupingUIID(grouping.getGroupingUIID()); + } else { + groupingActivity.setCreateGrouping(null); + groupingActivity.setCreateGroupingUIID(null); + } } - private void buildOptionsActivity(OptionsActivity optionsActivity,AuthoringActivityDTO authoringActivityDTO){ - optionsActivity.setMaxNumberOfOptions(authoringActivityDTO.getMaxOptions()); - optionsActivity.setMinNumberOfOptions(authoringActivityDTO.getMinOptions()); - optionsActivity.setOptionsInstructions(authoringActivityDTO.getOptionsInstructions()); + + 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")); } - private void buildParallelActivity(ParallelActivity activity,AuthoringActivityDTO authoringActivityDTO){ + private void buildParallelActivity(ParallelActivity activity,Hashtable activityDetails) throws WDDXProcessorConversionException{ } - private void buildSequenceActivity(SequenceActivity activity,AuthoringActivityDTO authoringActivityDTO){ + private void buildSequenceActivity(SequenceActivity activity,Hashtable activityDetails) throws WDDXProcessorConversionException{ } - private void buildToolActivity(ToolActivity toolActivity,AuthoringActivityDTO authoringActivityDTO){ - toolActivity.setToolContentId(authoringActivityDTO.getToolContentID()); - Tool tool =toolDAO.getToolByID(authoringActivityDTO.getToolID()); + 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); } - private void buildGateActivity(Object activity,AuthoringActivityDTO authoringActivityDTO){ + private void buildGateActivity(Object activity,Hashtable activityDetails) throws WDDXProcessorConversionException{ if(activity instanceof SynchGateActivity) - buildSynchGateActivity((SynchGateActivity)activity,authoringActivityDTO); + buildSynchGateActivity((SynchGateActivity)activity,activityDetails); else if (activity instanceof PermissionGateActivity) - buildPermissionGateActivity((PermissionGateActivity)activity,authoringActivityDTO); + buildPermissionGateActivity((PermissionGateActivity)activity,activityDetails); else - buildScheduleGateActivity((ScheduleGateActivity)activity,authoringActivityDTO); + buildScheduleGateActivity((ScheduleGateActivity)activity,activityDetails); GateActivity gateActivity = (GateActivity)activity ; - gateActivity.setGateActivityLevelId(authoringActivityDTO.getGateActivityLevelID()); - gateActivity.setGateOpen(authoringActivityDTO.getGateOpen()); + gateActivity.setGateActivityLevelId(WDDXProcessor.convertToInteger(activityDetails,"gateActivityLevelID")); + gateActivity.setGateOpen(WDDXProcessor.convertToBoolean(activityDetails,"gateOpen")); } - private void buildSynchGateActivity(SynchGateActivity activity,AuthoringActivityDTO authoringActivityDTO){ + private void buildSynchGateActivity(SynchGateActivity activity,Hashtable activityDetails) throws WDDXProcessorConversionException{ } - private void buildPermissionGateActivity(PermissionGateActivity activity,AuthoringActivityDTO authoringActivityDTO){ + private void buildPermissionGateActivity(PermissionGateActivity activity,Hashtable activityDetails) throws WDDXProcessorConversionException{ } - private static void buildScheduleGateActivity(ScheduleGateActivity activity,AuthoringActivityDTO authoringActivityDTO){ - activity.setGateStartDateTime(authoringActivityDTO.getGateStartDateTime()); - activity.setGateEndDateTime(authoringActivityDTO.getGateEndDateTime()); - activity.setGateStartTimeOffset(authoringActivityDTO.getGateStartTimeOffset()); - activity.setGateEndTimeOffset(authoringActivityDTO.getGateEndTimeOffset()); + 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")); } - public Grouping extractGroupingObject(GroupingDTO groupingDTO){ - Object object = Grouping.getGroupingInstance(groupingDTO.getGroupingType()); + + + public Grouping extractGroupingObject(Hashtable groupingDetails) throws WDDXProcessorConversionException, ObjectExtractorException{ + Integer groupingType=WDDXProcessor.convertToInteger(groupingDetails,"groupingType"); + if ( groupingType == null ) { + throw new ObjectExtractorException("groupingType missing"); + } + Object object = Grouping.getGroupingInstance(groupingType); + if(object instanceof RandomGrouping) - createRandomGrouping((RandomGrouping)object,groupingDTO); + createRandomGrouping((RandomGrouping)object,groupingDetails); else if(object instanceof ChosenGrouping) - createChosenGrouping((ChosenGrouping)object,groupingDTO); + createChosenGrouping((ChosenGrouping)object,groupingDetails); else - createLessonClass((LessonClass)object, groupingDTO); + createLessonClass((LessonClass)object, groupingDetails); Grouping grouping = (Grouping)object; - grouping.setGroupingUIID(groupingDTO.getGroupingUIID()); - grouping.setMaxNumberOfGroups(groupingDTO.getMaxNumberOfGroups()); + grouping.setGroupingId(WDDXProcessor.convertToLong(groupingDetails,"groupingID")); + grouping.setGroupingUIID(WDDXProcessor.convertToInteger(groupingDetails,"groupingUIID")); + grouping.setMaxNumberOfGroups(WDDXProcessor.convertToInteger(groupingDetails,"maxNumberOfGroups")); groupingDAO.insert(grouping); return grouping; } - private void createRandomGrouping(RandomGrouping randomGrouping,GroupingDTO groupingDTO){ - randomGrouping.setLearnersPerGroup(groupingDTO.getLearnersPerGroup()); - randomGrouping.setNumberOfGroups(groupingDTO.getNumberOfGroups()); + private void createRandomGrouping(RandomGrouping randomGrouping,Hashtable groupingDetails) throws WDDXProcessorConversionException{ + randomGrouping.setLearnersPerGroup(WDDXProcessor.convertToInteger(groupingDetails,"learnersPerGroup")); + randomGrouping.setNumberOfGroups(WDDXProcessor.convertToInteger(groupingDetails,"numberOfGroups")); } - private void createChosenGrouping(ChosenGrouping chosenGrouping,GroupingDTO groupingDTO){ + private void createChosenGrouping(ChosenGrouping chosenGrouping,Hashtable groupingDetails) throws WDDXProcessorConversionException{ } - private void createLessonClass(LessonClass lessonClass, GroupingDTO groupingDTO){ - Group group = groupDAO.getGroupById(groupingDTO.getStaffGroupID()); + private void createLessonClass(LessonClass lessonClass, Hashtable groupingDetails) throws WDDXProcessorConversionException{ + Group group = groupDAO.getGroupById(WDDXProcessor.convertToLong(groupingDetails,"staffGroupID")); if(group!=null) lessonClass.setStaffGroup(group); } - private Transition extractTransitionObject(TransitionDTO transitionDTO,LearningDesign learningDesign){ + + /** Create the transition from a WDDX based hashtable. It is easier to go + * straight to the data object rather than going via the DTO, as the DTO + * returns the special null values from the getter methods. This makes it + * hard to set up the transaction object from the transitionDTO. + * + * @param transitionDetails + * @throws WDDXProcessorConversionException + */ + private Transition extractTransitionObject(Hashtable transitionDetails, LearningDesign learningDesign) throws WDDXProcessorConversionException{ + Transition transition = new Transition(); - transition.setTransitionUIID(transitionDTO.getTransitionUIID()); - if(transitionDTO.getToUIID()!=null){ - Activity toActivity = activityDAO.getActivityByUIID(transitionDTO.getToUIID(), learningDesign); + + Long transitionID= WDDXProcessor.convertToLong(transitionDetails,"transitionID"); + if ( transitionID != null ) + transition.setTransitionId(transitionID); + + transition.setTransitionUIID(WDDXProcessor.convertToInteger(transitionDetails,"transitionUIID")); + + Integer toUIID=WDDXProcessor.convertToInteger(transitionDetails,"toUIID"); + if(toUIID!=null){ + Activity toActivity = activityDAO.getActivityByUIID(toUIID, learningDesign); transition.setToActivity(toActivity); - transition.setToUIID(transitionDTO.getToUIID()); + transition.setToUIID(toUIID); } - if(transitionDTO.getFromUIID()!=null){ - Activity fromActivity = activityDAO.getActivityByUIID(transitionDTO.getFromUIID(), learningDesign); + + Integer fromUIID=WDDXProcessor.convertToInteger(transitionDetails,"fromUIID"); + if(fromUIID!=null){ + Activity fromActivity = activityDAO.getActivityByUIID(fromUIID, learningDesign); transition.setFromActivity(fromActivity); - transition.setFromUIID(transitionDTO.getFromUIID()); + transition.setFromUIID(fromUIID); } - transition.setDescription(transitionDTO.getDescription()); - transition.setTitle(transitionDTO.getTitle()); - transition.setCreateDateTime(transitionDTO.getCreateDateTime()); + transition.setDescription(WDDXProcessor.convertToString(transitionDetails,"description")); + transition.setTitle(WDDXProcessor.convertToString(transitionDetails,"title")); + transition.setCreateDateTime(WDDXProcessor.convertToDate(transitionDetails,"createDateTime")); transition.setLearningDesign(learningDesign); return transition; } + + } Index: lams_central/src/java/org/lamsfoundation/lams/authoring/ObjectExtractorException.java =================================================================== diff -u --- lams_central/src/java/org/lamsfoundation/lams/authoring/ObjectExtractorException.java (revision 0) +++ lams_central/src/java/org/lamsfoundation/lams/authoring/ObjectExtractorException.java (revision b3dbc137e110d79b6aae154a808b7ca6e7de403d) @@ -0,0 +1,60 @@ +/*************************************************************************** + * Copyright (C) 2005 LAMS Foundation (http://lamsfoundation.org) + * ============================================================= + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 + * USA + * + * http://www.gnu.org/licenses/gpl.txt + * ***********************************************************************/ + +package org.lamsfoundation.lams.authoring; + +/** + * @author Fiona Malikoff + * + */ +public class ObjectExtractorException extends Exception { + + /** + * + */ + public ObjectExtractorException() { + super(); + } + + /** + * @param arg0 + */ + public ObjectExtractorException(String arg0) { + super(arg0); + } + + /** + * @param arg0 + */ + public ObjectExtractorException(Throwable arg0) { + super(arg0); + } + + /** + * @param arg0 + * @param arg1 + */ + public ObjectExtractorException(String arg0, Throwable arg1) { + super(arg0, arg1); + } + +} Index: lams_central/src/java/org/lamsfoundation/lams/authoring/service/AuthoringService.java =================================================================== diff -u -rbb134f0b5297fbdc3dab8f7bba1836b208940c1b -rb3dbc137e110d79b6aae154a808b7ca6e7de403d --- lams_central/src/java/org/lamsfoundation/lams/authoring/service/AuthoringService.java (.../AuthoringService.java) (revision bb134f0b5297fbdc3dab8f7bba1836b208940c1b) +++ lams_central/src/java/org/lamsfoundation/lams/authoring/service/AuthoringService.java (.../AuthoringService.java) (revision b3dbc137e110d79b6aae154a808b7ca6e7de403d) @@ -33,6 +33,7 @@ import org.apache.log4j.Logger; import org.lamsfoundation.lams.authoring.ObjectExtractor; +import org.lamsfoundation.lams.authoring.ObjectExtractorException; import org.lamsfoundation.lams.learningdesign.Activity; import org.lamsfoundation.lams.learningdesign.ActivityOrderComparator; import org.lamsfoundation.lams.learningdesign.ChosenGrouping; @@ -477,18 +478,17 @@ ObjectExtractor extractor = new ObjectExtractor(userDAO,learningDesignDAO, activityDAO,workspaceFolderDAO, learningLibraryDAO,licenseDAO, - groupingDAO,toolDAO,groupDAO,transitionDAO); - learningDesignDTO = new LearningDesignDTO(table); - if(learningDesignDTO!=null){ - LearningDesign design = extractor.extractLearningDesignObject(learningDesignDTO); + groupingDAO,toolDAO,groupDAO,transitionDAO); + try { + LearningDesign design = extractor.extractLearningDesign(table); learningDesignDAO.insert(design); flashMessage = new FlashMessage(IAuthoringService.STORE_LD_MESSAGE_KEY,design.getLearningDesignId()); - } - else + } catch ( ObjectExtractorException e ) { flashMessage = new FlashMessage(IAuthoringService.STORE_LD_MESSAGE_KEY, - "Invalid Object in WDDX packet", + "Invalid Object in WDDX packet. Error was "+e.getMessage(), FlashMessage.ERROR); - + } + return flashMessage.serializeMessage(); } /** Index: lams_common/src/java/org/lamsfoundation/lams/learningdesign/LearningDesign.java =================================================================== diff -u -rb0e60dcaf9e70b994ba004f4ce83feda7923ad39 -rb3dbc137e110d79b6aae154a808b7ca6e7de403d --- lams_common/src/java/org/lamsfoundation/lams/learningdesign/LearningDesign.java (.../LearningDesign.java) (revision b0e60dcaf9e70b994ba004f4ce83feda7923ad39) +++ lams_common/src/java/org/lamsfoundation/lams/learningdesign/LearningDesign.java (.../LearningDesign.java) (revision b3dbc137e110d79b6aae154a808b7ca6e7de403d) @@ -79,7 +79,7 @@ private Activity firstActivity; /** nullable persistent field */ - private Integer maxId; + private Integer maxID; /** persistent field */ private Boolean validDesign; @@ -164,7 +164,7 @@ String description, String title, Activity firstActivity, - Integer maxId, + Integer maxID, Boolean validDesign, Boolean readOnly, Date dateReadOnly, @@ -186,7 +186,7 @@ this.description = description; this.title = title; this.firstActivity = firstActivity; - this.maxId = maxId; + this.maxID = maxID; this.validDesign = validDesign; this.readOnly = readOnly; this.dateReadOnly = dateReadOnly; @@ -251,7 +251,7 @@ LearningDesign newDesign = new LearningDesign(); newDesign.setDescription(design.getDescription()); newDesign.setTitle(design.getTitle()); - newDesign.setMaxId(design.getMaxId()); + newDesign.setMaxID(design.getMaxID()); newDesign.setValidDesign(design.getValidDesign()); newDesign.setDateReadOnly(design.getDateReadOnly()); newDesign.setHelpText(design.getHelpText()); @@ -295,11 +295,11 @@ public void setFirstActivity(Activity firstActivity) { this.firstActivity = firstActivity; } - public Integer getMaxId() { - return maxId; + public Integer getMaxID() { + return maxID; } - public void setMaxId(Integer maxId) { - this.maxId = maxId; + public void setMaxID(Integer maxID) { + this.maxID = maxID; } public Boolean getValidDesign() { return validDesign; Index: lams_common/src/java/org/lamsfoundation/lams/learningdesign/Transition.java =================================================================== diff -u -r55901923afea1cbd769d8daa05051aa050bb99b6 -rb3dbc137e110d79b6aae154a808b7ca6e7de403d --- lams_common/src/java/org/lamsfoundation/lams/learningdesign/Transition.java (.../Transition.java) (revision 55901923afea1cbd769d8daa05051aa050bb99b6) +++ lams_common/src/java/org/lamsfoundation/lams/learningdesign/Transition.java (.../Transition.java) (revision b3dbc137e110d79b6aae154a808b7ca6e7de403d) @@ -24,6 +24,7 @@ import java.io.Serializable; import java.util.Date; + import org.apache.commons.lang.builder.EqualsBuilder; import org.apache.commons.lang.builder.HashCodeBuilder; import org.apache.commons.lang.builder.ToStringBuilder; @@ -107,7 +108,7 @@ this.fromActivity = fromActivity; this.learningDesign = learningDesign; } - + /** * Makes a copy of the Transition for authoring, preview and monitoring enviornment * Index: lams_common/src/java/org/lamsfoundation/lams/learningdesign/dto/AuthoringActivityDTO.java =================================================================== diff -u -r56d3e2b01ea43c10d95f83427a82094c724b578c -rb3dbc137e110d79b6aae154a808b7ca6e7de403d --- lams_common/src/java/org/lamsfoundation/lams/learningdesign/dto/AuthoringActivityDTO.java (.../AuthoringActivityDTO.java) (revision 56d3e2b01ea43c10d95f83427a82094c724b578c) +++ lams_common/src/java/org/lamsfoundation/lams/learningdesign/dto/AuthoringActivityDTO.java (.../AuthoringActivityDTO.java) (revision b3dbc137e110d79b6aae154a808b7ca6e7de403d) @@ -23,7 +23,6 @@ package org.lamsfoundation.lams.learningdesign.dto; import java.util.Date; -import java.util.Hashtable; import org.lamsfoundation.lams.learningdesign.Activity; import org.lamsfoundation.lams.learningdesign.GateActivity; @@ -36,7 +35,6 @@ import org.lamsfoundation.lams.learningdesign.SequenceActivity; import org.lamsfoundation.lams.learningdesign.SynchGateActivity; import org.lamsfoundation.lams.learningdesign.ToolActivity; -import org.lamsfoundation.lams.util.wddx.WDDXProcessorConversionException; import org.lamsfoundation.lams.util.wddx.WDDXTAGS; /** * @author Manpreet Minhas @@ -264,53 +262,7 @@ } - public AuthoringActivityDTO(Hashtable activityDetails) throws WDDXProcessorConversionException{ - this.activityUIID = convertToInteger(activityDetails,"activityUIID"); - this.description = convertToString(activityDetails,"description"); - this.title = convertToString(activityDetails,"title"); - this.helpText = convertToString(activityDetails,"helpText"); - this.xcoord = convertToInteger(activityDetails, "xcoord"); - this.ycoord = convertToInteger(activityDetails, "ycoord"); - this.parentActivityID = convertToLong(activityDetails, "parentActivityID"); - this.parentUIID = convertToInteger(activityDetails, "parentUIID"); - - this.activityTypeID = convertToInteger(activityDetails, "activityTypeID"); - this.groupingID = convertToLong(activityDetails,"groupingID"); - this.groupingUIID = convertToInteger(activityDetails,"groupingUIID"); - this.orderID = convertToInteger(activityDetails,"orderID"); - this.defineLater = convertToBoolean(activityDetails,"defineLater"); - this.learningDesignID = convertToLong(activityDetails,"learningDesignID"); - this.learningLibraryID = convertToLong(activityDetails,"learningLibraryID"); - this.createDateTime = convertToDate(activityDetails,"createDateTime"); - this.runOffline = convertToBoolean(activityDetails,"runOffline"); - this.maxOptions = convertToInteger(activityDetails,"maxOptions"); - this.minOptions = convertToInteger(activityDetails,"minOptions"); - this.optionsInstructions = convertToString(activityDetails,"optionsInstructions"); - this.toolID = convertToLong(activityDetails,"toolID"); - this.toolContentID = convertToLong(activityDetails,"toolContentID"); - this. activityCategoryID = convertToInteger(activityDetails,"activityCategoryID"); - - this.gateActivityLevelID = convertToInteger(activityDetails,"gateActivityLevelID"); - this.gateOpen = convertToBoolean(activityDetails,"gateOpen"); - this.gateEndTimeOffset = convertToLong(activityDetails,"gateEndTimeOffset"); - this.gateStartTimeOffset = convertToLong(activityDetails,"gateStartTimeOffset"); - this.gateEndDateTime = convertToDate(activityDetails,"gateEndDateTime"); - this.gateStartDateTime = convertToDate(activityDetails,"gateStartDateTime"); - - this.libraryActivityUiImage=convertToString(activityDetails,"libraryActivityUiImage"); - this.createGroupingID= convertToLong(activityDetails,"createGroupingID"); - this.createGroupingUIID=convertToInteger(activityDetails,"createGroupingUIID"); - this.libraryActivityID=convertToLong(activityDetails,"libraryActivityID"); - this.applyGrouping=convertToBoolean(activityDetails,"applyGrouping"); - this.groupingSupportType=convertToInteger(activityDetails,"groupingSupportType"); - this.groupingType=convertToInteger(activityDetails,"groupingType"); - if(activityDetails.containsKey("groupingDTO")){ - Hashtable groupingDetails = (Hashtable) activityDetails.get("groupingDTO"); - this.groupingDTO = new GroupingDTO(groupingDetails); - } - - } private void processActivityType(Object activity){ if(activity instanceof GroupingActivity) addGroupingActivityAttributes((GroupingActivity)activity); Index: lams_common/src/java/org/lamsfoundation/lams/learningdesign/dto/BaseDTO.java =================================================================== diff -u -r56d3e2b01ea43c10d95f83427a82094c724b578c -rb3dbc137e110d79b6aae154a808b7ca6e7de403d --- lams_common/src/java/org/lamsfoundation/lams/learningdesign/dto/BaseDTO.java (.../BaseDTO.java) (revision 56d3e2b01ea43c10d95f83427a82094c724b578c) +++ lams_common/src/java/org/lamsfoundation/lams/learningdesign/dto/BaseDTO.java (.../BaseDTO.java) (revision b3dbc137e110d79b6aae154a808b7ca6e7de403d) @@ -22,114 +22,16 @@ */ package org.lamsfoundation.lams.learningdesign.dto; -import java.util.Date; -import java.util.Hashtable; -import org.lamsfoundation.lams.util.wddx.WDDXProcessor; -import org.lamsfoundation.lams.util.wddx.WDDXProcessorConversionException; - /** - * @author Manpreet Minhas, Fiona Malikoff + * @author Manpreet Minhas * * This class acts as base class for all authoring DTO's. * It will contain any helper methods for DTOs. * */ public class BaseDTO { - /** Get an Integer from a hashtable, based on the given key. - * If the key doesn't exist, return null. - * Uses WDDXProcessor.getInteger(), which handles string inputs - * and Flash null values. - * @param table Hashtable containing values from Flash. Must not be null - * or NullPointerException will be thrown. - * @param key Key of entry in table. Must not be null - * or NullPointerException will be thrown. - * @return Integer value of entry in table, or null. - * @throws WDDXProcessorConversionException if the value cannot be converted. - * @author Fiona Malikoff - */ - protected Integer convertToInteger(Hashtable table, String key) - throws WDDXProcessorConversionException { - if(table.containsKey(key)) { - return WDDXProcessor.convertToInteger(key, table.get(key)); - } - return null; - } - /** Get an Long from a hashtable, based on the given key. - * If the key doesn't exist, return null. - * Uses WDDXProcessor.getLong(), which handles string inputs - * and Flash null values. - * @param table Hashtable containing values from Flash. Must not be null - * or NullPointerException will be thrown. - * @param key Key of entry in table. Must not be null - * or NullPointerException will be thrown. - * @return Integer value of entry in table, or null. - * @throws WDDXProcessorConversionException if the value cannot be converted. - * @author Fiona Malikoff - */ - protected Long convertToLong(Hashtable table, String key) - throws WDDXProcessorConversionException { - if(table.containsKey(key)) { - return WDDXProcessor.convertToLong(key, table.get(key)); - } - return null; - } - - /** Get an String from a hashtable, based on the given key. - * If the key doesn't exist, return null. - * @param table Hashtable containing values from Flash. Must not be null - * or NullPointerException will be thrown. - * @param key Key of entry in table. Must not be null - * or NullPointerException will be thrown. - * @return Integer value of entry in table, or null. - * @throws WDDXProcessorConversionException if the value cannot be converted. - * @author Fiona Malikoff - */ - protected String convertToString(Hashtable table, String key) - throws WDDXProcessorConversionException { - if(table.containsKey(key)) { - return WDDXProcessor.convertToString(key, table.get(key)); - } - return null; - } - - /** Get an Boolean from a hashtable, based on the given key. - * If the key doesn't exist, return null. - * @param table Hashtable containing values from Flash. Must not be null - * or NullPointerException will be thrown. - * @param key Key of entry in table. Must not be null - * or NullPointerException will be thrown. - * @return Integer value of entry in table, or null. - * @throws WDDXProcessorConversionException if the value cannot be converted. - * @author Fiona Malikoff - */ - protected Boolean convertToBoolean(Hashtable table, String key) - throws WDDXProcessorConversionException { - if(table.containsKey(key)) { - return WDDXProcessor.convertToBoolean(key, table.get(key)); - } - return null; - } - - /** Get an Date from a hashtable, based on the given key. - * If the key doesn't exist, return null. - * @param table Hashtable containing values from Flash. Must not be null - * or NullPointerException will be thrown. - * @param key Key of entry in table. Must not be null - * or NullPointerException will be thrown. - * @return Integer value of entry in table, or null. - * @throws WDDXProcessorConversionException if the value cannot be converted. - * @author Fiona Malikoff - */ - protected Date convertToDate(Hashtable table, String key) - throws WDDXProcessorConversionException { - if(table.containsKey(key)) { - return WDDXProcessor.convertToDate(key, table.get(key)); - } - return null; - } - } Index: lams_common/src/java/org/lamsfoundation/lams/learningdesign/dto/GroupingDTO.java =================================================================== diff -u -r56d3e2b01ea43c10d95f83427a82094c724b578c -rb3dbc137e110d79b6aae154a808b7ca6e7de403d --- lams_common/src/java/org/lamsfoundation/lams/learningdesign/dto/GroupingDTO.java (.../GroupingDTO.java) (revision 56d3e2b01ea43c10d95f83427a82094c724b578c) +++ lams_common/src/java/org/lamsfoundation/lams/learningdesign/dto/GroupingDTO.java (.../GroupingDTO.java) (revision b3dbc137e110d79b6aae154a808b7ca6e7de403d) @@ -22,13 +22,10 @@ */ package org.lamsfoundation.lams.learningdesign.dto; -import java.util.Hashtable; - import org.lamsfoundation.lams.learningdesign.ChosenGrouping; import org.lamsfoundation.lams.learningdesign.Grouping; import org.lamsfoundation.lams.learningdesign.RandomGrouping; import org.lamsfoundation.lams.lesson.LessonClass; -import org.lamsfoundation.lams.util.wddx.WDDXProcessorConversionException; import org.lamsfoundation.lams.util.wddx.WDDXTAGS; /** @@ -66,15 +63,6 @@ Object object = Grouping.getGroupingInstance(groupingType); processGroupingActivity(object); } - public GroupingDTO(Hashtable groupingDetails) throws WDDXProcessorConversionException{ - this.groupingID =convertToLong(groupingDetails,"groupingID"); - this.groupingUIID =convertToInteger(groupingDetails,"groupingUIID"); - this.maxNumberOfGroups =convertToInteger(groupingDetails,"maxNumberOfGroups"); - this.groupingType =convertToInteger(groupingDetails,"groupingType"); - this.staffGroupID =convertToLong(groupingDetails,"staffGroupID"); - this.numberOfGroups =convertToInteger(groupingDetails,"numberOfGroups"); - this.learnersPerGroup =convertToInteger(groupingDetails,"learnersPerGroup"); - } public void processGroupingActivity(Object object){ if(object instanceof RandomGrouping) addRandomGroupingAttributes((RandomGrouping)object); Index: lams_common/src/java/org/lamsfoundation/lams/learningdesign/dto/LearningDesignDTO.java =================================================================== diff -u -r56d3e2b01ea43c10d95f83427a82094c724b578c -rb3dbc137e110d79b6aae154a808b7ca6e7de403d --- lams_common/src/java/org/lamsfoundation/lams/learningdesign/dto/LearningDesignDTO.java (.../LearningDesignDTO.java) (revision 56d3e2b01ea43c10d95f83427a82094c724b578c) +++ lams_common/src/java/org/lamsfoundation/lams/learningdesign/dto/LearningDesignDTO.java (.../LearningDesignDTO.java) (revision b3dbc137e110d79b6aae154a808b7ca6e7de403d) @@ -25,15 +25,12 @@ import java.util.ArrayList; import java.util.Date; -import java.util.Hashtable; import java.util.Iterator; -import java.util.Vector; import org.lamsfoundation.lams.learningdesign.Activity; import org.lamsfoundation.lams.learningdesign.ComplexActivity; import org.lamsfoundation.lams.learningdesign.LearningDesign; import org.lamsfoundation.lams.learningdesign.Transition; -import org.lamsfoundation.lams.util.wddx.WDDXProcessorConversionException; import org.lamsfoundation.lams.util.wddx.WDDXTAGS; /** @@ -146,7 +143,7 @@ this.firstActivityUIID = learningDesign.getFirstActivity()!=null? learningDesign.getFirstActivity().getActivityUIID(): WDDXTAGS.NUMERIC_NULL_VALUE_INTEGER; - this.maxID = learningDesign.getMaxId(); + this.maxID = learningDesign.getMaxID(); this.validDesign = learningDesign.getValidDesign(); this.readOnly = learningDesign.getReadOnly(); this.dateReadOnly = learningDesign.getDateReadOnly(); @@ -188,39 +185,7 @@ this.activities = populateActivities(learningDesign); this.transitions = populateTransitions(learningDesign); } - public LearningDesignDTO(Hashtable table) throws WDDXProcessorConversionException{ - - this.learningDesignUIID = convertToInteger(table,"learningDesignUIID"); - this.description = convertToString(table,"description"); - this.title = convertToString(table,"title"); - this.firstActivityUIID = convertToInteger(table,"firstActivityUIID"); - this.maxID = convertToInteger(table,"maxID"); - this.validDesign = convertToBoolean(table,"validDesign"); - this.readOnly = convertToBoolean(table,"readOnly");; - this.dateReadOnly = convertToDate(table,"dateReadOnly"); - this.offlineInstructions= convertToString(table,"offlineInstructions"); - this.onlineInstructions =convertToString(table,"onlineInstructions"); - this.userID = convertToInteger(table,"userID"); - this.helpText = convertToString(table,"helpText"); - this.copyTypeID = convertToInteger(table,"copyTypeID"); - this.createDateTime = convertToDate(table,"createDateTime"); - this.version = convertToString(table,"version"); - this.parentLearningDesignID = convertToLong(table,"parentLearningDesignID"); - this.workspaceFolderID = convertToInteger(table,"workspaceFolderID"); - this.duration = convertToLong(table,"duration"); - this.licenseID =convertToLong(table,"licenseID"); - this.licenseText = convertToString(table,"licenseText"); - this.lastModifiedDateTime =convertToDate(table,"lastModifiedDateTime"); - - Vector activityDetails = (Vector)table.get("activities"); - this.activities = new ArrayList(); - activities.addAll(activityDetails); - - Vector transitionDetails = (Vector)table.get("transitions"); - this.transitions = new ArrayList(); - transitions.addAll(transitionDetails); - - } + /** * @return Returns the copyTypeID. */ @@ -640,51 +605,5 @@ return offlineInstructions!=null?offlineInstructions:WDDXTAGS.STRING_NULL_VALUE; } - public static LearningDesign extractLearningDesign(LearningDesignDTO learningDesignDTO){ - LearningDesign learningDesign = new LearningDesign(); - if(!learningDesignDTO.getLearningDesignUIID().equals(WDDXTAGS.NUMERIC_NULL_VALUE_INTEGER)) - learningDesign.setLearningDesignUIID(learningDesignDTO.getLearningDesignUIID()); - if(!learningDesignDTO.getDescription().equals(WDDXTAGS.STRING_NULL_VALUE)) - learningDesign.setDescription(learningDesignDTO.getDescription()); - if(!learningDesignDTO.getTitle().equals(WDDXTAGS.STRING_NULL_VALUE)) - learningDesign.setTitle(learningDesignDTO.getTitle()); - if(!learningDesignDTO.getMaxID().equals(WDDXTAGS.NUMERIC_NULL_VALUE_INTEGER)) - learningDesign.setMaxId(learningDesignDTO.getMaxID()); - - learningDesign.setValidDesign(learningDesignDTO.getValidDesign()); - learningDesign.setReadOnly(learningDesignDTO.getReadOnly()); - - if(!learningDesignDTO.getCopyTypeID().equals(WDDXTAGS.NUMERIC_NULL_VALUE_INTEGER)) - learningDesign.setCopyTypeID(learningDesignDTO.getCopyTypeID()); - if(!learningDesignDTO.getHelpText().equals(WDDXTAGS.STRING_NULL_VALUE)) - learningDesign.setHelpText(learningDesignDTO.getHelpText()); - if(!learningDesignDTO.getOfflineInstructions().equals(WDDXTAGS.STRING_NULL_VALUE)) - learningDesign.setHelpText(learningDesignDTO.getOfflineInstructions()); - if(!learningDesignDTO.getOnlineInstructions().equals(WDDXTAGS.STRING_NULL_VALUE)) - learningDesign.setHelpText(learningDesignDTO.getOnlineInstructions()); - if(!learningDesignDTO.getVersion().equals(WDDXTAGS.STRING_NULL_VALUE)) - learningDesign.setVersion(learningDesignDTO.getVersion()); - if(!learningDesignDTO.getLicenseText().equals(WDDXTAGS.STRING_NULL_VALUE)) - learningDesign.setLicenseText(learningDesignDTO.getLicenseText()); - if(!learningDesignDTO.getLessonOrgName().equals(WDDXTAGS.STRING_NULL_VALUE)) - learningDesign.setLessonOrgName(learningDesignDTO.getLessonOrgName()); - if(!learningDesignDTO.getLessonName().equals(WDDXTAGS.STRING_NULL_VALUE)) - learningDesign.setLessonName(learningDesignDTO.getLessonName()); - if(!learningDesignDTO.getDateReadOnly().equals(WDDXTAGS.DATE_NULL_VALUE)) - learningDesign.setDateReadOnly(learningDesignDTO.getDateReadOnly()); - if(!learningDesignDTO.getCreateDateTime().equals(WDDXTAGS.DATE_NULL_VALUE)) - learningDesign.setCreateDateTime(learningDesignDTO.getCreateDateTime()); - if(!learningDesignDTO.getLessonStartDateTime().equals(WDDXTAGS.DATE_NULL_VALUE)) - learningDesign.setLessonStartDateTime(learningDesignDTO.getLessonStartDateTime()); - if(!learningDesignDTO.getLastModifiedDateTime().equals(WDDXTAGS.DATE_NULL_VALUE)) - learningDesign.setLastModifiedDateTime(learningDesignDTO.getLastModifiedDateTime()); - if(!learningDesignDTO.getLessonID().equals(WDDXTAGS.NUMERIC_NULL_VALUE_LONG)) - learningDesign.setLessonID(learningDesignDTO.getLessonID()); - if(!learningDesignDTO.getLessonOrgID().equals(WDDXTAGS.NUMERIC_NULL_VALUE_LONG)) - learningDesign.setLessonOrgID(learningDesignDTO.getLessonOrgID()); - if(!learningDesignDTO.getDuration().equals(WDDXTAGS.NUMERIC_NULL_VALUE_LONG)) - learningDesign.setDuration(learningDesignDTO.getDuration()); - - return learningDesign; - } + } Index: lams_common/src/java/org/lamsfoundation/lams/learningdesign/dto/TransitionDTO.java =================================================================== diff -u -r56d3e2b01ea43c10d95f83427a82094c724b578c -rb3dbc137e110d79b6aae154a808b7ca6e7de403d --- lams_common/src/java/org/lamsfoundation/lams/learningdesign/dto/TransitionDTO.java (.../TransitionDTO.java) (revision 56d3e2b01ea43c10d95f83427a82094c724b578c) +++ lams_common/src/java/org/lamsfoundation/lams/learningdesign/dto/TransitionDTO.java (.../TransitionDTO.java) (revision b3dbc137e110d79b6aae154a808b7ca6e7de403d) @@ -23,10 +23,8 @@ package org.lamsfoundation.lams.learningdesign.dto; import java.util.Date; -import java.util.Hashtable; import org.lamsfoundation.lams.learningdesign.Transition; -import org.lamsfoundation.lams.util.wddx.WDDXProcessorConversionException; import org.lamsfoundation.lams.util.wddx.WDDXTAGS; @@ -77,18 +75,6 @@ this.fromActivityID = transition.getFromActivity().getActivityId(); this.learningDesignID = transition.getLearningDesign().getLearningDesignId(); } - public TransitionDTO(Hashtable transitionDetails) throws WDDXProcessorConversionException{ - transitionID= convertToLong(transitionDetails,"transitionID"); - transitionUIID=convertToInteger(transitionDetails,"transitionUIID"); - toUIID=convertToInteger(transitionDetails,"toUIID"); - fromUIID=convertToInteger(transitionDetails,"fromUIID"); - description=convertToString(transitionDetails,"description"); - title=convertToString(transitionDetails,"title"); - createDateTime=convertToDate(transitionDetails,"createDateTime"); - toActivityID=convertToLong(transitionDetails,"toActivityID"); - fromActivityID=convertToLong(transitionDetails,"fromActivityID"); - learningDesignID=convertToLong(transitionDetails,"learningDesignID"); - } /** * @return Returns the createDateTime. */ Index: lams_common/src/java/org/lamsfoundation/lams/themes/dto/CSSThemeDTO.java =================================================================== diff -u -r56d3e2b01ea43c10d95f83427a82094c724b578c -rb3dbc137e110d79b6aae154a808b7ca6e7de403d --- lams_common/src/java/org/lamsfoundation/lams/themes/dto/CSSThemeDTO.java (.../CSSThemeDTO.java) (revision 56d3e2b01ea43c10d95f83427a82094c724b578c) +++ lams_common/src/java/org/lamsfoundation/lams/themes/dto/CSSThemeDTO.java (.../CSSThemeDTO.java) (revision b3dbc137e110d79b6aae154a808b7ca6e7de403d) @@ -30,6 +30,7 @@ import org.apache.log4j.Logger; import org.lamsfoundation.lams.learningdesign.dto.BaseDTO; import org.lamsfoundation.lams.themes.CSSThemeVisualElement; +import org.lamsfoundation.lams.util.wddx.WDDXProcessor; import org.lamsfoundation.lams.util.wddx.WDDXProcessorConversionException; /** @@ -68,9 +69,9 @@ */ public CSSThemeDTO(Hashtable wddxData) throws WDDXProcessorConversionException { if ( wddxData != null ) { - this.id = convertToLong(wddxData,ID_TAG); - this.name = convertToString(wddxData,NAME_TAG); - this.description = convertToString(wddxData,DESCRIPTION_TAG); + this.id = WDDXProcessor.convertToLong(wddxData,ID_TAG); + this.name = WDDXProcessor.convertToString(wddxData,NAME_TAG); + this.description = WDDXProcessor.convertToString(wddxData,DESCRIPTION_TAG); Hashtable so = (Hashtable) wddxData.get(BASE_STYLE_OBJECT_TAG); if ( so != null ) { baseStyleObject = new CSSStyleDTO(so); Index: lams_common/src/java/org/lamsfoundation/lams/themes/dto/CSSVisualElementDTO.java =================================================================== diff -u -r56d3e2b01ea43c10d95f83427a82094c724b578c -rb3dbc137e110d79b6aae154a808b7ca6e7de403d --- lams_common/src/java/org/lamsfoundation/lams/themes/dto/CSSVisualElementDTO.java (.../CSSVisualElementDTO.java) (revision 56d3e2b01ea43c10d95f83427a82094c724b578c) +++ lams_common/src/java/org/lamsfoundation/lams/themes/dto/CSSVisualElementDTO.java (.../CSSVisualElementDTO.java) (revision b3dbc137e110d79b6aae154a808b7ca6e7de403d) @@ -28,6 +28,7 @@ import org.lamsfoundation.lams.learningdesign.dto.BaseDTO; import org.lamsfoundation.lams.themes.CSSStyle; import org.lamsfoundation.lams.themes.CSSThemeVisualElement; +import org.lamsfoundation.lams.util.wddx.WDDXProcessor; import org.lamsfoundation.lams.util.wddx.WDDXProcessorConversionException; /** @@ -57,7 +58,7 @@ */ public CSSVisualElementDTO(Hashtable wddxData) throws WDDXProcessorConversionException { if ( wddxData != null ) { - this.name = convertToString(wddxData,CSSThemeDTO.NAME_TAG); + this.name = WDDXProcessor.convertToString(wddxData,CSSThemeDTO.NAME_TAG); Hashtable so = (Hashtable) wddxData.get(CSSThemeDTO.STYLE_OBJECT_TAG); if ( so != null ) { styleObject = new CSSStyleDTO(so); Index: lams_common/src/java/org/lamsfoundation/lams/util/DateUtil.java =================================================================== diff -u -r4444923f527c224de7158f50f1c5ea25f3ad383e -rb3dbc137e110d79b6aae154a808b7ca6e7de403d --- lams_common/src/java/org/lamsfoundation/lams/util/DateUtil.java (.../DateUtil.java) (revision 4444923f527c224de7158f50f1c5ea25f3ad383e) +++ lams_common/src/java/org/lamsfoundation/lams/util/DateUtil.java (.../DateUtil.java) (revision b3dbc137e110d79b6aae154a808b7ca6e7de403d) @@ -42,6 +42,7 @@ public class DateUtil { + public static final String FLASH_FORMAT = "yyyy-MM-dd'T'HH:mm:ssZ"; /** * Convert your local time to Universal Time Coordinator. * TODO conversion is not working properly. The returned Date object still @@ -98,7 +99,7 @@ // Replace this implementation with commons.lang.time.DateUtils.parseDate() // if/when we upgrade to commons 2.1 SimpleDateFormat parser = null; - String[] parseFormats = new String[] {"yyyy-MM-dd'T'HH:mm:ss"}; + String[] parseFormats = new String[] {FLASH_FORMAT}; for (int i = 0; i < parseFormats.length; i++) { if (i == 0) { parser = new SimpleDateFormat(parseFormats[0]); Index: lams_common/src/java/org/lamsfoundation/lams/util/wddx/WDDXProcessor.java =================================================================== diff -u -r7a9b889ef3ba8294bbbd6eb79fa18051416e7b6f -rb3dbc137e110d79b6aae154a808b7ca6e7de403d --- lams_common/src/java/org/lamsfoundation/lams/util/wddx/WDDXProcessor.java (.../WDDXProcessor.java) (revision 7a9b889ef3ba8294bbbd6eb79fa18051416e7b6f) +++ lams_common/src/java/org/lamsfoundation/lams/util/wddx/WDDXProcessor.java (.../WDDXProcessor.java) (revision b3dbc137e110d79b6aae154a808b7ca6e7de403d) @@ -26,6 +26,7 @@ import java.io.StringReader; import java.io.StringWriter; import java.util.Date; +import java.util.Hashtable; import org.apache.commons.lang.StringUtils; import org.apache.log4j.Logger; @@ -122,7 +123,103 @@ return tempsw.toString(); } - /** + /** Get an Integer from a hashtable, based on the given key. + * If the key doesn't exist, return null. Simplifies interface + * to getInteger(), which handles string inputs + * and Flash null values. + * @param table Hashtable containing values from Flash. Must not be null + * or NullPointerException will be thrown. + * @param key Key of entry in table. Must not be null + * or NullPointerException will be thrown. + * @return Integer value of entry in table, or null. + * @throws WDDXProcessorConversionException if the value cannot be converted. + * @author Fiona Malikoff + */ + public static Integer convertToInteger(Hashtable table, String key) + throws WDDXProcessorConversionException { + if(table.containsKey(key)) { + return WDDXProcessor.convertToInteger(key, table.get(key)); + } + return null; + } + + /** Get an Long from a hashtable, based on the given key. + * If the key doesn't exist, return null. Simplifies interface + * to getLong(), which handles string inputs and Flash null values. + * @param table Hashtable containing values from Flash. Must not be null + * or NullPointerException will be thrown. + * @param key Key of entry in table. Must not be null + * or NullPointerException will be thrown. + * @return Integer value of entry in table, or null. + * @throws WDDXProcessorConversionException if the value cannot be converted. + * @author Fiona Malikoff + */ + public static Long convertToLong(Hashtable table, String key) + throws WDDXProcessorConversionException { + if(table.containsKey(key)) { + return WDDXProcessor.convertToLong(key, table.get(key)); + } + return null; + } + + /** Get an String from a hashtable, based on the given key. + * Simplifies interface to getString(). + * If the key doesn't exist, return null. + * @param table Hashtable containing values from Flash. Must not be null + * or NullPointerException will be thrown. + * @param key Key of entry in table. Must not be null + * or NullPointerException will be thrown. + * @return Integer value of entry in table, or null. + * @throws WDDXProcessorConversionException if the value cannot be converted. + * @author Fiona Malikoff + */ + public static String convertToString(Hashtable table, String key) + throws WDDXProcessorConversionException { + if(table.containsKey(key)) { + return WDDXProcessor.convertToString(key, table.get(key)); + } + return null; + } + + /** Get an Boolean from a hashtable, based on the given key. + * If the key doesn't exist, return null. Simplifies interface + * to getBoolean(). + * @param table Hashtable containing values from Flash. Must not be null + * or NullPointerException will be thrown. + * @param key Key of entry in table. Must not be null + * or NullPointerException will be thrown. + * @return Integer value of entry in table, or null. + * @throws WDDXProcessorConversionException if the value cannot be converted. + * @author Fiona Malikoff + */ + public static Boolean convertToBoolean(Hashtable table, String key) + throws WDDXProcessorConversionException { + if(table.containsKey(key)) { + return WDDXProcessor.convertToBoolean(key, table.get(key)); + } + return null; + } + + /** Get an Date from a hashtable, based on the given key. + * If the key doesn't exist, return null. Simplifies interface + * to getDate(). + * @param table Hashtable containing values from Flash. Must not be null + * or NullPointerException will be thrown. + * @param key Key of entry in table. Must not be null + * or NullPointerException will be thrown. + * @return Integer value of entry in table, or null. + * @throws WDDXProcessorConversionException if the value cannot be converted. + * @author Fiona Malikoff + */ + public static Date convertToDate(Hashtable table, String key) + throws WDDXProcessorConversionException { + if(table.containsKey(key)) { + return WDDXProcessor.convertToDate(key, table.get(key)); + } + return null; + } + + /** * Convert a string to an int, based on how WDDX usually passes numbers. * If it gets any of the NULL value objects (see WDDXTAGS) then it will * consider this the same as a null.