Index: lams_tool_larsrc/build.xml =================================================================== diff -u -r25273b9169e12fe68dfed4442b702f6f401709e7 -r65296e0451eae1b3515d347b885318fc0a290e96 --- lams_tool_larsrc/build.xml (.../build.xml) (revision 25273b9169e12fe68dfed4442b702f6f401709e7) +++ lams_tool_larsrc/build.xml (.../build.xml) (revision 65296e0451eae1b3515d347b885318fc0a290e96) @@ -68,7 +68,7 @@ + - - + + parameter="addUrlInit"> + + + + + + + + + + + + + + + + + + + + + Index: lams_tool_larsrc/src/java/org/lamsfoundation/lams/tool/rsrc/ApplicationResources.properties =================================================================== diff -u -r2bca18fdc19c445365cc6d676c61c12efe5057e6 -r65296e0451eae1b3515d347b885318fc0a290e96 --- lams_tool_larsrc/src/java/org/lamsfoundation/lams/tool/rsrc/ApplicationResources.properties (.../ApplicationResources.properties) (revision 2bca18fdc19c445365cc6d676c61c12efe5057e6) +++ lams_tool_larsrc/src/java/org/lamsfoundation/lams/tool/rsrc/ApplicationResources.properties (.../ApplicationResources.properties) (revision 65296e0451eae1b3515d347b885318fc0a290e96) @@ -68,6 +68,10 @@ label.authoring.cancel.button=Cancel authoring.exception= There is a problem in shared resources authoring page, the reason is {0} + +error.resource.item.title.blank = Title can not be blank. +error.resource.item.url.blank = URL can not be blank. +error.resource.item.file.blank = File can not be blank. #-------------------------END Authoring Labels END-----------------# #---------------------------------Monitoring ----------------------------------# Index: lams_tool_larsrc/src/java/org/lamsfoundation/lams/tool/rsrc/ResourceConstants.java =================================================================== diff -u -rf3709b5af90ca8439a64e65b0c971bc547b1eb3a -r65296e0451eae1b3515d347b885318fc0a290e96 --- lams_tool_larsrc/src/java/org/lamsfoundation/lams/tool/rsrc/ResourceConstants.java (.../ResourceConstants.java) (revision f3709b5af90ca8439a64e65b0c971bc547b1eb3a) +++ lams_tool_larsrc/src/java/org/lamsfoundation/lams/tool/rsrc/ResourceConstants.java (.../ResourceConstants.java) (revision 65296e0451eae1b3515d347b885318fc0a290e96) @@ -36,9 +36,18 @@ //for parameters' name public static final String PARAM_TOOL_CONTENT_ID = "toolContentID"; + public static final String PARAM_ITEM_INDEX = "itemUid"; //for request attribute name - public static final String AUTHORING_RESOURCE_LIST = "resourceList"; - public static final String INSTRUCTION_ATTACHMENT_LIST = "instructionAttachmentList"; + public static final String ATTR_INSTRUCTION_LIST = "instructionList"; + public static final String ATTR_RESOURCE_LIST = "resourceList"; + public static final String ATT_ATTACHMENT_LIST = "instructionAttachmentList"; + public static final String ATTR_DELETED_RESOURCE_LIST = "deleteResourceList"; + public static final String ATTR_DELETED_ATTACHMENT_LIST = "deletedAttachmmentList"; + + //error message keys + public static final String ERROR_MSG_TITLE_BLANK = "error.resource.item.title.blank"; + public static final String ERROR_MSG_URL_BLANK = "error.resource.item.url.blank"; + public static final String ERROR_MSG_FILE_BLANK = "error.resource.item.file.blank"; } Index: lams_tool_larsrc/src/java/org/lamsfoundation/lams/tool/rsrc/service/IResourceService.java =================================================================== diff -u -r2116db454fd0ec719a6deeaacd9d10306d341b93 -r65296e0451eae1b3515d347b885318fc0a290e96 --- lams_tool_larsrc/src/java/org/lamsfoundation/lams/tool/rsrc/service/IResourceService.java (.../IResourceService.java) (revision 2116db454fd0ec719a6deeaacd9d10306d341b93) +++ lams_tool_larsrc/src/java/org/lamsfoundation/lams/tool/rsrc/service/IResourceService.java (.../IResourceService.java) (revision 65296e0451eae1b3515d347b885318fc0a290e96) @@ -24,8 +24,10 @@ import java.util.Set; +import org.apache.struts.upload.FormFile; import org.lamsfoundation.lams.contentrepository.IVersionedNode; import org.lamsfoundation.lams.tool.rsrc.model.Resource; +import org.lamsfoundation.lams.tool.rsrc.model.ResourceAttachment; /** * @author Dapeng.Ni @@ -42,5 +44,7 @@ Resource getDefaultContent(Long contentId) throws ResourceApplicationException; Set getAuthoredItems(Long resourceUid); + + ResourceAttachment uploadInstructionFile(FormFile file, String type) throws ResourceApplicationException; } Index: lams_tool_larsrc/src/java/org/lamsfoundation/lams/tool/rsrc/service/ResourceServiceImpl.java =================================================================== diff -u -r2116db454fd0ec719a6deeaacd9d10306d341b93 -r65296e0451eae1b3515d347b885318fc0a290e96 --- lams_tool_larsrc/src/java/org/lamsfoundation/lams/tool/rsrc/service/ResourceServiceImpl.java (.../ResourceServiceImpl.java) (revision 2116db454fd0ec719a6deeaacd9d10306d341b93) +++ lams_tool_larsrc/src/java/org/lamsfoundation/lams/tool/rsrc/service/ResourceServiceImpl.java (.../ResourceServiceImpl.java) (revision 65296e0451eae1b3515d347b885318fc0a290e96) @@ -21,14 +21,21 @@ * ***********************************************************************/ package org.lamsfoundation.lams.tool.rsrc.service; +import java.io.FileNotFoundException; +import java.io.IOException; import java.util.Set; +import org.apache.commons.lang.StringUtils; import org.apache.log4j.Logger; +import org.apache.struts.upload.FormFile; import org.lamsfoundation.lams.contentrepository.AccessDeniedException; import org.lamsfoundation.lams.contentrepository.ICredentials; import org.lamsfoundation.lams.contentrepository.ITicket; import org.lamsfoundation.lams.contentrepository.IVersionedNode; +import org.lamsfoundation.lams.contentrepository.InvalidParameterException; import org.lamsfoundation.lams.contentrepository.LoginException; +import org.lamsfoundation.lams.contentrepository.NodeKey; +import org.lamsfoundation.lams.contentrepository.RepositoryCheckedException; import org.lamsfoundation.lams.contentrepository.WorkspaceNotFoundException; import org.lamsfoundation.lams.contentrepository.service.IRepositoryService; import org.lamsfoundation.lams.contentrepository.service.SimpleCredentials; @@ -41,6 +48,7 @@ import org.lamsfoundation.lams.tool.rsrc.dao.ResourceUserDAO; import org.lamsfoundation.lams.tool.rsrc.ims.ImscpApplicationException; 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.util.ResourceToolContentHandler; import org.lamsfoundation.lams.tool.service.ILamsToolService; @@ -182,6 +190,23 @@ return resource.getResourceItems(); } + + public ResourceAttachment uploadInstructionFile(FormFile uploadFile, String fileType) throws ResourceApplicationException { + if(uploadFile == null || StringUtils.isEmpty(uploadFile.getFileName())) + throw new ResourceApplicationException("Could not find upload file: " + uploadFile); + + //upload file to repository + NodeKey nodeKey = processFile(uploadFile,fileType); + + //create new attachement + ResourceAttachment file = new ResourceAttachment(); + file.setFileType(fileType); + file.setFileUuid(nodeKey.getUuid()); + file.setFileVersionId(nodeKey.getVersion()); + file.setFileName(uploadFile.getFileName()); + + return file; + } //***************************************************************************** // private methods //***************************************************************************** @@ -209,6 +234,35 @@ } return contentId; } + /** + * Process an uploaded file. + * + * @param forumForm + * @throws ResourceApplicationException + * @throws FileNotFoundException + * @throws IOException + * @throws RepositoryCheckedException + * @throws InvalidParameterException + */ + private NodeKey processFile(FormFile file, String fileType) throws ResourceApplicationException{ + NodeKey node = null; + if (file!= null && !StringUtils.isEmpty(file.getFileName())) { + String fileName = file.getFileName(); + try { + node = resourceToolContentHandler.uploadFile(file.getInputStream(), fileName, + file.getContentType(), fileType); + } catch (InvalidParameterException e) { + throw new ResourceApplicationException("FileNotFoundException occured while trying to upload File" + e.getMessage()); + } catch (FileNotFoundException e) { + throw new ResourceApplicationException("FileNotFoundException occured while trying to upload File" + e.getMessage()); + } catch (RepositoryCheckedException e) { + throw new ResourceApplicationException("FileNotFoundException occured while trying to upload File" + e.getMessage()); + } catch (IOException e) { + throw new ResourceApplicationException("FileNotFoundException occured while trying to upload File" + e.getMessage()); + } + } + return node; + } //***************************************************************************** // set methods for Spring Bean @@ -243,4 +297,5 @@ public void setToolService(ILamsToolService toolService) { this.toolService = toolService; } + } Index: lams_tool_larsrc/src/java/org/lamsfoundation/lams/tool/rsrc/web/action/AuthoringAction.java =================================================================== diff -u -r2bca18fdc19c445365cc6d676c61c12efe5057e6 -r65296e0451eae1b3515d347b885318fc0a290e96 --- lams_tool_larsrc/src/java/org/lamsfoundation/lams/tool/rsrc/web/action/AuthoringAction.java (.../AuthoringAction.java) (revision 2bca18fdc19c445365cc6d676c61c12efe5057e6) +++ lams_tool_larsrc/src/java/org/lamsfoundation/lams/tool/rsrc/web/action/AuthoringAction.java (.../AuthoringAction.java) (revision 65296e0451eae1b3515d347b885318fc0a290e96) @@ -21,27 +21,47 @@ package org.lamsfoundation.lams.tool.rsrc.web.action; import java.io.IOException; +import java.io.PrintWriter; +import java.io.UnsupportedEncodingException; +import java.net.URLDecoder; import java.util.ArrayList; -import java.util.Arrays; +import java.util.HashMap; import java.util.HashSet; +import java.util.Iterator; import java.util.List; +import java.util.Map; import java.util.Set; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; +import javax.servlet.http.HttpSession; +import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.math.NumberUtils; import org.apache.log4j.Logger; import org.apache.struts.action.Action; +import org.apache.struts.action.ActionErrors; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; +import org.apache.struts.action.ActionMessage; +import org.apache.struts.action.ActionMessages; +import org.apache.struts.upload.FormFile; +import org.lamsfoundation.lams.contentrepository.client.IToolContentHandler; import org.lamsfoundation.lams.tool.rsrc.ResourceConstants; 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.service.IResourceService; +import org.lamsfoundation.lams.tool.rsrc.service.ResourceApplicationException; import org.lamsfoundation.lams.tool.rsrc.web.form.ResourceForm; +import org.lamsfoundation.lams.tool.rsrc.web.form.ResourceItemForm; +import org.lamsfoundation.lams.usermanagement.dto.UserDTO; import org.lamsfoundation.lams.util.WebUtil; +import org.lamsfoundation.lams.web.session.SessionManager; +import org.lamsfoundation.lams.web.util.AttributeNames; import org.springframework.web.context.WebApplicationContext; import org.springframework.web.context.support.WebApplicationContextUtils; @@ -57,7 +77,7 @@ HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { String param = mapping.getParameter(); - //-----------------------Forum Author function --------------------------- + //-----------------------Resource Author function --------------------------- if (param.equals("initPage")) { // request.getSession().setAttribute(ForumConstants.MODE,ForumConstants.AUTHOR_MODE); return initPage(mapping, form, request, response); @@ -69,63 +89,123 @@ if (param.equals("updateContent")) { return updateContent(mapping, form, request, response); } -// if (param.equals("uploadOnlineFile")) { -// return uploadOnline(mapping, form, request, response); -// } -// if (param.equals("uploadOfflineFile")) { -// return uploadOffline(mapping, form, request, response); -// } -// if (param.equals("deleteOnlineFile")) { -// return deleteOnlineFile(mapping, form, request, response); -// } -// if (param.equals("deleteOfflineFile")) { -// return deleteOfflineFile(mapping, form, request, response); -// } + if (param.equals("uploadOnlineFile")) { + return uploadOnline(mapping, form, request, response); + } + if (param.equals("uploadOfflineFile")) { + return uploadOffline(mapping, form, request, response); + } + if (param.equals("deleteOnlineFile")) { + return deleteOnlineFile(mapping, form, request, response); + } + if (param.equals("deleteOfflineFile")) { + return deleteOfflineFile(mapping, form, request, response); + } //----------------------- Add resource function --------------------------- + if (param.equals("addUrlInit")) { + return addUrlInit(mapping, form, request, response); + } if (param.equals("addUrl")) { return addUrl(mapping, form, request, response); } + if (param.equals("editItemInit")) { + return editItemInit(mapping, form, request, response); + } + if (param.equals("editItem")) { + return editItem(mapping, form, request, response); + } + if (param.equals("deleteItem")) { + return deleteItem(mapping, form, request, response); + } //-----------------------Instruction function --------------------------- if (param.equals("newInstruction")) { return newInstruction(mapping, form, request, response); } if (param.equals("removeInstruction")) { return removeInstruction(mapping, form, request, response); } -// if (param.equals("createTopic")) { -// return createTopic(mapping, form, request, response); -// } -// if (param.equals("editTopic")) { -// return editTopic(mapping, form, request, response); -// } -// if (param.equals("updateTopic")) { -// return updateTopic(mapping, form, request, response); -// } -// if (param.equals("viewTopic")) { -// return viewTopic(mapping, form, request, response); -// } -// if (param.equals("deleteTopic")) { -// return deleteTopic(mapping, form, request, response); -// } -// if (param.equals("deleteAttachment")) { -// return deleteAttachment(mapping, form, request, response); -// } -// if (param.equals("refreshTopic")) { -// return refreshTopic(mapping, form, request, response); -// } -// if (param.equals("finishTopic")) { -// return finishTopic(mapping, form, request, response); -// } return mapping.findForward(ResourceConstants.ERROR); } - private ActionForward addUrl(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) { + + private ActionForward deleteItem(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) { + int itemIdx = NumberUtils.stringToInt(request.getParameter(ResourceConstants.PARAM_ITEM_INDEX),-1); + if(itemIdx != -1){ + List resourceList = getResourceList(request); + ResourceItem item = resourceList.remove(itemIdx); + List delList = getDeletedTopicList(request); + delList.add(item); + } + return mapping.findForward(ResourceConstants.SUCCESS); + } + private ActionForward editItem(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) { + return null; + + } + + private ActionForward editItemInit(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) { + int itemIdx = NumberUtils.stringToInt(request.getParameter(ResourceConstants.PARAM_ITEM_INDEX),-1); + ResourceItem item = null; + if(itemIdx != -1){ + List resourceList = getResourceList(request); + item = resourceList.get(itemIdx); + if(item != null){ + popuplateItemToForm(item,(ResourceItemForm) form,request); + } + } + return findForward(item==null?-1:item.getType(),mapping); + } + private ActionForward addUrlInit(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) { List instructionList = new ArrayList(INIT_INSTRUCTION_COUNT); for(int idx=0;idx instructionList = getInstructionsFromRequest(request); + + ResourceItemForm itemForm = (ResourceItemForm)form; + ActionErrors errors = new ActionErrors(); + if(StringUtils.isEmpty(itemForm.getTitle())) + errors.add(ActionMessages.GLOBAL_MESSAGE,new ActionMessage(ResourceConstants.ERROR_MSG_TITLE_BLANK)); + if(StringUtils.isEmpty(itemForm.getUrl())) + errors.add(ActionMessages.GLOBAL_MESSAGE,new ActionMessage(ResourceConstants.ERROR_MSG_URL_BLANK)); + + if(!errors.isEmpty()){ + this.addErrors(request,errors); + request.setAttribute(ResourceConstants.ATTR_INSTRUCTION_LIST,instructionList); + return mapping.getInputForward(); + } + + ResourceItem item = new ResourceItem(); + item.setType(ResourceConstants.RESOURCE_TYPE_URL); + item.setTitle(itemForm.getTitle()); + item.setUrl(itemForm.getUrl()); +// TODO: set author when persist:need persit the author as well if required +// HttpSession ss = SessionManager.getSession(); +// //get back login user DTO +// UserDTO user = (UserDTO) ss.getAttribute(AttributeNames.USER); + item.setCreateByAuthor(true); + item.setHide(false); + //set instrcutions + Set instructions = new HashSet(); + int idx=0; + for (String ins : instructionList) { + ResourceItemInstruction rii = new ResourceItemInstruction(); + rii.setDescription(ins); + rii.setSequenceId(idx++); + } + item.setItemInstructions(instructions); + List resourceList = getResourceList(request); + resourceList.add(item); + + //return null to close this window + return mapping.findForward(ResourceConstants.SUCCESS); + } + + private ActionForward newInstruction(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) { int count = NumberUtils.stringToInt(request.getParameter("instructionCount"),0); List instructionList = new ArrayList(++count); @@ -136,7 +216,7 @@ else instructionList.add(item); } - request.setAttribute("instructionList",instructionList); + request.setAttribute(ResourceConstants.ATTR_INSTRUCTION_LIST,instructionList); return mapping.findForward(ResourceConstants.SUCCESS); } private ActionForward removeInstruction(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) { @@ -152,11 +232,11 @@ else instructionList.add(item); } - request.setAttribute("instructionList",instructionList); + request.setAttribute(ResourceConstants.ATTR_INSTRUCTION_LIST,instructionList); return mapping.findForward(ResourceConstants.SUCCESS); } //****************************************************************************************************************** - // Forum Author functions + // Resource Author functions //****************************************************************************************************************** private ActionForward initPage(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) { @@ -170,7 +250,7 @@ Resource resource = null; try { resource = service.getResourceByContentId(contentId); - //if forum does not exist, try to use default content instead. + //if resource does not exist, try to use default content instead. if(resource == null){ resource = service.getDefaultContent(contentId); if(resource.getResourceItems() != null){ @@ -193,14 +273,212 @@ //init it to avoid null exception in following handling if(item == null) item = new HashSet(); - request.getSession().setAttribute(ResourceConstants.AUTHORING_RESOURCE_LIST, item); + request.getSession().setAttribute(ResourceConstants.ATTR_RESOURCE_LIST, new ArrayList(item)); return mapping.findForward(ResourceConstants.SUCCESS); } private ActionForward updateContent(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) { return null; } + + /** + * Handle upload online instruction files request. + * @param mapping + * @param form + * @param request + * @param response + * @return + */ + public ActionForward uploadOnline(ActionMapping mapping, ActionForm form, + HttpServletRequest request, HttpServletResponse response) { + return uploadFile(mapping, form, IToolContentHandler.TYPE_ONLINE,request); + } + /** + * Handle upload offline instruction files request. + * @param mapping + * @param form + * @param request + * @param response + * @return + */ + public ActionForward uploadOffline(ActionMapping mapping, ActionForm form, + HttpServletRequest request, HttpServletResponse response) { + return uploadFile(mapping, form, IToolContentHandler.TYPE_OFFLINE,request); + } + /** + * Common method to upload online or offline instruction files request. + * @param mapping + * @param form + * @param type + * @param request + * @return + */ + private ActionForward uploadFile(ActionMapping mapping, ActionForm form, + String type,HttpServletRequest request) { + + ResourceForm resourceForm = (ResourceForm) form; + + FormFile file; + if(StringUtils.equals(IToolContentHandler.TYPE_OFFLINE,type)) + file = (FormFile) resourceForm.getOfflineFile(); + else + file = (FormFile) resourceForm.getOnlineFile(); + + try { + IResourceService service = getResourceService(); + //upload to repository + ResourceAttachment att = service.uploadInstructionFile(file, type); + //handle session value + List attachmentList = getAttachmentList(request); + List deleteAttachmentList = getDeletedAttachmentList(request); + //first check exist attachment and delete old one (if exist) to deletedAttachmentList + Iterator iter = attachmentList.iterator(); + ResourceAttachment existAtt; + while(iter.hasNext()){ + existAtt = (ResourceAttachment) iter.next(); + if(StringUtils.equals(existAtt.getFileName(),att.getFileName())){ + //if there is same name attachment, delete old one + deleteAttachmentList.add(existAtt); + iter.remove(); + break; + } + } + //add to attachmentList + attachmentList.add(att); + + //update Html FORM, this will echo back to web page for display + List list; + if(StringUtils.equals(IToolContentHandler.TYPE_OFFLINE,type)){ + list = resourceForm.getOfflineFileList(); + if(list == null){ + list = new ArrayList(); + resourceForm.setOfflineFileList(list); + } + }else{ + list = resourceForm.getOnlineFileList(); + if(list == null){ + list = new ArrayList(); + resourceForm.setOnlineFileList(list); + } + } + list.add(att); + } catch (ResourceApplicationException e) { + log.error("Upload instruction attachment failed:" + e.getMessage()); + } + + return mapping.findForward("success"); + + } + /** + * Delete offline instruction file from current Resource authoring page. + * @param mapping + * @param form + * @param request + * @param response + * @return + */ + public ActionForward deleteOfflineFile(ActionMapping mapping, ActionForm form, + HttpServletRequest request, HttpServletResponse response) { + return deleteFile(request, response,form, IToolContentHandler.TYPE_OFFLINE); + } + /** + * Delete online instruction file from current Resource authoring page. + * @param mapping + * @param form + * @param request + * @param response + * @return + */ + public ActionForward deleteOnlineFile(ActionMapping mapping, ActionForm form, + HttpServletRequest request, HttpServletResponse response) { + return deleteFile(request, response,form, IToolContentHandler.TYPE_ONLINE); + } + + /** + * @param request + * @param response + * @param form + * @param type + * @return + */ + private ActionForward deleteFile(HttpServletRequest request, HttpServletResponse response, ActionForm form, String type) { + Long contentID = new Long(WebUtil.readLongParam(request,AttributeNames.PARAM_TOOL_CONTENT_ID)); + Long versionID = new Long(WebUtil.readLongParam(request,"versionID")); + Long uuID = new Long(WebUtil.readLongParam(request,"uuID")); + + //handle session value + List attachmentList = getAttachmentList(request); + List deleteAttachmentList = getDeletedAttachmentList(request); + //first check exist attachment and delete old one (if exist) to deletedAttachmentList + Iterator iter = attachmentList.iterator(); + ResourceAttachment existAtt; + while(iter.hasNext()){ + existAtt = (ResourceAttachment) iter.next(); + if(existAtt.getFileUuid().equals(uuID) && existAtt.getFileVersionId().equals(versionID)){ + //if there is same name attachment, delete old one + deleteAttachmentList.add(existAtt); + iter.remove(); + break; + } + } + + //handle web page display + List leftAttachments; + if(StringUtils.equals(IToolContentHandler.TYPE_OFFLINE,type)){ + leftAttachments = ((ResourceForm)form).getOfflineFileList(); + }else{ + leftAttachments = ((ResourceForm)form).getOnlineFileList(); + } + iter = leftAttachments.iterator(); + while(iter.hasNext()){ + ResourceAttachment att = (ResourceAttachment) iter.next(); + if(versionID.equals(att.getFileVersionId()) && uuID.equals(att.getFileUuid())){ + iter.remove(); + break; + } + } + StringBuffer sb = new StringBuffer(); + iter = leftAttachments.iterator(); + while(iter.hasNext()){ +// ResourceAttachment file = (ResourceAttachment) iter.next(); +// sb.append("
  • ").append(file.getFileName()).append("\r\n"); +// sb.append(" "); +// sb.append(this.getResources(request).getMessage("label.view")); +// sb.append("\r\n"); +// sb.append(" "); +// sb.append(this.getResources(request).getMessage("label.download")); +// sb.append("\r\n"); +// sb.append(""); +// +// if(StringUtils.equals(type,IToolContentHandler.TYPE_OFFLINE)) +// sb.append(this.getResources(request).getMessage("label.authoring.offline.delete")); +// else +// sb.append(this.getResources(request).getMessage("label.authoring.online.delete")); +// sb.append("
  • \r\n"); + } + try { + PrintWriter out = response.getWriter(); + out.print(sb.toString()); + out.flush(); + } catch (IOException e) { + log.error(e); + } + return null; + } //************************************************************************************* // Private method //************************************************************************************* @@ -212,8 +490,29 @@ * @param request * @return */ + private List getDeletedAttachmentList(HttpServletRequest request) { + return getListFromSession(request,ResourceConstants.ATTR_DELETED_ATTACHMENT_LIST); + } + /** + * @param request + * @return + */ + private List getDeletedTopicList(HttpServletRequest request) { + return getListFromSession(request,ResourceConstants.ATTR_DELETED_RESOURCE_LIST); + } + /** + * @param request + * @return + */ + private List getResourceList(HttpServletRequest request) { + return getListFromSession(request,ResourceConstants.ATTR_RESOURCE_LIST); + } + /** + * @param request + * @return + */ private List getAttachmentList(HttpServletRequest request) { - return getListFromSession(request,ResourceConstants.INSTRUCTION_ATTACHMENT_LIST); + return getListFromSession(request,ResourceConstants.ATT_ATTACHMENT_LIST); } /** * Get java.util.List from HttpSession by given name. @@ -229,5 +528,65 @@ request.getSession().setAttribute(name,list); } return list; - } + } + /** + * @param request + */ + private List getInstructionsFromRequest(HttpServletRequest request) { + String list = request.getParameter("instructionList"); + String[] params = list.split("&"); + Map paramMap = new HashMap(); + String[] pair; + for (String item: params) { + pair = item.split("="); + if(pair == null || pair.length != 2) + continue; + try { + paramMap.put(pair[0],URLDecoder.decode(pair[1],"UTF-8")); + } catch (UnsupportedEncodingException e) { + log.error("Error occurs when decode instruction string:" + e.toString()); + } + } + + int count = NumberUtils.stringToInt(paramMap.get("instructionCount")); + List instructionList = new ArrayList(); + for(int idx=0;idx + +
    + + +
    +
    +
    +
    + +<%-- Success Messages --%> + +
    + + +
    +
    +
    +
    \ No newline at end of file Index: lams_tool_larsrc/web/includes/css/rsrc.css =================================================================== diff -u -r22c9fac3e900de26984ff64416f30a373fc05658 -r65296e0451eae1b3515d347b885318fc0a290e96 --- lams_tool_larsrc/web/includes/css/rsrc.css (.../rsrc.css) (revision 22c9fac3e900de26984ff64416f30a373fc05658) +++ lams_tool_larsrc/web/includes/css/rsrc.css (.../rsrc.css) (revision 65296e0451eae1b3515d347b885318fc0a290e96) @@ -21,3 +21,7 @@ text-align: center; background-color:#B4C8FE; } + +div.message img.icon { + vertical-align: middle; +} Index: lams_tool_larsrc/web/includes/images/iconWarning.gif =================================================================== diff -u Binary files differ Index: lams_tool_larsrc/web/pages/authoring/basic.jsp =================================================================== diff -u -r22c9fac3e900de26984ff64416f30a373fc05658 -r65296e0451eae1b3515d347b885318fc0a290e96 --- lams_tool_larsrc/web/pages/authoring/basic.jsp (.../basic.jsp) (revision 22c9fac3e900de26984ff64416f30a373fc05658) +++ lams_tool_larsrc/web/pages/authoring/basic.jsp (.../basic.jsp) (revision 65296e0451eae1b3515d347b885318fc0a290e96) @@ -18,6 +18,27 @@ area.style.height="0px"; area.style.display="none"; } + function launchPopup(url,title) { + var wd = null; + if(wd && wd.open && !wd.closed){ + wd.close(); + } + wd = window.open(url,title,'resizable,width=796,height=570,scrollbars'); + wd.window.focus(); + } + function verifyUrl(myUrl, title){ + launchPopup(myUrl,title); + } + function previewItem(idx){ + } + function editItem(idx){ + var url = "" + idx; + + } + function deleteItem(idx){ + var url = "" + idx; + + } @@ -33,7 +54,7 @@ @@ -43,7 +64,7 @@
    -
    +
    <%@ include file="/pages/authoring/parts/itemlist.jsp"%>
    @@ -73,5 +94,7 @@ - +
    - ');"> + ');">
    + <%@ include file="/common/messages.jsp" %> +
    Index: lams_tool_larsrc/web/pages/authoring/parts/addurl.jsp =================================================================== diff -u -r22c9fac3e900de26984ff64416f30a373fc05658 -r65296e0451eae1b3515d347b885318fc0a290e96 --- lams_tool_larsrc/web/pages/authoring/parts/addurl.jsp (.../addurl.jsp) (revision 22c9fac3e900de26984ff64416f30a373fc05658) +++ lams_tool_larsrc/web/pages/authoring/parts/addurl.jsp (.../addurl.jsp) (revision 65296e0451eae1b3515d347b885318fc0a290e96) @@ -10,8 +10,7 @@ @@ -78,19 +82,23 @@ - - - - - - - - - - - - -

    + <%@ include file="/common/messages.jsp" %> + + + + + + + + + + + + + + +

    +
    @@ -106,7 +114,7 @@ <%@ include file="instructions.jsp" %> - " class="buttonStyle"> + " class="buttonStyle"> Index: lams_tool_larsrc/web/pages/authoring/parts/itemlist.jsp =================================================================== diff -u -rf3709b5af90ca8439a64e65b0c971bc547b1eb3a -r65296e0451eae1b3515d347b885318fc0a290e96 --- lams_tool_larsrc/web/pages/authoring/parts/itemlist.jsp (.../itemlist.jsp) (revision f3709b5af90ca8439a64e65b0c971bc547b1eb3a) +++ lams_tool_larsrc/web/pages/authoring/parts/itemlist.jsp (.../itemlist.jsp) (revision 65296e0451eae1b3515d347b885318fc0a290e96) @@ -1,44 +1,60 @@ <%@ include file="/common/taglibs.jsp" %> +

    - + <%-- Resource Type:1=URL,2=File,3=Website,4=Learning Object --%> - + - - - + + + - + - - - + + + - + - - - + + + - + - - - + + + - -
    ${resource.title}">">"> + " + onclick="verifyUrl('${resource.url}','Verify URL')"> + + " + onclick="editItem(${status.index})"> + + " + onclick="deleteItem(${status.index})"> + ${resource.title}">">">">">"> ">">">">">"> ">">">">">">
    \ No newline at end of file + + +
    + \ No newline at end of file