Index: lams_build/lib/lams/lams.jar =================================================================== diff -u -ra52b4696862966c0db79293bfae9bf7894e8baeb -rfd6ade152cf877cecaa63d3cb59d3bc53d60ca45 Binary files differ Index: lams_central/src/java/org/lamsfoundation/lams/authoring/service/AuthoringService.java =================================================================== diff -u -r9cadc392ac9854c077a9da549309831e2c3ae7cc -rfd6ade152cf877cecaa63d3cb59d3bc53d60ca45 --- lams_central/src/java/org/lamsfoundation/lams/authoring/service/AuthoringService.java (.../AuthoringService.java) (revision 9cadc392ac9854c077a9da549309831e2c3ae7cc) +++ lams_central/src/java/org/lamsfoundation/lams/authoring/service/AuthoringService.java (.../AuthoringService.java) (revision fd6ade152cf877cecaa63d3cb59d3bc53d60ca45) @@ -82,6 +82,7 @@ import org.lamsfoundation.lams.learningdesign.dto.ValidationErrorDTO; import org.lamsfoundation.lams.learningdesign.exception.LearningDesignException; import org.lamsfoundation.lams.learningdesign.service.ILearningDesignService; +import org.lamsfoundation.lams.learningdesign.service.LearningDesignService; import org.lamsfoundation.lams.lesson.Lesson; import org.lamsfoundation.lams.lesson.service.ILessonService; import org.lamsfoundation.lams.logevent.LogEvent; @@ -123,8 +124,6 @@ protected Logger log = Logger.getLogger(AuthoringService.class); - private static final String[] LD_IMAGE_EXTENSIONS = new String[] { "png", "svg" }; - /** Required DAO's */ protected ILearningDesignDAO learningDesignDAO; @@ -165,7 +164,7 @@ protected IWorkspaceManagementService workspaceManagementService; protected ILogEventService logEventService; - + protected IGradebookService gradebookService; protected ToolContentIDGenerator contentIDGenerator; @@ -343,7 +342,7 @@ } public void setGradebookService(IGradebookService gradebookService) { - this.gradebookService = gradebookService; + this.gradebookService = gradebookService; } public void setWorkspaceManagementService(IWorkspaceManagementService workspaceManagementService) { @@ -508,7 +507,7 @@ } // only the user who is editing the design may unlock it if (design.getEditOverrideUser().equals(user)) { - + design.setEditOverrideLock(false); design.setEditOverrideUser(null); @@ -543,7 +542,7 @@ initialiseToolActivityForRuntime(design, lesson); learningDesignDAO.update(design); - + // Always recalculate marks as we can't tell if weightings have been changed/added/removed. // This will override any Gradebook entered *lesson* marks, but will calculate based on // Gradebook entered *activity* marks. @@ -870,8 +869,11 @@ updateCompetenceMappings(newLearningDesign.getCompetences(), newActivities); try { - AuthoringService.copyLearningDesignImages(originalLearningDesign.getLearningDesignId(), - newLearningDesign.getLearningDesignId()); + FileUtils.copyFile( + new File(LearningDesignService + .getLearningDesignSVGPath(originalLearningDesign.getLearningDesignId())), + new File(LearningDesignService.getLearningDesignSVGPath(newLearningDesign.getLearningDesignId())), + false); } catch (IOException e) { log.error("Error while copying Learning Design " + originalLearningDesign.getLearningDesignId() + " image", e); @@ -1810,21 +1812,4 @@ access.setAccessDate(new Date()); learningDesignDAO.insertOrUpdate(access); } - - /** - * Copies LD thumbnails, SVG and PNG. - */ - private static void copyLearningDesignImages(long originalLearningDesignID, long newLearningDesignID) - throws IOException { - for (String extension : AuthoringService.LD_IMAGE_EXTENSIONS) { - String fullExtension = "." + extension; - File image = new File(IAuthoringService.LEARNING_DESIGN_IMAGES_FOLDER, - originalLearningDesignID + fullExtension); - if (image.canRead()) { - FileUtils.copyFile(image, - new File(IAuthoringService.LEARNING_DESIGN_IMAGES_FOLDER, newLearningDesignID + fullExtension), - false); - } - } - } } \ No newline at end of file Index: lams_central/src/java/org/lamsfoundation/lams/authoring/service/IAuthoringService.java =================================================================== diff -u -ra949c337adc53b2df9207aa1de6e500281de7c20 -rfd6ade152cf877cecaa63d3cb59d3bc53d60ca45 --- lams_central/src/java/org/lamsfoundation/lams/authoring/service/IAuthoringService.java (.../IAuthoringService.java) (revision a949c337adc53b2df9207aa1de6e500281de7c20) +++ lams_central/src/java/org/lamsfoundation/lams/authoring/service/IAuthoringService.java (.../IAuthoringService.java) (revision fd6ade152cf877cecaa63d3cb59d3bc53d60ca45) @@ -43,9 +43,6 @@ import org.lamsfoundation.lams.usermanagement.WorkspaceFolder; import org.lamsfoundation.lams.usermanagement.exception.UserException; import org.lamsfoundation.lams.usermanagement.exception.WorkspaceFolderException; -import org.lamsfoundation.lams.util.Configuration; -import org.lamsfoundation.lams.util.ConfigurationKeys; -import org.lamsfoundation.lams.util.FileUtil; import org.lamsfoundation.lams.util.MessageService; /** @@ -62,9 +59,6 @@ public static final String COPY_TOOL_CONTENT_MESSAGE_KEY = "copyMultipleToolContent"; - public static final String LEARNING_DESIGN_IMAGES_FOLDER = FileUtil.getFullPath( - Configuration.get(ConfigurationKeys.LAMS_EAR_DIR), "lams-www.war\\secure\\learning-design-images"); - /** * Returns a populated LearningDesign object corresponding to the given learningDesignID * @@ -237,7 +231,7 @@ * @param cancelled * flag specifying whether user cancelled or saved the edit * @throws IOException - * @throws Exception + * @throws Exception */ void finishEditOnFly(Long learningDesignID, Integer userID, boolean cancelled) throws Exception; Index: lams_central/src/java/org/lamsfoundation/lams/authoring/web/AuthoringAction.java =================================================================== diff -u -r95e2f4d93c295ff8014b55daeacaab308480375a -rfd6ade152cf877cecaa63d3cb59d3bc53d60ca45 --- lams_central/src/java/org/lamsfoundation/lams/authoring/web/AuthoringAction.java (.../AuthoringAction.java) (revision 95e2f4d93c295ff8014b55daeacaab308480375a) +++ lams_central/src/java/org/lamsfoundation/lams/authoring/web/AuthoringAction.java (.../AuthoringAction.java) (revision fd6ade152cf877cecaa63d3cb59d3bc53d60ca45) @@ -450,7 +450,7 @@ } // prepare the dir and the file - File thumbnailDir = new File(IAuthoringService.LEARNING_DESIGN_IMAGES_FOLDER); + File thumbnailDir = new File(ILearningDesignService.LD_SVG_TOP_DIR); String thumbnailSubdir = String.valueOf(learningDesignID); if (thumbnailSubdir.length() % 2 == 1) { thumbnailSubdir = "0" + thumbnailSubdir; Index: lams_common/src/java/org/lamsfoundation/lams/learningdesign/service/ILearningDesignService.java =================================================================== diff -u -ra52b4696862966c0db79293bfae9bf7894e8baeb -rfd6ade152cf877cecaa63d3cb59d3bc53d60ca45 --- lams_common/src/java/org/lamsfoundation/lams/learningdesign/service/ILearningDesignService.java (.../ILearningDesignService.java) (revision a52b4696862966c0db79293bfae9bf7894e8baeb) +++ lams_common/src/java/org/lamsfoundation/lams/learningdesign/service/ILearningDesignService.java (.../ILearningDesignService.java) (revision fd6ade152cf877cecaa63d3cb59d3bc53d60ca45) @@ -37,12 +37,17 @@ import org.lamsfoundation.lams.learningdesign.dto.LearningLibraryDTO; import org.lamsfoundation.lams.learningdesign.dto.ValidationErrorDTO; import org.lamsfoundation.lams.tool.dto.ToolDTO; +import org.lamsfoundation.lams.util.Configuration; +import org.lamsfoundation.lams.util.ConfigurationKeys; +import org.lamsfoundation.lams.util.FileUtil; /** * @author Mitchell Seaton */ public interface ILearningDesignService { + static final String LD_SVG_TOP_DIR = FileUtil.getFullPath(Configuration.get(ConfigurationKeys.LAMS_EAR_DIR), + "lams-www.war\\secure\\learning-design-images"); /** * Get the learning design DTO @@ -82,6 +87,6 @@ List getToolDTOs(boolean includeParallel, boolean includeInvalid, String userName) throws IOException; void fillLearningLibraryID(AuthoringActivityDTO activity); - + String internationaliseActivityTitle(Long learningLibraryID); } Index: lams_common/src/java/org/lamsfoundation/lams/learningdesign/service/LearningDesignService.java =================================================================== diff -u -ra52b4696862966c0db79293bfae9bf7894e8baeb -rfd6ade152cf877cecaa63d3cb59d3bc53d60ca45 --- lams_common/src/java/org/lamsfoundation/lams/learningdesign/service/LearningDesignService.java (.../LearningDesignService.java) (revision a52b4696862966c0db79293bfae9bf7894e8baeb) +++ lams_common/src/java/org/lamsfoundation/lams/learningdesign/service/LearningDesignService.java (.../LearningDesignService.java) (revision fd6ade152cf877cecaa63d3cb59d3bc53d60ca45) @@ -23,6 +23,7 @@ package org.lamsfoundation.lams.learningdesign.service; +import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.Collection; @@ -54,8 +55,6 @@ import org.lamsfoundation.lams.tool.dto.ToolDTO; import org.lamsfoundation.lams.tool.dto.ToolDTONameComparator; import org.lamsfoundation.lams.usermanagement.User; -import org.lamsfoundation.lams.util.Configuration; -import org.lamsfoundation.lams.util.ConfigurationKeys; import org.lamsfoundation.lams.util.FileUtil; import org.lamsfoundation.lams.util.ILoadedMessageSourceService; import org.lamsfoundation.lams.util.MessageService; @@ -86,8 +85,6 @@ 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" } }; @@ -381,33 +378,35 @@ @Override public String internationaliseActivityTitle(Long learningLibraryID) { - + ToolActivity templateActivity = (ToolActivity) activityDAO.getTemplateActivityByLibraryID(learningLibraryID); - if ( templateActivity != null ) { + if (templateActivity != null) { Locale locale = LocaleContextHolder.getLocale(); String languageFilename = templateActivity.getLanguageFile(); if (languageFilename != null) { MessageSource toolMessageSource = toolActMessageService.getMessageService(languageFilename); if (toolMessageSource != null) { - String title = toolMessageSource.getMessage(Activity.I18N_TITLE, null, - templateActivity.getTitle(), locale); - if ( title != null && title.trim().length() > 0 ) + String title = toolMessageSource.getMessage(Activity.I18N_TITLE, null, templateActivity.getTitle(), + locale); + if (title != null && title.trim().length() > 0) { return title; + } } else { - log.warn("Unable to internationalise the library activity " - + templateActivity.getTitle() + " message file " + templateActivity.getLanguageFile() + log.warn("Unable to internationalise the library activity " + templateActivity.getTitle() + + " message file " + templateActivity.getLanguageFile() + ". Activity Message source not available"); } } } - - if ( templateActivity.getTitle() != null && templateActivity.getTitle().trim().length() > 0) - return templateActivity.getTitle(); - else + + if (templateActivity.getTitle() != null && templateActivity.getTitle().trim().length() > 0) { + return templateActivity.getTitle(); + } else { return "Untitled"; // should never get here - just return something in case there is a bug. A blank title affect the layout of the main page + } } - + private void internationaliseActivities(Collection activities) { Iterator iter = activities.iterator(); Locale locale = LocaleContextHolder.getLocale(); @@ -462,8 +461,20 @@ * Gets LD SVG file path. */ public static String getLearningDesignSVGPath(long learningDesignId) { - String earDirPath = Configuration.get(ConfigurationKeys.LAMS_EAR_DIR); - String svgDirPath = FileUtil.getFullPath(earDirPath, LearningDesignService.LD_SVG_DIR); - return FileUtil.getFullPath(svgDirPath, learningDesignId + ".svg"); + File thumbnailDir = new File(ILearningDesignService.LD_SVG_TOP_DIR); + String thumbnailFileName = learningDesignId + ".svg"; + File thumbnailFile = new File(thumbnailDir, thumbnailFileName); + if (!thumbnailFile.canRead()) { + // the file is missing, try the new folder structure + String thumbnailSubdir = String.valueOf(learningDesignId); + if (thumbnailSubdir.length() % 2 == 1) { + thumbnailSubdir = "0" + thumbnailSubdir; + } + for (int charIndex = 0; charIndex < thumbnailSubdir.length(); charIndex += 2) { + thumbnailDir = new File(thumbnailDir, + "" + thumbnailSubdir.charAt(charIndex) + thumbnailSubdir.charAt(charIndex + 1)); + } + } + return FileUtil.getFullPath(thumbnailDir.getAbsolutePath(), thumbnailFileName); } } \ No newline at end of file