Index: lams_tool_larsrc/build.xml =================================================================== RCS file: /usr/local/cvsroot/lams_tool_larsrc/build.xml,v diff -u -r1.8 -r1.9 --- lams_tool_larsrc/build.xml 31 Mar 2006 06:02:00 -0000 1.8 +++ lams_tool_larsrc/build.xml 3 Apr 2006 05:09:50 -0000 1.9 @@ -365,7 +365,7 @@ lamsEarPath="${jboss.deploy}" toolContext="${toolContext}" toolWebUri="${product}.war" - languageFilesPackage="org.lamsfoundation.lams.tool.forum"> + languageFilesPackage="org.lamsfoundation.lams.tool.rsrc"> Index: lams_tool_larsrc/db/sql/create_lams_tool_rsrc.sql =================================================================== RCS file: /usr/local/cvsroot/lams_tool_larsrc/db/sql/create_lams_tool_rsrc.sql,v diff -u -r1.3 -r1.4 --- lams_tool_larsrc/db/sql/create_lams_tool_rsrc.sql 27 Mar 2006 06:10:17 -0000 1.3 +++ lams_tool_larsrc/db/sql/create_lams_tool_rsrc.sql 3 Apr 2006 05:09:50 -0000 1.4 @@ -44,8 +44,8 @@ ); create table tl_larsrc11_resource_item ( uid bigint not null auto_increment, - cr_uuid bigint, - cr_version_id bigint, + file_uuid bigint, + file_version_id bigint, description varchar(255), ims_schema varchar(255), init_item varchar(255), @@ -57,6 +57,8 @@ create_by_author bit, is_hide bit, item_type smallint, + file_type varchar(255), + file_name varchar(255), resource_uid bigint, session_uid bigint, primary key (uid) Index: lams_tool_larsrc/db/sql/table-schema.sql =================================================================== RCS file: /usr/local/cvsroot/lams_tool_larsrc/db/sql/table-schema.sql,v diff -u -r1.4 -r1.5 --- lams_tool_larsrc/db/sql/table-schema.sql 27 Mar 2006 06:10:17 -0000 1.4 +++ lams_tool_larsrc/db/sql/table-schema.sql 3 Apr 2006 05:09:50 -0000 1.5 @@ -51,8 +51,8 @@ ); create table tl_larsrc11_resource_item ( uid bigint not null auto_increment, - cr_uuid bigint, - cr_version_id bigint, + file_uuid bigint, + file_version_id bigint, description varchar(255), ims_schema varchar(255), init_item varchar(255), @@ -64,6 +64,8 @@ create_by_author bit, is_hide bit, item_type smallint, + file_type varchar(255), + file_name varchar(255), resource_uid bigint, session_uid bigint, primary key (uid) Index: lams_tool_larsrc/src/java/org/lamsfoundation/lams/tool/rsrc/ResourceConstants.java =================================================================== RCS file: /usr/local/cvsroot/lams_tool_larsrc/src/java/org/lamsfoundation/lams/tool/rsrc/ResourceConstants.java,v diff -u -r1.4 -r1.5 --- lams_tool_larsrc/src/java/org/lamsfoundation/lams/tool/rsrc/ResourceConstants.java 30 Mar 2006 05:43:48 -0000 1.4 +++ lams_tool_larsrc/src/java/org/lamsfoundation/lams/tool/rsrc/ResourceConstants.java 3 Apr 2006 05:09:50 -0000 1.5 @@ -51,5 +51,11 @@ public static final String ERROR_MSG_DESC_BLANK = "error.resource.item.desc.blank"; public static final String ERROR_MSG_FILE_BLANK = "error.resource.item.file.blank"; public static final String ERROR_MSG_INVALID_URL = "error.resource.item.invalid.url"; + + //mode + public static final String MODE = "mode"; + public static final String AUTHOR_MODE = "author_mode"; + public static final String MONITOR_MODE = "monitor_mode"; + } Index: lams_tool_larsrc/src/java/org/lamsfoundation/lams/tool/rsrc/model/ResourceUser.java =================================================================== RCS file: /usr/local/cvsroot/lams_tool_larsrc/src/java/org/lamsfoundation/lams/tool/rsrc/model/ResourceUser.java,v diff -u -r1.1 -r1.2 --- lams_tool_larsrc/src/java/org/lamsfoundation/lams/tool/rsrc/model/ResourceUser.java 22 Mar 2006 04:43:19 -0000 1.1 +++ lams_tool_larsrc/src/java/org/lamsfoundation/lams/tool/rsrc/model/ResourceUser.java 3 Apr 2006 05:09:50 -0000 1.2 @@ -23,6 +23,7 @@ import org.apache.commons.lang.builder.EqualsBuilder; import org.apache.commons.lang.builder.HashCodeBuilder; import org.apache.log4j.Logger; +import org.lamsfoundation.lams.usermanagement.dto.UserDTO; /** * Resource * @author Dapeng Ni @@ -43,6 +44,13 @@ public ResourceUser(){ } + public ResourceUser(UserDTO user, ResourceSession session){ + this.userId = new Long(user.getUserID().intValue()); + this.firstName = user.getFirstName(); + this.lastName = user.getLastName(); + this.loginName = user.getLogin(); + this.session = session; + } // ********************************************************** // Function method for ForumUser Index: lams_tool_larsrc/src/java/org/lamsfoundation/lams/tool/rsrc/service/IResourceService.java =================================================================== RCS file: /usr/local/cvsroot/lams_tool_larsrc/src/java/org/lamsfoundation/lams/tool/rsrc/service/IResourceService.java,v diff -u -r1.4 -r1.5 --- lams_tool_larsrc/src/java/org/lamsfoundation/lams/tool/rsrc/service/IResourceService.java 31 Mar 2006 06:02:00 -0000 1.4 +++ lams_tool_larsrc/src/java/org/lamsfoundation/lams/tool/rsrc/service/IResourceService.java 3 Apr 2006 05:09:51 -0000 1.5 @@ -29,6 +29,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.ResourceUser; /** * @author Dapeng.Ni @@ -49,5 +50,18 @@ ResourceAttachment uploadInstructionFile(FormFile file, String type) throws ResourceApplicationException; void uploadResourceItemFile(ResourceItem item, FormFile file) throws ResourceApplicationException; + + //********** for user methods ************* + void createUser(ResourceUser resourceUser); + ResourceUser getUserByID(Long long1); + + //********** Repository methods *********************** + void deleteFromRepository(Long fileUuid, Long fileVersionId) throws ResourceApplicationException ; + + void saveOrUpdateResource(Resource Resource); + + void deleteResourceAttachment(Long attachmentUid); + + void deleteResourceItem(Long uid); } Index: lams_tool_larsrc/src/java/org/lamsfoundation/lams/tool/rsrc/service/ResourceServiceImpl.java =================================================================== RCS file: /usr/local/cvsroot/lams_tool_larsrc/src/java/org/lamsfoundation/lams/tool/rsrc/service/ResourceServiceImpl.java,v diff -u -r1.4 -r1.5 --- lams_tool_larsrc/src/java/org/lamsfoundation/lams/tool/rsrc/service/ResourceServiceImpl.java 31 Mar 2006 06:02:00 -0000 1.4 +++ lams_tool_larsrc/src/java/org/lamsfoundation/lams/tool/rsrc/service/ResourceServiceImpl.java 3 Apr 2006 05:09:51 -0000 1.5 @@ -57,6 +57,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.ResourceUser; import org.lamsfoundation.lams.tool.rsrc.util.ResourceToolContentHandler; import org.lamsfoundation.lams.tool.service.ILamsToolService; import org.lamsfoundation.lams.util.MessageService; @@ -216,6 +217,53 @@ return file; } + + + public void createUser(ResourceUser resourceUser) { + resourceUserDao.saveObject(resourceUser); + } + + + public ResourceUser getUserByID(Long userUid) { + + return (ResourceUser) resourceUserDao.getObject(ResourceUser.class,userUid); + + } + + + public void deleteFromRepository(Long fileUuid, Long fileVersionId) throws ResourceApplicationException { + ITicket ticket = getRepositoryLoginTicket(); + try { + repositoryService.deleteVersion(ticket, fileUuid,fileVersionId); + } catch (Exception e) { + throw new ResourceApplicationException( + "Exception occured while deleting files from" + + " the repository " + e.getMessage()); + } + } + + + public void saveOrUpdateResource(Resource resource) { + resourceDao.saveObject(resource); + } + + + public void deleteResourceAttachment(Long attachmentUid) { + resourceAttachmentDao.removeObject(ResourceAttachment.class, attachmentUid); + + } + + + public void saveOrUpdateResourceItem(ResourceItem item) { + resourceItemDao.saveObject(item); + } + + + public void deleteResourceItem(Long uid) { + resourceItemDao.removeObject(ResourceItem.class,uid); + } + + //***************************************************************************** // private methods //***************************************************************************** @@ -405,5 +453,4 @@ this.toolService = toolService; } - } Index: lams_tool_larsrc/src/java/org/lamsfoundation/lams/tool/rsrc/web/action/AuthoringAction.java =================================================================== RCS file: /usr/local/cvsroot/lams_tool_larsrc/src/java/org/lamsfoundation/lams/tool/rsrc/web/action/AuthoringAction.java,v diff -u -r1.9 -r1.10 --- lams_tool_larsrc/src/java/org/lamsfoundation/lams/tool/rsrc/web/action/AuthoringAction.java 31 Mar 2006 06:02:01 -0000 1.9 +++ lams_tool_larsrc/src/java/org/lamsfoundation/lams/tool/rsrc/web/action/AuthoringAction.java 3 Apr 2006 05:09:51 -0000 1.10 @@ -24,7 +24,9 @@ import java.io.PrintWriter; import java.io.UnsupportedEncodingException; import java.net.URLDecoder; +import java.sql.Timestamp; import java.util.ArrayList; +import java.util.Date; import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; @@ -36,7 +38,9 @@ import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; +import javax.servlet.http.HttpSession; +import org.apache.commons.beanutils.PropertyUtils; import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.math.NumberUtils; import org.apache.log4j.Logger; @@ -51,14 +55,17 @@ 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.ResourceUser; 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; @@ -81,7 +88,7 @@ String param = mapping.getParameter(); //-----------------------Resource Author function --------------------------- if (param.equals("initPage")) { -// request.getSession().setAttribute(ForumConstants.MODE,ForumConstants.AUTHOR_MODE); + request.getSession().setAttribute(ResourceConstants.MODE,ResourceConstants.AUTHOR_MODE); return initPage(mapping, form, request, response); } // if (param.equals("monitoringInitPage")) { @@ -131,7 +138,7 @@ if(itemIdx != -1){ List resourceList = getResourceList(request); ResourceItem item = resourceList.remove(itemIdx); - List delList = getDeletedTopicList(request); + List delList = getDeletedResourceList(request); delList.add(item); } return mapping.findForward(ResourceConstants.SUCCESS); @@ -278,7 +285,118 @@ */ private ActionForward updateContent(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) { - return null; + ResourceForm resourceForm = (ResourceForm)(form); + + Resource resource = resourceForm.getResource(); + try { + IResourceService service = getResourceService(); + + //*******************************Handle user******************* + //try to get form system session + HttpSession ss = SessionManager.getSession(); + //get back login user DTO + UserDTO user = (UserDTO) ss.getAttribute(AttributeNames.USER); + ResourceUser resourceUser = service.getUserByID(new Long(user.getUserID().intValue())); + if(resourceUser == null){ + resourceUser = new ResourceUser(user,null); + service.createUser(resourceUser); + } + + //**********************************Get Resource PO********************* + Resource resourcePO = service.getResourceByContentId(resourceForm.getToolContentID()); + if(resourcePO == null || !resourceForm.getToolContentID().equals(resource.getContentId()) ){ + //new Resource, create it. + resourcePO = resource; + resourcePO.setContentId(resourceForm.getToolContentID()); + }else{ + Long uid = resourcePO.getUid(); + PropertyUtils.copyProperties(resourcePO,resource); + //get back UID + resourcePO.setUid(uid); + } + resourcePO.setCreatedBy(resourceUser); + + //**********************************Handle Attachement********************* + //merge attachment info + Set attPOSet = resourcePO.getAttachments(); + if(attPOSet == null) + attPOSet = new HashSet(); + List attachmentList = getAttachmentList(request); + List deleteAttachmentList = getDeletedAttachmentList(request); + + //current attachemnt in authoring instruction tab. + Iterator iter = attachmentList.iterator(); + while(iter.hasNext()){ + ResourceAttachment newAtt = (ResourceAttachment) iter.next(); + //add new attachment if UID is not null + if(newAtt.getUid() == null) + attPOSet.add(newAtt); + } + attachmentList.clear(); + + //deleted attachment. 2 possible types: one is persist another is non-persist before. + iter = deleteAttachmentList.iterator(); + while(iter.hasNext()){ + ResourceAttachment delAtt = (ResourceAttachment) iter.next(); + iter.remove(); + //delete from repository + service.deleteFromRepository(delAtt.getFileUuid(),delAtt.getFileVersionId()); + //it is an existed att, then delete it from current attachmentPO + if(delAtt.getUid() != null){ + Iterator attIter = attPOSet.iterator(); + while(attIter.hasNext()){ + ResourceAttachment att = (ResourceAttachment) attIter.next(); + if(delAtt.getUid().equals(att.getUid())){ + attIter.remove(); + break; + } + } + service.deleteResourceAttachment(delAtt.getUid()); + }//end remove from persist value + } + + //copy back + resourcePO.setAttachments(attPOSet); + //************************* Handle resource items ******************* + //Handle resource items + List topics = getResourceList(request); + iter = topics.iterator(); + while(iter.hasNext()){ + ResourceItem item = (ResourceItem) iter.next(); + if(item != null){ + //This flushs user UID info to message if this user is a new user. + item.setCreateBy(resourceUser); + item.setCreateDate(new Timestamp(new Date().getTime())); + } + } + //delete them from database. + List delTopics = getDeletedResourceList(request); + iter = delTopics.iterator(); + while(iter.hasNext()){ + ResourceItem item = (ResourceItem) iter.next(); + iter.remove(); + if(item.getUid() != null) + service.deleteResourceItem(item.getUid()); + if(item.getFileUuid() != null && item.getFileVersionId() != null) + service.deleteFromRepository(item.getFileUuid(),item.getFileVersionId()); + } + + //initialize attachmentList again + attachmentList = getAttachmentList(request); + attachmentList.addAll(resource.getAttachments()); + + //********************************************** + //finally persist resourcePO again + service.saveOrUpdateResource(resourcePO); + } catch (Exception e) { + log.error(e); + } + + String mode = (String) request.getSession().getAttribute(ResourceConstants.MODE); + if(StringUtils.equals(mode,ResourceConstants.AUTHOR_MODE)) + return mapping.findForward("author"); + else + return mapping.findForward("monitor"); } /** @@ -489,30 +607,34 @@ * @param request * @return */ - private List getDeletedAttachmentList(HttpServletRequest request) { - return getListFromSession(request,ResourceConstants.ATTR_DELETED_ATTACHMENT_LIST); + private List getAttachmentList(HttpServletRequest request) { + return getListFromSession(request,ResourceConstants.ATT_ATTACHMENT_LIST); } /** * @param request * @return */ - private List getDeletedTopicList(HttpServletRequest request) { - return getListFromSession(request,ResourceConstants.ATTR_DELETED_RESOURCE_LIST); + private List getDeletedAttachmentList(HttpServletRequest request) { + return getListFromSession(request,ResourceConstants.ATTR_DELETED_ATTACHMENT_LIST); } /** + * List save current resource items. * @param request * @return */ private List getResourceList(HttpServletRequest request) { return getListFromSession(request,ResourceConstants.ATTR_RESOURCE_LIST); - } + } /** + * List save deleted resource items, which could be persisted or non-persisted items. * @param request * @return */ - private List getAttachmentList(HttpServletRequest request) { - return getListFromSession(request,ResourceConstants.ATT_ATTACHMENT_LIST); + private List getDeletedResourceList(HttpServletRequest request) { + return getListFromSession(request,ResourceConstants.ATTR_DELETED_RESOURCE_LIST); } + + /** * Get java.util.List from HttpSession by given name. * @@ -528,6 +650,8 @@ } return list; } + + /** * @param request */