Index: lams_central/conf/xdoclet/servlet-mappings.xml
===================================================================
RCS file: /usr/local/cvsroot/lams_central/conf/xdoclet/servlet-mappings.xml,v
diff -u -r1.14 -r1.14.10.1
--- lams_central/conf/xdoclet/servlet-mappings.xml 16 Oct 2008 06:08:50 -0000 1.14
+++ lams_central/conf/xdoclet/servlet-mappings.xml 3 May 2011 21:27:17 -0000 1.14.10.1
@@ -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.16 -r1.16.10.1
--- lams_central/conf/xdoclet/servlets.xml 16 Oct 2008 06:08:50 -0000 1.16
+++ lams_central/conf/xdoclet/servlets.xml 3 May 2011 21:27:17 -0000 1.16.10.1
@@ -70,6 +70,14 @@
+ LearningDesignSVG
+ LearningDesignSVG Servlet
+
+ org.lamsfoundation.lams.webservice.LearningDesignSVGServlet
+
+
+
+
LessonManager
LessonManager Servlet
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.27 -r1.27.6.1
--- lams_central/src/java/org/lamsfoundation/lams/util/CentralConstants.java 27 Mar 2009 18:26:12 -0000 1.27
+++ lams_central/src/java/org/lamsfoundation/lams/util/CentralConstants.java 3 May 2011 21:27:17 -0000 1.27.6.1
@@ -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.101.2.1.4.2 -r1.101.2.1.4.3
--- lams_common/src/java/org/lamsfoundation/lams/learningdesign/service/ExportToolContentService.java 14 Sep 2010 12:35:04 -0000 1.101.2.1.4.2
+++ lams_common/src/java/org/lamsfoundation/lams/learningdesign/service/ExportToolContentService.java 3 May 2011 21:27:14 -0000 1.101.2.1.4.3
@@ -664,16 +664,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);
+ FileOutputStream pngOutputStream = new FileOutputStream(pngFileName);
+ 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.10.10.1
--- 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 3 May 2011 21:27:14 -0000 1.10.10.1
@@ -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.20.10.1
--- 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 3 May 2011 21:27:14 -0000 1.20.10.1
@@ -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;
@@ -170,6 +178,7 @@
//only return valid learning library
return getAllLearningLibraryDetails(true, languageCode);
}
+
public ArrayList getAllLearningLibraryDetails(boolean valid, String languageCode)throws IOException{
Iterator iterator= learningLibraryDAO.getAllLearningLibraries(valid).iterator();
ArrayList libraries = new ArrayList();
@@ -189,7 +198,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();