Index: lams_common/conf/xdoclet/servlet-mappings.xml
===================================================================
RCS file: /usr/local/cvsroot/lams_common/conf/xdoclet/Attic/servlet-mappings.xml,v
diff -u
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ lams_common/conf/xdoclet/servlet-mappings.xml 19 Apr 2005 06:13:41 -0000 1.1
@@ -0,0 +1,25 @@
+
+
+parent_learning_design_id
+ *
+ * @param parentDesignID The parent_learning_design_id
+ * @return List The List of all corresponding Learning designs with
+ * given parent_learning_design_id
+ */
+ public List getLearningDesignsByParent(Long parentDesignID);
}
Index: lams_common/src/java/org/lamsfoundation/lams/learningdesign/dao/hibernate/LearningDesignDAO.java
===================================================================
RCS file: /usr/local/cvsroot/lams_common/src/java/org/lamsfoundation/lams/learningdesign/dao/hibernate/LearningDesignDAO.java,v
diff -u -r1.2 -r1.3
--- lams_common/src/java/org/lamsfoundation/lams/learningdesign/dao/hibernate/LearningDesignDAO.java 13 Apr 2005 01:36:01 -0000 1.2
+++ lams_common/src/java/org/lamsfoundation/lams/learningdesign/dao/hibernate/LearningDesignDAO.java 19 Apr 2005 06:13:56 -0000 1.3
@@ -28,6 +28,8 @@
private static final String ALL_IN_FOLDER ="from " + TABLENAME +" in class " + LearningDesign.class.getName()+
" where workspace_folder_id=?";
+ private static final String FIND_BY_PARENT ="from " + TABLENAME +" in class " + LearningDesign.class.getName()+
+ " where parent_learning_design_id=?";
/*
@@ -75,5 +77,13 @@
public List getAllLearningDesignsInFolder(Integer workspaceFolderID) {
return this.getHibernateTemplate().find(ALL_IN_FOLDER,workspaceFolderID);
}
+ /**
+ * (non-Javadoc)
+ * @see org.lamsfoundation.lams.learningdesign.dao.ILearningDesignDAO#getLearningDesignsByParent(java.lang.Long)
+ */
+ public List getLearningDesignsByParent(Long parentDesignID){
+ List list = this.getHibernateTemplate().find(FIND_BY_PARENT,parentDesignID);
+ return list;
+ }
}
Index: lams_common/src/java/org/lamsfoundation/lams/workspace/service/IWorkspaceManagementService.java
===================================================================
RCS file: /usr/local/cvsroot/lams_common/src/java/org/lamsfoundation/lams/workspace/service/Attic/IWorkspaceManagementService.java,v
diff -u -r1.2 -r1.3
--- lams_common/src/java/org/lamsfoundation/lams/workspace/service/IWorkspaceManagementService.java 15 Apr 2005 02:49:08 -0000 1.2
+++ lams_common/src/java/org/lamsfoundation/lams/workspace/service/IWorkspaceManagementService.java 19 Apr 2005 06:14:18 -0000 1.3
@@ -2,17 +2,77 @@
import java.io.IOException;
+import org.lamsfoundation.lams.usermanagement.WorkspaceFolder;
+import org.lamsfoundation.lams.usermanagement.exception.UserException;
+import org.lamsfoundation.lams.workspace.exception.WorkspaceFolderException;
+
/**
* @author Manpreet Minhas
*/
public interface IWorkspaceManagementService {
+ /**
+ * This method returns the contents of the folder with given
+ * workspaceFolderID
depending upon the mode
.
+ * Before it does so, it checks whether the given User
+ * is authorized to perform this action.
+ *
+ * The mode
can be either of the following
+ *
Note: It only returns the top level contents. To navigate to
+ * the contents of the sub-folders of the given WorkspaceFolder
+ * we have to call this method again with there workspaceFolderID
For Example:
+ * For a folder with given tree structure
+ *
+ * A
+ * |
+ * --------------------
+ * | | |
+ * A1 A2 A3
+ * |
+ * ---------
+ * | |
+ * AA1 AA2
+ *
+ * This function will only retun A1, A2 and A3 and to get the contents if A1 we have to again call this
+ * method with workspaceFolderID of A1.
+ *
+ * @param userID The user_id
of the User
who has requested the contents
+ * @param workspaceFolderID The workspace_folder_id
of the WorkspaceFolder
+ * whose contents are requested
+ * @param mode It can be either 1(AUTHORING) or 2(MONITORING)
+ * @return String The required information in WDDX format
+ * @throws IOException
+ */
public String getFolderContents(Integer userID, Integer workspaceFolderID, Integer mode)throws IOException;
/**
* This method creates a new folder under the given parentFolder
* inside the user's default workspace.
*
+ * @param parentFolderID The parent_folder_id
of the WorkspaceFolder
+ * under which the new folder has to be created
+ * @param name The name of the new folder
+ * @param userID The user_id
of the User
who owns this folder
+ * @return WorkspaceFolder The WorkspaceFolder
freshly created
+ * @throws UserException
+ * @throws WorkspaceFolderException
+ */
+ public WorkspaceFolder createFolder(Integer parentFolderID, String name, Integer userID) throws UserException,WorkspaceFolderException;
+
+ /**
+ * This method creates a new folder under the given parentFolder
+ * inside the user's default workspace.
+ *
* @param parentFolderID The parent_folder_id under which the new folder
* has to be created
* @param name The name of the new folder
@@ -43,5 +103,69 @@
* @throws IOException
*/
public String deleteFolder(Integer workspaceFolderID, Integer userID)throws IOException;
+
+ /**
+ * This method deletes a LearningDesign
with given learningDesignID
+ * provied the User
is authorized to do so.
+ *
Note:
+ *LearningDesign
should not be readOnly,
+ * indicating that a Lesson
has already been started
+ * LearningDesign
should not be acting as a
+ * parent to any other existing LearningDesign's
learning_design_id
of the
+ * LearningDesign
to be deleted.
+ * @param userID The user_id
of the User
who has
+ * requested this opeartion
+ * @return String The acknowledgement/error message in WDDX format for FLASH
+ * @throws IOException
+ */
+ public String deleteLearningDesign(Long learningDesignID, Integer userID)throws IOException;
+
+ /**
+ * This method copies one folder inside another folder. To be able to
+ * successfully perform this action following conditions must be met in the
+ * order they are listed.
+ * WorkspaceFolder
must existsUser
with the given userID
+ * must have OWNER or MEMBERSHIP rights for that WorkspaceFolder
+ * to be authorized to do so.Note: By default the copied folder has the same name as that of the
+ * one being copied. But in case the target WorkspaceFolder
already has
+ * a folder with the same name, an additional "C" is appended to the name of the folder
+ * thus created.
WorkspaceFolder
to be copied.
+ * @param newFolderID The parent WorkspaceFolder
under
+ * which it has to be copied
+ * @param userID The User
who has requested this opeartion
+ * @return String The acknowledgement/error message to be sent to FLASH
+ * @throws IOException
+ */
+ public String copyFolder(Integer folderID,Integer newFolderID,Integer userID)throws IOException;
+
+
+ /**
+ * This method moves the given WorkspaceFolder
with currentFolderID
+ * under the WorkspaceFolder with targetFolderID
.But before it does so it checks
+ * whether the User
is authorized to do so.
+ *
+ *
+ * Note: This method doesn't actually copies the content from one place to another.
+ * All it does is change the parent_workspace_folder_id
of the currentFolder
+ * to that of the targetFolder
workspace_folder_id
of the WorkspaceFolder
+ * under which the User wants to create/copy folder
+ * @param userID The User
being checked
+ * @return boolean A boolean value indicating whether or not the User
is authorized
+ * @throws UserException
+ * @throws WorkspaceFolderException
+ */
+ private boolean isUserAuthorized(Integer folderID, Integer userID)throws UserException, WorkspaceFolderException{
+ boolean authorized = false;
+ User user = userDAO.getUserById(userID);
+ if(user!=null){
+ WorkspaceFolder targetParent = workspaceFolderDAO.getWorkspaceFolderByID(folderID);
+ if(targetParent!=null){
+ Integer permissions = getPermissions(targetParent,user);
+ if(!permissions.equals(WorkspaceFolder.NO_ACCESS)&&
+ !permissions.equals(WorkspaceFolder.READ_ACCESS))
+ authorized = true;
+ }else
+ throw new WorkspaceFolderException();
+ }else
+ throw new UserException();
+ return authorized;
}
private Hashtable createCopyFolderPacket(WorkspaceFolder workspaceFolder){
Hashtable packet = new Hashtable();
@@ -335,7 +373,7 @@
}
}
}
- private WorkspaceFolder createFolder(Integer parentFolderID, String name, Integer userID) throws UserException,WorkspaceFolderException{
+ public WorkspaceFolder createFolder(Integer parentFolderID, String name, Integer userID) throws UserException,WorkspaceFolderException{
WorkspaceFolder parentFolder = workspaceFolderDAO.getWorkspaceFolderByID(parentFolderID);
User user =null;
Workspace workspace =null;
@@ -412,4 +450,66 @@
createSubFolders(subFolder,newSubFolder,userID);
}
}
+ /**
+ * TODO Deleting a LearningDesign would mean deleting all its corresponding
+ * activities, transitions and the content related to such activities.
+ * Deletion of content has to be yet taken care of. Since Tools manage there
+ * own content.Just need to cross-check this once tools are functional
+ * (non-Javadoc)
+ * @see org.lamsfoundation.lams.workspace.service.IWorkspaceManagementService#deleteLearningDesign(java.lang.Long)
+ */
+ public String deleteLearningDesign(Long learningDesignID, Integer userID)throws IOException{
+ User user = userDAO.getUserById(userID);
+ if(user!=null){
+ LearningDesign learningDesign = learningDesignDAO.getLearningDesignById(learningDesignID);
+ if(learningDesign!=null){
+ if(learningDesign.getUser().getUserId().equals(user.getUserId())){
+ if(learningDesign.getReadOnly().booleanValue()){
+ flashMessage = new FlashMessage("deleteLearningDesign",
+ "Cannot delete design with learning_design_id of:" + learningDesignID +
+ " as it is READ ONLY.",
+ FlashMessage.ERROR);
+ }else{
+ List list = learningDesignDAO.getLearningDesignsByParent(learningDesignID);
+ if(list==null || list.size()==0)
+ learningDesignDAO.delete(learningDesign);
+ else
+ flashMessage = new FlashMessage("deleteLearningDesign",
+ "Cannot delete design with learning_design_id of:" + learningDesignID +
+ " as it is a PARENT.",
+ FlashMessage.ERROR);
+ }
+ }else
+ flashMessage = FlashMessage.getUserNotAuthorized("deleteLearningDesign",userID);
+ }else
+ flashMessage = FlashMessage.getNoSuchLearningDesignExists("deleteLearningDesign",learningDesignID);
+ }else
+ flashMessage = FlashMessage.getNoSuchUserExists("deleteLearningDesign",userID);
+
+ return flashMessage.serializeMessage();
+ }
+ /**
+ * (non-Javadoc)
+ * @see org.lamsfoundation.lams.workspace.service.IWorkspaceManagementService#moveFolder(java.lang.Integer, java.lang.Integer, java.lang.Integer)
+ */
+ public String moveFolder(Integer currentFolderID,Integer targetFolderID,Integer userID)throws IOException{
+ try{
+ if(isUserAuthorized(targetFolderID,userID)){
+ WorkspaceFolder currentFolder = workspaceFolderDAO.getWorkspaceFolderByID(currentFolderID);
+ if(currentFolder!=null){
+ WorkspaceFolder targetFolder = workspaceFolderDAO.getWorkspaceFolderByID(targetFolderID);
+ currentFolder.setParentWorkspaceFolder(targetFolder);
+ workspaceFolderDAO.update(currentFolder);
+ flashMessage = new FlashMessage("moveFolder",currentFolderID);
+ }else
+ throw new WorkspaceFolderException();
+ }else
+ flashMessage = FlashMessage.getUserNotAuthorized("moveFolder", userID);
+ }catch(UserException ue){
+ flashMessage = FlashMessage.getNoSuchUserExists("moveFolder", userID);
+ }catch(WorkspaceFolderException we){
+ flashMessage = FlashMessage.getNoSuchWorkspaceFolderExsists("moveFolder",targetFolderID);
+ }
+ return flashMessage.serializeMessage();
+ }
}
Index: lams_common/src/java/org/lamsfoundation/lams/workspace/web/WorkspaceAction.java
===================================================================
RCS file: /usr/local/cvsroot/lams_common/src/java/org/lamsfoundation/lams/workspace/web/Attic/WorkspaceAction.java,v
diff -u
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ lams_common/src/java/org/lamsfoundation/lams/workspace/web/WorkspaceAction.java 19 Apr 2005 06:16:09 -0000 1.1
@@ -0,0 +1,132 @@
+/***************************************************************************
+ * Copyright (C) 2005 LAMS Foundation (http://lamsfoundation.org)
+ * =============================================================
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * 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
+ * ************************************************************************
+ */
+package org.lamsfoundation.lams.workspace.web;
+
+import java.io.IOException;
+
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.struts.action.ActionForm;
+import org.apache.struts.action.ActionForward;
+import org.apache.struts.action.ActionMapping;
+import org.apache.struts.actions.DispatchAction;
+import org.lamsfoundation.lams.util.WebUtil;
+import org.lamsfoundation.lams.workspace.service.IWorkspaceManagementService;
+import org.springframework.web.context.WebApplicationContext;
+import org.springframework.web.context.support.WebApplicationContextUtils;
+
+/**
+ * @author Manpreet Minhas
+ * @struts.action name = "WorkspaceAction"
+ * path = "/workspace"
+ * parameter = "method"
+ * validate = "false"
+ * @struts.action-forward name = "success" path = "/index.jsp"
+ */
+public class WorkspaceAction extends DispatchAction {
+
+
+ public IWorkspaceManagementService getWorkspaceManagementService(){
+ WebApplicationContext webContext = WebApplicationContextUtils.getRequiredWebApplicationContext(this.getServlet().getServletContext());
+ return (IWorkspaceManagementService) webContext.getBean("workspaceManagementService");
+ }
+
+ public ActionForward createWorkspaceFolder(ActionMapping mapping,
+ ActionForm form,
+ HttpServletRequest request,
+ HttpServletResponse response)throws ServletException,IOException{
+ Integer parentFolderID = new Integer(WebUtil.readIntParam(request,"parentFolderID"));
+ String folderName = (String)WebUtil.readStrParam(request,"name");
+ Integer userID = new Integer(WebUtil.readIntParam(request,"userID"));
+ IWorkspaceManagementService workspaceManagementService = getWorkspaceManagementService();
+ String wddxPacket = workspaceManagementService.createFolderForFlash(parentFolderID,folderName,userID);
+ request.getSession().setAttribute("details",wddxPacket);
+ return mapping.findForward("success");
+ }
+
+ public ActionForward getFolderContents(ActionMapping mapping,
+ ActionForm form,
+ HttpServletRequest request,
+ HttpServletResponse response)throws ServletException,IOException{
+ Integer folderID = new Integer(WebUtil.readIntParam(request,"folderID"));
+ Integer mode = new Integer(WebUtil.readIntParam(request,"mode"));
+ Integer userID = new Integer(WebUtil.readIntParam(request,"userID"));
+ IWorkspaceManagementService workspaceManagementService = getWorkspaceManagementService();
+ String wddxPacket = workspaceManagementService.getFolderContents(userID,folderID,mode);
+ request.getSession().setAttribute("details",wddxPacket);
+ return mapping.findForward("success");
+ }
+
+ public ActionForward deleteWorkspacFolder(ActionMapping mapping,
+ ActionForm form,
+ HttpServletRequest request,
+ HttpServletResponse response)throws ServletException, IOException{
+ Integer folderID = new Integer(WebUtil.readIntParam(request,"folderID"));
+ Integer userID = new Integer(WebUtil.readIntParam(request,"userID"));
+ IWorkspaceManagementService workspaceManagementService = getWorkspaceManagementService();
+ String wddxPacket = workspaceManagementService.deleteFolder(folderID,userID);
+ request.getSession().setAttribute("details",wddxPacket);
+ return mapping.findForward("success");
+ }
+
+ public ActionForward deleteLearningDesign(ActionMapping mapping,
+ ActionForm form,
+ HttpServletRequest request,
+ HttpServletResponse response)throws ServletException, IOException{
+ Long learningDesignID = new Long(WebUtil.readIntParam(request,"learningDesignID"));
+ Integer userID = new Integer(WebUtil.readIntParam(request,"userID"));
+ IWorkspaceManagementService workspaceManagementService = getWorkspaceManagementService();
+ String wddxPacket = workspaceManagementService.deleteLearningDesign(learningDesignID,userID);
+ request.getSession().setAttribute("details",wddxPacket);
+ return mapping.findForward("success");
+
+ }
+
+ public ActionForward copyFolder(ActionMapping mapping,
+ ActionForm form,
+ HttpServletRequest request,
+ HttpServletResponse response)throws ServletException, IOException{
+ Integer folderID = new Integer(WebUtil.readIntParam(request,"folderID"));
+ Integer targetFolderID = new Integer(WebUtil.readIntParam(request,"targetFolderID"));
+ Integer userID = new Integer(WebUtil.readIntParam(request,"userID"));
+ IWorkspaceManagementService workspaceManagementService = getWorkspaceManagementService();
+ String wddxPacket = workspaceManagementService.copyFolder(folderID,targetFolderID,userID);
+ return mapping.findForward("success");
+ }
+
+ public ActionForward moveFolder(ActionMapping mapping,
+ ActionForm form,
+ HttpServletRequest request,
+ HttpServletResponse response)throws ServletException, IOException{
+ Integer currentFolderID = new Integer(WebUtil.readIntParam(request,"currentFolderID"));
+ Integer targetFolderID = new Integer(WebUtil.readIntParam(request,"targetFolderID"));
+ Integer userID = new Integer(WebUtil.readIntParam(request,"userID"));
+ IWorkspaceManagementService workspaceManagementService = getWorkspaceManagementService();
+ String wddxPacket = workspaceManagementService.moveFolder(currentFolderID,targetFolderID,userID);
+ return mapping.findForward("success");
+ }
+
+}
+
Index: lams_common/test/java/org/lamsfoundation/lams/workspace/TestWorkspaceManagement.java
===================================================================
RCS file: /usr/local/cvsroot/lams_common/test/java/org/lamsfoundation/lams/workspace/Attic/TestWorkspaceManagement.java,v
diff -u -r1.5 -r1.6
--- lams_common/test/java/org/lamsfoundation/lams/workspace/TestWorkspaceManagement.java 15 Apr 2005 02:50:25 -0000 1.5
+++ lams_common/test/java/org/lamsfoundation/lams/workspace/TestWorkspaceManagement.java 19 Apr 2005 06:16:22 -0000 1.6
@@ -9,6 +9,8 @@
import java.io.IOException;
import org.lamsfoundation.lams.AbstractLamsTestCase;
+import org.lamsfoundation.lams.usermanagement.WorkspaceFolder;
+import org.lamsfoundation.lams.usermanagement.dao.IWorkspaceFolderDAO;
import org.lamsfoundation.lams.workspace.service.WorkspaceManagementService;
/**
@@ -20,13 +22,15 @@
public class TestWorkspaceManagement extends AbstractLamsTestCase {
protected WorkspaceManagementService workspaceManagementService;
+ protected IWorkspaceFolderDAO workspaceFolderDAO;
public TestWorkspaceManagement(String name){
super(name);
}
public void setUp() throws Exception {
super.setUp();
workspaceManagementService =(WorkspaceManagementService)context.getBean("workspaceManagementService");
+ workspaceFolderDAO = (IWorkspaceFolderDAO)context.getBean("workspaceFolderDAO");
}
protected String[] getContextConfigLocation() {
return new String[] {"WEB-INF/spring/authoringApplicationContext.xml",
@@ -49,6 +53,16 @@
String message = workspaceManagementService.deleteFolder(new Integer(7), new Integer(4));
System.out.println(message);
}
+ public void testDeleteLearningDesign() throws Exception{
+ String message = workspaceManagementService.deleteLearningDesign(new Long(1), new Integer(4));
+ System.out.println(message);
+ }
+ public void testMoveFolder()throws Exception{
+ String message = workspaceManagementService.moveFolder(new Integer(6),new Integer(2), new Integer(4));
+ System.out.println(message);
+ WorkspaceFolder workspaceFolder = workspaceFolderDAO.getWorkspaceFolderByID(new Integer(6));
+ assertTrue(workspaceFolder.getParentWorkspaceFolder().getWorkspaceFolderId().equals(new Integer(2)));
+ }
}