Index: lams_tool_chat/src/java/org/lamsfoundation/lams/tool/chat/service/ChatService.java =================================================================== diff -u -r7a1c6972ff38760192dbdaac41ed8e5e99105247 -r08afbd42add64dcb44f8accb9595bd125bd9ebae --- lams_tool_chat/src/java/org/lamsfoundation/lams/tool/chat/service/ChatService.java (.../ChatService.java) (revision 7a1c6972ff38760192dbdaac41ed8e5e99105247) +++ lams_tool_chat/src/java/org/lamsfoundation/lams/tool/chat/service/ChatService.java (.../ChatService.java) (revision 08afbd42add64dcb44f8accb9595bd125bd9ebae) @@ -28,6 +28,7 @@ import java.io.IOException; import java.util.ArrayList; import java.util.Date; +import java.util.Hashtable; import java.util.Iterator; import java.util.List; import java.util.Map; @@ -67,6 +68,7 @@ import org.lamsfoundation.lams.learningdesign.service.ImportToolContentException; import org.lamsfoundation.lams.notebook.model.NotebookEntry; import org.lamsfoundation.lams.notebook.service.ICoreNotebookService; +import org.lamsfoundation.lams.tool.ToolContentImport102Manager; import org.lamsfoundation.lams.tool.ToolContentManager; import org.lamsfoundation.lams.tool.ToolSessionExportOutputData; import org.lamsfoundation.lams.tool.ToolSessionManager; @@ -107,7 +109,7 @@ * ToolContentManager and ToolSessionManager. */ -public class ChatService implements ToolSessionManager, ToolContentManager, +public class ChatService implements ToolSessionManager, ToolContentManager, ToolContentImport102Manager, IChatService { static Logger logger = Logger.getLogger(ChatService.class.getName()); @@ -1083,4 +1085,53 @@ return list.get(0); } } + + /* ===============Methods implemented from ToolContentImport102Manager =============== */ + + + /** + * Import the data for a 1.0.2 Chat + */ + public void import102ToolContent(Long toolContentId, Integer newUserId, Hashtable importValues) + { + Date now = new Date(); + Chat toolContentObj = new Chat(); + toolContentObj.setContentInUse(Boolean.FALSE); + toolContentObj.setCreateBy(newUserId != null ? new Long(newUserId.longValue()) : null); + toolContentObj.setCreateDate(now); + toolContentObj.setDefineLater(Boolean.FALSE); + toolContentObj.setFilterKeywords(null); + toolContentObj.setFilteringEnabled(null); + toolContentObj.setInstructions((String)importValues.get(ToolContentImport102Manager.CONTENT_BODY)); + toolContentObj.setLockOnFinished(Boolean.FALSE); + toolContentObj.setOfflineInstructions(null); + toolContentObj.setOnlineInstructions(null); + toolContentObj.setReflectInstructions(null); + toolContentObj.setReflectOnActivity(Boolean.FALSE); + toolContentObj.setRunOffline(Boolean.FALSE); + toolContentObj.setTitle((String)importValues.get(ToolContentImport102Manager.CONTENT_TITLE)); + toolContentObj.setToolContentId(toolContentId); + toolContentObj.setUpdateDate(now); + // leave as empty, no need to set them to anything. + //setChatAttachments(Set chatAttachments); + //setChatSessions(Set chatSessions); + chatDAO.saveOrUpdate(toolContentObj); + } + + /** Set the description, throws away the title value as this is not supported in 2.0 */ + public void setReflectiveData(Long toolContentId, String title, String description) + throws ToolException, DataMissingException { + + Chat chat = getChatByContentId(toolContentId); + if ( chat == null ) { + throw new DataMissingException("Unable to set reflective data titled "+title + +" on activity toolContentId "+toolContentId + +" as the tool content does not exist."); + } + + chat.setReflectOnActivity(Boolean.TRUE); + chat.setReflectInstructions(description); + } + + //========================================================================================= } Index: lams_tool_larsrc/src/java/org/lamsfoundation/lams/tool/rsrc/service/ResourceServiceImpl.java =================================================================== diff -u -r7a1c6972ff38760192dbdaac41ed8e5e99105247 -r08afbd42add64dcb44f8accb9595bd125bd9ebae --- lams_tool_larsrc/src/java/org/lamsfoundation/lams/tool/rsrc/service/ResourceServiceImpl.java (.../ResourceServiceImpl.java) (revision 7a1c6972ff38760192dbdaac41ed8e5e99105247) +++ lams_tool_larsrc/src/java/org/lamsfoundation/lams/tool/rsrc/service/ResourceServiceImpl.java (.../ResourceServiceImpl.java) (revision 08afbd42add64dcb44f8accb9595bd125bd9ebae) @@ -30,14 +30,16 @@ import java.sql.Timestamp; import java.util.ArrayList; import java.util.Date; +import java.util.HashSet; +import java.util.Hashtable; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Set; +import java.util.Vector; import org.apache.commons.lang.StringUtils; import org.apache.log4j.Logger; -import org.apache.poi.hpsf.SummaryInformation; import org.apache.struts.upload.FormFile; import org.lamsfoundation.lams.contentrepository.AccessDeniedException; import org.lamsfoundation.lams.contentrepository.ICredentials; @@ -55,6 +57,7 @@ import org.lamsfoundation.lams.learningdesign.service.ExportToolContentException; import org.lamsfoundation.lams.learningdesign.service.IExportToolContentService; import org.lamsfoundation.lams.learningdesign.service.ImportToolContentException; +import org.lamsfoundation.lams.tool.ToolContentImport102Manager; import org.lamsfoundation.lams.tool.ToolContentManager; import org.lamsfoundation.lams.tool.ToolSessionExportOutputData; import org.lamsfoundation.lams.tool.ToolSessionManager; @@ -76,6 +79,7 @@ import org.lamsfoundation.lams.tool.rsrc.model.Resource; import org.lamsfoundation.lams.tool.rsrc.model.ResourceAttachment; import org.lamsfoundation.lams.tool.rsrc.model.ResourceItem; +import org.lamsfoundation.lams.tool.rsrc.model.ResourceItemInstruction; import org.lamsfoundation.lams.tool.rsrc.model.ResourceItemVisitLog; import org.lamsfoundation.lams.tool.rsrc.model.ResourceSession; import org.lamsfoundation.lams.tool.rsrc.model.ResourceUser; @@ -86,6 +90,8 @@ import org.lamsfoundation.lams.usermanagement.service.IUserManagementService; import org.lamsfoundation.lams.util.MessageService; import org.lamsfoundation.lams.util.audit.IAuditService; +import org.lamsfoundation.lams.util.wddx.WDDXProcessor; +import org.lamsfoundation.lams.util.wddx.WDDXProcessorConversionException; import org.lamsfoundation.lams.util.zipfile.ZipFileUtil; import org.lamsfoundation.lams.util.zipfile.ZipFileUtilException; @@ -916,8 +922,137 @@ resourceSessionDao.deleteBySessionId(toolSessionId); } + /* ===============Methods implemented from ToolContentImport102Manager =============== */ + - public IExportToolContentService getExportContentService() { + /** + * Import the data for a 1.0.2 Noticeboard or HTMLNoticeboard + */ + public void import102ToolContent(Long toolContentId, Integer newUserId, Hashtable importValues) + { + Date now = new Date(); + Resource toolContentObj = new Resource(); + + try { + toolContentObj.setTitle((String)importValues.get(ToolContentImport102Manager.CONTENT_TITLE)); + toolContentObj.setContentId(toolContentId); + toolContentObj.setContentInUse(Boolean.FALSE); + toolContentObj.setCreated(now); + toolContentObj.setDefineLater(Boolean.FALSE); + toolContentObj.setInstructions((String)importValues.get(ToolContentImport102Manager.CONTENT_BODY)); + toolContentObj.setOfflineInstructions(null); + toolContentObj.setOnlineInstructions(null); + toolContentObj.setRunOffline(Boolean.FALSE); + toolContentObj.setUpdated(now); + + toolContentObj.setRunAuto(Boolean.FALSE); + Boolean bool = WDDXProcessor.convertToBoolean(importValues, ToolContentImport102Manager.CONTENT_URL_RUNTIME_LEARNER_SUBMIT_FILE); + toolContentObj.setAllowAddFiles(bool != null ? bool : Boolean.TRUE); + bool = WDDXProcessor.convertToBoolean(importValues, ToolContentImport102Manager.CONTENT_URL_RUNTIME_LEARNER_SUBMIT_URL); + toolContentObj.setAllowAddUrls(bool != null ? bool : Boolean.TRUE); + Integer minToComplete = WDDXProcessor.convertToInteger(importValues, ToolContentImport102Manager.CONTENT_URL_MIN_NUMBER_COMPLETE); + toolContentObj.setMiniViewResourceNumber(minToComplete != null ? minToComplete.intValue() : 0); + bool = WDDXProcessor.convertToBoolean(importValues, ToolContentImport102Manager.CONTENT_URL_RUNTIME_LEARNER_SUBMIT_URL); + toolContentObj.setLockWhenFinished(Boolean.FALSE); + toolContentObj.setRunAuto(Boolean.FALSE); + + // leave as empty, no need to set them to anything. + //toolContentObj.setAttachments(attachments); + +/* unused entries from 1.0.2 + [directoryName=] no equivalent in 2.0 + [runtimeSubmissionStaffFile=true] no equivalent in 2.0 + [contentShowUser=false] no equivalent in 2.0 + [isHTML=false] no equivalent in 2.0 + [showbuttons=false] no equivalent in 2.0 + [isReusable=false] not used in 1.0.2 (would be lock when finished) +*/ + ResourceUser user = null; + if ( newUserId != null ) { + user = new ResourceUser(); + user.setUserId(new Long(newUserId.longValue())); + createUser(user); + toolContentObj.setCreatedBy(user); + } + + //resource Items + Vector urls = (Vector) importValues.get(ToolContentImport102Manager.CONTENT_URL_URLS); + if ( urls != null ) { + Iterator iter = urls.iterator(); + while ( iter.hasNext() ) { + Hashtable urlMap = (Hashtable) iter.next(); + + ResourceItem item = new ResourceItem(); + item.setTitle((String) urlMap.get(ToolContentImport102Manager.CONTENT_TITLE)); + item.setCreateDate(now); + item.setCreateBy(user); + item.setCreateByAuthor(true); + item.setHide(false); + + Vector instructions = (Vector) urlMap.get(ToolContentImport102Manager.CONTENT_URL_URL_INSTRUCTION_ARRAY); + if ( instructions != null && instructions.size() > 0 ) { + item.setItemInstructions(new HashSet()); + Iterator insIter = instructions.iterator(); + while (insIter.hasNext()) { + Hashtable instructionEntry = (Hashtable) insIter.next(); + String instructionText = (String) instructionEntry.get(ToolContentImport102Manager.CONTENT_URL_INSTRUCTION); + Integer order = WDDXProcessor.convertToInteger(instructionEntry, ToolContentImport102Manager.CONTENT_URL_URL_VIEW_ORDER); + ResourceItemInstruction instruction = new ResourceItemInstruction(); + instruction.setDescription(instructionText); + instruction.setSequenceId(order); + item.getItemInstructions().add(instruction); + } + } + + String resourceType = (String) urlMap.get(ToolContentImport102Manager.CONTENT_URL_URL_TYPE); + if ( ToolContentImport102Manager.URL_RESOURCE_TYPE_URL.equals(resourceType) ) { + item.setType(ResourceConstants.RESOURCE_TYPE_URL); + item.setUrl((String) urlMap.get(ToolContentImport102Manager.CONTENT_URL_URL_URL)); + item.setOpenUrlNewWindow(false); + } else if ( ToolContentImport102Manager.URL_RESOURCE_TYPE_WEBSITE.equals(resourceType) ) { + item.setType(ResourceConstants.RESOURCE_TYPE_WEBSITE); + } else if ( ToolContentImport102Manager.URL_RESOURCE_TYPE_FILE.equals(resourceType) ) { + item.setType(ResourceConstants.RESOURCE_TYPE_FILE); + } else { + throw new ToolException("Invalid shared resources type. Type was "+resourceType); + } + + // TODO add the order field - no support for it in forum at present. + // public static final String CONTENT_URL_URL_VIEW_ORDER = "order"; + toolContentObj.getResourceItems().add(item); + } + } + + } catch (WDDXProcessorConversionException e) { + log.error("Unable to content for activity "+toolContentObj.getTitle()+"properly due to a WDDXProcessorConversionException.",e); + throw new ToolException("Invalid import data format for activity "+toolContentObj.getTitle()+"- WDDX caused an exception. Some data from the design will have been lost. See log for more details."); + } + + resourceDao.saveObject(toolContentObj); + + + } + + /** Set the description, throws away the title value as this is not supported in 2.0 */ + public void setReflectiveData(Long toolContentId, String title, String description) + throws ToolException, DataMissingException { + + Resource toolContentObj = getResourceByContentId(toolContentId); + if ( toolContentObj == null ) { + throw new DataMissingException("Unable to set reflective data titled "+title + +" on activity toolContentId "+toolContentId + +" as the tool content does not exist."); + } + + // TODO Share Resources doesn't support reflection yet! + // toolContentObj.setReflectOnActivity(Boolean.TRUE); + // toolContentObj.setReflectInstructions(description); + } + + + /* =================================================================================== */ + + public IExportToolContentService getExportContentService() { return exportContentService; } Index: lams_tool_nb/src/java/org/lamsfoundation/lams/tool/noticeboard/service/NoticeboardServicePOJO.java =================================================================== diff -u -r5168567be6170c3fadb69a914e151bee62c8667b -r08afbd42add64dcb44f8accb9595bd125bd9ebae --- lams_tool_nb/src/java/org/lamsfoundation/lams/tool/noticeboard/service/NoticeboardServicePOJO.java (.../NoticeboardServicePOJO.java) (revision 5168567be6170c3fadb69a914e151bee62c8667b) +++ lams_tool_nb/src/java/org/lamsfoundation/lams/tool/noticeboard/service/NoticeboardServicePOJO.java (.../NoticeboardServicePOJO.java) (revision 08afbd42add64dcb44f8accb9595bd125bd9ebae) @@ -26,9 +26,9 @@ import java.io.InputStream; import java.util.Date; +import java.util.Hashtable; import java.util.Iterator; import java.util.List; -import java.util.Map; import java.util.Set; import org.apache.log4j.Logger; @@ -58,8 +58,6 @@ import org.lamsfoundation.lams.tool.noticeboard.dao.INoticeboardSessionDAO; import org.lamsfoundation.lams.tool.noticeboard.dao.INoticeboardUserDAO; import org.lamsfoundation.lams.tool.service.ILamsToolService; -import org.lamsfoundation.lams.util.wddx.WDDXProcessor; -import org.lamsfoundation.lams.util.wddx.WDDXProcessorConversionException; import org.springframework.dao.DataAccessException; @@ -1032,7 +1030,7 @@ /** * Import the data for a 1.0.2 Noticeboard or HTMLNoticeboard */ - public void import102ToolContent(Long toolContentId, Integer newUserId, Map importValues) + public void import102ToolContent(Long toolContentId, Integer newUserId, Hashtable importValues) { Date now = new Date(); NoticeboardContent toolContentObj = new NoticeboardContent(); @@ -1052,7 +1050,14 @@ //toolContentObj.setNbAttachments(nbAttachments); nbContentDAO.saveNbContent(toolContentObj); } - + + /** Set the reflective title - does nothing as Noticeboard is not reflective */ + public void setReflectiveData(Long toolContentId, String title, String defaultInputValues) + throws ToolException, DataMissingException { + log.error("Was asked to set reflective data "+title+" to activity toolContentId "+toolContentId + +". Noticeboard does not support reflection"); + } + //========================================================================================= public Long getToolDefaultContentIdBySignature(String toolSignature) Index: lams_tool_nb/web/WEB-INF/lams.tld =================================================================== diff -u -r9393c098e5dfd603e2d37347cd1e531a25aa424a -r08afbd42add64dcb44f8accb9595bd125bd9ebae --- lams_tool_nb/web/WEB-INF/lams.tld (.../lams.tld) (revision 9393c098e5dfd603e2d37347cd1e531a25aa424a) +++ lams_tool_nb/web/WEB-INF/lams.tld (.../lams.tld) (revision 08afbd42add64dcb44f8accb9595bd125bd9ebae) @@ -311,7 +311,7 @@ /WEB-INF/tags/ExportPortOutput.tag - DefineLater - /WEB-INF/tags/DefineLater.tag + Date + /WEB-INF/tags/Date.tag Index: lams_tool_nb/web/WEB-INF/tags/Date.tag =================================================================== diff -u --- lams_tool_nb/web/WEB-INF/tags/Date.tag (revision 0) +++ lams_tool_nb/web/WEB-INF/tags/Date.tag (revision 08afbd42add64dcb44f8accb9595bd125bd9ebae) @@ -0,0 +1,37 @@ +<% +/**************************************************************** + * 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 + * **************************************************************** + */ + + /** + * Author: Fiona Malikoff + * Description: Format a date, using the locale, based on standard parameters. + * Need to use long for the date otherwise the AU locale comes out as 1/2/06 and + * full is needed to include the timezone. + */ + + %> +<%@ tag body-content="empty" %> +<%@ attribute name="value" required="true" rtexprvalue="true" type="java.util.Date" %> +<%@ taglib uri="tags-fmt" prefix="fmt" %> + + Index: lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/service/SubmitFilesService.java =================================================================== diff -u -r7a1c6972ff38760192dbdaac41ed8e5e99105247 -r08afbd42add64dcb44f8accb9595bd125bd9ebae --- lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/service/SubmitFilesService.java (.../SubmitFilesService.java) (revision 7a1c6972ff38760192dbdaac41ed8e5e99105247) +++ lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/service/SubmitFilesService.java (.../SubmitFilesService.java) (revision 08afbd42add64dcb44f8accb9595bd125bd9ebae) @@ -30,11 +30,10 @@ import java.util.ArrayList; import java.util.Calendar; import java.util.Date; -import java.util.HashMap; import java.util.HashSet; +import java.util.Hashtable; import java.util.Iterator; import java.util.List; -import java.util.Map; import java.util.Set; import java.util.SortedMap; import java.util.TreeMap; @@ -57,10 +56,12 @@ import org.lamsfoundation.lams.contentrepository.service.IRepositoryService; import org.lamsfoundation.lams.contentrepository.service.RepositoryProxy; import org.lamsfoundation.lams.contentrepository.service.SimpleCredentials; +import org.lamsfoundation.lams.dao.IBaseDAO; import org.lamsfoundation.lams.learning.service.ILearnerService; import org.lamsfoundation.lams.learningdesign.service.ExportToolContentException; import org.lamsfoundation.lams.learningdesign.service.IExportToolContentService; import org.lamsfoundation.lams.learningdesign.service.ImportToolContentException; +import org.lamsfoundation.lams.tool.ToolContentImport102Manager; import org.lamsfoundation.lams.tool.ToolContentManager; import org.lamsfoundation.lams.tool.ToolSessionExportOutputData; import org.lamsfoundation.lams.tool.ToolSessionManager; @@ -84,7 +85,6 @@ import org.lamsfoundation.lams.tool.sbmt.util.SbmtToolContentHandler; import org.lamsfoundation.lams.tool.service.ILamsToolService; import org.lamsfoundation.lams.usermanagement.User; -import org.lamsfoundation.lams.dao.IBaseDAO; import org.lamsfoundation.lams.usermanagement.dto.UserDTO; import org.lamsfoundation.lams.usermanagement.util.LastNameAlphabeticComparator; import org.lamsfoundation.lams.util.DateUtil; @@ -770,6 +770,53 @@ return learners; } + /* ===============Methods implemented from ToolContentImport102Manager =============== */ + + + /** + * Import the data for a 1.0.2 Noticeboard or HTMLNoticeboard + */ + public void import102ToolContent(Long toolContentId, Integer newUserId, Hashtable importValues) + { + Date now = new Date(); + SubmitFilesContent toolContentObj = new SubmitFilesContent(); + + toolContentObj.setTitle((String)importValues.get(ToolContentImport102Manager.CONTENT_TITLE)); + toolContentObj.setContentID(toolContentId); + toolContentObj.setContentInUse(Boolean.FALSE); + // toolContentObj.setCreated(now); + toolContentObj.setDefineLater(Boolean.FALSE); + toolContentObj.setInstruction((String)importValues.get(ToolContentImport102Manager.CONTENT_BODY)); + toolContentObj.setOfflineInstruction(null); + toolContentObj.setOnlineInstruction(null); + toolContentObj.setRunOffline(Boolean.FALSE); + // toolContentObj.setUpdated(now); + // 1.0.2 doesn't allow users to go back after completion, which is the equivalent of lock on finish. + toolContentObj.setLockOnFinished(Boolean.TRUE); + // toolContentObj.setCreatedBy(user); + + // leave as empty, no need to set them to anything. + //toolContentObj.setInstructionFiles(attachments); + + submitFilesContentDAO.saveOrUpdate(toolContentObj); + } + + /** Set the description, throws away the title value as this is not supported in 2.0 */ + public void setReflectiveData(Long toolContentId, String title, String description) + throws ToolException, DataMissingException { + + SubmitFilesContent toolContentObj = getSubmitFilesContent(toolContentId); + if ( toolContentObj == null ) { + throw new DataMissingException("Unable to set reflective data titled "+title + +" on activity toolContentId "+toolContentId + +" as the tool content does not exist."); + } + + // TODO Share Resources doesn't support reflection yet! + // toolContentObj.setReflectOnActivity(Boolean.TRUE); + // toolContentObj.setReflectInstructions(description); + } + /*************************************************************************** * Property Injection Methods **************************************************************************/