Index: lams_build/lib/lams/lams.jar =================================================================== diff -u -r4eb868dc66707921b3f0b57cdb909cc9530b45b8 -r2f02ea654f2380229d55ffd2483ba21ac48856d8 Binary files differ Index: lams_central/src/java/org/lamsfoundation/lams/authoring/web/AuthoringAction.java =================================================================== diff -u -r11b64f81e406ff277c7c35988304b0064300de57 -r2f02ea654f2380229d55ffd2483ba21ac48856d8 --- lams_central/src/java/org/lamsfoundation/lams/authoring/web/AuthoringAction.java (.../AuthoringAction.java) (revision 11b64f81e406ff277c7c35988304b0064300de57) +++ lams_central/src/java/org/lamsfoundation/lams/authoring/web/AuthoringAction.java (.../AuthoringAction.java) (revision 2f02ea654f2380229d55ffd2483ba21ac48856d8) @@ -56,6 +56,7 @@ import org.lamsfoundation.lams.learningdesign.LearningDesignAccess; import org.lamsfoundation.lams.learningdesign.LearningLibrary; import org.lamsfoundation.lams.learningdesign.LearningLibraryGroup; +import org.lamsfoundation.lams.learningdesign.dto.AuthoringActivityDTO; import org.lamsfoundation.lams.learningdesign.dto.LearningDesignDTO; import org.lamsfoundation.lams.learningdesign.dto.ValidationErrorDTO; import org.lamsfoundation.lams.learningdesign.service.ILearningDesignService; @@ -170,12 +171,20 @@ return null; } + @SuppressWarnings("unchecked") public ActionForward openLearningDesign(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException, JSONException { long learningDesignID = WebUtil.readLongParam(request, AttributeNames.PARAM_LEARNINGDESIGN_ID); LearningDesignDTO learningDesignDTO = getLearningDesignService().getLearningDesignDTO(learningDesignID, getUserLanguage()); + // some old LDs may not have learning library IDs filled in, try to find them + for (AuthoringActivityDTO activity : (List) learningDesignDTO.getActivities()) { + if (activity.getLearningLibraryID() == null) { + getLearningDesignService().fillLearningLibraryID(activity); + } + } + Integer userId = getUserId(); getAuthoringService().storeLearningDesignAccess(learningDesignID, userId); Index: lams_common/src/java/org/lamsfoundation/lams/commonContext.xml =================================================================== diff -u -r353fe07604639c2166ed68fbf832810959f3f3cf -r2f02ea654f2380229d55ffd2483ba21ac48856d8 --- lams_common/src/java/org/lamsfoundation/lams/commonContext.xml (.../commonContext.xml) (revision 353fe07604639c2166ed68fbf832810959f3f3cf) +++ lams_common/src/java/org/lamsfoundation/lams/commonContext.xml (.../commonContext.xml) (revision 2f02ea654f2380229d55ffd2483ba21ac48856d8) @@ -87,6 +87,7 @@ + @@ -108,6 +109,7 @@ PROPAGATION_REQUIRED PROPAGATION_REQUIRED PROPAGATION_REQUIRED + PROPAGATION_REQUIRED Index: lams_common/src/java/org/lamsfoundation/lams/learningdesign/service/ExportToolContentService.java =================================================================== diff -u -r51fb2a37254f24bb2a805d4ffd54482c779f43fa -r2f02ea654f2380229d55ffd2483ba21ac48856d8 --- lams_common/src/java/org/lamsfoundation/lams/learningdesign/service/ExportToolContentService.java (.../ExportToolContentService.java) (revision 51fb2a37254f24bb2a805d4ffd54482c779f43fa) +++ lams_common/src/java/org/lamsfoundation/lams/learningdesign/service/ExportToolContentService.java (.../ExportToolContentService.java) (revision 2f02ea654f2380229d55ffd2483ba21ac48856d8) @@ -21,7 +21,6 @@ * **************************************************************** */ - package org.lamsfoundation.lams.learningdesign.service; import java.io.BufferedReader; @@ -82,7 +81,6 @@ import org.lamsfoundation.lams.learningdesign.GroupingActivity; import org.lamsfoundation.lams.learningdesign.LearnerChoiceGrouping; import org.lamsfoundation.lams.learningdesign.LearningDesign; -import org.lamsfoundation.lams.learningdesign.LearningLibrary; import org.lamsfoundation.lams.learningdesign.License; import org.lamsfoundation.lams.learningdesign.OptionsActivity; import org.lamsfoundation.lams.learningdesign.PermissionGateActivity; @@ -204,10 +202,6 @@ // message keys private static final String KEY_MSG_IMPORT_FILE_FORMAT = "msg.import.file.format"; - // words found both in current complex learning library descriptions and in old exported LD XML files - private static final String[][] COMPLEX_LEARNING_LIBRARY_KEY_WORDS = { { "Share", "Forum" }, { "Chat", "Scribe" }, - { "Forum", "Scribe" } }; - private static MessageService messageService; private ApplicationContext applicationContext; @@ -695,9 +689,9 @@ Map removedActMap = new HashMap(); List activities = ldDto.getActivities(); for (AuthoringActivityDTO activity : activities) { + getLearningDesignService().fillLearningLibraryID(activity); // skip non-tool activities if (!activity.getActivityTypeID().equals(Activity.TOOL_ACTIVITY_TYPE)) { - fillLearningLibraryID(activity); continue; } @@ -1897,32 +1891,6 @@ act.setEndYcoord(actDto.getEndYCoord()); } - /** - * Guess missing Learning Library ID based on activity description. Old exported LDs may not contain this value. - */ - private void fillLearningLibraryID(AuthoringActivityDTO activity) { - if ((activity.getLearningLibraryID() == null) - && activity.getActivityTypeID().equals(Activity.PARALLEL_ACTIVITY_TYPE)) { - String description = activity.getDescription(); - // recognise learning libraries by their word description - for (LearningLibrary library : learningLibraryDAO.getAllLearningLibraries()) { - for (String[] keyWords : ExportToolContentService.COMPLEX_LEARNING_LIBRARY_KEY_WORDS) { - boolean found = false; - for (String keyWord : keyWords) { - found = description.contains(keyWord) && library.getDescription().contains(keyWord); - if (!found) { - break; - } - } - if (found) { - activity.setLearningLibraryID(library.getLearningLibraryId()); - return; - } - } - } - } - } - private static String generateUniqueLDTitle(WorkspaceFolder folder, String titleFromFile, ILearningDesignDAO learningDesignDAO) { Index: lams_common/src/java/org/lamsfoundation/lams/learningdesign/service/ILearningDesignService.java =================================================================== diff -u -r3bd3be95f64eabe12ef8da8d8a7fcd9bcbd9c320 -r2f02ea654f2380229d55ffd2483ba21ac48856d8 --- lams_common/src/java/org/lamsfoundation/lams/learningdesign/service/ILearningDesignService.java (.../ILearningDesignService.java) (revision 3bd3be95f64eabe12ef8da8d8a7fcd9bcbd9c320) +++ lams_common/src/java/org/lamsfoundation/lams/learningdesign/service/ILearningDesignService.java (.../ILearningDesignService.java) (revision 2f02ea654f2380229d55ffd2483ba21ac48856d8) @@ -32,6 +32,7 @@ import org.lamsfoundation.lams.learningdesign.LearningDesign; import org.lamsfoundation.lams.learningdesign.LearningLibrary; import org.lamsfoundation.lams.learningdesign.LearningLibraryGroup; +import org.lamsfoundation.lams.learningdesign.dto.AuthoringActivityDTO; import org.lamsfoundation.lams.learningdesign.dto.LearningDesignDTO; import org.lamsfoundation.lams.learningdesign.dto.LearningLibraryDTO; import org.lamsfoundation.lams.learningdesign.dto.ValidationErrorDTO; @@ -45,58 +46,40 @@ /** * Get the learning design DTO - * - * @param learningDesignId - * @param languageCode - * Two letter language code needed to I18N the help url - * @return LearningDesignDTO */ - public LearningDesignDTO getLearningDesignDTO(Long learningDesignID, String languageCode); + LearningDesignDTO getLearningDesignDTO(Long learningDesignID, String languageCode); /** * This method calls other validation methods which apply the validation rules to determine whether or not the * learning design is valid. - * - * @param learningDesign - * @return list of validation errors */ - public Vector validateLearningDesign(LearningDesign learningDesign); + Vector validateLearningDesign(LearningDesign learningDesign); /** * Get the DTO list of all valid learning libraries, which equals getAllLearningLibraryDetails(true) method. - * - * @return list of LearningLibraryDTO - * @throws IOException */ - public ArrayList getAllLearningLibraryDetails(String languageCode) throws IOException; + ArrayList getAllLearningLibraryDetails(String languageCode) throws IOException; /** * Get the DTO list of all learning libraries whatever it is valid or not. - * - * @param valid - * @return - * @throws IOException */ - public ArrayList getAllLearningLibraryDetails(boolean valid, String languageCode) - throws IOException; + ArrayList getAllLearningLibraryDetails(boolean valid, String languageCode) throws IOException; - public LearningLibrary getLearningLibrary(Long learningLibraryId); + LearningLibrary getLearningLibrary(Long learningLibraryId); /** * Gets all existing learning library groups. */ - public List getLearningLibraryGroups(); + List getLearningLibraryGroups(); - public void saveLearningLibraryGroups(Collection groups); + void saveLearningLibraryGroups(Collection groups); /** * Set valid flag to learning library. - * - * @param learningLibraryId - * @param valid */ - public void setValid(Long learningLibraryId, boolean valid); + void setValid(Long learningLibraryId, boolean valid); - public List getToolDTOs(boolean includeParallel, boolean includeInvalid, String userName) - throws IOException; + List getToolDTOs(boolean includeParallel, boolean includeInvalid, String userName) throws IOException; + + void fillLearningLibraryID(AuthoringActivityDTO activity); } Index: lams_common/src/java/org/lamsfoundation/lams/learningdesign/service/LearningDesignService.java =================================================================== diff -u -ra1713308aff0b5c8a8c385aa68d93fc655ea913c -r2f02ea654f2380229d55ffd2483ba21ac48856d8 --- lams_common/src/java/org/lamsfoundation/lams/learningdesign/service/LearningDesignService.java (.../LearningDesignService.java) (revision a1713308aff0b5c8a8c385aa68d93fc655ea913c) +++ lams_common/src/java/org/lamsfoundation/lams/learningdesign/service/LearningDesignService.java (.../LearningDesignService.java) (revision 2f02ea654f2380229d55ffd2483ba21ac48856d8) @@ -43,11 +43,13 @@ import org.lamsfoundation.lams.learningdesign.dao.IGroupingDAO; import org.lamsfoundation.lams.learningdesign.dao.ILearningDesignDAO; import org.lamsfoundation.lams.learningdesign.dao.ILearningLibraryDAO; +import org.lamsfoundation.lams.learningdesign.dto.AuthoringActivityDTO; import org.lamsfoundation.lams.learningdesign.dto.LearningDesignDTO; import org.lamsfoundation.lams.learningdesign.dto.LearningLibraryDTO; import org.lamsfoundation.lams.learningdesign.dto.LibraryActivityDTO; import org.lamsfoundation.lams.learningdesign.dto.ValidationErrorDTO; import org.lamsfoundation.lams.tool.Tool; +import org.lamsfoundation.lams.tool.dao.IToolDAO; import org.lamsfoundation.lams.tool.dto.ToolDTO; import org.lamsfoundation.lams.tool.dto.ToolDTONameComparator; import org.lamsfoundation.lams.usermanagement.User; @@ -78,12 +80,17 @@ protected ILearningDesignDAO learningDesignDAO; protected IActivityDAO activityDAO; protected IGroupingDAO groupingDAO; + protected IToolDAO toolDAO; protected ILearningLibraryDAO learningLibraryDAO; protected ILoadedMessageSourceService toolActMessageService; private static final String LD_SVG_DIR = "lams-www.war\\secure\\learning-design-images"; + // words found both in current complex learning library descriptions and in old exported LD XML files + private static final String[][] COMPLEX_LEARNING_LIBRARY_KEY_WORDS = { { "Share", "Forum" }, { "Chat", "Scribe" }, + { "Forum", "Scribe" } }; + /* * Default constructor * @@ -136,6 +143,9 @@ this.groupingDAO = groupingDAO; } + public void setToolDAO(IToolDAO toolDAO) { + this.toolDAO = toolDAO; + } /********************************************** * Service Methods *******************************************/ @@ -332,6 +342,42 @@ return tools; } + /** + * Guess missing Learning Library ID based on other activity details. Old LDs may not contain this value. + */ + @Override + public void fillLearningLibraryID(AuthoringActivityDTO activity) { + if (activity.getLearningLibraryID() == null) { + switch (activity.getActivityTypeID()) { + case Activity.PARALLEL_ACTIVITY_TYPE: + String description = activity.getDescription(); + // recognise learning libraries by their word description + for (LearningLibrary library : learningLibraryDAO.getAllLearningLibraries()) { + for (String[] keyWords : COMPLEX_LEARNING_LIBRARY_KEY_WORDS) { + boolean found = false; + for (String keyWord : keyWords) { + found = description.contains(keyWord) && library.getDescription().contains(keyWord); + if (!found) { + break; + } + } + if (found) { + activity.setLearningLibraryID(library.getLearningLibraryId()); + return; + } + } + } + break; + case Activity.TOOL_ACTIVITY_TYPE: + Tool tool = toolDAO.getToolByID(activity.getToolID()); + if (tool != null) { + activity.setLearningLibraryID(tool.getLearningLibraryId()); + } + break; + } + } + } + private void internationaliseActivities(Collection activities) { Iterator iter = activities.iterator(); Locale locale = LocaleContextHolder.getLocale();