Index: lams_common/src/java/org/lamsfoundation/lams/usermanagement/WorkspaceFolder.java =================================================================== RCS file: /usr/local/cvsroot/lams_common/src/java/org/lamsfoundation/lams/usermanagement/WorkspaceFolder.java,v diff -u -r1.3 -r1.4 --- lams_common/src/java/org/lamsfoundation/lams/usermanagement/WorkspaceFolder.java 13 Apr 2005 01:31:26 -0000 1.3 +++ lams_common/src/java/org/lamsfoundation/lams/usermanagement/WorkspaceFolder.java 15 Apr 2005 02:48:07 -0000 1.4 @@ -312,9 +312,30 @@ * current workspaces contains subFolders */ public boolean hasSubFolders(){ - if (this.childWorkspaceFolders!=null || childWorkspaceFolders.size()!=0) + if (this.childWorkspaceFolders!=null && childWorkspaceFolders.size()!=0) return true; else return false; } + /** + * This is a utility function which checks whether the given + * workspace Folder is empty or not. + * + * TODO As of now it is being assumed that a workspace folder + * can contain only subFolders and Learning designs as its contents. + * For now, other kinds of contents like flat files, zip files, + * documents etc. have not been taken into consideration. + * + * @return boolean A boolean value indicating whether this + * folder is empty orit contains Learning Designs + */ + public boolean isEmpty(){ + if(!hasSubFolders()){ + if(this.learningDesigns==null || this.learningDesigns.size()==0) + return true; + else + return false; + }else + return false; + } } Index: lams_common/src/java/org/lamsfoundation/lams/usermanagement/dao/IWorkspaceDAO.java =================================================================== RCS file: /usr/local/cvsroot/lams_common/src/java/org/lamsfoundation/lams/usermanagement/dao/Attic/IWorkspaceDAO.java,v diff -u -r1.1 -r1.2 --- lams_common/src/java/org/lamsfoundation/lams/usermanagement/dao/IWorkspaceDAO.java 13 Apr 2005 01:31:19 -0000 1.1 +++ lams_common/src/java/org/lamsfoundation/lams/usermanagement/dao/IWorkspaceDAO.java 15 Apr 2005 02:48:50 -0000 1.2 @@ -40,5 +40,15 @@ * @return Workspace The populated workspace object */ public Workspace getWorkspaceByID(Integer workspaceID); + + /** + * Returns the workspace corresponding to the given + * root_folder_id + * + * @param rootFolderID The root_folder_id of the workspace + * being looked for + * @return Workspace The populated workspace object + */ + public Workspace getWorkspaceByRootFolderID(Integer rootFolderID); } Index: lams_common/src/java/org/lamsfoundation/lams/usermanagement/dao/hibernate/WorkspaceDAO.java =================================================================== RCS file: /usr/local/cvsroot/lams_common/src/java/org/lamsfoundation/lams/usermanagement/dao/hibernate/Attic/WorkspaceDAO.java,v diff -u -r1.1 -r1.2 --- lams_common/src/java/org/lamsfoundation/lams/usermanagement/dao/hibernate/WorkspaceDAO.java 13 Apr 2005 00:49:07 -0000 1.1 +++ lams_common/src/java/org/lamsfoundation/lams/usermanagement/dao/hibernate/WorkspaceDAO.java 15 Apr 2005 02:48:00 -0000 1.2 @@ -6,6 +6,7 @@ */ package org.lamsfoundation.lams.usermanagement.dao.hibernate; +import java.util.List; import org.lamsfoundation.lams.learningdesign.dao.hibernate.BaseDAO; import org.lamsfoundation.lams.usermanagement.Workspace; import org.lamsfoundation.lams.usermanagement.dao.IWorkspaceDAO; @@ -17,6 +18,11 @@ * Window - Preferences - Java - Code Style - Code Templates */ public class WorkspaceDAO extends BaseDAO implements IWorkspaceDAO{ + + private static final String TABLENAME="lams_workspace"; + private static final String FIND_BY_ROOT_FOLDER = "from " + TABLENAME + " in class " + Workspace.class.getName() + + " where root_folder_id=?"; + /** * (non-Javadoc) @@ -26,4 +32,8 @@ return (Workspace) super.find(Workspace.class,workspaceID); } + public Workspace getWorkspaceByRootFolderID(Integer rootFolderID){ + List list = this.getHibernateTemplate().find(FIND_BY_ROOT_FOLDER,rootFolderID); + return (Workspace)list.get(0); + } } 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.1 -r1.2 --- lams_common/src/java/org/lamsfoundation/lams/workspace/service/IWorkspaceManagementService.java 13 Apr 2005 00:33:18 -0000 1.1 +++ lams_common/src/java/org/lamsfoundation/lams/workspace/service/IWorkspaceManagementService.java 15 Apr 2005 02:49:08 -0000 1.2 @@ -1,18 +1,9 @@ -/* - * Created on Apr 1, 2005 - * - * TODO To change the template for this generated file go to - * Window - Preferences - Java - Code Style - Code Templates - */ package org.lamsfoundation.lams.workspace.service; import java.io.IOException; /** - * @author Minhas - * - * TODO To change the template for this generated type comment go to - * Window - Preferences - Java - Code Style - Code Templates + * @author Manpreet Minhas */ public interface IWorkspaceManagementService { @@ -30,5 +21,27 @@ * @throws IOException */ public String createFolderForFlash(Integer parentFolderID, String name, Integer userID)throws IOException; + + + /** + * This method deletes the WorkspaceFolder with given + * workspaceFolderID. But before it does so it checks whether the + * User is authorized to perform this action
+ * + *

Note:

To be able to a delete a WorkspaceFolder + * successfully you have to keep the following things in mind + *

+ * + * @param workspaceFolderID The WorkspaceFolder to be deleted + * @param userID The User who has requested this operation + * @return String The acknowledgement/error message in WDDX format for FLASH + * @throws IOException + */ + public String deleteFolder(Integer workspaceFolderID, Integer userID)throws IOException; } Index: lams_common/src/java/org/lamsfoundation/lams/workspace/service/WorkspaceManagementService.java =================================================================== RCS file: /usr/local/cvsroot/lams_common/src/java/org/lamsfoundation/lams/workspace/service/Attic/WorkspaceManagementService.java,v diff -u -r1.1 -r1.2 --- lams_common/src/java/org/lamsfoundation/lams/workspace/service/WorkspaceManagementService.java 13 Apr 2005 00:33:18 -0000 1.1 +++ lams_common/src/java/org/lamsfoundation/lams/workspace/service/WorkspaceManagementService.java 15 Apr 2005 02:49:08 -0000 1.2 @@ -87,10 +87,58 @@ public void setUserDAO(IUserDAO userDAO) { this.userDAO = userDAO; } - public void deleteFolder(Integer folderID){ + /** + * (non-Javadoc) + * @see org.lamsfoundation.lams.workspace.service.IWorkspaceManagementService#deleteFolder(java.lang.Integer, java.lang.Integer) + */ + public String deleteFolder(Integer folderID, Integer userID)throws IOException{ WorkspaceFolder workspaceFolder = workspaceFolderDAO.getWorkspaceFolderByID(folderID); - if(workspaceFolder!=null){ - workspaceFolderDAO.delete(workspaceFolder); + User user = userDAO.getUserById(userID); + if(user!=null){ + if(!getPermissions(workspaceFolder,user).equals(WorkspaceFolder.OWNER_ACCESS)){ + flashMessage = FlashMessage.getUserNotAuthorized("deleteFolder",userID); + }else{ + if(workspaceFolder!=null){ + if(isRootFolder(workspaceFolder)) + flashMessage = new FlashMessage("deleteFolder", + "Cannot delete this folder as it is the Root folder.", + FlashMessage.ERROR); + else{ + if(!workspaceFolder.isEmpty()) + flashMessage = new FlashMessage("deleteFolder", + "Cannot delete folder with folder_id of: " + folderID + + " as it is not empty. Please delete its contents first.", + FlashMessage.ERROR); + else{ + workspaceFolderDAO.delete(workspaceFolder); + flashMessage = new FlashMessage("deleteFolder","Folder deleted:" + folderID); + } + } + }else + flashMessage = FlashMessage.getNoSuchWorkspaceFolderExsists("deleteFolder",folderID); + } + }else + flashMessage = FlashMessage.getNoSuchUserExists("deleteFolder",userID); + + return flashMessage.serializeMessage(); + } + /** + * This method checks if the given workspaceFolder is the + * root folder of any Organisation or User + * + * @param workspaceFolder The workspaceFolder to be checked + * @return boolean The boolean value indicating whether it is a + * root folder or not. + */ + private boolean isRootFolder(WorkspaceFolder workspaceFolder){ + try{ + Workspace workspace = workspaceDAO.getWorkspaceByRootFolderID(workspaceFolder.getWorkspaceFolderId()); + if(workspace!=null) + return true; + else + return false; + }catch(Exception e){ + return false; } } public String getFolderContents(Integer userID, Integer workspaceFolderID, Integer mode)throws IOException{ @@ -258,14 +306,7 @@ packet.put("workspaceFolderID", workspaceFolder.getWorkspaceFolderId()); packet.put("workspaceID",workspaceFolder.getWorkspaceID()); return packet; - } - public boolean isUserPermitted(WorkspaceFolder workspaceFolder, User user){ - Integer permissions = getPermissions(workspaceFolder, user); - if(permissions!=WorkspaceFolder.NO_ACCESS) - return true; - else - return false; - } + } public boolean isUserOwner(WorkspaceFolder workspaceFolder, User user){ List folders = workspaceFolderDAO.getWorkspaceFolderByUser(user.getUserId()); if(folders!=null && folders.size()!=0){ Index: lams_common/test/java/org/lamsfoundation/lams/usermanagement/dao/hibernate/TestWorkspaceDAO.java =================================================================== RCS file: /usr/local/cvsroot/lams_common/test/java/org/lamsfoundation/lams/usermanagement/dao/hibernate/Attic/TestWorkspaceDAO.java,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ lams_common/test/java/org/lamsfoundation/lams/usermanagement/dao/hibernate/TestWorkspaceDAO.java 15 Apr 2005 02:47:16 -0000 1.1 @@ -0,0 +1,45 @@ +/* + * Created on Apr 15, 2005 + * + * TODO To change the template for this generated file go to + * Window - Preferences - Java - Code Style - Code Templates + */ +package org.lamsfoundation.lams.usermanagement.dao.hibernate; + +import org.lamsfoundation.lams.AbstractLamsTestCase; +import org.lamsfoundation.lams.usermanagement.Workspace; +import org.lamsfoundation.lams.usermanagement.dao.IWorkspaceDAO; + +/** + * @author Minhas + * + * TODO To change the template for this generated type comment go to + * Window - Preferences - Java - Code Style - Code Templates + */ +public class TestWorkspaceDAO extends AbstractLamsTestCase { + + protected IWorkspaceDAO workspaceDAO; + + public TestWorkspaceDAO(String name){ + super(name); + } + protected String[] getContextConfigLocation() { + return new String[] {"WEB-INF/spring/applicationContext.xml","WEB-INF/spring/learningDesignApplicationContext.xml"}; + } + protected String getHibernateSessionFactoryName() { + return "coreSessionFactory"; + } + protected void setUp() throws Exception{ + super.setUp(); + workspaceDAO =(IWorkspaceDAO)context.getBean("workspaceDAO"); + } + public void testGetWorkspaceByRootFolderID(){ + boolean rootFolder = false; + Workspace workspace =workspaceDAO.getWorkspaceByRootFolderID(new Integer(8)); + if(workspace!=null) + rootFolder=true; + assertTrue(rootFolder); + } + + +} 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.3 -r1.4 --- lams_common/test/java/org/lamsfoundation/lams/workspace/TestWorkspaceManagement.java 13 Apr 2005 23:30:48 -0000 1.3 +++ lams_common/test/java/org/lamsfoundation/lams/workspace/TestWorkspaceManagement.java 15 Apr 2005 02:47:41 -0000 1.4 @@ -34,16 +34,21 @@ "WEB-INF/spring/learningDesignApplicationContext.xml", "WEB-INF/spring/applicationContext.xml"}; } - public void testGetFolderContents()throws IOException{ + protected String getHibernateSessionFactoryName() { + return "coreSessionFactory"; + } + /*public void testGetFolderContents()throws IOException{ String packet = workspaceManagementService.getFolderContents(new Integer(4),new Integer(2),WorkspaceManagementService.AUTHORING); System.out.println(packet); } public void testCopyFolder() throws IOException{ String packet = workspaceManagementService.copyFolder(new Integer(2),new Integer(8),new Integer(4)); System.out.println(packet); - } - protected String getHibernateSessionFactoryName() { - return "coreSessionFactory"; + }*/ + public void testDeleteFolder() throws IOException{ + String message = workspaceManagementService.deleteFolder(new Integer(7), new Integer(4)); + System.out.println(message); } + }