Index: lams_build/lib/lams/lams-central.jar
===================================================================
diff -u -ra0ef65af815f042f01af7135248a0c5d39f734fd -rfc0a85ca7a12cd69d71d582eb17c62fc8d27101c
Binary files differ
Index: lams_central/src/java/org/lamsfoundation/lams/workspace/service/IWorkspaceManagementService.java
===================================================================
diff -u -rb31438f14603ef90bb73d6a0621a6b3e10f01ba7 -rfc0a85ca7a12cd69d71d582eb17c62fc8d27101c
--- lams_central/src/java/org/lamsfoundation/lams/workspace/service/IWorkspaceManagementService.java (.../IWorkspaceManagementService.java) (revision b31438f14603ef90bb73d6a0621a6b3e10f01ba7)
+++ lams_central/src/java/org/lamsfoundation/lams/workspace/service/IWorkspaceManagementService.java (.../IWorkspaceManagementService.java) (revision fc0a85ca7a12cd69d71d582eb17c62fc8d27101c)
@@ -23,11 +23,14 @@
package org.lamsfoundation.lams.workspace.service;
import java.io.IOException;
-import java.util.Date;
+import java.util.Vector;
+import org.lamsfoundation.lams.contentrepository.RepositoryCheckedException;
import org.lamsfoundation.lams.usermanagement.WorkspaceFolder;
+import org.lamsfoundation.lams.usermanagement.exception.UserAccessDeniedException;
import org.lamsfoundation.lams.usermanagement.exception.UserException;
import org.lamsfoundation.lams.usermanagement.exception.WorkspaceFolderException;
+import org.lamsfoundation.lams.workspace.dto.FolderContentDTO;
/**
* @author Manpreet Minhas
@@ -39,6 +42,12 @@
public static final String REPOSITORY_WORKSPACE="FlashClientsWorkspace";
/**
+ * Get the workspace folder for a particular id. Does not check the user permissions - that will be checked if you try to get
+ * anything from the folder.
+ */
+ public WorkspaceFolder getWorkspaceFolder(Integer workspaceFolderID);
+
+ /**
* 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
@@ -74,13 +83,12 @@
* 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 workspaceFolder 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
+ * @return A list of the FolderContentDTOs in a format suitable for WDDX
* @throws Exception
*/
- public String getFolderContents(Integer userID, Integer workspaceFolderID, Integer mode)throws Exception;
+ public Vector getFolderContents(Integer userID, WorkspaceFolder workspaceFolder, Integer mode)throws UserAccessDeniedException, RepositoryCheckedException ;
/**
* This method does the same as getFolderContents() except that it doesn't return
@@ -89,13 +97,12 @@
* folder from the getAccessibleWorkspaceFolders() call.
*
* @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 workspaceFolder 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
+ * @return A list of the FolderContentDTOs in a format suitable for WDDX
* @throws Exception
*/
- public String getFolderContentsExcludeHome(Integer userID, Integer workspaceFolderID, Integer mode)throws Exception;
+ public Vector getFolderContentsExcludeHome(Integer userID, WorkspaceFolder workspaceFolder, Integer mode)throws UserAccessDeniedException, RepositoryCheckedException ;
/**
* This method creates a new folder under the given parentFolder
@@ -235,56 +242,30 @@
public String deleteContentWithVersion(Long uuid, Long versionToBeDeleted,Long folderContentID)throws Exception;
/**
- * This method returns a list of workspace folders for which
+ * This method returns a list of organisation workspace folders.
+ *
+ * The organisation folders returned are determined based on whether
* the user has "write" access. A user can write/save his content
- * in a folder in one of the following cases
- *
user_id
of the user for whom the
* folders have to fetched
- * @return String The required information in WDDX format
+ * @return List of folders, in a format suitable for WDDX
* @throws IOException
*/
- public String getAccessibleWorkspaceFolders(Integer userID)throws IOException;
+ public Vector getAccessibleOrganisationWorkspaceFolders(Integer userID)throws IOException;
/**
- * This method returns a list of workspace folders for which
- * the user has "write" access. A user can write/save his content
- * in a folder in one of the following cases
- * user_id
of the user for whom the
* folders have to fetched
- * @return String The required information in WDDX format
+ * @return FolderContentDTO for the user's root workspace folder
* @throws IOException
*/
- public String getAccessibleWorkspaceFoldersNew(Integer userID)throws IOException;
+ public FolderContentDTO getUserWorkspaceFolder(Integer userID)throws IOException;
/**
* This method renames the workspaceFolder/learning design with the
Index: lams_central/src/java/org/lamsfoundation/lams/workspace/service/WorkspaceManagementService.java
===================================================================
diff -u -ra0ef65af815f042f01af7135248a0c5d39f734fd -rfc0a85ca7a12cd69d71d582eb17c62fc8d27101c
--- lams_central/src/java/org/lamsfoundation/lams/workspace/service/WorkspaceManagementService.java (.../WorkspaceManagementService.java) (revision a0ef65af815f042f01af7135248a0c5d39f734fd)
+++ lams_central/src/java/org/lamsfoundation/lams/workspace/service/WorkspaceManagementService.java (.../WorkspaceManagementService.java) (revision fc0a85ca7a12cd69d71d582eb17c62fc8d27101c)
@@ -51,7 +51,6 @@
import org.lamsfoundation.lams.contentrepository.service.SimpleCredentials;
import org.lamsfoundation.lams.learningdesign.LearningDesign;
import org.lamsfoundation.lams.learningdesign.dao.ILearningDesignDAO;
-import org.lamsfoundation.lams.learningdesign.exception.LearningDesignException;
import org.lamsfoundation.lams.usermanagement.Organisation;
import org.lamsfoundation.lams.usermanagement.Role;
import org.lamsfoundation.lams.usermanagement.User;
@@ -64,7 +63,7 @@
import org.lamsfoundation.lams.usermanagement.dao.IUserOrganisationDAO;
import org.lamsfoundation.lams.usermanagement.dao.IWorkspaceDAO;
import org.lamsfoundation.lams.usermanagement.dao.IWorkspaceFolderDAO;
-import org.lamsfoundation.lams.usermanagement.dto.UserAccessFoldersDTO;
+import org.lamsfoundation.lams.usermanagement.exception.UserAccessDeniedException;
import org.lamsfoundation.lams.usermanagement.exception.UserException;
import org.lamsfoundation.lams.usermanagement.exception.WorkspaceFolderException;
import org.lamsfoundation.lams.usermanagement.service.IUserManagementService;
@@ -339,59 +338,57 @@
}
/**
+ * Get the workspace folder for a particular id. Does not check the user permissions - that will be checked if you try to get
+ * anything from the folder.
+ */
+ public WorkspaceFolder getWorkspaceFolder(Integer workspaceFolderID) {
+ return workspaceFolderDAO.getWorkspaceFolderByID(workspaceFolderID);
+ }
+
+ /**
* (non-Javadoc)
* @see org.lamsfoundation.lams.workspace.service.IWorkspaceManagementService#getFolderContentsExcludeHome(java.lang.Integer, java.lang.Integer, java.lang.Integer)
*/
- public String getFolderContentsExcludeHome(Integer userID, Integer workspaceFolderID, Integer mode)throws Exception{
+ public Vector getFolderContentsExcludeHome(Integer userID, WorkspaceFolder folder, Integer mode)throws UserAccessDeniedException, RepositoryCheckedException {
User user = userDAO.getUserById(userID);
- WorkspaceFolder folder = user.getWorkspace().getRootFolder();
- return getFolderContentsInternal(user, workspaceFolderID, mode, "getFolderContentsExcludeHome",
- folder != null ? folder.getWorkspaceFolderId() : null);
+ return getFolderContentsInternal(user, folder, mode, "getFolderContentsExcludeHome", user.getWorkspace().getRootFolder());
}
/**
* (non-Javadoc)
* @see org.lamsfoundation.lams.workspace.service.IWorkspaceManagementService#getFolderContents(java.lang.Integer, java.lang.Integer, java.lang.Integer)
*/
- public String getFolderContents(Integer userID, Integer workspaceFolderID, Integer mode)throws Exception{
+ public Vector getFolderContents(Integer userID, WorkspaceFolder folder, Integer mode)throws UserAccessDeniedException, RepositoryCheckedException {
User user = userDAO.getUserById(userID);
- return getFolderContentsInternal(user, workspaceFolderID, mode, "getFolderContents", null);
+ return getFolderContentsInternal(user, folder, mode, "getFolderContents", null);
}
+
/**
* Get the contents of a folder. Internal method used for both getFolderContentsExcludeHome() and getFolderContents().
* If skipContentId is not null, then skip any contents found with this id.
+ * @throws UserAccessDeniedException
+ * @throws RepositoryCheckedException
*/
- public String getFolderContentsInternal(User user, Integer workspaceFolderID, Integer mode, String methodName, Integer skipContentId)throws Exception{
- WorkspaceFolder workspaceFolder = null;
- Integer permissions = null;
+ public Vector getFolderContentsInternal(User user, WorkspaceFolder workspaceFolder, Integer mode, String methodName, WorkspaceFolder skipFolder)throws UserAccessDeniedException, RepositoryCheckedException {
+ Vector contentDTO = new Vector();
if(user!=null){
- workspaceFolder = workspaceFolderDAO.getWorkspaceFolderByID(workspaceFolderID);
- if(workspaceFolder!=null){
- permissions = getPermissions(workspaceFolder,user);
- if(permissions!=WorkspaceFolder.NO_ACCESS){
- Vector contentDTO = new Vector();
- getFolderContent(workspaceFolder,permissions,mode,contentDTO);
- if(workspaceFolder.hasSubFolders())
- getSubFolderDetails(workspaceFolder,permissions,contentDTO, skipContentId);
- Vector repositoryContent = getContentsFromRepository(new Long(workspaceFolderID.intValue()),permissions);
- if(repositoryContent!=null)
- contentDTO.addAll(repositoryContent);
- flashMessage = new FlashMessage(methodName,createFolderContentPacket(workspaceFolder,contentDTO));
- }
- else
- flashMessage = new FlashMessage(methodName,
- "Access Denied for user with user_id:" + user.getUserId(),
- FlashMessage.ERROR);
+ Integer permissions = getPermissions(workspaceFolder,user);
+ if(permissions!=WorkspaceFolder.NO_ACCESS){
+ getFolderContent(workspaceFolder,permissions,mode,contentDTO);
+ if(workspaceFolder.hasSubFolders())
+ getSubFolderDetails(workspaceFolder,permissions,contentDTO, skipFolder);
+ Vector repositoryContent = getContentsFromRepository(workspaceFolder.getWorkspaceFolderId(),permissions);
+ if(repositoryContent!=null)
+ contentDTO.addAll(repositoryContent);
+ } else {
+ throw new UserAccessDeniedException(user);
}
- else
- flashMessage = new FlashMessage(methodName,
- "No such workspaceFolder with workspace_folder_id of:" + workspaceFolderID + " exists",
- FlashMessage.ERROR);
- }else
- flashMessage = FlashMessage.getNoSuchUserExists(methodName,user.getUserId());
- return flashMessage.serializeMessage();
+ }else {
+ throw new UserAccessDeniedException(user);
+ }
+ return contentDTO;
}
private void getFolderContent(WorkspaceFolder workspaceFolder, Integer permissions, Integer mode,Vector contentDTO){
@@ -408,11 +405,12 @@
/**
* Get the folders in the given workspaceFolder. If skipContentId is not null, then skip any contents found with this id.
*/
- private void getSubFolderDetails(WorkspaceFolder workspaceFolder,Integer permissions, Vector subFolderContent, Integer skipContentId){
+ private void getSubFolderDetails(WorkspaceFolder workspaceFolder,Integer permissions, Vector subFolderContent, WorkspaceFolder skipFolder){
+ Integer skipFolderID = skipFolder != null ? skipFolder.getWorkspaceFolderId() : null;
Iterator iterator = workspaceFolder.getChildWorkspaceFolders().iterator();
while(iterator.hasNext()){
WorkspaceFolder subFolder = (WorkspaceFolder)iterator.next();
- if ( skipContentId==null || ! skipContentId.equals(subFolder.getWorkspaceFolderId()) ) {
+ if ( skipFolderID==null || ! skipFolderID.equals(subFolder.getWorkspaceFolderId()) ) {
subFolderContent.add(new FolderContentDTO(subFolder,permissions));
}
}
@@ -501,13 +499,6 @@
return folderContent;
}
- private Hashtable createFolderContentPacket(WorkspaceFolder workspaceFolder, Vector contents){
- Hashtable packet = new Hashtable();
- packet.put("parentWorkspaceFolderID", workspaceFolder.getParentWorkspaceFolder().getWorkspaceFolderId());
- packet.put("workspaceFolderID", workspaceFolder.getWorkspaceFolderId());
- packet.put("contents", contents);
- return packet;
- }
/**
* @see org.lamsfoundation.lams.workspace.service.IWorkspaceManagementService#copyResource(Long, String, Integer, Integer, Integer)
*/
@@ -1146,10 +1137,12 @@
* requested from the Repositor
* @param permissions The permissions on this WorkspaceFolder and hence all its contents
* @return Vector A collection of required information.
+ * @throws AccessDeniedException
+ * @throws RepositoryCheckedException
* @throws Exception
*/
- private Vector getContentsFromRepository(Long workspaceFolderID, Integer permissions)throws Exception{
- List content = workspaceFolderContentDAO.getContentByWorkspaceFolder(workspaceFolderID);
+ private Vector getContentsFromRepository(Integer workspaceFolderID, Integer permissions) throws RepositoryCheckedException{
+ List content = workspaceFolderContentDAO.getContentByWorkspaceFolder(new Long(workspaceFolderID.longValue()));
if(content.size()==0)
return null;
else{
@@ -1164,19 +1157,16 @@
return repositoryContent;
}
}
+
/**
* (non-Javadoc)
- * @see org.lamsfoundation.lams.workspace.service.IWorkspaceManagementService#getAccessibleWorkspaceFolders(java.lang.Integer)
+ * @see org.lamsfoundation.lams.workspace.service.IWorkspaceManagementService#getAccessibleOrganisationWorkspaceFolders(java.lang.Integer)
*/
- public String getAccessibleWorkspaceFolders(Integer userID) throws IOException {
+ public Vector getAccessibleOrganisationWorkspaceFolders(Integer userID) throws IOException {
User user = userDAO.getUserById(userID);
- Hashtable table = new Hashtable();
- Vector workspaces = new Vector();
+ Vector folders = new Vector();
if (user != null) {
- //add the user's own folder to the list
- table.put("PRIVATE", new UserAccessFoldersDTO(user.getWorkspace().getRootFolder()));
-
// Get a list of organisations of which the given user is a member
List userMemberships = userOrganisationDAO.getUserOrganisationsByUser(user);
if (userMemberships != null) {
@@ -1191,68 +1181,40 @@
* he has acess add that folder to the list.
*/
if (hasWriteAccess(roles)) {
- workspaces.add(new UserAccessFoldersDTO(member.getOrganisation().getWorkspace().getRootFolder()));
+ WorkspaceFolder orgFolder = member.getOrganisation().getWorkspace().getRootFolder();
+ folders.add(new FolderContentDTO(orgFolder,getPermissions(orgFolder,user)));
}
}
- table.put("ORGANISATIONS", workspaces);
- flashMessage = new FlashMessage("getAccessibleWorkspaceFolders", table);
- }else
- flashMessage = new FlashMessage("getAccessibleWorkspaceFolders",
- "User with user_id of: " + userID
- + " is not a member of any organisation",
- FlashMessage.ERROR);
- } else
- flashMessage = FlashMessage.getNoSuchUserExists("getAccessibleWorkspaceFolders", userID);
+ } else {
+ log.warn("getAccessibleWorkspaceFolders: Trying to get user memberships for user "+userID+". User doesn't belong to any organisations. Returning no folders.");
+ }
+ } else {
+ log.warn("getAccessibleWorkspaceFolders: User "+userID+" does not exist. Returning no folders.");
+ }
- return flashMessage.serializeMessage();
+ return folders;
}
/**
* (non-Javadoc)
- * @see org.lamsfoundation.lams.workspace.service.IWorkspaceManagementService#getAccessibleWorkspaceFolders(java.lang.Integer)
+ * @see org.lamsfoundation.lams.workspace.service.IWorkspaceManagementService#getUserWorkspaceFolder(java.lang.Integer)
*/
- public String getAccessibleWorkspaceFoldersNew(Integer userID) throws IOException {
+ public FolderContentDTO getUserWorkspaceFolder(Integer userID) throws IOException {
User user = userDAO.getUserById(userID);
- Hashtable table = new Hashtable();
- Vector workspaces = new Vector();
if (user != null) {
//add the user's own folder to the list
WorkspaceFolder privateFolder = user.getWorkspace().getRootFolder();
Integer permissions = getPermissions(privateFolder,user);
- table.put("PRIVATE", new FolderContentDTO(privateFolder, permissions));
+ return new FolderContentDTO(privateFolder, permissions);
- // Get a list of organisations of which the given user is a member
- List userMemberships = userOrganisationDAO.getUserOrganisationsByUser(user);
- if (userMemberships != null) {
- Iterator memberships = userMemberships.iterator();
- while (memberships.hasNext()) {
- UserOrganisation member = (UserOrganisation) memberships.next();
- // Get a list of roles that the user has in this organisation
- Set roles = member.getUserOrganisationRoles();
-
- /*Check if the user has write access, which is available
- * only if the user has an AUTHOR, TEACHER or STAFF role. If
- * he has acess add that folder to the list.
- */
- if (hasWriteAccess(roles)) {
- WorkspaceFolder orgFolder = member.getOrganisation().getWorkspace().getRootFolder();
- workspaces.add(new FolderContentDTO(orgFolder,getPermissions(orgFolder,user)));
- }
- }
- table.put("ORGANISATIONS", workspaces);
- flashMessage = new FlashMessage("getAccessibleWorkspaceFolders", table);
- }else
- flashMessage = new FlashMessage("getAccessibleWorkspaceFolders",
- "User with user_id of: " + userID
- + " is not a member of any organisation",
- FlashMessage.ERROR);
- } else
- flashMessage = FlashMessage.getNoSuchUserExists("getAccessibleWorkspaceFolders", userID);
+ } else {
+ log.warn("getAccessibleWorkspaceFolders: User "+userID+" does not exist. Returning no folders.");
+ }
- return flashMessage.serializeMessage();
+ return null;
}
-
+
/**
* This a utility method that checks whether user has write access. He can
* save his contents to a folder only if he is an AUTHOR,TEACHER or STAFF
Index: lams_central/src/java/org/lamsfoundation/lams/workspace/web/WorkspaceAction.java
===================================================================
diff -u -rb31438f14603ef90bb73d6a0621a6b3e10f01ba7 -rfc0a85ca7a12cd69d71d582eb17c62fc8d27101c
--- lams_central/src/java/org/lamsfoundation/lams/workspace/web/WorkspaceAction.java (.../WorkspaceAction.java) (revision b31438f14603ef90bb73d6a0621a6b3e10f01ba7)
+++ lams_central/src/java/org/lamsfoundation/lams/workspace/web/WorkspaceAction.java (.../WorkspaceAction.java) (revision fc0a85ca7a12cd69d71d582eb17c62fc8d27101c)
@@ -24,7 +24,8 @@
import java.io.IOException;
import java.io.PrintWriter;
-import java.util.Date;
+import java.util.Hashtable;
+import java.util.Vector;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
@@ -34,13 +35,12 @@
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.actions.DispatchAction;
-import org.lamsfoundation.lams.authoring.service.IAuthoringService;
-import org.lamsfoundation.lams.learningdesign.exception.LearningDesignException;
-import org.lamsfoundation.lams.usermanagement.exception.UserException;
-import org.lamsfoundation.lams.usermanagement.exception.WorkspaceFolderException;
-import org.lamsfoundation.lams.util.DateUtil;
+import org.lamsfoundation.lams.usermanagement.WorkspaceFolder;
+import org.lamsfoundation.lams.usermanagement.exception.UserAccessDeniedException;
import org.lamsfoundation.lams.util.WebUtil;
+import org.lamsfoundation.lams.util.wddx.FlashMessage;
import org.lamsfoundation.lams.web.util.AttributeNames;
+import org.lamsfoundation.lams.workspace.dto.FolderContentDTO;
import org.lamsfoundation.lams.workspace.service.IWorkspaceManagementService;
import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.support.WebApplicationContextUtils;
@@ -58,6 +58,20 @@
public static final String RESOURCE_ID = "resourceID";
public static final String RESOURCE_TYPE = "resourceType";
+ /**
+ * Special value for folderID on getFolderContents(). Triggers getting the
+ * dummy value for the organisations (see ORG_FOLDER_ID) and the user's
+ * private folder. See the method for more details.
+ */
+ public static final Integer BOOTSTRAP_FOLDER_ID = new Integer(-1);
+
+ /**
+ * Special value for folderID on getFolderContents(). Triggers getting the
+ * organisation folders that are available to a user. See
+ * the method for more details.
+ */
+ public static final Integer ORG_FOLDER_ID = new Integer(-2);
+
/** If you want the output given as a jsp, set the request parameter "jspoutput" to
* some value other than an empty string (e.g. 1, true, 0, false, blah).
* If you want it returned as a stream (ie for Flash), do not define this parameter
@@ -97,6 +111,33 @@
return null;
}
}
+
+ /** Send the flash message back to Flash */
+ private ActionForward returnWDDXPacket(FlashMessage flashMessage, HttpServletResponse response) throws IOException {
+ PrintWriter writer = response.getWriter();
+ writer.println(flashMessage.serializeMessage());
+ return null;
+ }
+
+ /** Is the folder id one of our special dummy ids? If so, we can't process the normal create, copy, paste, move
+ * functions on this folder.
+ * @return error packet if it is a special id. Should return packet to Flash with no further processing.
+ */
+ private String checkResourceNotDummyValue(String methodName, Integer folderID, String resourceType) throws IOException {
+ return checkResourceNotDummyValue(methodName, new Long(folderID.longValue()), resourceType);
+ }
+
+ /** Is the folder id one of our special dummy ids? If so, we can't process the normal create, copy, paste, move
+ * functions on this folder.
+ */
+ private String checkResourceNotDummyValue(String methodName, Long folderID, String resourceType) throws IOException {
+ if ( FolderContentDTO.FOLDER.equals(resourceType) && (BOOTSTRAP_FOLDER_ID.equals(folderID) || ORG_FOLDER_ID.equals(folderID)) ) {
+ FlashMessage msg = new FlashMessage(methodName, "FolderID "+folderID+" invalid for this call.",FlashMessage.ERROR);
+ return msg.serializeMessage();
+ }
+ return null;
+ }
+
/**
* For details please refer to
* org.lamsfoundation.lams.workspace.service.IWorkspaceManagementService
@@ -113,6 +154,10 @@
HttpServletRequest request,
HttpServletResponse response)throws ServletException,IOException{
Integer parentFolderID = new Integer(WebUtil.readIntParam(request,"parentFolderID"));
+ String errorPacket = checkResourceNotDummyValue("createFolderForFlash", parentFolderID, FolderContentDTO.FOLDER);
+ if ( errorPacket != null)
+ return outputPacket(mapping, request, response, errorPacket, "details");
+
String folderName = (String)WebUtil.readStrParam(request,"name");
Integer userID = new Integer(WebUtil.readIntParam(request,AttributeNames.PARAM_USER_ID));
IWorkspaceManagementService workspaceManagementService = getWorkspaceManagementService();
@@ -121,7 +166,24 @@
}
/**
- * For details please refer to
+ * getFolderContents returns the details of the folders, learning designs and files
+ * contained in a folder.
+ *
+ * If getFolderContents gets the BOOTSTRAP_FOLDER_ID (-1), then it return the user's private
+ * folder and the root folder.
+ *
+ * If getFolderContents gets the ORG_FOLDER_ID (-2) then it will return all the workspace
+ * folders that the user can access.
+ *
+ * This method handles the special values for the BOOTSTRAP_FOLDER_ID and the ORG_FOLDER_ID
+ * as these values are only meaningful to the Flash client - they are not meaningful to
+ * the progress engine or the like. If we ever had to return this data to another client,
+ * the data may be returned in a different way.
+ *
+ * The calls made to the service layer vary depending on what is required - this decouple's
+ * the client's special needs from the overall logic of the workspaces.
+ *
+ * For more details please refer to
* org.lamsfoundation.lams.workspace.service.IWorkspaceManagementService
*
* @param mapping
@@ -135,39 +197,75 @@
public ActionForward getFolderContents(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
- HttpServletResponse response)throws ServletException,Exception{
+ 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,AttributeNames.PARAM_USER_ID));
IWorkspaceManagementService workspaceManagementService = getWorkspaceManagementService();
- String wddxPacket = workspaceManagementService.getFolderContents(userID,folderID,mode);
- return outputPacket(mapping, request, response, wddxPacket, "details");
- }
+ String methodKey = "getFolderContents";
+ Hashtable packet = null;
+
+ try {
+ if ( BOOTSTRAP_FOLDER_ID.equals(folderID )) {
+ // return back the dummy org DTO and the user's workspace folder
+ Vector folders = new Vector();
+ FolderContentDTO userFolder = workspaceManagementService.getUserWorkspaceFolder(userID);
+ if ( userFolder != null )
+ folders.add(userFolder);
+
+ // TODO I8N the organisation strings
+ FolderContentDTO dummyOrgFolder = new FolderContentDTO("Organisations", "Folder",
+ null, null,
+ FolderContentDTO.FOLDER, new Long(ORG_FOLDER_ID.longValue()), WorkspaceFolder.READ_ACCESS,
+ null);
+
+ folders.add(dummyOrgFolder);
+
+ packet = createFolderContentPacket(null, BOOTSTRAP_FOLDER_ID, folders);
+
+ } else if ( ORG_FOLDER_ID.equals(folderID) ) {
+ // return back all the organisation folders that the user can access
+ Vector folders = workspaceManagementService.getAccessibleOrganisationWorkspaceFolders(userID);
+ packet = createFolderContentPacket(BOOTSTRAP_FOLDER_ID, ORG_FOLDER_ID, folders);
+
+ } else {
+ // normal case - just return back the contents of this folder.
+ WorkspaceFolder folder = workspaceManagementService.getWorkspaceFolder(folderID);
+ if ( folder != null ) {
+ Vector items;
+ items = workspaceManagementService.getFolderContentsExcludeHome(userID,folder,mode);
+ WorkspaceFolder parentWorkspaceFolder = folder.getParentWorkspaceFolder();
+ packet = createFolderContentPacket(parentWorkspaceFolder!=null?parentWorkspaceFolder.getWorkspaceFolderId():null,
+ folder.getWorkspaceFolderId(),
+ items);
+ } else {
+ return returnWDDXPacket(FlashMessage.getNoSuchWorkspaceFolderContentExsists(methodKey,new Long(folderID.longValue())), response);
+ }
+ }
+ } catch (UserAccessDeniedException e) {
+ return returnWDDXPacket(FlashMessage.getUserNotAuthorized(methodKey, userID), response);
+ } catch (Exception e) {
+ return returnWDDXPacket(FlashMessage.getExceptionOccured(methodKey, e.getMessage()), response);
+ }
- /**
- * For details please refer to
- * org.lamsfoundation.lams.workspace.service.IWorkspaceManagementService
- *
- * @param mapping
- * @param form
- * @param request
- * @param response
- * @return ActionForward
- * @throws ServletException
- * @throws Exception
- */
- public ActionForward getFolderContentsExcludeHome(ActionMapping mapping,
- ActionForm form,
- HttpServletRequest request,
- HttpServletResponse response)throws ServletException,Exception{
- Integer folderID = new Integer(WebUtil.readIntParam(request,"folderID"));
- Integer mode = new Integer(WebUtil.readIntParam(request,"mode"));
- Integer userID = new Integer(WebUtil.readIntParam(request,AttributeNames.PARAM_USER_ID));
- IWorkspaceManagementService workspaceManagementService = getWorkspaceManagementService();
- String wddxPacket = workspaceManagementService.getFolderContentsExcludeHome(userID,folderID,mode);
- return outputPacket(mapping, request, response, wddxPacket, "details");
+ return returnWDDXPacket(new FlashMessage(methodKey,packet), response);
}
+ private Hashtable createFolderContentPacket(Integer parentWorkspaceFolderID, Integer workspaceFolderID, Vector contents){
+ Hashtable packet = new Hashtable();
+
+ if ( parentWorkspaceFolderID != null )
+ packet.put("parentWorkspaceFolderID", parentWorkspaceFolderID);
+
+ if ( workspaceFolderID != null )
+ packet.put("workspaceFolderID", workspaceFolderID);
+
+ if ( contents != null )
+ packet.put("contents", contents);
+ return packet;
+ }
+
+
/**
* For details please refer to
* org.lamsfoundation.lams.workspace.service.IWorkspaceManagementService
@@ -185,7 +283,11 @@
HttpServletRequest request,
HttpServletResponse response)throws ServletException, IOException{
Long resourceID = new Long(WebUtil.readLongParam(request,RESOURCE_ID));
- String resourceType = WebUtil.readStrParam(request,RESOURCE_TYPE);
+ String resourceType = WebUtil.readStrParam(request,RESOURCE_TYPE);
+ String errorPacket = checkResourceNotDummyValue("deleteResource", resourceID, FolderContentDTO.FOLDER);
+ if ( errorPacket != null)
+ return outputPacket(mapping, request, response, errorPacket, "details");
+
Integer userID = new Integer(WebUtil.readIntParam(request,AttributeNames.PARAM_USER_ID));
IWorkspaceManagementService workspaceManagementService = getWorkspaceManagementService();
String wddxPacket = workspaceManagementService.deleteResource(resourceID,resourceType,userID);
@@ -213,6 +315,10 @@
Long resourceID = new Long(WebUtil.readLongParam(request,RESOURCE_ID));
String resourceType = WebUtil.readStrParam(request,RESOURCE_TYPE);
Integer targetFolderID = new Integer(WebUtil.readIntParam(request,"targetFolderID"));
+ String errorPacket = checkResourceNotDummyValue("copyResource", targetFolderID, FolderContentDTO.FOLDER);
+ if ( errorPacket != null)
+ return outputPacket(mapping, request, response, errorPacket, "details");
+
Integer copyType = WebUtil.readIntParam(request, "copyType", true);
Integer userID = new Integer(WebUtil.readIntParam(request,AttributeNames.PARAM_USER_ID));
IWorkspaceManagementService workspaceManagementService = getWorkspaceManagementService();
@@ -241,6 +347,10 @@
Integer userID = new Integer(WebUtil.readIntParam(request,AttributeNames.PARAM_USER_ID));
Integer targetFolderID = new Integer(WebUtil.readIntParam(request,"targetFolderID"));
+ String errorPacket = checkResourceNotDummyValue("copyResource", targetFolderID, FolderContentDTO.FOLDER);
+ if ( errorPacket != null)
+ return outputPacket(mapping, request, response, errorPacket, "details");
+
IWorkspaceManagementService workspaceManagementService = getWorkspaceManagementService();
String wddxPacket = workspaceManagementService.moveResource(resourceID,targetFolderID,resourceType,userID);
PrintWriter writer = response.getWriter();
@@ -273,6 +383,10 @@
String mimeType = WebUtil.readStrParam(request,"mimeType");
String path = WebUtil.readStrParam(request,"path");
+ String errorPacket = checkResourceNotDummyValue("createWorkspaceFolderContent", workspaceFolderID, FolderContentDTO.FOLDER);
+ if ( errorPacket != null)
+ return outputPacket(mapping, request, response, errorPacket, "details");
+
IWorkspaceManagementService workspaceManagementService = getWorkspaceManagementService();
String wddxPacket = workspaceManagementService.createWorkspaceFolderContent(contentTypeID,name,description,
workspaceFolderID,
@@ -297,6 +411,7 @@
HttpServletResponse response)throws ServletException, Exception{
Long folderContentID = new Long(WebUtil.readLongParam(request,"folderContentID"));
String path = WebUtil.readStrParam(request,"path");
+
IWorkspaceManagementService workspaceManagementService = getWorkspaceManagementService();
String wddxPacket = workspaceManagementService.updateWorkspaceFolderContent(folderContentID,path);
return outputPacket(mapping, request, response, wddxPacket, "details");
@@ -312,54 +427,18 @@
* @return ActionForward
* @throws IOException
*/
- public ActionForward getAccessibleWorkspaceFolders(ActionMapping mapping,
- ActionForm form,
- HttpServletRequest request,
- HttpServletResponse response)throws IOException{
- Integer userID = new Integer(WebUtil.readIntParam(request,AttributeNames.PARAM_USER_ID));
- IWorkspaceManagementService workspaceManagementService = getWorkspaceManagementService();
- String wddxPacket = workspaceManagementService.getAccessibleWorkspaceFolders(userID);
- return outputPacket(mapping, request, response, wddxPacket, "details");
- }
- /**
- * For details please refer to
- * org.lamsfoundation.lams.workspace.service.IWorkspaceManagementService
- *
- * @param mapping
- * @param form
- * @param request
- * @param response
- * @return ActionForward
- * @throws IOException
- */
- public ActionForward getAccessibleWorkspaceFoldersNew(ActionMapping mapping,
- ActionForm form,
- HttpServletRequest request,
- HttpServletResponse response)throws IOException{
- Integer userID = new Integer(WebUtil.readIntParam(request,AttributeNames.PARAM_USER_ID));
- IWorkspaceManagementService workspaceManagementService = getWorkspaceManagementService();
- String wddxPacket = workspaceManagementService.getAccessibleWorkspaceFoldersNew(userID);
- return outputPacket(mapping, request, response, wddxPacket, "details");
- }
-
- /**
- * For details please refer to
- * org.lamsfoundation.lams.workspace.service.IWorkspaceManagementService
- *
- * @param mapping
- * @param form
- * @param request
- * @param response
- * @return ActionForward
- * @throws IOException
- */
public ActionForward renameResource(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)throws IOException{
Integer userID = new Integer(WebUtil.readIntParam(request,AttributeNames.PARAM_USER_ID));
Long resourceID = new Long(WebUtil.readLongParam(request,RESOURCE_ID));
String resourceType = WebUtil.readStrParam(request,RESOURCE_TYPE);
+
+ String errorPacket = checkResourceNotDummyValue("renameResource", resourceID, resourceType);
+ if ( errorPacket != null)
+ return outputPacket(mapping, request, response, errorPacket, "details");
+
String name = WebUtil.readStrParam(request,"name");
IWorkspaceManagementService workspaceManagementService = getWorkspaceManagementService();
String wddxPacket = workspaceManagementService.renameResource(resourceID,resourceType,name,userID);
@@ -376,27 +455,6 @@
* @param form
* @param request
* @param response
- * @return ActionForward
- * @throws IOException
- */
- public ActionForward getWorkspace(ActionMapping mapping,
- ActionForm form,
- HttpServletRequest request,
- HttpServletResponse response)throws IOException{
- Integer userID = new Integer(WebUtil.readIntParam(request,AttributeNames.PARAM_USER_ID));
- IWorkspaceManagementService workspaceManagementService = getWorkspaceManagementService();
- String wddxPacket = workspaceManagementService.getWorkspace(userID);
- return outputPacket(mapping, request, response, wddxPacket, "details");
- }
-
- /**
- * For details please refer to
- * org.lamsfoundation.lams.workspace.service.IWorkspaceManagementService
- *
- * @param mapping
- * @param form
- * @param request
- * @param response
* @return
* @throws IOException
*/
@@ -407,6 +465,11 @@
Long uuID = new Long(WebUtil.readIntParam(request,"uuID"));
Long versionID= new Long(WebUtil.readIntParam(request,"versionID"));
Long folderContentID = new Long(WebUtil.readIntParam(request,"folderContentID"));
+
+ String errorPacket = checkResourceNotDummyValue("deleteContentWithVersion", folderContentID, FolderContentDTO.FOLDER);
+ if ( errorPacket != null)
+ return outputPacket(mapping, request, response, errorPacket, "details");
+
IWorkspaceManagementService workspaceManagementService = getWorkspaceManagementService();
String wddxPacket = workspaceManagementService.deleteContentWithVersion(uuID,versionID,folderContentID);
return outputPacket(mapping, request, response, wddxPacket, "details");