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.26 -r1.27 --- lams_tool_larsrc/src/java/org/lamsfoundation/lams/tool/rsrc/ResourceConstants.java 25 Aug 2006 02:41:05 -0000 1.26 +++ lams_tool_larsrc/src/java/org/lamsfoundation/lams/tool/rsrc/ResourceConstants.java 25 Aug 2006 06:04:42 -0000 1.27 @@ -70,9 +70,10 @@ public static final String ATTR_SUMMARY_LIST = "summaryList"; public static final String ATTR_USER_LIST = "userList"; public static final String ATTR_RESOURCE_INSTRUCTION = "instructions"; - public static final String ATTR_FINISH_LOCK = "finishLock"; + public static final String ATTR_FINISH_LOCK = "finishedLock"; public static final String ATTR_SESSION_MAP_ID = "sessionMapID"; public static final Object ATTR_RESOURCE_FORM = "resourceForm"; + public static final String ATTR_ADD_RESOURCE_TYPE = "addType"; //error message keys public static final String ERROR_MSG_TITLE_BLANK = "error.resource.item.title.blank"; Index: lams_tool_larsrc/src/java/org/lamsfoundation/lams/tool/rsrc/model/Resource.java =================================================================== RCS file: /usr/local/cvsroot/lams_tool_larsrc/src/java/org/lamsfoundation/lams/tool/rsrc/model/Resource.java,v diff -u -r1.15 -r1.16 --- lams_tool_larsrc/src/java/org/lamsfoundation/lams/tool/rsrc/model/Resource.java 25 Aug 2006 02:41:04 -0000 1.15 +++ lams_tool_larsrc/src/java/org/lamsfoundation/lams/tool/rsrc/model/Resource.java 25 Aug 2006 06:04:42 -0000 1.16 @@ -398,7 +398,7 @@ /** * * @hibernate.set lazy="true" - * cascade="all-delete-orphan" + * cascade="all" * inverse="false" * order-by="create_date desc" * @hibernate.collection-key column="resource_uid" Index: lams_tool_larsrc/src/java/org/lamsfoundation/lams/tool/rsrc/model/ResourceUser.hbm.xml =================================================================== RCS file: /usr/local/cvsroot/lams_tool_larsrc/src/java/org/lamsfoundation/lams/tool/rsrc/model/Attic/ResourceUser.hbm.xml,v diff -u -r1.2 -r1.3 --- lams_tool_larsrc/src/java/org/lamsfoundation/lams/tool/rsrc/model/ResourceUser.hbm.xml 25 Aug 2006 02:41:04 -0000 1.2 +++ lams_tool_larsrc/src/java/org/lamsfoundation/lams/tool/rsrc/model/ResourceUser.hbm.xml 25 Aug 2006 06:04:42 -0000 1.3 @@ -71,13 +71,13 @@ /> HttpRequest * @param request Index: lams_tool_larsrc/src/java/org/lamsfoundation/lams/tool/rsrc/web/action/LearningAction.java =================================================================== RCS file: /usr/local/cvsroot/lams_tool_larsrc/src/java/org/lamsfoundation/lams/tool/rsrc/web/action/LearningAction.java,v diff -u -r1.15 -r1.16 --- lams_tool_larsrc/src/java/org/lamsfoundation/lams/tool/rsrc/web/action/LearningAction.java 25 Aug 2006 02:41:05 -0000 1.15 +++ lams_tool_larsrc/src/java/org/lamsfoundation/lams/tool/rsrc/web/action/LearningAction.java 25 Aug 2006 06:04:42 -0000 1.16 @@ -58,6 +58,7 @@ import org.lamsfoundation.lams.usermanagement.dto.UserDTO; import org.lamsfoundation.lams.web.session.SessionManager; import org.lamsfoundation.lams.web.util.AttributeNames; +import org.lamsfoundation.lams.web.util.SessionMap; import org.springframework.web.context.WebApplicationContext; import org.springframework.web.context.support.WebApplicationContextUtils; /** @@ -90,20 +91,137 @@ } return mapping.findForward(ResourceConstants.ERROR); } - + /** + * Read resource data from database and put them into HttpSession. It will redirect to init.do directly after this + * method run successfully. + * + * This method will avoid read database again and lost un-saved resouce item lost when user "refresh page", + * + */ + private ActionForward start(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) { + + //initial Session Map + SessionMap sessionMap = new SessionMap(); + request.getSession().setAttribute(sessionMap.getSessionID(), sessionMap); + + //save toolContentID into HTTPSession + String mode = request.getParameter(AttributeNames.ATTR_MODE); + + Long sessionId = new Long(request.getParameter(ResourceConstants.PARAM_TOOL_SESSION_ID)); + sessionMap.put(AttributeNames.PARAM_TOOL_SESSION_ID,sessionId); + + request.setAttribute(ResourceConstants.ATTR_SESSION_MAP_ID, sessionMap.getSessionID()); + request.setAttribute(AttributeNames.ATTR_MODE,mode); + request.setAttribute(AttributeNames.PARAM_TOOL_SESSION_ID,sessionId); + +// get back the resource and item list and display them on page + IResourceService service = getResourceService(); + ResourceUser resourceUser = getCurrentUser(service,sessionId); + + List items = null; + Resource resource; + items = service.getResourceItemsBySessionId(sessionId); + resource = service.getResourceBySessionId(sessionId); + + + //add define later support + if(resource.isDefineLater()){ + return mapping.findForward("defineLater"); + } + //add run offline support + if(resource.getRunOffline()){ + return mapping.findForward("runOffline"); + } + + //init resource item list + List resourceItemList = getResourceItemList(sessionMap); + resourceItemList.clear(); + if(items != null){ + //remove hidden items. + for(ResourceItem item : items){ + if(!item.isHide()){ + resourceItemList.add(item); + } + } + } + + //set complete flag for display purpose + service.retrieveComplete(resourceItemList, resourceUser); + + sessionMap.put(ResourceConstants.ATTR_RESOURCE,resource); + + //check whether there is only one resource item and run auto flag is true or not. + boolean runAuto = false; + int itemsNumber = 0; + if(resource.getResourceItems() != null){ + itemsNumber = resource.getResourceItems().size(); + if(resource.isRunAuto() && itemsNumber == 1){ + ResourceItem item = (ResourceItem) resource.getResourceItems().iterator().next(); + //only visible item can be run auto. + if(!item.isHide()){ + runAuto = true; + request.setAttribute(ResourceConstants.ATTR_RESOURCE_ITEM_UID,item.getUid()); + } + } + } + request.setAttribute(ResourceConstants.ATTR_RUN_AUTO,new Boolean(runAuto)); + + //check whehter finish lock is on/off + boolean lock = resource.getLockWhenFinished() && resourceUser.isSessionFinished(); + sessionMap.put(ResourceConstants.ATTR_FINISH_LOCK,lock); + + //set contentInUse flag to true! + resource.setContentInUse(true); + resource.setDefineLater(false); + service.saveOrUpdateResource(resource); + + + return mapping.findForward(ResourceConstants.SUCCESS); + } + /** + * Mark resource item as complete status. + * @param mapping + * @param form + * @param request + * @param response + * @return + */ + private ActionForward complete(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) { + String mode = request.getParameter(AttributeNames.ATTR_MODE); + String sessionMapID = request.getParameter(ResourceConstants.ATTR_SESSION_MAP_ID); + + doComplete(request); + + request.setAttribute(AttributeNames.ATTR_MODE,mode); + request.setAttribute(ResourceConstants.ATTR_SESSION_MAP_ID,sessionMapID); + return mapping.findForward(ResourceConstants.SUCCESS); + } + /** + * Finish learning session. + * @param mapping + * @param form + * @param request + * @param response + * @return + */ private ActionForward finish(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) { //auto run mode, when use finish the only one resource item, mark it as complete then finish this activity as well. String mode = request.getParameter(AttributeNames.ATTR_MODE); String resourceItemUid = request.getParameter(ResourceConstants.PARAM_RESOURCE_ITEM_UID); String runOffline = request.getParameter(ResourceConstants.PARAM_RUN_OFFLINE); + + //get back SessionMap + String sessionMapID = request.getParameter(ResourceConstants.ATTR_SESSION_MAP_ID); + SessionMap sessionMap = (SessionMap) request.getSession().getAttribute(sessionMapID); + + Long sessionId = (Long) sessionMap.get(ResourceConstants.ATTR_TOOL_SESSION_ID); + if(resourceItemUid != null){ doComplete(request); request.setAttribute(ResourceConstants.ATTR_RUN_AUTO,true); }else request.setAttribute(ResourceConstants.ATTR_RUN_AUTO,false); - Long sessionId = (Long) request.getSession().getAttribute( - AttributeNames.PARAM_TOOL_SESSION_ID); HttpSession ss = SessionManager.getSession(); UserDTO user = (UserDTO) ss.getAttribute(AttributeNames.USER); Long userID = new Long(user.getUserID().longValue()); @@ -132,13 +250,6 @@ return mapping.findForward("finish"); } - private ActionForward complete(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) { - String mode = request.getParameter(AttributeNames.ATTR_MODE); - doComplete(request); - request.setAttribute(AttributeNames.ATTR_MODE,mode); - return mapping.findForward(ResourceConstants.SUCCESS); - } - /** * Save file or url resource item into database. @@ -150,8 +261,13 @@ */ private ActionForward saveOrUpdateItem(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) { + //get back SessionMap + String sessionMapID = request.getParameter(ResourceConstants.ATTR_SESSION_MAP_ID); + SessionMap sessionMap = (SessionMap) request.getSession().getAttribute(sessionMapID); + request.setAttribute(ResourceConstants.ATTR_SESSION_MAP_ID, sessionMapID); - Long sessionId = (Long) request.getSession().getAttribute(ResourceConstants.ATTR_TOOL_SESSION_ID); + Long sessionId = (Long) sessionMap.get(ResourceConstants.ATTR_TOOL_SESSION_ID); + String mode = request.getParameter(AttributeNames.ATTR_MODE); ResourceItemForm itemForm = (ResourceItemForm)form; ActionErrors errors = validateResourceItem(itemForm); @@ -201,98 +317,15 @@ service.saveOrUpdateResourceSession(resSession); //update session value - List resourceItemList = getResourceItemList(request); + List resourceItemList = getResourceItemList(sessionMap); resourceItemList.add(item); //URL or file upload - request.setAttribute("addType",new Short(type)); + request.setAttribute(ResourceConstants.ATTR_ADD_RESOURCE_TYPE,new Short(type)); request.setAttribute(AttributeNames.ATTR_MODE,mode); return mapping.findForward(ResourceConstants.SUCCESS); } - /** - * Read resource data from database and put them into HttpSession. It will redirect to init.do directly after this - * method run successfully. - * - * This method will avoid read database again and lost un-saved resouce item lost when user "refresh page", - * - */ - private ActionForward start(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) { - //save toolContentID into HTTPSession - String mode = request.getParameter(AttributeNames.ATTR_MODE); - - Long sessionId = new Long(request.getParameter(ResourceConstants.PARAM_TOOL_SESSION_ID)); - request.getSession().setAttribute(ResourceConstants.ATTR_TOOL_SESSION_ID,sessionId); - -// get back the resource and item list and display them on page - IResourceService service = getResourceService(); - ResourceUser resourceUser = getCurrentUser(service,sessionId); - - List items = null; - Resource resource; - try { - items = service.getResourceItemsBySessionId(sessionId); - resource = service.getResourceBySessionId(sessionId); - } catch (Exception e) { - log.error(e); - return mapping.findForward(ResourceConstants.ERROR); - } - - - //add define later support - if(resource.isDefineLater()){ - return mapping.findForward("defineLater"); - } - //add run offline support - if(resource.getRunOffline()){ - return mapping.findForward("runOffline"); - } - - //init resource item list - List resourceItemList = getResourceItemList(request); - resourceItemList.clear(); - if(items != null){ - //remove hidden items. - for(ResourceItem item : items){ - if(!item.isHide()){ - resourceItemList.add(item); - } - } - } - - //set complete flag for display purpose - service.retrieveComplete(resourceItemList, resourceUser); - - request.getSession().setAttribute(ResourceConstants.ATTR_RESOURCE,resource); - - //check whether there is only one resource item and run auto flag is true or not. - boolean runAuto = false; - int itemsNumber = 0; - if(resource.getResourceItems() != null){ - itemsNumber = resource.getResourceItems().size(); - if(resource.isRunAuto() && itemsNumber == 1){ - ResourceItem item = (ResourceItem) resource.getResourceItems().iterator().next(); - //only visible item can be run auto. - if(!item.isHide()){ - runAuto = true; - request.setAttribute(ResourceConstants.ATTR_RESOURCE_ITEM_UID,item.getUid()); - } - } - } - request.setAttribute(ResourceConstants.ATTR_RUN_AUTO,new Boolean(runAuto)); - - //check whehter finish lock is on/off - boolean lock = resource.getLockWhenFinished() && resourceUser.isSessionFinished(); - request.getSession().setAttribute(ResourceConstants.ATTR_FINISH_LOCK,lock); - - //set contentInUse flag to true! - resource.setContentInUse(true); - resource.setDefineLater(false); - service.saveOrUpdateResource(resource); - - request.setAttribute(AttributeNames.ATTR_MODE,mode); - return mapping.findForward(ResourceConstants.SUCCESS); - } - + //************************************************************************************* // Private method //************************************************************************************* @@ -305,8 +338,8 @@ * @param request * @return */ - private List getResourceItemList(HttpServletRequest request) { - return getListFromSession(request,ResourceConstants.ATTR_RESOURCE_ITEM_LIST); + private List getResourceItemList(SessionMap sessionMap) { + return getListFromSession(sessionMap,ResourceConstants.ATTR_RESOURCE_ITEM_LIST); } /** * Get java.util.List from HttpSession by given name. @@ -315,14 +348,15 @@ * @param name * @return */ - private List getListFromSession(HttpServletRequest request,String name) { - List list = (List) request.getSession().getAttribute(name); + private List getListFromSession(SessionMap sessionMap,String name) { + List list = (List) sessionMap.get(name); if(list == null){ list = new ArrayList(); - request.getSession().setAttribute(name,list); + sessionMap.put(name,list); } return list; } + /** * Return ActionForward according to resource item type. * @param type @@ -400,18 +434,24 @@ /** * Set complete flag for given resource item. * @param request + * @param sessionId */ private void doComplete(HttpServletRequest request) { + //get back sessionMap + String sessionMapID = request.getParameter(ResourceConstants.ATTR_SESSION_MAP_ID); + SessionMap sessionMap = (SessionMap) request.getSession().getAttribute(sessionMapID); + Long resourceItemUid = new Long(request.getParameter(ResourceConstants.PARAM_RESOURCE_ITEM_UID)); IResourceService service = getResourceService(); HttpSession ss = SessionManager.getSession(); //get back login user DTO UserDTO user = (UserDTO) ss.getAttribute(AttributeNames.USER); - Long sessionId = (Long) request.getSession().getAttribute(ResourceConstants.ATTR_TOOL_SESSION_ID); + + Long sessionId = (Long) sessionMap.get(ResourceConstants.ATTR_TOOL_SESSION_ID); service.setItemComplete(resourceItemUid,new Long(user.getUserID().intValue()),sessionId); //set resource item complete tag - List resourceItemList = getResourceItemList(request); + List resourceItemList = getResourceItemList(sessionMap); for(ResourceItem item:resourceItemList){ if(item.getUid().equals(resourceItemUid)){ item.setComplete(true); Index: lams_tool_larsrc/web/pages/itemreview/instructionsnav.jsp =================================================================== RCS file: /usr/local/cvsroot/lams_tool_larsrc/web/pages/itemreview/instructionsnav.jsp,v diff -u -r1.12 -r1.13 --- lams_tool_larsrc/web/pages/itemreview/instructionsnav.jsp 25 Aug 2006 02:41:04 -0000 1.12 +++ lams_tool_larsrc/web/pages/itemreview/instructionsnav.jsp 25 Aug 2006 06:04:42 -0000 1.13 @@ -19,10 +19,10 @@ var reqIDVar = new Date(); //if auto run mode, the opener will be null. if(window.parent.opener != null) - window.parent.opener.location.href="?mode=${mode}&itemUid=${param.itemUid}&reqID="+reqIDVar.getTime(); + window.parent.opener.location.href="?sessionMapID=${sessionMapID}&mode=${mode}&itemUid=${param.itemUid}&reqID="+reqIDVar.getTime(); else{ //set complete flag and finish this activity as well. - window.parent.location.href=''; + window.parent.location.href=''; } } if(window.parent.opener != null) { Index: lams_tool_larsrc/web/pages/learning/addfile.jsp =================================================================== RCS file: /usr/local/cvsroot/lams_tool_larsrc/web/pages/learning/addfile.jsp,v diff -u -r1.6 -r1.7 --- lams_tool_larsrc/web/pages/learning/addfile.jsp 3 Jul 2006 04:49:46 -0000 1.6 +++ lams_tool_larsrc/web/pages/learning/addfile.jsp 25 Aug 2006 06:04:42 -0000 1.7 @@ -7,6 +7,7 @@ +
Index: lams_tool_larsrc/web/pages/learning/addurl.jsp =================================================================== RCS file: /usr/local/cvsroot/lams_tool_larsrc/web/pages/learning/addurl.jsp,v diff -u -r1.8 -r1.9 --- lams_tool_larsrc/web/pages/learning/addurl.jsp 3 Jul 2006 04:49:46 -0000 1.8 +++ lams_tool_larsrc/web/pages/learning/addurl.jsp 25 Aug 2006 06:04:42 -0000 1.9 @@ -9,6 +9,7 @@ +
Index: lams_tool_larsrc/web/pages/learning/learning.jsp =================================================================== RCS file: /usr/local/cvsroot/lams_tool_larsrc/web/pages/learning/learning.jsp,v diff -u -r1.24 -r1.25 --- lams_tool_larsrc/web/pages/learning/learning.jsp 25 Aug 2006 02:41:06 -0000 1.24 +++ lams_tool_larsrc/web/pages/learning/learning.jsp 25 Aug 2006 06:04:42 -0000 1.25 @@ -11,36 +11,44 @@ + + + + + + + + Index: lams_tool_larsrc/web/pages/learning/start.jsp =================================================================== RCS file: /usr/local/cvsroot/lams_tool_larsrc/web/pages/learning/start.jsp,v diff -u -r1.6 -r1.7 --- lams_tool_larsrc/web/pages/learning/start.jsp 30 Jun 2006 04:09:54 -0000 1.6 +++ lams_tool_larsrc/web/pages/learning/start.jsp 25 Aug 2006 06:04:42 -0000 1.7 @@ -5,12 +5,12 @@ Index: lams_tool_larsrc/web/pages/learning/success.jsp =================================================================== RCS file: /usr/local/cvsroot/lams_tool_larsrc/web/pages/learning/success.jsp,v diff -u -r1.5 -r1.6 --- lams_tool_larsrc/web/pages/learning/success.jsp 3 Jul 2006 02:16:12 -0000 1.5 +++ lams_tool_larsrc/web/pages/learning/success.jsp 25 Aug 2006 06:04:42 -0000 1.6 @@ -8,14 +8,14 @@
- Add URL success, click here to return. + Add URL success, click here to return. - Add File success, click here to return. + Add File success, click here to return.