Index: lams_build/lib/lams/lams.jar =================================================================== diff -u -r98064f112f0bd41d1adc890ea1c0e962d0be6cb2 -raf5a6d9874421d5f5bb335259ae58b23116b0bf5 Binary files differ Index: lams_central/conf/xdoclet/servlet-mappings.xml =================================================================== diff -u -r8e8a1f2b58ed44e9480b576fbbbea82b98a028a2 -raf5a6d9874421d5f5bb335259ae58b23116b0bf5 --- lams_central/conf/xdoclet/servlet-mappings.xml (.../servlet-mappings.xml) (revision 8e8a1f2b58ed44e9480b576fbbbea82b98a028a2) +++ lams_central/conf/xdoclet/servlet-mappings.xml (.../servlet-mappings.xml) (revision af5a6d9874421d5f5bb335259ae58b23116b0bf5) @@ -18,4 +18,9 @@ ExportToolContent /ExportToolContent + + + + ImportToolContent + /ImportToolContent \ No newline at end of file Index: lams_central/conf/xdoclet/servlets.xml =================================================================== diff -u -r8e8a1f2b58ed44e9480b576fbbbea82b98a028a2 -raf5a6d9874421d5f5bb335259ae58b23116b0bf5 --- lams_central/conf/xdoclet/servlets.xml (.../servlets.xml) (revision 8e8a1f2b58ed44e9480b576fbbbea82b98a028a2) +++ lams_central/conf/xdoclet/servlets.xml (.../servlets.xml) (revision af5a6d9874421d5f5bb335259ae58b23116b0bf5) @@ -89,3 +89,7 @@ ExportToolContent org.lamsfoundation.lams.authoring.web.ExportToolContentServlet + + ImportToolContent + org.lamsfoundation.lams.authoring.web.ImportToolContentServlet + Index: lams_central/src/java/org/lamsfoundation/lams/authoring/web/ImportToolContentServlet.java =================================================================== diff -u --- lams_central/src/java/org/lamsfoundation/lams/authoring/web/ImportToolContentServlet.java (revision 0) +++ lams_central/src/java/org/lamsfoundation/lams/authoring/web/ImportToolContentServlet.java (revision af5a6d9874421d5f5bb335259ae58b23116b0bf5) @@ -0,0 +1,118 @@ +/**************************************************************** + * Copyright (C) 2005 LAMS Foundation (http://lamsfoundation.org) + * ============================================================= + * License Information: http://lamsfoundation.org/licensing/lams/2.0/ + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2.0 + * as published by the Free Software Foundation. + * + * 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 + * **************************************************************** + */ + +/* $Id$ */ +package org.lamsfoundation.lams.authoring.web; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map; + +import javax.servlet.ServletException; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.apache.commons.fileupload.DiskFileUpload; +import org.apache.commons.fileupload.FileItem; +import org.apache.log4j.Logger; +import org.lamsfoundation.lams.learningdesign.service.IExportToolContentService; +import org.lamsfoundation.lams.util.FileUtil; +import org.lamsfoundation.lams.util.FileUtilException; +import org.lamsfoundation.lams.util.zipfile.ZipFileUtil; +import org.springframework.web.context.WebApplicationContext; +import org.springframework.web.context.support.WebApplicationContextUtils; +/** + * Export tool content servlet. It needs learingDesignID as input parameter. + * @author Steve.Ni + * + * @version $Revision$ + */ +public class ImportToolContentServlet extends HttpServlet { + + private static final long serialVersionUID = 1L; + public static final String EXPORT_TOOLCONTENT_SERVICE_BEAN_NAME = "exportToolContentService"; + public static final String PARAM_LEARING_DESIGN_ID = "learningDesignID"; + + + private Logger log = Logger.getLogger(ImportToolContentServlet.class); + + /* + * @see javax.servlet.http.HttpServlet.service(HttpServletRequest, HttpServletResponse) + */ + public void service(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { + + + try { + FileItem file = null; + Map params = new HashMap(); + String filename; + + String uploadPath = FileUtil.createTempDirectory("_uploaded_learningdesing"); + String ldPath = FileUtil.getFullPath(uploadPath,"learningdesign"); + FileUtil.createDirectory(ldPath); + + DiskFileUpload fu = new DiskFileUpload(); + // maximum size that will be stored in memory + fu.setSizeThreshold(4096); + // the location for saving data that is larger than getSizeThreshold() + fu.setRepositoryPath(uploadPath); + + List fileItems = fu.parseRequest(request); + Iterator iter = fileItems.iterator(); + while (iter.hasNext()) { + FileItem fi = (FileItem) iter.next(); + //UPLOAD_FILE is input field from HTML page + if (!fi.getFieldName().equalsIgnoreCase("UPLOAD_FILE")) + params.put(fi.getFieldName(), fi.getString()); + else { + // filename on the client + filename = FileUtil.getFileName(fi.getName()); + file = fi; + } + } + if (file == null) { + log.error("Upload file is empty, import tool content failed."); + return; + } + // write the file + ZipFileUtil.expandZip(file.getInputStream(),ldPath); + IExportToolContentService service = getExportService(); + service.importLearningDesign(ldPath); + } catch (Exception e) { + log.error("Unable to import tool content: " + e.toString()); + } + + + } + + //*************************************************************************************** + // Private method + //*************************************************************************************** + private IExportToolContentService getExportService(){ + WebApplicationContext webContext = WebApplicationContextUtils.getRequiredWebApplicationContext(this.getServletContext()); + return (IExportToolContentService) webContext.getBean(EXPORT_TOOLCONTENT_SERVICE_BEAN_NAME); + } +} Index: lams_central/web/importToolContent/import.jsp =================================================================== diff -u --- lams_central/web/importToolContent/import.jsp (revision 0) +++ lams_central/web/importToolContent/import.jsp (revision af5a6d9874421d5f5bb335259ae58b23116b0bf5) @@ -0,0 +1,22 @@ +<%@ taglib uri="tags-lams" prefix="lams"%> + + + + + Import tool content + + + + + +

+ Upload Learning Design +

+ +
+ Learning Design zip file: + +
+ + + Index: lams_common/src/java/org/lamsfoundation/lams/commonContext.xml =================================================================== diff -u -rf17ef475206dfa5950b19434ec135b157201c987 -raf5a6d9874421d5f5bb335259ae58b23116b0bf5 --- lams_common/src/java/org/lamsfoundation/lams/commonContext.xml (.../commonContext.xml) (revision f17ef475206dfa5950b19434ec135b157201c987) +++ lams_common/src/java/org/lamsfoundation/lams/commonContext.xml (.../commonContext.xml) (revision af5a6d9874421d5f5bb335259ae58b23116b0bf5) @@ -162,6 +162,7 @@ PROPAGATION_REQUIRED PROPAGATION_REQUIRED PROPAGATION_REQUIRED + PROPAGATION_REQUIRED Index: lams_common/src/java/org/lamsfoundation/lams/learningdesign/dto/LearningDesignDTO.java =================================================================== diff -u -r03392c988a23f5e9129967f8ae692488213632fe -raf5a6d9874421d5f5bb335259ae58b23116b0bf5 --- lams_common/src/java/org/lamsfoundation/lams/learningdesign/dto/LearningDesignDTO.java (.../LearningDesignDTO.java) (revision 03392c988a23f5e9129967f8ae692488213632fe) +++ lams_common/src/java/org/lamsfoundation/lams/learningdesign/dto/LearningDesignDTO.java (.../LearningDesignDTO.java) (revision af5a6d9874421d5f5bb335259ae58b23116b0bf5) @@ -196,8 +196,60 @@ this.activities = populateActivities(learningDesign); this.transitions = populateTransitions(learningDesign); } - /** + * Get learning design object from this dto. + * + * user + * getFirstActivity + * riginalLearningDesign + * setWorkspaceFolder + * @return + */ + public LearningDesign getLearningDesign(){ + LearningDesign ld = new LearningDesign(); + + + ld.setLearningDesignId(this.learningDesignID); + ld.setLearningDesignUIID(this.learningDesignUIID); + ld.setDescription(this.description); + ld.setTitle(this.title); + +// ld.setFirstActivity(this.firstActivityUIID); + + ld.setMaxID(this.maxID); + ld.setValidDesign(this.validDesign); + ld.setReadOnly(this.readOnly); + ld.setDateReadOnly(this.dateReadOnly); + ld.setOfflineInstructions(this.offlineInstructions); + ld.setOnlineInstructions(this.onlineInstructions); + + ld.setHelpText(this.helpText); + ld.setCopyTypeID(this.copyTypeID ); + ld.setCreateDateTime(this.createDateTime); + ld.setVersion(this.version); + +// ld.setOriginalLearningDesign(originalLearningDesignID); +// +// ld.setWorkspaceFolder(this.workspaceFolderID); + + ld.setDuration(this.duration); + ld.setLicenseText(this.licenseText); + +// ld.setLicense(this.licenseID); + + ld.setLessonOrgID(this.lessonOrgID); + + ld.setLessonOrgName(this.lessonOrgName); + ld.setLessonID(this.lessonID); + ld.setLessonName(this.lessonName); + ld.setLessonStartDateTime(this.lessonStartDateTime); + ld.setLastModifiedDateTime(this.lastModifiedDateTime); +// this.groupings = populateGroupings(learningDesign,activityDAO); +// this.activities = populateActivities(learningDesign); +// this.transitions = populateTransitions(learningDesign); + return ld; + } + /** * @return Returns the copyTypeID. */ public Integer getCopyTypeID() { Index: lams_common/src/java/org/lamsfoundation/lams/learningdesign/service/ExportToolContentService.java =================================================================== diff -u -r7459651abc01831e57ff669de16293c51b543dcb -raf5a6d9874421d5f5bb335259ae58b23116b0bf5 --- lams_common/src/java/org/lamsfoundation/lams/learningdesign/service/ExportToolContentService.java (.../ExportToolContentService.java) (revision 7459651abc01831e57ff669de16293c51b543dcb) +++ lams_common/src/java/org/lamsfoundation/lams/learningdesign/service/ExportToolContentService.java (.../ExportToolContentService.java) (revision af5a6d9874421d5f5bb335259ae58b23116b0bf5) @@ -25,8 +25,13 @@ package org.lamsfoundation.lams.learningdesign.service; import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; +import java.io.InputStream; +import java.io.Reader; import java.io.Writer; import java.lang.reflect.InvocationHandler; import java.lang.reflect.InvocationTargetException; @@ -42,6 +47,7 @@ import org.lamsfoundation.lams.contentrepository.ItemNotFoundException; import org.lamsfoundation.lams.contentrepository.RepositoryCheckedException; import org.lamsfoundation.lams.contentrepository.client.IToolContentHandler; +import org.lamsfoundation.lams.learningdesign.LearningDesign; import org.lamsfoundation.lams.learningdesign.dao.hibernate.ActivityDAO; import org.lamsfoundation.lams.learningdesign.dto.AuthoringActivityDTO; import org.lamsfoundation.lams.learningdesign.dto.LearningDesignDTO; @@ -303,10 +309,52 @@ } } + + /** + * @see org.lamsfoundation.lams.authoring.service.IExportToolContentService.registerFileHandleClass(String,String,String) + */ public void registerFileHandleClass(String fileNodeClassName,String fileUuidFieldName, String fileVersionFieldName){ fileHandleClassList.add(this.new FileHandleClassInfo(fileNodeClassName,fileUuidFieldName,fileVersionFieldName)); } + /** + * @throws ExportToolContentException + * @see org.lamsfoundation.lams.authoring.service.IExportToolContentService.importLearningDesign(String) + */ + public void importLearningDesign(String learningDesignPath) throws ExportToolContentException { + + try { + //import learning design + Reader ldFile = new FileReader(new File(FileUtil.getFullPath(learningDesignPath,LEARNING_DESIGN_FILE_NAME))); + XStream designXml = new XStream(); + LearningDesignDTO ldDto = (LearningDesignDTO) designXml.fromXML(ldFile); + + //persist learning design to database + ILearningDesignService service = getLearningDesignService(); + log.debug("Learning design xml import success. Continue tool content import..."); + //TODO + + //begin tool import + List activities = ldDto.getActivities(); + for(AuthoringActivityDTO activity : activities){ + String toolPath = FileUtil.getFullPath(learningDesignPath,activity.getToolContentID().toString()); + ToolContentManager contentManager = (ToolContentManager) findToolService(toolDAO.getToolByID(activity.getToolID())); + log.debug("Tool import content : " + activity.getTitle() +" by contentID :" + activity.getToolContentID()); + + //change xml to Tool POJO + XStream toolXml = new XStream(); + Reader toolFile = new FileReader(new File(FileUtil.getFullPath(toolPath,TOOL_FILE_NAME)));; + Object toolPOJO = toolXml.fromXML(toolFile); + contentManager.importToolContent(toolPOJO); + } + } catch (FileNotFoundException e) { + throw new ExportToolContentException(e); + } catch (ToolException e) { + throw new ExportToolContentException(e); + } + + } + //****************************************************************** // ApplicationContextAware method implementation //****************************************************************** Index: lams_common/src/java/org/lamsfoundation/lams/learningdesign/service/IExportToolContentService.java =================================================================== diff -u -rf17ef475206dfa5950b19434ec135b157201c987 -raf5a6d9874421d5f5bb335259ae58b23116b0bf5 --- lams_common/src/java/org/lamsfoundation/lams/learningdesign/service/IExportToolContentService.java (.../IExportToolContentService.java) (revision f17ef475206dfa5950b19434ec135b157201c987) +++ lams_common/src/java/org/lamsfoundation/lams/learningdesign/service/IExportToolContentService.java (.../IExportToolContentService.java) (revision af5a6d9874421d5f5bb335259ae58b23116b0bf5) @@ -75,4 +75,6 @@ * @param fileVersionFieldName The POJO properties name for get fileVersion. There must be a get method to access this property. */ void registerFileHandleClass(String fileNodeClassName,String fileUuidFieldName, String fileVersionFieldName); + + void importLearningDesign(String learningDesignPath) throws ExportToolContentException; }