Index: lams_central/conf/xdoclet/servlet-mappings.xml
===================================================================
RCS file: /usr/local/cvsroot/lams_central/conf/xdoclet/servlet-mappings.xml,v
diff -u -r1.15 -r1.16
--- lams_central/conf/xdoclet/servlet-mappings.xml 18 Feb 2010 05:42:17 -0000 1.15
+++ lams_central/conf/xdoclet/servlet-mappings.xml 5 May 2011 15:23:39 -0000 1.16
@@ -34,6 +34,11 @@
+ LearningDesignSVG
+ /services/LearningDesignSVG/*
+
+
+
LessonManager
/services/xml/LessonManager/*
Index: lams_central/conf/xdoclet/servlets.xml
===================================================================
RCS file: /usr/local/cvsroot/lams_central/conf/xdoclet/servlets.xml,v
diff -u -r1.18 -r1.19
--- lams_central/conf/xdoclet/servlets.xml 18 Feb 2010 05:42:17 -0000 1.18
+++ lams_central/conf/xdoclet/servlets.xml 5 May 2011 15:23:39 -0000 1.19
@@ -70,6 +70,14 @@
+ LearningDesignSVG
+
+
+ org.lamsfoundation.lams.webservice.LearningDesignSVGServlet
+
+
+
+
LessonManager
Index: lams_central/src/java/org/lamsfoundation/lams/util/CentralConstants.java
===================================================================
RCS file: /usr/local/cvsroot/lams_central/src/java/org/lamsfoundation/lams/util/CentralConstants.java,v
diff -u -r1.32 -r1.33
--- lams_central/src/java/org/lamsfoundation/lams/util/CentralConstants.java 12 Feb 2011 18:38:49 -0000 1.32
+++ lams_central/src/java/org/lamsfoundation/lams/util/CentralConstants.java 5 May 2011 15:23:39 -0000 1.33
@@ -56,6 +56,8 @@
public static final String PARAM_LANG = "lang";
public static final String PARAM_METHOD = "method";
+
+ public static final String PARAM_SVG_FORMAT = "svgFormat";
public static final String PARAM_PROGRESS_USER = "progressUser";
Fisheye: Tag 1.1 refers to a dead (removed) revision in file `lams_central/src/java/org/lamsfoundation/lams/webservice/LearningDesignSVGServlet.java'.
Fisheye: No comparison available. Pass `N' to diff?
Index: lams_common/src/java/org/lamsfoundation/lams/learningdesign/service/ExportToolContentService.java
===================================================================
RCS file: /usr/local/cvsroot/lams_common/src/java/org/lamsfoundation/lams/learningdesign/service/ExportToolContentService.java,v
diff -u -r1.109 -r1.110
--- lams_common/src/java/org/lamsfoundation/lams/learningdesign/service/ExportToolContentService.java 13 Feb 2011 23:45:23 -0000 1.109
+++ lams_common/src/java/org/lamsfoundation/lams/learningdesign/service/ExportToolContentService.java 5 May 2011 15:23:47 -0000 1.110
@@ -666,16 +666,14 @@
//generate SVG image
if (format != ExportToolContentService.PACKAGE_FORMAT_IMS) {
- SVGGenerator svgGenerator = new SVGGenerator();
- svgGenerator.generateSvgDom(ldDto);
String svgFileName = FileUtil.getFullPath(contentDir, ExportToolContentService.SVG_IMAGE_FILE_NAME);
FileOutputStream svgOutputStream = new FileOutputStream(svgFileName);
- svgGenerator.streamOutDocument(svgOutputStream, SVGGenerator.OUTPUT_FORMAT_SVG);
+ service.getLearningDesignSVG(learningDesignId, SVGGenerator.OUTPUT_FORMAT_SVG, svgOutputStream);
String pngFileName = FileUtil.getFullPath(contentDir, ExportToolContentService.PNG_IMAGE_FILE_NAME);
FileOutputStream pngOutputStream = new FileOutputStream(pngFileName);
- svgGenerator.streamOutDocument(pngOutputStream, SVGGenerator.OUTPUT_FORMAT_PNG);
+ service.getLearningDesignSVG(learningDesignId, SVGGenerator.OUTPUT_FORMAT_PNG, pngOutputStream);
}
log.debug("Learning design xml export success");
Index: lams_common/src/java/org/lamsfoundation/lams/learningdesign/service/ILearningDesignService.java
===================================================================
RCS file: /usr/local/cvsroot/lams_common/src/java/org/lamsfoundation/lams/learningdesign/service/ILearningDesignService.java,v
diff -u -r1.10 -r1.11
--- lams_common/src/java/org/lamsfoundation/lams/learningdesign/service/ILearningDesignService.java 11 Feb 2008 04:21:14 -0000 1.10
+++ lams_common/src/java/org/lamsfoundation/lams/learningdesign/service/ILearningDesignService.java 5 May 2011 15:23:47 -0000 1.11
@@ -24,9 +24,12 @@
package org.lamsfoundation.lams.learningdesign.service;
import java.io.IOException;
+import java.io.OutputStream;
import java.util.ArrayList;
import java.util.Vector;
+import org.apache.batik.transcoder.TranscoderException;
+import org.jdom.JDOMException;
import org.lamsfoundation.lams.learningdesign.LearningDesign;
import org.lamsfoundation.lams.learningdesign.dto.LearningDesignDTO;
import org.lamsfoundation.lams.learningdesign.dto.LearningLibraryDTO;
@@ -76,4 +79,17 @@
*/
public void setValid(Long learningLibraryId, boolean valid);
+ /**
+ * Streams out learning design SVG into specified OutputStream. Additionally, stores resulted SVG into file system for caching.
+ *
+ * @param learningDesignId
+ * @param imageFormat either SVGGenerator.OUTPUT_FORMAT_SVG or SVGGenerator.OUTPUT_FORMAT_PNG
+ * @param out
+ * @return whether operation was successful or not
+ * @throws JDOMException
+ * @throws IOException
+ * @throws TranscoderException
+ * @throws ExportToolContentException
+ */
+ boolean getLearningDesignSVG(Long learningDesignId, int imageFormat, OutputStream out) throws JDOMException, IOException, TranscoderException, ExportToolContentException;
}
Index: lams_common/src/java/org/lamsfoundation/lams/learningdesign/service/LearningDesignService.java
===================================================================
RCS file: /usr/local/cvsroot/lams_common/src/java/org/lamsfoundation/lams/learningdesign/service/LearningDesignService.java,v
diff -u -r1.20 -r1.21
--- lams_common/src/java/org/lamsfoundation/lams/learningdesign/service/LearningDesignService.java 19 Sep 2008 05:47:52 -0000 1.20
+++ lams_common/src/java/org/lamsfoundation/lams/learningdesign/service/LearningDesignService.java 5 May 2011 15:23:47 -0000 1.21
@@ -23,24 +23,28 @@
/* $$Id$$ */
package org.lamsfoundation.lams.learningdesign.service;
+import java.io.BufferedInputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
import java.util.ArrayList;
import java.util.Collection;
+import java.util.Date;
import java.util.Iterator;
import java.util.List;
import java.util.Locale;
-import java.util.Set;
import java.util.Vector;
+import org.apache.batik.transcoder.TranscoderException;
+import org.apache.commons.lang.StringUtils;
import org.apache.log4j.Logger;
+import org.jdom.JDOMException;
import org.lamsfoundation.lams.learningdesign.Activity;
-import org.lamsfoundation.lams.learningdesign.Grouping;
-import org.lamsfoundation.lams.learningdesign.GroupingActivity;
import org.lamsfoundation.lams.learningdesign.LearningDesign;
import org.lamsfoundation.lams.learningdesign.LearningLibrary;
-import org.lamsfoundation.lams.learningdesign.OptionsActivity;
-import org.lamsfoundation.lams.learningdesign.RandomGrouping;
-import org.lamsfoundation.lams.learningdesign.Transition;
import org.lamsfoundation.lams.learningdesign.dao.hibernate.ActivityDAO;
import org.lamsfoundation.lams.learningdesign.dao.hibernate.GroupingDAO;
import org.lamsfoundation.lams.learningdesign.dao.hibernate.LearningDesignDAO;
@@ -50,8 +54,12 @@
import org.lamsfoundation.lams.learningdesign.dto.LibraryActivityDTO;
import org.lamsfoundation.lams.learningdesign.dto.ValidationErrorDTO;
import org.lamsfoundation.lams.tool.Tool;
+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;
+import org.lamsfoundation.lams.util.svg.SVGGenerator;
import org.springframework.context.MessageSource;
import org.springframework.context.i18n.LocaleContextHolder;
@@ -189,7 +197,68 @@
}
return libraries;
}
+
+ public boolean getLearningDesignSVG(Long learningDesignId, int imageFormat, OutputStream out) throws JDOMException, IOException, TranscoderException, ExportToolContentException {
+ //construct absolute filePath to SVG
+ String earFolder = Configuration.get(ConfigurationKeys.LAMS_EAR_DIR);
+ if (StringUtils.isBlank(earFolder)) {
+ log.error("Unable to get path to the LAMS Server URL from the configuration table. SVG image creation failed");
+ return false;
+ }
+ String directoryToStoreFile = FileUtil.getFullPath(earFolder, "lams-www.war\\secure\\learning-design-images");
+ String fileExtension;
+ if (imageFormat == SVGGenerator.OUTPUT_FORMAT_SVG) {
+ fileExtension = ".svg";
+ } else {
+ fileExtension = ".png";
+ }
+ String absoluteFilePath = FileUtil.getFullPath(directoryToStoreFile, learningDesignId.toString() + fileExtension);
+ File file = new File(absoluteFilePath);
+
+ //check if SVG exists and up-to-date
+ LearningDesign learningDesign = learningDesignDAO.getLearningDesignById(learningDesignId);
+ boolean isSvgOutdated = new Date(file.lastModified()).before(learningDesign.getLastModifiedDateTime());
+ if (!file.exists() || isSvgOutdated) {
+ //generate new SVG image and save it to the file system
+ SVGGenerator svgGenerator = new SVGGenerator();
+ LearningDesignDTO ldDto = this.getLearningDesignDTO(learningDesignId, "");
+ svgGenerator.generateSvgDom(ldDto);
+ FileOutputStream fileOutputStream = new FileOutputStream(file);
+ svgGenerator.streamOutDocument(fileOutputStream, imageFormat);
+ }
+
+ //stream out SVG to the specified by user OutputStream
+ InputStream in = null;
+ try {
+ in = new BufferedInputStream(new FileInputStream(file));
+ int count = 0;
+ int ch;
+ while ((ch = in.read()) != -1) {
+ out.write((char) ch);
+ count++;
+ }
+ out.flush();
+ } catch (Exception e) {
+ log.error("Exception occured writing out file:" + e.getMessage());
+ throw new ExportToolContentException(e);
+ } finally {
+ try {
+ if (in != null) {
+ in.close(); // very important
+ }
+ if (out != null) {
+ out.close();
+ }
+ } catch (Exception e) {
+ log.error("Error Closing file. File already written out - no exception being thrown.", e);
+ return false;
+ }
+ }
+
+ return true;
+ }
+
private void internationaliseActivities(Collection activities) {
Iterator iter = activities.iterator();
Locale locale = LocaleContextHolder.getLocale();