Index: lams_central/src/java/org/lamsfoundation/lams/workspace/service/WorkspaceManagementService.java
===================================================================
RCS file: /usr/local/cvsroot/lams_central/src/java/org/lamsfoundation/lams/workspace/service/WorkspaceManagementService.java,v
diff -u -r1.59 -r1.60
--- lams_central/src/java/org/lamsfoundation/lams/workspace/service/WorkspaceManagementService.java 13 Jun 2013 12:17:09 -0000 1.59
+++ lams_central/src/java/org/lamsfoundation/lams/workspace/service/WorkspaceManagementService.java 27 Dec 2013 12:13:45 -0000 1.60
@@ -27,7 +27,6 @@
import java.io.IOException;
import java.io.InputStream;
import java.util.Collections;
-import java.util.Comparator;
import java.util.Date;
import java.util.Hashtable;
import java.util.Iterator;
@@ -78,1406 +77,1564 @@
/**
* @author Manpreet Minhas
*/
-public class WorkspaceManagementService implements IWorkspaceManagementService{
-
- protected Logger log = Logger.getLogger(WorkspaceManagementService.class.getName());
-
- public static final Integer AUTHORING = new Integer(1);
- public static final Integer MONITORING = new Integer(2);
-
- protected IBaseDAO baseDAO;
- protected ILearningDesignDAO learningDesignDAO;
-
- protected IAuthoringService authoringService;
- protected IRepositoryService repositoryService;
- protected IUserManagementService userMgmtService;
- protected MessageService messageService;
-
- /**
- * i18n Message service
- * @param messageSource
- */
- public void setMessageService(MessageService messageService) {
- this.messageService = messageService;
+public class WorkspaceManagementService implements IWorkspaceManagementService {
+
+ protected Logger log = Logger.getLogger(WorkspaceManagementService.class.getName());
+
+ public static final Integer AUTHORING = new Integer(1);
+ public static final Integer MONITORING = new Integer(2);
+
+ protected IBaseDAO baseDAO;
+ protected ILearningDesignDAO learningDesignDAO;
+
+ protected IAuthoringService authoringService;
+ protected IRepositoryService repositoryService;
+ protected IUserManagementService userMgmtService;
+ protected MessageService messageService;
+
+ /**
+ * i18n Message service
+ *
+ * @param messageSource
+ */
+ public void setMessageService(MessageService messageService) {
+ this.messageService = messageService;
+ }
+
+ /**
+ * i18n Message service. The Workspace action class needs access to the message service.
+ *
+ * @param messageSource
+ */
+ @Override
+ public MessageService getMessageService() {
+ return messageService;
+ }
+
+ /**
+ * @param workspaceFolderContentDAO
+ * The workspaceFolderContentDAO to set.
+ */
+ public void setBaseDAO(IBaseDAO baseDAO) {
+ this.baseDAO = baseDAO;
+ }
+
+ /**
+ * @param authoringService
+ * The authoringService to set.
+ */
+ public void setAuthoringService(IAuthoringService authoringService) {
+ this.authoringService = authoringService;
+ }
+
+ /**
+ * @param repositoryService
+ * The repositoryService to set.
+ */
+ public void setRepositoryService(IRepositoryService repositoryService) {
+ this.repositoryService = repositoryService;
+ }
+
+ /**
+ * @param learningDesignDAO
+ * The learningDesignDAO to set.
+ */
+ public void setLearningDesignDAO(ILearningDesignDAO learningDesignDAO) {
+ this.learningDesignDAO = learningDesignDAO;
+ }
+
+ public void setUserMgmtService(IUserManagementService userMgmtService) {
+ this.userMgmtService = userMgmtService;
+ }
+
+ /**
+ * (non-Javadoc)
+ *
+ * @see org.lamsfoundation.lams.workspace.service.IWorkspaceManagementService#deleteResource(java.lang.Integer,
+ * java.lang.String, java.lang.Integer)
+ */
+ @Override
+ public String deleteResource(Long resourceID, String resourceType, Integer userID) throws IOException {
+
+ String errorMessage = null;
+
+ if ((resourceID == null) || (resourceType == null) || (userID == null)) {
+ errorMessage = messageService.getMessage("delete.resource.error.value.miss");
+ } else if (FolderContentDTO.DESIGN.equals(resourceType)) {
+ return deleteLearningDesign(resourceID, userID);
+ } else if (FolderContentDTO.FOLDER.equals(resourceType)) {
+ return deleteFolder(new Integer(resourceID.intValue()), userID);
+ } else if (FolderContentDTO.FILE.equals(resourceType)) {
+ return deleteWorkspaceFolderContent(resourceID);
+ } else if (FolderContentDTO.LESSON.equals(resourceType)) {
+ // TODO implement delete lesson
+ errorMessage = messageService.getMessage("delete.lesson.error");
}
- /**
- * i18n Message service. The Workspace action class needs access to the message service.
- * @param messageSource
- */
- public MessageService getMessageService() {
- return messageService;
+
+ FlashMessage message = new FlashMessage(IWorkspaceManagementService.MSG_KEY_DELETE, messageService.getMessage(
+ "delete.resource.error", new Object[] { errorMessage }), FlashMessage.ERROR);
+ return message.serializeMessage();
+
+ }
+
+ /**
+ * 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
+ *
Organisation
or User
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 folderID, Integer userID) throws IOException {
+ WorkspaceFolder workspaceFolder = (WorkspaceFolder) baseDAO.find(WorkspaceFolder.class, folderID);
+ User user = (User) userMgmtService.findById(User.class, userID);
+ FlashMessage flashMessage = null;
+ if (user != null) {
+ flashMessage = deleteFolder(workspaceFolder, user, isSysAuthorAdmin(user));
+ } else {
+ flashMessage = FlashMessage.getNoSuchUserExists(IWorkspaceManagementService.MSG_KEY_DELETE, userID);
}
- /**
- * @param workspaceFolderContentDAO The workspaceFolderContentDAO to set.
- */
- public void setBaseDAO(
- IBaseDAO baseDAO) {
- this.baseDAO = baseDAO;
+ return flashMessage.serializeMessage();
+ }
+
+ private FlashMessage deleteFolder(WorkspaceFolder workspaceFolder, User user, boolean isSysAuthorAdmin)
+ throws IOException {
+ if (!getPermissions(workspaceFolder, user).equals(WorkspaceFolder.OWNER_ACCESS)) {
+ return FlashMessage.getUserNotAuthorized(IWorkspaceManagementService.MSG_KEY_DELETE, user.getUserId());
+ } else {
+ if (workspaceFolder != null) {
+ return deleteFolderContents(workspaceFolder, user, isSysAuthorAdmin);
+ } else {
+ return FlashMessage.getNoSuchWorkspaceFolderExsists(IWorkspaceManagementService.MSG_KEY_DELETE,
+ workspaceFolder.getWorkspaceFolderId());
+ }
}
- /**
- * @param authoringService The authoringService to set.
- */
- public void setAuthoringService(IAuthoringService authoringService) {
- this.authoringService = authoringService;
- }
- /**
- * @param repositoryService The repositoryService to set.
- */
- public void setRepositoryService(IRepositoryService repositoryService) {
- this.repositoryService = repositoryService;
- }
- /**
- * @param learningDesignDAO The learningDesignDAO to set.
- */
- public void setLearningDesignDAO(ILearningDesignDAO learningDesignDAO) {
- this.learningDesignDAO = learningDesignDAO;
- }
-
- public void setUserMgmtService(IUserManagementService userMgmtService) {
- this.userMgmtService = userMgmtService;
- }
-
- /**
- * (non-Javadoc)
- * @see org.lamsfoundation.lams.workspace.service.IWorkspaceManagementService#deleteResource(java.lang.Integer, java.lang.String, java.lang.Integer)
- */
- public String deleteResource(Long resourceID, String resourceType, Integer userID) throws IOException {
+ }
- String errorMessage = null;
+ /**
+ * This method will try to delete the folder
. If the folder is not empty it will attempt to delete all
+ * resources inside the folder. If the user does not have permission to delete that resource then a FlashMessage
+ * will be returned indicating which resource it was unable to delete. If all resources inside that
+ * folder
are successfully deleted, then the folder will be deleted and a FlashMessage will be returned
+ * indicating it was successfully deleted.
+ *
+ * @param folder
+ */
+ private FlashMessage deleteFolderContents(WorkspaceFolder folder, User user, boolean isSysAuthorAdmin)
+ throws IOException {
+ FlashMessage flashMessage = null;
+ boolean isDeleteSuccessful = true;
- if ( resourceID == null || resourceType == null || userID== null ) {
- errorMessage = messageService.getMessage("delete.resource.error.value.miss");
- } else if ( FolderContentDTO.DESIGN.equals(resourceType) ) {
- return deleteLearningDesign(resourceID, userID);
- } else if ( FolderContentDTO.FOLDER.equals(resourceType) ) {
- return deleteFolder(new Integer(resourceID.intValue()), userID);
- } else if ( FolderContentDTO.FILE.equals(resourceType) ) {
- return deleteWorkspaceFolderContent(resourceID);
- } else if ( FolderContentDTO.LESSON.equals(resourceType) ) {
- // TODO implement delete lesson
- errorMessage = messageService.getMessage("delete.lesson.error");
+ Integer folderID = folder.getWorkspaceFolderId();
+
+ if (!folder.isEmpty()) {
+ if (folder.hasSubFolders()) {
+ Set subFolders = folder.getChildWorkspaceFolders();
+ Iterator subFolderIterator = subFolders.iterator();
+ while (subFolderIterator.hasNext()) {
+ WorkspaceFolder subFolder = (WorkspaceFolder) subFolderIterator.next();
+ flashMessage = deleteFolder(subFolder, user, isSysAuthorAdmin);
+ if (flashMessage.getMessageType() != FlashMessage.OBJECT_MESSAGE) {
+ return flashMessage;
+ }
}
-
- FlashMessage message = new FlashMessage(MSG_KEY_DELETE,
- messageService.getMessage("delete.resource.error",new Object[]{errorMessage}),
- FlashMessage.ERROR);
- return message.serializeMessage();
-
- }
-
- /**
- * 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
- *
Organisation
- * or User
- * 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 folderID, Integer userID)throws IOException{
- WorkspaceFolder workspaceFolder = (WorkspaceFolder)baseDAO.find(WorkspaceFolder.class,folderID);
- User user = (User)userMgmtService.findById(User.class,userID);
- FlashMessage flashMessage = null;
- if(user!=null){
- flashMessage = deleteFolder(workspaceFolder, user, isSysAuthorAdmin(user));
- }else
- flashMessage = FlashMessage.getNoSuchUserExists(MSG_KEY_DELETE,userID);
-
- return flashMessage.serializeMessage();
- }
-
- private FlashMessage deleteFolder(WorkspaceFolder workspaceFolder, User user, boolean isSysAuthorAdmin) throws IOException {
- if(!getPermissions(workspaceFolder,user).equals(WorkspaceFolder.OWNER_ACCESS)){
- return FlashMessage.getUserNotAuthorized(MSG_KEY_DELETE,user.getUserId());
- }else{
- if(workspaceFolder!=null){
- return deleteFolderContents(workspaceFolder, user, isSysAuthorAdmin);
- }else
- return FlashMessage.getNoSuchWorkspaceFolderExsists(MSG_KEY_DELETE,workspaceFolder.getWorkspaceFolderId());
+ } else {
+
+ // delete all files within the directory
+ Set folderContents = folder.getFolderContent();
+ Iterator i = folderContents.iterator();
+ while (i.hasNext()) {
+ WorkspaceFolderContent folderContent = (WorkspaceFolderContent) i.next();
+ folderContent.setWorkspaceFolder(null);
+ folder.getFolderContent().remove(folderContent);
}
+
+ // delete all learning designs within folder (if created by the user)
+ Set learningDesigns = folder.getLearningDesigns();
+ Iterator j = learningDesigns.iterator();
+ while (j.hasNext()) {
+ LearningDesign learningDesign = (LearningDesign) j.next();
+ if (learningDesign != null) {
+ if (isSysAuthorAdmin || learningDesign.getUser().getUserId().equals(user.getUserId())) {
+ if (learningDesign.getReadOnly().booleanValue()) {
+ isDeleteSuccessful = false;
+ flashMessage = new FlashMessage(IWorkspaceManagementService.MSG_KEY_DELETE,
+ messageService.getMessage("delete.learningdesign.error",
+ new Object[] { learningDesign.getLearningDesignId() }),
+ FlashMessage.ERROR);
+ } else {
+ folder.getLearningDesigns().remove(learningDesign);
+ learningDesign.setWorkspaceFolder(null);
+ }
+ }
+ }
+ }
+
+ baseDAO.update(folder); // this call will delete the files and learning designs which were removed from
+ // the collection above.
+
+ }
+
}
- /**
- * This method will try to delete the folder
. If the folder is not empty
- * it will attempt to delete all resources inside the folder. If the user does not
- * have permission to delete that resource then a FlashMessage will be returned
- * indicating which resource it was unable to delete.
- * If all resources inside that folder
are successfully deleted, then
- * the folder will be deleted and a FlashMessage will be returned indicating it was
- * successfully deleted.
- * @param folder
- */
- private FlashMessage deleteFolderContents(WorkspaceFolder folder, User user, boolean isSysAuthorAdmin) throws IOException
+ if (isDeleteSuccessful) // it will only delete this folder if all the files/folder/learningDesigns are all
+ // deleted
{
- FlashMessage flashMessage = null;
- boolean isDeleteSuccessful = true;
-
- Integer folderID = folder.getWorkspaceFolderId();
-
- if (!folder.isEmpty())
- {
- if (folder.hasSubFolders())
- {
- Set subFolders = folder.getChildWorkspaceFolders();
- Iterator subFolderIterator = subFolders.iterator();
- while (subFolderIterator.hasNext())
- {
- WorkspaceFolder subFolder = (WorkspaceFolder)subFolderIterator.next();
- flashMessage = deleteFolder(subFolder, user, isSysAuthorAdmin);
- if ( flashMessage.getMessageType() != FlashMessage.OBJECT_MESSAGE )
- return flashMessage;
- }
- }
- else
- {
-
- //delete all files within the directory
- Set folderContents = folder.getFolderContent();
- Iterator i = folderContents.iterator();
- while (i.hasNext())
- {
- WorkspaceFolderContent folderContent = (WorkspaceFolderContent)i.next();
- folderContent.setWorkspaceFolder(null);
- folder.getFolderContent().remove(folderContent);
- }
-
- //delete all learning designs within folder (if created by the user)
- Set learningDesigns = folder.getLearningDesigns();
- Iterator j = learningDesigns.iterator();
- while (j.hasNext())
- {
- LearningDesign learningDesign = (LearningDesign)j.next();
- if (learningDesign != null) {
- if (isSysAuthorAdmin || learningDesign.getUser().getUserId().equals(user.getUserId()))
- {
- if (learningDesign.getReadOnly().booleanValue()) {
- isDeleteSuccessful = false;
- flashMessage = new FlashMessage(MSG_KEY_DELETE,
- messageService.getMessage("delete.learningdesign.error",new Object[]{learningDesign.getLearningDesignId()})
- , FlashMessage.ERROR);
- }
- else
- {
- folder.getLearningDesigns().remove(learningDesign);
- learningDesign.setWorkspaceFolder(null);
- }
- }
- }
- }
-
- baseDAO.update(folder); //this call will delete the files and learning designs which were removed from the collection above.
-
- }
-
+ baseDAO.delete(folder);
+ flashMessage = new FlashMessage(IWorkspaceManagementService.MSG_KEY_DELETE, messageService.getMessage(
+ "folder.delete", new Object[] { folderID }));
+ }
+
+ return flashMessage;
+
+ }
+
+ /**
+ * 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.
+ */
+ @Override
+ public WorkspaceFolder getWorkspaceFolder(Integer workspaceFolderID) {
+ return (WorkspaceFolder) baseDAO.find(WorkspaceFolder.class, workspaceFolderID);
+ }
+
+ /**
+ * (non-Javadoc)
+ *
+ * @see org.lamsfoundation.lams.workspace.service.IWorkspaceManagementService#getFolderContentsExcludeHome(java.lang.Integer,
+ * java.lang.Integer, java.lang.Integer)
+ */
+ @Override
+ public VectorworkspaceFolder
for the given user.
+ *
+ * @param workspaceFolder
+ * The workspaceFolder for which we need the permissions
+ * @param user
+ * The user for whom these permissions are set.
+ * @return Integer The permissions
+ */
+ public Integer getPermissions(WorkspaceFolder workspaceFolder, User user) {
+ Integer permission = null;
+
+ if ((workspaceFolder == null) || (user == null)) {
+ log.debug("no access due to null value(s) in user or workspaceFolder");
+ permission = WorkspaceFolder.NO_ACCESS;
+ } else {
+ if (WorkspaceFolder.RUN_SEQUENCES.equals(workspaceFolder.getWorkspaceFolderType())) {
+ permission = WorkspaceFolder.READ_ACCESS;
+ } else if (WorkspaceFolder.PUBLIC_SEQUENCES.equals(workspaceFolder.getWorkspaceFolderType())) {
+ permission = WorkspaceFolder.MEMBERSHIP_ACCESS;
+ } else if (workspaceFolder.getUserID().equals(user.getUserId())) {
+ permission = WorkspaceFolder.OWNER_ACCESS;
+ } else if (isSysAuthorAdmin(user)) {
+ permission = WorkspaceFolder.OWNER_ACCESS;
+ } else if (user.hasMemberAccess(workspaceFolder)) {
+ permission = WorkspaceFolder.MEMBERSHIP_ACCESS;
+ } else {
+ permission = WorkspaceFolder.NO_ACCESS;
+ }
+ if (log.isDebugEnabled()) {
+ log.debug(user.getLogin() + " has " + permission + " access to " + workspaceFolder.getName());
+ }
}
-
-
- /**
- * 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 VectorworkspaceFolder
for the given user.
- *
- * @param workspaceFolder The workspaceFolder for which we need the permissions
- * @param user The user for whom these permissions are set.
- * @return Integer The permissions
- */
- public Integer getPermissions(WorkspaceFolder workspaceFolder, User user){
- Integer permission = null;
-
- if ( workspaceFolder==null || user==null ) {
- log.debug("no access due to null value(s) in user or workspaceFolder");
- permission = WorkspaceFolder.NO_ACCESS;
+
+ FlashMessage message = new FlashMessage(IWorkspaceManagementService.MSG_KEY_COPY, messageService.getMessage(
+ "copy.resource.error", new Object[] { errorMessage }), FlashMessage.ERROR);
+ return message.serializeMessage();
+
+ }
+
+ /**
+ * 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 targetFolderID
+ * 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 targetFolderID, Integer userID) throws IOException {
+ FlashMessage flashMessage = null;
+ try {
+ if (isUserAuthorizedToModifyFolderContents(targetFolderID, userID)) {
+ WorkspaceFolder workspaceFolder = (WorkspaceFolder) baseDAO.find(WorkspaceFolder.class, folderID);
+ if (workspaceFolder != null) {
+ WorkspaceFolder newFolder = createFolder(targetFolderID, workspaceFolder.getName(), userID);
+ copyRootContent(workspaceFolder, newFolder, userID);
+ if (workspaceFolder.hasSubFolders()) {
+ createSubFolders(workspaceFolder, newFolder, userID);
+ }
+ flashMessage = new FlashMessage(IWorkspaceManagementService.MSG_KEY_COPY,
+ newFolder.getWorkspaceFolderId());
} else {
- if ( WorkspaceFolder.RUN_SEQUENCES.equals(workspaceFolder.getWorkspaceFolderType()) ) {
- permission = WorkspaceFolder.READ_ACCESS;
- } else if( WorkspaceFolder.PUBLIC_SEQUENCES.equals(workspaceFolder.getWorkspaceFolderType()) ) {
- permission = WorkspaceFolder.MEMBERSHIP_ACCESS;
- } else if (workspaceFolder.getUserID().equals(user.getUserId())) {
- permission = WorkspaceFolder.OWNER_ACCESS;
- } else if (isSysAuthorAdmin(user)){
- permission = WorkspaceFolder.OWNER_ACCESS;
- } else if(user.hasMemberAccess(workspaceFolder)) {
- permission = WorkspaceFolder.MEMBERSHIP_ACCESS;
- } else {
- permission = WorkspaceFolder.NO_ACCESS;
- }
- if ( log.isDebugEnabled() ) {
- log.debug(user.getLogin()+" has "+permission+" access to "+workspaceFolder.getName());
- }
+ throw new WorkspaceFolderException();
}
-
- return permission;
+ } else {
+ flashMessage = FlashMessage.getUserNotAuthorized(IWorkspaceManagementService.MSG_KEY_COPY, userID);
+ }
+ } catch (UserException ue) {
+ flashMessage = FlashMessage.getNoSuchUserExists(IWorkspaceManagementService.MSG_KEY_COPY, userID);
+ } catch (WorkspaceFolderException we) {
+ flashMessage = FlashMessage.getNoSuchWorkspaceFolderExsists(IWorkspaceManagementService.MSG_KEY_COPY,
+ folderID);
}
-
- private boolean isSysAuthorAdmin(User user) {
- return userMgmtService.hasRoleInOrganisation(user, Role.ROLE_AUTHOR_ADMIN) ||
- userMgmtService.hasRoleInOrganisation(user, Role.ROLE_SYSADMIN);
+ return flashMessage.serializeMessage();
+ }
+
+ /**
+ * This method copies a learning design to another folder. Call the AuthoringService to do the copy.
+ *
+ * @param folderID
+ * The 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 copyLearningDesign(Long designID, Integer targetFolderID, Integer copyType, Integer userID)
+ throws IOException {
+ FlashMessage message = null;
+ try {
+ LearningDesign ld = authoringService.copyLearningDesign(designID, copyType != null ? copyType
+ : new Integer(LearningDesign.COPY_TYPE_NONE), userID, targetFolderID, false);
+ message = new FlashMessage(IWorkspaceManagementService.MSG_KEY_COPY, ld.getLearningDesignId());
+
+ } catch (Exception e) {
+ log.error("copyLearningDesign() unable to copy learning design due to an error. " + "designID=" + designID
+ + "copyType=" + copyType + "targetFolderID=" + targetFolderID + "userID=" + userID, e);
+
+ message = new FlashMessage(IWorkspaceManagementService.MSG_KEY_COPY, messageService.getMessage(
+ "unable.copy", new Object[] { e.getMessage() }), FlashMessage.ERROR);
+
}
-
- /** This method checks if the given workspaceFolder is a subFolder of the
- * given rootFolder. Returns false if they are the same folder. */
-/* private boolean isSubFolder(WorkspaceFolder workspaceFolder,WorkspaceFolder rootFolder){
- if ( rootFolder != null ) {
- // is it the same folder?
- if ( rootFolder.getWorkspaceFolderId().equals(workspaceFolder.getWorkspaceFolderId()) ) {
- return false;
- }
- // check the parent hierarchy
- WorkspaceFolder folder = workspaceFolder;
- while ( folder != null && ! rootFolder.getWorkspaceFolderId().equals(folder.getWorkspaceFolderId()) ) {
- folder = folder.getParentWorkspaceFolder();
- }
- return ( folder != null );
+
+ return message.serializeMessage();
+ }
+
+ /**
+ * This method checks whether the user is authorized to create a new folder or learning design under the given
+ * WorkspaceFolder.
+ *
+ * @param folderID
+ * The 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
+ */
+ @Override
+ public boolean isUserAuthorizedToModifyFolderContents(Integer folderID, Integer userID) throws UserException,
+ WorkspaceFolderException {
+ boolean authorized = false;
+ User user = (User) baseDAO.find(User.class, userID);
+ if (user != null) {
+ WorkspaceFolder targetParent = (WorkspaceFolder) baseDAO.find(WorkspaceFolder.class, folderID);
+ if (targetParent != null) {
+ Integer permissions = getPermissions(targetParent, user);
+ if (!permissions.equals(WorkspaceFolder.NO_ACCESS) && !permissions.equals(WorkspaceFolder.READ_ACCESS)) {
+ authorized = true;
}
- return false;
-
+ } else {
+ throw new WorkspaceFolderException();
+ }
+ } else {
+ throw new UserException();
}
-*/
- private Vector getFolderContentDTO(List designs, Integer folderPermissions,Vector folderContent, User user){
- Iterator iterator = designs.iterator();
- while(iterator.hasNext()){
- LearningDesign design = (LearningDesign)iterator.next();
- FolderContentDTO folder;
- if ( design.getUser() != null && design.getUser().equals(user) ) {
- folder = new FolderContentDTO(design, WorkspaceFolder.OWNER_ACCESS, user);
- } else {
- folder = new FolderContentDTO(design, folderPermissions, user);
- }
-
- folderContent.add(folder);
- }
- return folderContent;
-
- }
- /**
- * @see org.lamsfoundation.lams.workspace.service.IWorkspaceManagementService#copyResource(Long, String, Integer, Integer, Integer)
- */
- public String copyResource(Long resourceID, String resourceType, Integer copyType, Integer targetFolderID, Integer userID)throws IOException {
- String errorMessage = null;
- if ( resourceID == null || targetFolderID == null || resourceType == null || userID== null ) {
- errorMessage = messageService.getMessage("copy.resource.error.value.miss");
- } else if ( FolderContentDTO.DESIGN.equals(resourceType) ) {
- return copyLearningDesign(resourceID,targetFolderID,copyType,userID);
- } else if ( FolderContentDTO.FOLDER.equals(resourceType) ) {
- return copyFolder(new Integer(resourceID.intValue()), targetFolderID, userID);
- } else if ( FolderContentDTO.FILE.equals(resourceType) ) {
- // TODO implement delete file resource
- errorMessage = messageService.getMessage("copy.no.support");
- } else if ( FolderContentDTO.LESSON.equals(resourceType) ) {
- // TODO implement delete lesson
- errorMessage = messageService.getMessage("copy.no.support");
- }
-
- FlashMessage message = new FlashMessage(MSG_KEY_COPY,
- messageService.getMessage("copy.resource.error",new Object[]{errorMessage}),
- FlashMessage.ERROR);
- return message.serializeMessage();
-
+ return authorized;
+ }
+
+ public void copyRootContent(WorkspaceFolder workspaceFolder, WorkspaceFolder targetWorkspaceFolder, Integer userID)
+ throws UserException, LearningDesignException, UserAccessDeniedException, WorkspaceFolderException {
+ User user = (User) baseDAO.find(User.class, userID);
+ if (user == null) {
+ throw new UserException(messageService.getMessage("no.such.user", new Object[] { userID }));
}
- /**
- * 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.
- *
- * - The target
WorkspaceFolder
must exists
- * - The
User
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.
- *
- * @param folderID The WorkspaceFolder
to be copied.
- * @param targetFolderID 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 targetFolderID,Integer userID)throws IOException{
- FlashMessage flashMessage = null;
- try{
- if(isUserAuthorizedToModifyFolderContents(targetFolderID,userID)){
- WorkspaceFolder workspaceFolder = (WorkspaceFolder)baseDAO.find(WorkspaceFolder.class,folderID);
- if(workspaceFolder!=null){
- WorkspaceFolder newFolder = createFolder(targetFolderID,workspaceFolder.getName(),userID);
- copyRootContent(workspaceFolder,newFolder,userID);
- if(workspaceFolder.hasSubFolders())
- createSubFolders(workspaceFolder, newFolder,userID);
- flashMessage = new FlashMessage(MSG_KEY_COPY,newFolder.getWorkspaceFolderId());
- }else
- throw new WorkspaceFolderException();
- }else
- flashMessage = FlashMessage.getUserNotAuthorized(MSG_KEY_COPY, userID);
- }catch(UserException ue){
- flashMessage = FlashMessage.getNoSuchUserExists(MSG_KEY_COPY,userID);
- }catch(WorkspaceFolderException we){
- flashMessage = FlashMessage.getNoSuchWorkspaceFolderExsists(MSG_KEY_COPY,folderID);
- }
- return flashMessage.serializeMessage();
+ List designs = learningDesignDAO.getAllLearningDesignsInFolder(workspaceFolder.getWorkspaceFolderId());
+ if ((designs != null) && (designs.size() != 0)) {
+ Iterator iterator = designs.iterator();
+ while (iterator.hasNext()) {
+ LearningDesign design = (LearningDesign) iterator.next();
+ authoringService.copyLearningDesign(design, new Integer(LearningDesign.COPY_TYPE_NONE), user,
+ targetWorkspaceFolder, false, null, null);
+ }
}
-
- /**
- * This method copies a learning design to another folder. Call the AuthoringService
- * to do the copy.
- *
- * @param folderID The 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 copyLearningDesign(Long designID,Integer targetFolderID,Integer copyType,Integer userID)throws IOException{
- FlashMessage message = null;
- try {
- LearningDesign ld = authoringService.copyLearningDesign(designID,
- copyType != null ? copyType : new Integer(LearningDesign.COPY_TYPE_NONE),
- userID, targetFolderID, false);
- message = new FlashMessage(MSG_KEY_COPY,ld.getLearningDesignId());
-
- } catch ( Exception e ) {
- log.error("copyLearningDesign() unable to copy learning design due to an error. "
- + "designID="+designID
- + "copyType="+copyType
- + "targetFolderID="+targetFolderID
- + "userID="+userID ,e);
+ }
- message = new FlashMessage(MSG_KEY_COPY, messageService.getMessage("unable.copy",new Object[]{e.getMessage()}), FlashMessage.ERROR);
+ @Override
+ public WorkspaceFolder createFolder(Integer parentFolderID, String name, Integer userID) throws UserException,
+ WorkspaceFolderException {
+ WorkspaceFolder parentFolder = (WorkspaceFolder) baseDAO.find(WorkspaceFolder.class, parentFolderID);
+ if (parentFolder != null) {
+
+ boolean nameExists = true;
+ while (nameExists) {
+ nameExists = ifNameExists(parentFolder, name);
+ if (nameExists) {
+ name = name + "C";
+ } else {
+ break;
}
+ }
- return message.serializeMessage();
+ // set type of the new workspaceFolder
+ Integer newWorkspaceFolderType = parentFolder.getWorkspaceFolderType().equals(
+ WorkspaceFolder.PUBLIC_SEQUENCES) ? WorkspaceFolder.PUBLIC_SEQUENCES : WorkspaceFolder.NORMAL;
+
+ User user = (User) baseDAO.find(User.class, userID);
+ if (user != null) {
+ Workspace workspace = user.getWorkspace();
+ WorkspaceFolder workspaceFolder = new WorkspaceFolder(name, workspace.getWorkspaceId(), parentFolder,
+ userID, new Date(), new Date(), newWorkspaceFolderType);
+ baseDAO.insert(workspaceFolder);
+ return workspaceFolder;
+ } else {
+ throw new UserException(messageService.getMessage("no.such.user", new Object[] { userID }));
+ }
+
+ } else {
+ throw new WorkspaceFolderException(messageService.getMessage("no.such.workspace",
+ new Object[] { parentFolderID }));
}
+ }
- /**
- * This method checks whether the user is authorized to create
- * a new folder or learning design under the given WorkspaceFolder.
- *
- * @param folderID The 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
- */
- public boolean isUserAuthorizedToModifyFolderContents(Integer folderID, Integer userID)throws UserException, WorkspaceFolderException{
- boolean authorized = false;
- User user = (User)baseDAO.find(User.class,userID);
- if(user!=null){
- WorkspaceFolder targetParent = (WorkspaceFolder)baseDAO.find(WorkspaceFolder.class,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;
+ /**
+ * TODO For now assuming that the folder to be created would be of type NORMAL. But the type has to be passed in the
+ * near future indicating what kind of folder should be created (NORMAL/RUN SEQUENCES)
+ *
+ * @see org.lamsfoundation.lams.authoring.service.IAuthoringService#createFolder(java.lang.Integer,
+ * java.lang.String, java.lang.Integer)
+ */
+ @Override
+ public String createFolderForFlash(Integer parentFolderID, String name, Integer userID) throws IOException {
+ FlashMessage flashMessage = null;
+ try {
+ WorkspaceFolder newFolder = createFolder(parentFolderID, name, userID);
+ Hashtable table = new Hashtable();
+ table.put("folderID", newFolder.getWorkspaceFolderId());
+ table.put("name", newFolder.getName());
+ flashMessage = new FlashMessage("createFolderForFlash", table);
+
+ } catch (WorkspaceFolderException we) {
+ flashMessage = FlashMessage.getNoSuchWorkspaceFolderExsists("createFolderForFlash", parentFolderID);
+ } catch (UserException ue) {
+ flashMessage = FlashMessage.getNoSuchUserExists("createFolderForFlash", userID);
}
+ return flashMessage.serializeMessage();
+ }
- public void copyRootContent(WorkspaceFolder workspaceFolder,WorkspaceFolder targetWorkspaceFolder, Integer userID)
- throws UserException, LearningDesignException, UserAccessDeniedException, WorkspaceFolderException{
- User user = (User)baseDAO.find(User.class,userID);
- if(user==null)
- throw new UserException(messageService.getMessage("no.such.user",new Object[]{userID}));
-
- List designs = learningDesignDAO.getAllLearningDesignsInFolder(workspaceFolder.getWorkspaceFolderId());
- if(designs!=null && designs.size()!=0){
- Iterator iterator = designs.iterator();
- while(iterator.hasNext()){
- LearningDesign design = (LearningDesign)iterator.next();
- authoringService.copyLearningDesign(design,
- new Integer(LearningDesign.COPY_TYPE_NONE),
- user,targetWorkspaceFolder, false, null, null);
- }
+ private boolean ifNameExists(WorkspaceFolder targetFolder, String folderName) {
+ List folders = baseDAO.findByProperty(WorkspaceFolder.class, "parentWorkspaceFolder.workspaceFolderId",
+ targetFolder.getWorkspaceFolderId());
+ if ((folders != null) && (folders.size() != 0)) {
+ Iterator iterator = folders.iterator();
+ while (iterator.hasNext()) {
+ WorkspaceFolder folder = (WorkspaceFolder) iterator.next();
+ if (folder.getName().equalsIgnoreCase(folderName)) {
+ return true;
}
+ }
}
- public WorkspaceFolder createFolder(Integer parentFolderID, String name, Integer userID) throws UserException,WorkspaceFolderException{
- WorkspaceFolder parentFolder = (WorkspaceFolder)baseDAO.find(WorkspaceFolder.class,parentFolderID);
-
- if(parentFolder!=null){
-
- boolean nameExists = true;
- while(nameExists){
- nameExists = ifNameExists(parentFolder,name);
- if(nameExists)
- name =name + "C";
- else
- break;
- }
-
- //set type of the new workspaceFolder
- Integer newWorkspaceFolderType = parentFolder.getWorkspaceFolderType().equals(WorkspaceFolder.PUBLIC_SEQUENCES)
- ? WorkspaceFolder.PUBLIC_SEQUENCES
- : WorkspaceFolder.NORMAL;
-
- User user = (User)baseDAO.find(User.class,userID);
- if(user!=null){
- Workspace workspace = user.getWorkspace();
- WorkspaceFolder workspaceFolder = new WorkspaceFolder(name, workspace.getWorkspaceId(), parentFolder,
- userID, new Date(), new Date(), newWorkspaceFolderType);
- baseDAO.insert(workspaceFolder);
- return workspaceFolder;
- }else
- throw new UserException(messageService.getMessage("no.such.user",new Object[]{userID}));
-
- }else
- throw new WorkspaceFolderException(messageService.getMessage("no.such.workspace", new Object[]{parentFolderID}));
+ return false;
+ }
+
+ public void createSubFolders(WorkspaceFolder workspaceFolder, WorkspaceFolder newFolder, Integer userID)
+ throws UserException, WorkspaceFolderException {
+ Iterator subFoldersIterator = workspaceFolder.getChildWorkspaceFolders().iterator();
+ while (subFoldersIterator.hasNext()) {
+ WorkspaceFolder subFolder = (WorkspaceFolder) subFoldersIterator.next();
+ WorkspaceFolder newSubFolder = createFolder(newFolder.getWorkspaceFolderId(), subFolder.getName(), userID);
+ copyRootContent(subFolder, newSubFolder, userID);
+ if (subFolder.hasSubFolders()) {
+ createSubFolders(subFolder, newSubFolder, userID);
+ }
}
- /**
- * TODO For now assuming that the folder to be created would be of type NORMAL.
- * But the type has to be passed in the near future indicating what kind of
- * folder should be created (NORMAL/RUN SEQUENCES)
- * @see org.lamsfoundation.lams.authoring.service.IAuthoringService#createFolder(java.lang.Integer, java.lang.String, java.lang.Integer)
- */
- public String createFolderForFlash(Integer parentFolderID, String name, Integer userID)throws IOException{
- FlashMessage flashMessage = null;
- try{
- WorkspaceFolder newFolder = createFolder(parentFolderID,name,userID);
- Hashtable table = new Hashtable();
- table.put("folderID",newFolder.getWorkspaceFolderId());
- table.put("name",newFolder.getName());
- flashMessage = new FlashMessage("createFolderForFlash",table);
-
- }catch(WorkspaceFolderException we){
- flashMessage = FlashMessage.getNoSuchWorkspaceFolderExsists("createFolderForFlash",parentFolderID);
- }catch(UserException ue){
- flashMessage = FlashMessage.getNoSuchUserExists("createFolderForFlash",userID);
- }
- return flashMessage.serializeMessage();
- }
- private boolean ifNameExists(WorkspaceFolder targetFolder,String folderName){
- List folders = baseDAO.findByProperty(WorkspaceFolder.class,"parentWorkspaceFolder.workspaceFolderId",targetFolder.getWorkspaceFolderId());
- if(folders!=null && folders.size()!=0){
- Iterator iterator = folders.iterator();
- while(iterator.hasNext()){
- WorkspaceFolder folder = (WorkspaceFolder)iterator.next();
- if(folder.getName().equalsIgnoreCase(folderName))
- return true;
- }
+ }
+
+ /**
+ * This method deletes a LearningDesign
with given learningDesignID
provied the
+ * User
is authorized to do so.
+ *
+ * Note:
+ *
+ *
+ *
+ * - The
LearningDesign
should not be readOnly, indicating that a Lesson
has already
+ * been started
+ * - The given
LearningDesign
should not be acting as a parent to any other existing
+ * LearningDesign's
+ *
+ *
+ *
+ * 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
+ *
+ * @param learningDesignID
+ * The 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 {
+ User user = (User) baseDAO.find(User.class, userID);
+ FlashMessage flashMessage = null;
+ if (user != null) {
+ LearningDesign learningDesign = learningDesignDAO.getLearningDesignById(learningDesignID);
+
+ if (learningDesign != null) {
+ if (learningDesign.getUser().getUserId().equals(user.getUserId()) || isSysAuthorAdmin(user)) {
+ if (learningDesign.getReadOnly().booleanValue()) {
+ flashMessage = new FlashMessage(
+ IWorkspaceManagementService.MSG_KEY_DELETE,
+ messageService.getMessage("learningdesign.readonly", new Object[] { learningDesignID }),
+ FlashMessage.ERROR);
+ } else {
+ learningDesignDAO.delete(learningDesign);
+ flashMessage = new FlashMessage(IWorkspaceManagementService.MSG_KEY_DELETE,
+ messageService.getMessage("learningdesign.delete", new Object[] { learningDesignID }));
+ }
+ } else {
+ flashMessage = FlashMessage.getUserNotAuthorized(IWorkspaceManagementService.MSG_KEY_DELETE,
+ user.getUserId());
}
- return false;
+ } else {
+ flashMessage = FlashMessage.getNoSuchLearningDesignExists(IWorkspaceManagementService.MSG_KEY_DELETE,
+ learningDesignID);
+ }
+ } else {
+ flashMessage = FlashMessage.getNoSuchUserExists(IWorkspaceManagementService.MSG_KEY_DELETE,
+ user.getUserId());
}
- public void createSubFolders(WorkspaceFolder workspaceFolder, WorkspaceFolder newFolder, Integer userID) throws UserException, WorkspaceFolderException{
- Iterator subFoldersIterator = workspaceFolder.getChildWorkspaceFolders().iterator();
- while(subFoldersIterator.hasNext()){
- WorkspaceFolder subFolder = (WorkspaceFolder)subFoldersIterator.next();
- WorkspaceFolder newSubFolder = createFolder(newFolder.getWorkspaceFolderId(),subFolder.getName(),userID);
- copyRootContent(subFolder,newSubFolder,userID);
- if(subFolder.hasSubFolders())
- createSubFolders(subFolder,newSubFolder,userID);
+
+ return flashMessage.serializeMessage();
+ }
+
+ /**
+ * 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
+ *
+ *
+ * @param currentFolderID
+ * The WorkspaceFolder to be moved
+ * @param targetFolderID
+ * The WorkspaceFolder under which it has to be moved
+ * @param userID
+ * The User who has requested this opeartion
+ * @return String The acknowledgement/error message to be sent to FLASH
+ * @throws IOException
+ */
+ @Override
+ public String moveResource(Long resourceID, Integer targetFolderID, String resourceType, Integer userID)
+ throws IOException {
+ String errorMessage = null;
+
+ if ((resourceID == null) || (targetFolderID == null) || (resourceType == null) || (userID == null)) {
+ errorMessage = messageService.getMessage("move.resrouce.error.value.miss");
+ } else if (FolderContentDTO.DESIGN.equals(resourceType)) {
+ return moveLearningDesign(resourceID, targetFolderID, userID);
+ } else if (FolderContentDTO.FOLDER.equals(resourceType)) {
+ return moveFolder(new Integer(resourceID.intValue()), targetFolderID, userID);
+ } else if (FolderContentDTO.FILE.equals(resourceType)) {
+ // TODO implement delete file resource
+ errorMessage = messageService.getMessage("unsupport.move");
+ } else if (FolderContentDTO.LESSON.equals(resourceType)) {
+ // TODO implement delete lesson
+ errorMessage = messageService.getMessage("unsupport.move");
+ }
+
+ FlashMessage message = new FlashMessage(IWorkspaceManagementService.MSG_KEY_MOVE, messageService.getMessage(
+ "move.resource.error", new Object[] { errorMessage }), FlashMessage.ERROR);
+ return message.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 {
+ FlashMessage flashMessage = null;
+ try {
+ if (currentFolderID == null) {
+ throw new WorkspaceFolderException("Current folder ID is null");
+ }
+ if (targetFolderID == null) {
+ throw new WorkspaceFolderException("Target folder ID is null");
+ }
+ if (currentFolderID.equals(targetFolderID)) {
+ throw new WorkspaceFolderException("Current folder is the same as target folder");
+ }
+ if (isUserAuthorizedToModifyFolderContents(targetFolderID, userID)) {
+ WorkspaceFolder currentFolder = (WorkspaceFolder) baseDAO.find(WorkspaceFolder.class, currentFolderID);
+ if (currentFolder == null) {
+ throw new WorkspaceFolderException("No current folder found with ID: " + currentFolderID);
}
+ WorkspaceFolder targetFolder = (WorkspaceFolder) baseDAO.find(WorkspaceFolder.class, targetFolderID);
+ if (targetFolder == null) {
+ throw new WorkspaceFolderException("No target folder found with ID: " + targetFolderID);
+ }
+ currentFolder.setParentWorkspaceFolder(targetFolder);
+ baseDAO.update(currentFolder);
+
+ flashMessage = new FlashMessage(IWorkspaceManagementService.MSG_KEY_MOVE, targetFolderID);
+ } else {
+ flashMessage = FlashMessage.getUserNotAuthorized(IWorkspaceManagementService.MSG_KEY_MOVE, userID);
+ }
+ } catch (UserException ue) {
+ flashMessage = FlashMessage.getNoSuchUserExists(IWorkspaceManagementService.MSG_KEY_MOVE, userID);
+ } catch (WorkspaceFolderException we) {
+ log.error(we);
+ flashMessage = FlashMessage.getNoSuchWorkspaceFolderExsists(IWorkspaceManagementService.MSG_KEY_MOVE,
+ targetFolderID);
}
- /**
- * This method deletes a LearningDesign
with given learningDesignID
- * provied the User
is authorized to do so.
- * Note:
- *
- * - The
LearningDesign
should not be readOnly,
- * indicating that a Lesson
has already been started
- *
- * - The given
LearningDesign
should not be acting as a
- * parent to any other existing LearningDesign's
- *
- *
- * 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
- *
- * @param learningDesignID The 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{
- User user = (User)baseDAO.find(User.class,userID);
- FlashMessage flashMessage = null;
- if(user!=null){
- LearningDesign learningDesign = learningDesignDAO.getLearningDesignById(learningDesignID);
-
- if(learningDesign!=null){
- if(learningDesign.getUser().getUserId().equals(user.getUserId()) || isSysAuthorAdmin(user)){
- if(learningDesign.getReadOnly().booleanValue()){
- flashMessage = new FlashMessage(MSG_KEY_DELETE,
- messageService.getMessage("learningdesign.readonly",new Object[]{learningDesignID}),
- FlashMessage.ERROR);
- }else{
- learningDesignDAO.delete(learningDesign);
- flashMessage = new FlashMessage(MSG_KEY_DELETE,messageService.getMessage("learningdesign.delete",new Object[]{learningDesignID}));
- }
- }else
- flashMessage = FlashMessage.getUserNotAuthorized(MSG_KEY_DELETE,user.getUserId());
- }else
- flashMessage = FlashMessage.getNoSuchLearningDesignExists(MSG_KEY_DELETE,learningDesignID);
- }else
- flashMessage = FlashMessage.getNoSuchUserExists(MSG_KEY_DELETE,user.getUserId());
-
- return flashMessage.serializeMessage();
+ return flashMessage.serializeMessage();
+ }
+
+ /** Set up the content repository - create the workspace and the credentials. */
+ private void configureContentRepository(ICredentials cred) throws RepositoryCheckedException {
+ try {
+ repositoryService.createCredentials(cred);
+ repositoryService.addWorkspace(cred, IWorkspaceManagementService.REPOSITORY_WORKSPACE);
+ } catch (ItemExistsException ie) {
+ log.warn("Tried to configure repository but it " + " appears to be already configured." + "Workspace name "
+ + IWorkspaceManagementService.REPOSITORY_WORKSPACE
+ + ". Exception thrown by repository being ignored. ", ie);
+ } catch (RepositoryCheckedException e) {
+ log.error(
+ "Error occured while trying to configure repository." + "Workspace name "
+ + IWorkspaceManagementService.REPOSITORY_WORKSPACE + " Unable to recover from error: "
+ + e.getMessage(), e);
+ throw e;
}
- /**
- * 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
- *
- * @param currentFolderID The WorkspaceFolder to be moved
- * @param targetFolderID The WorkspaceFolder under which it has to be moved
- * @param userID The User who has requested this opeartion
- * @return String The acknowledgement/error message to be sent to FLASH
- * @throws IOException
- */
- public String moveResource(Long resourceID,Integer targetFolderID, String resourceType, Integer userID)throws IOException{
- String errorMessage = null;
+ }
- if ( resourceID == null || targetFolderID == null || resourceType == null || userID== null ) {
- errorMessage = messageService.getMessage("move.resrouce.error.value.miss");
- } else if ( FolderContentDTO.DESIGN.equals(resourceType) ) {
- return moveLearningDesign(resourceID, targetFolderID, userID);
- } else if ( FolderContentDTO.FOLDER.equals(resourceType) ) {
- return moveFolder(new Integer(resourceID.intValue()), targetFolderID, userID);
- } else if ( FolderContentDTO.FILE.equals(resourceType) ) {
- // TODO implement delete file resource
- errorMessage = messageService.getMessage("unsupport.move");
- } else if ( FolderContentDTO.LESSON.equals(resourceType) ) {
- // TODO implement delete lesson
- errorMessage = messageService.getMessage("unsupport.move");
- }
-
- FlashMessage message = new FlashMessage(MSG_KEY_MOVE,
- messageService.getMessage("move.resource.error",new Object[]{errorMessage}),
- FlashMessage.ERROR);
- return message.serializeMessage();
-
+ /**
+ * This method verifies the credentials of the Workspace Manager and gives him the Ticket to login and access the
+ * Content Repository. A valid ticket is needed in order to access the content from the repository. This method
+ * would be called evertime the user(Workspace Manager) receives a request to get the contents of the Folder or to
+ * add/update a file into the WorkspaceFodler
(Repository).
+ *
+ * If the workspace/credential hasn't been set up, then it will be set up automatically.
+ *
+ * @return ITicket The ticket for repostory access
+ */
+ private ITicket getRepositoryLoginTicket() {
+ ICredentials credentials = new SimpleCredentials(IWorkspaceManagementService.REPOSITORY_USERNAME,
+ IWorkspaceManagementService.REPOSITORY_PASSWORD.toCharArray());
+ ITicket ticket = null;
+
+ try {
+ try {
+ ticket = repositoryService.login(credentials, IWorkspaceManagementService.REPOSITORY_WORKSPACE);
+ } catch (WorkspaceNotFoundException we) {
+ log.error("Content Repository workspace " + IWorkspaceManagementService.REPOSITORY_WORKSPACE
+ + " not configured. Attempting to configure now.");
+ configureContentRepository(credentials);
+ ticket = repositoryService.login(credentials, IWorkspaceManagementService.REPOSITORY_WORKSPACE);
+ }
+ } catch (RepositoryCheckedException e) {
+ log.error("Unable to get ticket for workspace " + IWorkspaceManagementService.REPOSITORY_WORKSPACE, e);
+ return null;
}
+ return ticket;
+ }
- /**
- * (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{
- FlashMessage flashMessage = null;
- try{
- if(isUserAuthorizedToModifyFolderContents(targetFolderID,userID)){
- WorkspaceFolder currentFolder = (WorkspaceFolder)baseDAO.find(WorkspaceFolder.class,currentFolderID);
- if(currentFolder!=null){
- if (currentFolderID != targetFolderID) {
- WorkspaceFolder targetFolder = (WorkspaceFolder)baseDAO.find(WorkspaceFolder.class,targetFolderID);
- currentFolder.setParentWorkspaceFolder(targetFolder);
- baseDAO.update(currentFolder);
- } else {
- // if making a folder it's own parent, do nothing
- }
- flashMessage = new FlashMessage(MSG_KEY_MOVE, targetFolderID);
- }else
- throw new WorkspaceFolderException();
- }else
- flashMessage = FlashMessage.getUserNotAuthorized(MSG_KEY_MOVE, userID);
- }catch(UserException ue){
- flashMessage = FlashMessage.getNoSuchUserExists(MSG_KEY_MOVE, userID);
- }catch(WorkspaceFolderException we){
- flashMessage = FlashMessage.getNoSuchWorkspaceFolderExsists(MSG_KEY_MOVE,targetFolderID);
+ /**
+ * @see org.lamsfoundation.lams.workspace.service.IWorkspaceManagementService#createWorkspaceFolderContent(java.lang.Integer,
+ * java.lang.String, java.lang.String, java.lang.Integer, java.lang.String, java.lang.String)
+ */
+ @Override
+ public String createWorkspaceFolderContent(Integer contentTypeID, String name, String description,
+ Integer workspaceFolderID, String mimeType, String path) throws Exception {
+ FlashMessage flashMessage = null;
+
+ // TODO add some validation so that a non-unique name doesn't result in an index violation
+ // bit hard for the user to understand.
+
+ WorkspaceFolder workspaceFolder = (WorkspaceFolder) baseDAO.find(WorkspaceFolder.class, workspaceFolderID);
+ if (workspaceFolder != null) {
+ if (!contentAlreadyExists(workspaceFolder, name, mimeType)) {
+ WorkspaceFolderContent workspaceFolderContent = new WorkspaceFolderContent(contentTypeID, name,
+ description, new Date(), new Date(), mimeType, workspaceFolder);
+ baseDAO.insert(workspaceFolderContent);
+
+ try {
+ InputStream stream = new FileInputStream(path);
+ NodeKey nodeKey = addFileToRepository(stream, name, mimeType);
+ workspaceFolderContent.setUuid(nodeKey.getUuid());
+ workspaceFolderContent.setVersionID(nodeKey.getVersion());
+ baseDAO.update(workspaceFolderContent);
+
+ UpdateContentDTO contentDTO = new UpdateContentDTO(nodeKey.getUuid(), nodeKey.getVersion(),
+ workspaceFolderContent.getFolderContentID());
+ flashMessage = new FlashMessage(IWorkspaceManagementService.MSG_KEY_CREATE_WKF_CONTENT, contentDTO);
+
+ } catch (AccessDeniedException ae) {
+ flashMessage = new FlashMessage(IWorkspaceManagementService.MSG_KEY_CREATE_WKF_CONTENT,
+ messageService.getMessage("creating.workspace.folder.error",
+ new Object[] { ae.getMessage() }), FlashMessage.CRITICAL_ERROR);
+ } catch (FileException fe) {
+ flashMessage = new FlashMessage(IWorkspaceManagementService.MSG_KEY_CREATE_WKF_CONTENT,
+ messageService.getMessage("creating.workspace.folder.error",
+ new Object[] { fe.getMessage() }), FlashMessage.CRITICAL_ERROR);
+
+ } catch (InvalidParameterException ip) {
+ flashMessage = new FlashMessage(IWorkspaceManagementService.MSG_KEY_CREATE_WKF_CONTENT,
+ messageService.getMessage("creating.workspace.folder.error",
+ new Object[] { ip.getMessage() }), FlashMessage.CRITICAL_ERROR);
}
- return flashMessage.serializeMessage();
+ } else {
+ flashMessage = new FlashMessage(IWorkspaceManagementService.MSG_KEY_CREATE_WKF_CONTENT,
+ messageService.getMessage("resource.already.exist", new Object[] { name, workspaceFolderID }),
+ FlashMessage.ERROR);
+ }
+ } else {
+ flashMessage = FlashMessage.getNoSuchWorkspaceFolderExsists(
+ IWorkspaceManagementService.MSG_KEY_CREATE_WKF_CONTENT, workspaceFolderID);
}
-
- /** Set up the content repository - create the workspace and the credentials. */
- private void configureContentRepository(ICredentials cred) throws RepositoryCheckedException {
- try {
- repositoryService.createCredentials(cred);
- repositoryService.addWorkspace(cred,IWorkspaceManagementService.REPOSITORY_WORKSPACE);
- } catch (ItemExistsException ie) {
- log.warn("Tried to configure repository but it "
- +" appears to be already configured."
- +"Workspace name "+IWorkspaceManagementService.REPOSITORY_WORKSPACE
- +". Exception thrown by repository being ignored. ", ie);
- } catch (RepositoryCheckedException e) {
- log.error("Error occured while trying to configure repository."
- +"Workspace name "+IWorkspaceManagementService.REPOSITORY_WORKSPACE
- +" Unable to recover from error: "+e.getMessage(), e);
- throw e;
- }
+
+ return flashMessage.serializeMessage();
+ }
+
+ /**
+ * Checks whether the content already exists. It will just check the name and mime type of the content that is to be
+ * created. If there exists a content with the same mime type and name, then it will return true, otherwise return
+ * false.
+ *
+ * @param workspaceFolder
+ * @param name
+ * @param mimeType
+ * @return
+ */
+ private boolean contentAlreadyExists(WorkspaceFolder workspaceFolder, String name, String mimeType) {
+ Set contentsInFolder = workspaceFolder.getFolderContent();
+ Iterator i = contentsInFolder.iterator();
+ while (i.hasNext()) {
+ WorkspaceFolderContent existingFolderContent = (WorkspaceFolderContent) i.next();
+ if (existingFolderContent.getMimeType().equalsIgnoreCase(mimeType)
+ && existingFolderContent.getName().equalsIgnoreCase(name)) {
+ log.error("Content already exists in the db");
+ return true;
}
+ }
+ return false;
+ }
- /**
- * This method verifies the credentials of the Workspace Manager
- * and gives him the Ticket to login and access the Content Repository.
- * A valid ticket is needed in order to access the content from the repository.
- * This method would be called evertime the user(Workspace Manager) receives
- * a request to get the contents of the Folder or to add/update a file into
- * the WorkspaceFodler
(Repository).
- *
- * If the workspace/credential hasn't been set up, then it will be set up automatically.
- *
- * @return ITicket The ticket for repostory access
- */
- private ITicket getRepositoryLoginTicket(){
- ICredentials credentials = new SimpleCredentials(IWorkspaceManagementService.REPOSITORY_USERNAME,
- IWorkspaceManagementService.REPOSITORY_PASSWORD.toCharArray());
- ITicket ticket = null;
-
- try{
- try {
- ticket = repositoryService.login(credentials,IWorkspaceManagementService.REPOSITORY_WORKSPACE);
- } catch(WorkspaceNotFoundException we){
- log.error("Content Repository workspace "+IWorkspaceManagementService.REPOSITORY_WORKSPACE
- +" not configured. Attempting to configure now.");
- configureContentRepository(credentials);
- ticket = repositoryService.login(credentials,IWorkspaceManagementService.REPOSITORY_WORKSPACE);
- }
- } catch ( RepositoryCheckedException e ) {
- log.error("Unable to get ticket for workspace "+IWorkspaceManagementService.REPOSITORY_WORKSPACE,e);
- return null;
- }
- return ticket;
+ /**
+ * (non-Javadoc)
+ *
+ * @see org.lamsfoundation.lams.workspace.service.IWorkspaceManagementService#updateWorkspaceFolderContent(java.lang.Long,
+ * java.io.InputStream)
+ */
+ @Override
+ public String updateWorkspaceFolderContent(Long folderContentID, String path) throws Exception {
+ FlashMessage flashMessage = null;
+ InputStream stream = new FileInputStream(path);
+ WorkspaceFolderContent workspaceFolderContent = (WorkspaceFolderContent) baseDAO.find(
+ WorkspaceFolderContent.class, folderContentID);
+ if (workspaceFolderContent != null) {
+ NodeKey nodeKey = updateFileInRepository(workspaceFolderContent, stream);
+ UpdateContentDTO contentDTO = new UpdateContentDTO(nodeKey.getUuid(), nodeKey.getVersion(), folderContentID);
+ flashMessage = new FlashMessage(IWorkspaceManagementService.MSG_KEY_UPDATE_WKF_CONTENT, contentDTO);
+ } else {
+ flashMessage = FlashMessage.getNoSuchWorkspaceFolderContentExsists(
+ IWorkspaceManagementService.MSG_KEY_UPDATE_WKF_CONTENT, folderContentID);
}
-
- /**
- * @see org.lamsfoundation.lams.workspace.service.IWorkspaceManagementService#createWorkspaceFolderContent(java.lang.Integer, java.lang.String, java.lang.String, java.lang.Integer, java.lang.String, java.lang.String)
- */
- public String createWorkspaceFolderContent(Integer contentTypeID,String name,String description,Integer workspaceFolderID, String mimeType, String path) throws Exception{
- FlashMessage flashMessage = null;
+ return flashMessage.serializeMessage();
+ }
- // TODO add some validation so that a non-unique name doesn't result in an index violation
- // bit hard for the user to understand.
-
- WorkspaceFolder workspaceFolder = (WorkspaceFolder)baseDAO.find(WorkspaceFolder.class,workspaceFolderID);
- if(workspaceFolder!=null){
- if (!contentAlreadyExists(workspaceFolder, name, mimeType))
- {
- WorkspaceFolderContent workspaceFolderContent = new WorkspaceFolderContent(contentTypeID,name,description,new Date(),new Date(),mimeType,workspaceFolder);
- baseDAO.insert(workspaceFolderContent);
-
-
-
- try{
- InputStream stream = new FileInputStream(path);
- NodeKey nodeKey = addFileToRepository(stream,name,mimeType);
- workspaceFolderContent.setUuid(nodeKey.getUuid());
- workspaceFolderContent.setVersionID(nodeKey.getVersion());
- baseDAO.update(workspaceFolderContent);
-
- UpdateContentDTO contentDTO = new UpdateContentDTO(nodeKey.getUuid(), nodeKey.getVersion(),workspaceFolderContent.getFolderContentID());
- flashMessage = new FlashMessage(MSG_KEY_CREATE_WKF_CONTENT,contentDTO);
-
- }catch(AccessDeniedException ae){
- flashMessage = new FlashMessage(MSG_KEY_CREATE_WKF_CONTENT,
- messageService.getMessage("creating.workspace.folder.error",new Object[]{ae.getMessage()}),
- FlashMessage.CRITICAL_ERROR);
- }catch(FileException fe){
- flashMessage = new FlashMessage(MSG_KEY_CREATE_WKF_CONTENT,
- messageService.getMessage("creating.workspace.folder.error",new Object[]{fe.getMessage()}),
- FlashMessage.CRITICAL_ERROR);
-
- }catch(InvalidParameterException ip){
- flashMessage = new FlashMessage(MSG_KEY_CREATE_WKF_CONTENT,
- messageService.getMessage("creating.workspace.folder.error",new Object[]{ip.getMessage()}),
- FlashMessage.CRITICAL_ERROR);
- }
- }
- else
- {
- flashMessage = new FlashMessage(MSG_KEY_CREATE_WKF_CONTENT,
- messageService.getMessage("resource.already.exist",new Object[]{name,workspaceFolderID}),
- FlashMessage.ERROR);
- }
+ /**
+ * This method is called everytime a new content has to be added to the repository. In order to do so first of all a
+ * valid ticket is obtained from the Repository hence authenticating the user(WorkspaceManager) and then the
+ * corresponding file is added to the repository.
+ *
+ * @param stream
+ * The InputStream
representing the data to be added
+ * @param fileName
+ * The name of the file being added
+ * @param mimeType
+ * The MIME type of the file (eg. TXT, DOC, GIF etc)
+ * @return NodeKey Represents the two part key - UUID and Version.
+ * @throws AccessDeniedException
+ * @throws FileException
+ * @throws InvalidParameterException
+ */
+ private NodeKey addFileToRepository(InputStream stream, String fileName, String mimeType)
+ throws AccessDeniedException, FileException, InvalidParameterException {
+ ITicket ticket = getRepositoryLoginTicket();
+ NodeKey nodeKey = repositoryService.addFileItem(ticket, stream, fileName, mimeType, null);
+ return nodeKey;
+ }
+
+ /**
+ * This method is called everytime some content has to be updated into the repository. In order to do so first of
+ * all a valid ticket is obtained from the Repository hence authenticating the user(WorkspaceManager) and then the
+ * corresponding file is updated to the repository.
+ *
+ * @param workspaceFolderContent
+ * The content to be updated
+ * @param stream
+ * stream The InputStream
representing the data to be updated
+ * @return NodeKey Represents the two part key - UUID and Version.
+ * @throws Exception
+ */
+ private NodeKey updateFileInRepository(WorkspaceFolderContent workspaceFolderContent, InputStream stream)
+ throws Exception {
+ ITicket ticket = getRepositoryLoginTicket();
+ NodeKey nodeKey = repositoryService.updateFileItem(ticket, workspaceFolderContent.getUuid(),
+ workspaceFolderContent.getName(), stream, workspaceFolderContent.getMimeType(), null);
+ workspaceFolderContent.setUuid(nodeKey.getUuid());
+ workspaceFolderContent.setVersionID(nodeKey.getVersion());
+ baseDAO.update(workspaceFolderContent);
+ return nodeKey;
+ }
+
+ /**
+ * (non-Javadoc)
+ *
+ * @see org.lamsfoundation.lams.workspace.service.IWorkspaceManagementService#deleteContentWithVersion(java.lang.Long,
+ * java.lang.Long, java.lang.Long)
+ */
+ @Override
+ public String deleteContentWithVersion(Long uuid, Long versionToBeDeleted, Long folderContentID) throws Exception {
+ FlashMessage flashMessage = null;
+ WorkspaceFolderContent workspaceFolderContent = (WorkspaceFolderContent) baseDAO.find(
+ WorkspaceFolderContent.class, folderContentID);
+ if (workspaceFolderContent != null) {
+ Long databaseVersion = workspaceFolderContent.getVersionID();
+
+ ITicket ticket = getRepositoryLoginTicket();
+ String files[] = null;
+ try {
+ files = repositoryService.deleteVersion(ticket, uuid, versionToBeDeleted);
+ if ((files != null) && (files.length > 0)) {
+ String error = "Trying to delete content uuid=" + uuid + " unable to delete files ";
+ for (String filename : files) {
+ error = error + " " + filename;
+ }
+ log.warn(error);
}
- else
- flashMessage = FlashMessage.getNoSuchWorkspaceFolderExsists(MSG_KEY_CREATE_WKF_CONTENT,workspaceFolderID);
-
+ } catch (ItemNotFoundException ie) {
+ flashMessage = new FlashMessage(IWorkspaceManagementService.MSG_KEY_DELETE_VERSION,
+ messageService.getMessage("no.such.content",
+ new Object[] { versionToBeDeleted, folderContentID }), FlashMessage.ERROR);
return flashMessage.serializeMessage();
- }
- /**
- * Checks whether the content already exists. It will just check the name and mime type
- * of the content that is to be created.
- * If there exists a content with the same mime type and name, then it will return true,
- * otherwise return false.
- * @param workspaceFolder
- * @param name
- * @param mimeType
- * @return
- */
- private boolean contentAlreadyExists(WorkspaceFolder workspaceFolder, String name, String mimeType)
- {
- Set contentsInFolder = workspaceFolder.getFolderContent();
- Iterator i = contentsInFolder.iterator();
- while(i.hasNext())
- {
- WorkspaceFolderContent existingFolderContent = (WorkspaceFolderContent)i.next();
- if (existingFolderContent.getMimeType().equalsIgnoreCase(mimeType) && existingFolderContent.getName().equalsIgnoreCase(name))
- {
- log.error("Content already exists in the db");
- return true;
- }
+ }
+
+ /*
+ * ItemNotFoundException exception will be thrown if the version deleted
+ * above was the only version available in the repository. If that is the
+ * case the corresponding record from the database should also be deleted
+ *
+ * If ItemNotFoundException is not thrown that means there are some other
+ * versions of the content that are available, and it returns the latest
+ * version.
+ *
+ * If databaseVersion is same as versionToBeDeleted we update the database with
+ * the next available latest version , IF NOT no changes are made to the
+ * database.
+ */
+
+ try {
+ IVersionedNode latestAvailableNode = repositoryService.getFileItem(ticket, uuid, null);
+ Long latestAvailableVersion = latestAvailableNode.getVersion();
+ if (databaseVersion.equals(versionToBeDeleted)) {
+ workspaceFolderContent.setVersionID(latestAvailableVersion);
+ baseDAO.update(workspaceFolderContent);
}
- return false;
+ flashMessage = new FlashMessage(IWorkspaceManagementService.MSG_KEY_DELETE_VERSION,
+ messageService.getMessage("content.delete.success"));
+ } catch (ItemNotFoundException ie) {
+ baseDAO.delete(workspaceFolderContent);
+ flashMessage = new FlashMessage(IWorkspaceManagementService.MSG_KEY_DELETE_VERSION,
+ messageService.getMessage("content.delete.success"));
+ }
+ } else {
+ flashMessage = new FlashMessage(IWorkspaceManagementService.MSG_KEY_DELETE_VERSION,
+ messageService.getMessage("content.delete.success"));
}
-
- /**
- * (non-Javadoc)
- * @see org.lamsfoundation.lams.workspace.service.IWorkspaceManagementService#updateWorkspaceFolderContent(java.lang.Long, java.io.InputStream)
- */
- public String updateWorkspaceFolderContent(Long folderContentID,String path)throws Exception{
- FlashMessage flashMessage = null;
- InputStream stream = new FileInputStream(path);
- WorkspaceFolderContent workspaceFolderContent = (WorkspaceFolderContent)baseDAO.find(WorkspaceFolderContent.class,folderContentID);
- if(workspaceFolderContent!=null){
- NodeKey nodeKey = updateFileInRepository(workspaceFolderContent,stream);
- UpdateContentDTO contentDTO = new UpdateContentDTO(nodeKey.getUuid(), nodeKey.getVersion(),folderContentID);
- flashMessage = new FlashMessage(MSG_KEY_UPDATE_WKF_CONTENT,contentDTO);
- }else
- flashMessage = FlashMessage.getNoSuchWorkspaceFolderContentExsists(MSG_KEY_UPDATE_WKF_CONTENT,folderContentID);
- return flashMessage.serializeMessage();
+ return flashMessage.serializeMessage();
+ }
+
+ /**
+ * This method deletes all versions of the given content (FILE/PACKAGE) fom the repository.
+ *
+ * @param folderContentID
+ * The content to be deleted
+ * @return String Acknowledgement/error message in WDDX format for FLASH
+ * @throws Exception
+ */
+ public String deleteWorkspaceFolderContent(Long folderContentID) throws IOException {
+ FlashMessage flashMessage = null;
+ WorkspaceFolderContent workspaceFolderContent = (WorkspaceFolderContent) baseDAO.find(
+ WorkspaceFolderContent.class, folderContentID);
+ if (workspaceFolderContent != null) {
+ baseDAO.delete(workspaceFolderContent);
+ flashMessage = new FlashMessage(IWorkspaceManagementService.MSG_KEY_DELETE, "Content deleted");
+ } else {
+ flashMessage = FlashMessage.getNoSuchWorkspaceFolderContentExsists(
+ IWorkspaceManagementService.MSG_KEY_DELETE, folderContentID);
}
-
- /**
- * This method is called everytime a new content has to be
- * added to the repository. In order to do so first of all
- * a valid ticket is obtained from the Repository hence
- * authenticating the user(WorkspaceManager) and then
- * the corresponding file is added to the repository.
- *
- * @param stream The InputStream
representing the data to be added
- * @param fileName The name of the file being added
- * @param mimeType The MIME type of the file (eg. TXT, DOC, GIF etc)
- * @return NodeKey Represents the two part key - UUID and Version.
- * @throws AccessDeniedException
- * @throws FileException
- * @throws InvalidParameterException
- */
- private NodeKey addFileToRepository(InputStream stream, String fileName, String mimeType)throws AccessDeniedException,
- FileException,InvalidParameterException{
- ITicket ticket = getRepositoryLoginTicket();
- NodeKey nodeKey = repositoryService.addFileItem(ticket,stream,fileName,mimeType,null);
- return nodeKey;
+
+ return flashMessage.serializeMessage();
+
+ }
+
+ /**
+ * TODO This method returns the contents of the given folder from the repository. As of now I am assuming that a
+ * folder contains only FILES and not PACKAGES. This method would be modified in the near future to return a list of
+ * PACKAGES contained as well.
+ *
+ * For every file contained within the given WorkspaceFolder
this method also returns a list of all its
+ * availabe versions.
+ *
+ * @param workspaceFolderID
+ * The WorkspaceFolder
whose contents have been 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(WorkspaceFolder workspaceFolder, Integer permissions,
+ User user) throws RepositoryCheckedException {
+ log.debug("Trying to get contents from folder " + workspaceFolder.getName());
+ Set children = workspaceFolder.getChildWorkspaceFolders();
+ if (children != null) {
+ log.debug(children.size() + " child workspace folders");
}
- /**
- * This method is called everytime some content has to be
- * updated into the repository. In order to do so first of all
- * a valid ticket is obtained from the Repository hence
- * authenticating the user(WorkspaceManager) and then
- * the corresponding file is updated to the repository.
- *
- * @param workspaceFolderContent The content to be updated
- * @param stream stream The InputStream
representing the data to be updated
- * @return NodeKey Represents the two part key - UUID and Version.
- * @throws Exception
- */
- private NodeKey updateFileInRepository(WorkspaceFolderContent workspaceFolderContent,
- InputStream stream)throws Exception{
- ITicket ticket = getRepositoryLoginTicket();
- NodeKey nodeKey = repositoryService.updateFileItem(ticket,workspaceFolderContent.getUuid(),
- workspaceFolderContent.getName(),
- stream,workspaceFolderContent.getMimeType(),null);
- workspaceFolderContent.setUuid(nodeKey.getUuid());
- workspaceFolderContent.setVersionID(nodeKey.getVersion());
- baseDAO.update(workspaceFolderContent);
- return nodeKey;
+ Set content = workspaceFolder.getFolderContent();
+ if ((content == null) || (content.size() == 0)) {
+ return null;
+ } else {
+ ITicket ticket = getRepositoryLoginTicket();
+ Vector repositoryContent = new Vector();
+ Iterator contentIterator = content.iterator();
+ while (contentIterator.hasNext()) {
+ WorkspaceFolderContent workspaceFolderContent = (WorkspaceFolderContent) contentIterator.next();
+ SortedSet set = repositoryService.getVersionHistory(ticket, workspaceFolderContent.getUuid());
+ repositoryContent.add(new FolderContentDTO(permissions, workspaceFolderContent, set, user));
+ }
+ return repositoryContent;
}
- /**
- * (non-Javadoc)
- * @see org.lamsfoundation.lams.workspace.service.IWorkspaceManagementService#deleteContentWithVersion(java.lang.Long, java.lang.Long, java.lang.Long)
- */
- public String deleteContentWithVersion(Long uuid, Long versionToBeDeleted,Long folderContentID)throws Exception{
- FlashMessage flashMessage = null;
- WorkspaceFolderContent workspaceFolderContent = (WorkspaceFolderContent)baseDAO.find(WorkspaceFolderContent.class,folderContentID);
- if (workspaceFolderContent != null)
- {
- Long databaseVersion = workspaceFolderContent.getVersionID();
-
- ITicket ticket = getRepositoryLoginTicket();
- String files[]=null;
- try{
- files = repositoryService.deleteVersion(ticket,uuid,versionToBeDeleted);
- if ( files != null && files.length > 0 ) {
- String error = "Trying to delete content uuid="+uuid+" unable to delete files ";
- for ( String filename : files ) {
- error = error + " " + filename;
+ }
+
+ /**
+ * (non-Javadoc)
+ *
+ * @see org.lamsfoundation.lams.workspace.service.IWorkspaceManagementService#getAccessibleOrganisationWorkspaceFolders(java.lang.Integer)
+ */
+ @Override
+ public Vector getAccessibleOrganisationWorkspaceFolders(Integer userID) throws IOException {
+ log.debug("User - " + userID);
+ User user = (User) userMgmtService.findById(User.class, userID);
+ return getAccessibleOrganisationWorkspaceFolders(user);
+ }
+
+ /**
+ * (non-Javadoc)
+ *
+ * @see org.lamsfoundation.lams.workspace.service.IWorkspaceManagementService#getAccessibleOrganisationWorkspaceFolders(java.lang.Integer)
+ */
+ @Override
+ public Vector getAccessibleOrganisationWorkspaceFolders(User user) throws IOException {
+ Vector folders = new Vector();
+
+ if (user != null) {
+ // Get a list of organisations of which the given user is a member
+ Set userMemberships = user.getUserOrganisations();
+ if (userMemberships != null) {
+ Iterator memberships = userMemberships.iterator();
+ while (memberships.hasNext()) {
+ UserOrganisation member = (UserOrganisation) memberships.next();
+
+ // Check if the organisation has been removed or hidden
+ // Continue to add folder if organisation is active or archived
+ Organisation org = member.getOrganisation();
+
+ if (org != null) {
+ Integer orgStateId = org.getOrganisationState().getOrganisationStateId();
+ if (!(OrganisationState.HIDDEN.equals(orgStateId) || OrganisationState.REMOVED
+ .equals(orgStateId))) {
+
+ // Only courses have folders - classes don't!
+ Workspace workspace = org.getWorkspace();
+
+ if (workspace != null) {
+ // TODO get all the folders for the workspace but only return those that are at the
+ // "top" of the hierarchy
+ // for this user. Not needed at present but will be needed when we have multiple folders
+ // in a user's workspace (ie shared folders)
+ WorkspaceFolder orgFolder = workspace.getDefaultFolder();
+ if (orgFolder != null) {
+ // Check if the user has write access, which is available
+ // only if the user has an AUTHOR, TEACHER or STAFF role. If
+ // user has access add that folder to the list.
+ Set roles = member.getUserOrganisationRoles();
+ if (hasWriteAccess(roles)) {
+ Integer permission = getPermissions(orgFolder, user);
+ if (!permission.equals(WorkspaceFolder.NO_ACCESS)) {
+ folders.add(new FolderContentDTO(orgFolder, permission, user));
}
- log.warn(error);
+ }
}
- }catch(ItemNotFoundException ie){
- flashMessage = new FlashMessage(MSG_KEY_DELETE_VERSION,
- messageService.getMessage("no.such.content",new Object[]{versionToBeDeleted,folderContentID}),
- FlashMessage.ERROR);
- return flashMessage.serializeMessage();
+ }
}
-
-
- /*
- * ItemNotFoundException exception will be thrown if the version deleted
- * above was the only version available in the repository. If that is the
- * case the corresponding record from the database should also be deleted
- *
- * If ItemNotFoundException is not thrown that means there are some other
- * versions of the content that are available, and it returns the latest
- * version.
- *
- * If databaseVersion is same as versionToBeDeleted we update the database with
- * the next available latest version , IF NOT no changes are made to the
- * database.
- */
-
- try{
- IVersionedNode latestAvailableNode = repositoryService.getFileItem(ticket,uuid,null);
- Long latestAvailableVersion = latestAvailableNode.getVersion();
- if(databaseVersion.equals(versionToBeDeleted)){
- workspaceFolderContent.setVersionID(latestAvailableVersion);
- baseDAO.update(workspaceFolderContent);
- }
- flashMessage = new FlashMessage(MSG_KEY_DELETE_VERSION,messageService.getMessage("content.delete.success"));
- }catch(ItemNotFoundException ie){
- baseDAO.delete(workspaceFolderContent);
- flashMessage = new FlashMessage(MSG_KEY_DELETE_VERSION,messageService.getMessage("content.delete.success"));
- }
+ }
+
}
- else
- {
- flashMessage = new FlashMessage(MSG_KEY_DELETE_VERSION,messageService.getMessage("content.delete.success"));
- }
- return flashMessage.serializeMessage();
+ } else {
+ log.warn("getAccessibleOrganisationWorkspaceFolders: Trying to get user memberships for user "
+ + user.getUserId() + ". User doesn't belong to any organisations. Returning no folders.");
+ }
+ } else {
+ log.warn("getAccessibleOrganisationWorkspaceFolders: User " + user.getUserId()
+ + " does not exist. Returning no folders.");
}
-
- /**
- * This method deletes all versions of the given content (FILE/PACKAGE)
- * fom the repository.
- *
- * @param folderContentID The content to be deleted
- * @return String Acknowledgement/error message in WDDX format for FLASH
- * @throws Exception
- */
- public String deleteWorkspaceFolderContent(Long folderContentID) throws IOException {
- FlashMessage flashMessage = null;
- WorkspaceFolderContent workspaceFolderContent = (WorkspaceFolderContent)baseDAO.find(WorkspaceFolderContent.class,folderContentID);
- if(workspaceFolderContent!=null){
- baseDAO.delete(workspaceFolderContent);
- flashMessage = new FlashMessage(MSG_KEY_DELETE,"Content deleted");
- }else
- flashMessage = FlashMessage.getNoSuchWorkspaceFolderContentExsists(MSG_KEY_DELETE,folderContentID);
-
- return flashMessage.serializeMessage();
-
- }
- /**
- * TODO
- * This method returns the contents of the given folder from the
- * repository. As of now I am assuming that a folder contains only
- * FILES and not PACKAGES. This method would be modified in the near
- * future to return a list of PACKAGES contained as well.
- *
- * For every file contained within the given WorkspaceFolder
- * this method also returns a list of all its availabe versions.
- *
- * @param workspaceFolderID The WorkspaceFolder
whose contents have been
- * 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(WorkspaceFolder workspaceFolder, Integer permissions, User user) throws RepositoryCheckedException{
- log.debug("Trying to get contents from folder "+ workspaceFolder.getName());
- Set children = workspaceFolder.getChildWorkspaceFolders();
- if(children!=null){
- log.debug(children.size()+" child workspace folders");
+
+ // sort folders by their names
+ Collections.sort(folders);
+
+ return folders;
+ }
+
+ /**
+ * (non-Javadoc)
+ *
+ * @see org.lamsfoundation.lams.workspace.service.IWorkspaceManagementService#getUserWorkspaceFolder(java.lang.Integer)
+ */
+ @Override
+ public FolderContentDTO getUserWorkspaceFolder(Integer userID) throws IOException {
+ User user = (User) baseDAO.find(User.class, userID);
+
+ if (user != null) {
+ // TODO get all the folders for the workspace but only return those that are at the "top" of the hierarchy
+ // for this user. Not needed at present but will be needed when we have multiple folders in a user's
+ // workspace (ie shared folders)
+ Workspace workspace = user.getWorkspace();
+
+ if (workspace != null) {
+ WorkspaceFolder privateFolder = workspace.getDefaultFolder();
+ if (privateFolder != null) {
+ Integer permissions = getPermissions(privateFolder, user);
+ return new FolderContentDTO(privateFolder, permissions, user);
+ } else {
+ log.warn("getUserWorkspaceFolder: User " + userID
+ + " does not have a root folder. Returning no folders.");
}
- Set content = workspaceFolder.getFolderContent();
- if(content==null || content.size()==0)
- return null;
- else{
- ITicket ticket = getRepositoryLoginTicket();
- Vector repositoryContent = new Vector();
- Iterator contentIterator = content.iterator();
- while(contentIterator.hasNext()){
- WorkspaceFolderContent workspaceFolderContent = (WorkspaceFolderContent)contentIterator.next();
- SortedSet set = repositoryService.getVersionHistory(ticket,workspaceFolderContent.getUuid());
- repositoryContent.add(new FolderContentDTO(permissions, workspaceFolderContent, set, user));
- }
- return repositoryContent;
- }
+ } else {
+ log.warn("getUserWorkspaceFolder: User " + userID + " does not have a workspace. Returning no folders.");
+ }
+ } else {
+ log.warn("getUserWorkspaceFolder: User " + userID + " does not exist. Returning no folders.");
}
-
- /**
- * (non-Javadoc)
- * @see org.lamsfoundation.lams.workspace.service.IWorkspaceManagementService#getAccessibleOrganisationWorkspaceFolders(java.lang.Integer)
- */
- public Vector getAccessibleOrganisationWorkspaceFolders(Integer userID) throws IOException {
- log.debug("User - "+userID);
- User user = (User)userMgmtService.findById(User.class,userID);
- return getAccessibleOrganisationWorkspaceFolders(user);
+
+ return null;
+ }
+
+ /**
+ * (non-Javadoc)
+ *
+ * @see org.lamsfoundation.lams.workspace.service.IWorkspaceManagementService#getPublicWorkspaceFolder(java.lang.Integer)
+ */
+ @Override
+ public FolderContentDTO getPublicWorkspaceFolder(Integer userID) throws IOException {
+ User user = (User) baseDAO.find(User.class, userID);
+
+ if (user != null) {
+ WorkspaceFolder publicFolder = null;
+ List list = baseDAO.findByProperty(WorkspaceFolder.class, "workspaceFolderType",
+ WorkspaceFolder.PUBLIC_SEQUENCES);
+
+ if ((list != null) && (list.size() > 0)) {
+ publicFolder = (WorkspaceFolder) list.get(0);
+ }
+
+ if (publicFolder != null) {
+ Integer permissions = getPermissions(publicFolder, user);
+ return new FolderContentDTO(publicFolder, permissions, user);
+ }
}
-
- /**
- * (non-Javadoc)
- * @see org.lamsfoundation.lams.workspace.service.IWorkspaceManagementService#getAccessibleOrganisationWorkspaceFolders(java.lang.Integer)
- */
- public Vector getAccessibleOrganisationWorkspaceFolders(User user) throws IOException {
- Vector folders = new Vector();
-
- if (user != null) {
- // Get a list of organisations of which the given user is a member
- Set userMemberships = user.getUserOrganisations();
- if (userMemberships != null) {
- Iterator memberships = userMemberships.iterator();
- while (memberships.hasNext()) {
- UserOrganisation member = (UserOrganisation) memberships.next();
-
- // Check if the organisation has been removed or hidden
- // Continue to add folder if organisation is active or archived
- Organisation org = member.getOrganisation();
-
- if( org != null) {
- Integer orgStateId = org.getOrganisationState().getOrganisationStateId();
- if(!(OrganisationState.HIDDEN.equals(orgStateId) || OrganisationState.REMOVED.equals(orgStateId))) {
-
- // Only courses have folders - classes don't!
- Workspace workspace = org.getWorkspace();
-
- if ( workspace != null ) {
- // TODO get all the folders for the workspace but only return those that are at the "top" of the hierarchy
- // for this user. Not needed at present but will be needed when we have multiple folders in a user's workspace (ie shared folders)
- WorkspaceFolder orgFolder = workspace.getDefaultFolder();
- if ( orgFolder != null ) {
- // Check if the user has write access, which is available
- // only if the user has an AUTHOR, TEACHER or STAFF role. If
- // user has access add that folder to the list.
- Set roles = member.getUserOrganisationRoles();
- if (hasWriteAccess(roles)) {
- Integer permission = getPermissions(orgFolder,user);
- if ( !permission.equals(WorkspaceFolder.NO_ACCESS) ) {
- folders.add(new FolderContentDTO(orgFolder,permission,user));
- }
- }
- }
- }
- }
- }
-
-
- }
- } else {
- log.warn("getAccessibleOrganisationWorkspaceFolders: Trying to get user memberships for user "+user.getUserId()+". User doesn't belong to any organisations. Returning no folders.");
- }
- } else {
- log.warn("getAccessibleOrganisationWorkspaceFolders: User "+user.getUserId()+" does not exist. Returning no folders.");
- }
-
- //sort folders by their names
- Collections.sort(folders);
-
- return folders;
+
+ 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
+ *
+ * @param roles
+ * Set of roles that the user has
+ * @return boolean A boolean value indicating whether the user has "write" access or not.
+ */
+ private boolean hasWriteAccess(Set roles) {
+ Iterator roleIterator = roles.iterator();
+ while (roleIterator.hasNext()) {
+ UserOrganisationRole userOrganisationRole = (UserOrganisationRole) roleIterator.next();
+ Role role = userOrganisationRole.getRole();
+ if (role.isAuthor() || role.isSysAdmin() || role.isGroupManager() || role.isAuthorAdmin()) {
+ return true;
+ }
}
- /**
- * (non-Javadoc)
- * @see org.lamsfoundation.lams.workspace.service.IWorkspaceManagementService#getUserWorkspaceFolder(java.lang.Integer)
- */
- public FolderContentDTO getUserWorkspaceFolder(Integer userID) throws IOException {
- User user = (User)baseDAO.find(User.class,userID);
-
- if (user != null) {
- // TODO get all the folders for the workspace but only return those that are at the "top" of the hierarchy
- // for this user. Not needed at present but will be needed when we have multiple folders in a user's workspace (ie shared folders)
- Workspace workspace = user.getWorkspace();
-
- if(workspace != null) {
- WorkspaceFolder privateFolder = workspace.getDefaultFolder();
- if ( privateFolder != null ) {
- Integer permissions = getPermissions(privateFolder,user);
- return new FolderContentDTO(privateFolder, permissions, user);
- } else {
- log.warn("getUserWorkspaceFolder: User "+userID+" does not have a root folder. Returning no folders.");
- }
- } else {
- log.warn("getUserWorkspaceFolder: User "+userID+" does not have a workspace. Returning no folders.");
- }
+ return false;
+ }
+
+ /**
+ * This method moves a Learning Design from one workspace folder to another.But before it does that it checks
+ * whether the given User is authorized to do so.
+ *
+ * Nothing is physically moved from one folder to another. It just changes the workspace_folder_id
for
+ * the given learningdesign in the lams_learning_design_table
if the User
is authorized to
+ * do so.
+ *
+ * @param learningDesignID
+ * The learning_design_id
of the design to be moved
+ * @param targetWorkspaceFolderID
+ * The workspaceFolder
under which it has to be moved.
+ * @param userID
+ * The User
who is requesting this operation
+ * @return String Acknowledgement/error message in WDDX format for FLASH
+ * @throws IOException
+ */
+ public String moveLearningDesign(Long learningDesignID, Integer targetWorkspaceFolderID, Integer userID)
+ throws IOException {
+ FlashMessage flashMessage = null;
+ try {
+ if (isUserAuthorizedToModifyFolderContents(targetWorkspaceFolderID, userID)) {
+ LearningDesign learningDesign = learningDesignDAO.getLearningDesignById(learningDesignID);
+ if (learningDesign != null) {
+ WorkspaceFolder workspaceFolder = (WorkspaceFolder) baseDAO.find(WorkspaceFolder.class,
+ targetWorkspaceFolderID);
+ if (workspaceFolder != null) {
+ learningDesign.setWorkspaceFolder(workspaceFolder);
+ learningDesignDAO.update(learningDesign);
+ flashMessage = new FlashMessage(IWorkspaceManagementService.MSG_KEY_MOVE,
+ targetWorkspaceFolderID);
+ } else {
+ flashMessage = FlashMessage.getNoSuchWorkspaceFolderExsists(
+ IWorkspaceManagementService.MSG_KEY_MOVE, targetWorkspaceFolderID);
+ }
} else {
- log.warn("getUserWorkspaceFolder: User "+userID+" does not exist. Returning no folders.");
+ flashMessage = FlashMessage.getNoSuchLearningDesignExists(IWorkspaceManagementService.MSG_KEY_MOVE,
+ learningDesignID);
}
-
- return null;
+ } else {
+ flashMessage = FlashMessage.getUserNotAuthorized(IWorkspaceManagementService.MSG_KEY_MOVE, userID);
+ }
+ } catch (UserException ue) {
+ flashMessage = FlashMessage.getNoSuchUserExists(IWorkspaceManagementService.MSG_KEY_MOVE, userID);
+ } catch (WorkspaceFolderException we) {
+ flashMessage = FlashMessage.getNoSuchWorkspaceFolderExsists(IWorkspaceManagementService.MSG_KEY_MOVE,
+ targetWorkspaceFolderID);
}
-
- /**
- * (non-Javadoc)
- * @see org.lamsfoundation.lams.workspace.service.IWorkspaceManagementService#getPublicWorkspaceFolder(java.lang.Integer)
- */
- public FolderContentDTO getPublicWorkspaceFolder(Integer userID) throws IOException {
- User user = (User)baseDAO.find(User.class,userID);
-
- if (user != null) {
- WorkspaceFolder publicFolder = null;
- List list = baseDAO.findByProperty(WorkspaceFolder.class, "workspaceFolderType", WorkspaceFolder.PUBLIC_SEQUENCES);
-
- if (list != null && list.size() > 0) {
- publicFolder = (WorkspaceFolder) list.get(0);
- }
-
- if(publicFolder != null) {
- Integer permissions = getPermissions(publicFolder, user);
- return new FolderContentDTO(publicFolder, permissions, user);
- }
- }
-
- return null;
+ return flashMessage.serializeMessage();
+ }
+
+ /**
+ * @see org.lamsfoundation.lams.workspace.service.IWorkspaceManagementService#renameResource(Long, String, String,
+ * Integer)
+ */
+ @Override
+ public String renameResource(Long resourceID, String resourceType, String newName, Integer userID)
+ throws IOException {
+ String errorMessage = null;
+
+ if ((resourceID == null) || (newName == null) || (resourceType == null) || (userID == null)) {
+ errorMessage = messageService.getMessage("rename.resource.error.miss.vaue");
+ } else if (FolderContentDTO.DESIGN.equals(resourceType)) {
+ return renameLearningDesign(resourceID, newName, userID);
+ } else if (FolderContentDTO.FOLDER.equals(resourceType)) {
+ return renameWorkspaceFolder(new Integer(resourceID.intValue()), newName, userID);
+ } else if (FolderContentDTO.FILE.equals(resourceType)) {
+ // TODO implement delete file resource
+ errorMessage = messageService.getMessage("rename.resource.unspport");
+ } else if (FolderContentDTO.LESSON.equals(resourceType)) {
+ // TODO implement delete lesson
+ errorMessage = messageService.getMessage("rename.resource.unspport");
}
- /**
- * 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
- *
- * @param roles
- * Set of roles that the user has
- * @return boolean
- * A boolean value indicating whether the user has "write"
- * access or not.
- */
- private boolean hasWriteAccess(Set roles) {
- Iterator roleIterator = roles.iterator();
- while (roleIterator.hasNext()) {
- UserOrganisationRole userOrganisationRole = (UserOrganisationRole) roleIterator.next();
- Role role = userOrganisationRole.getRole();
- if (role.isAuthor() || role.isSysAdmin() || role.isGroupManager() || role.isAuthorAdmin())
- return true;
+ FlashMessage message = new FlashMessage(IWorkspaceManagementService.MSG_KEY_RENAME, messageService.getMessage(
+ "rename.resource.error", new Object[] { errorMessage }), FlashMessage.ERROR);
+ return message.serializeMessage();
+
+ }
+
+ /**
+ * This method renames the workspaceFolder
with the given workspaceFolderID
to
+ * newName
. But before it does that it checks if the user is authorized to do so.
+ *
+ * @param workspaceFolderID
+ * The workspaceFolder
to be renamed
+ * @param newName
+ * The newName
to be assigned
+ * @param userID
+ * The User
who requested this operation
+ * @return String Acknowledgement/error message in WDDX format for FLASH
+ * @throws IOException
+ */
+ public String renameWorkspaceFolder(Integer workspaceFolderID, String newName, Integer userID) throws IOException {
+ FlashMessage flashMessage = null;
+ try {
+ WorkspaceFolder folder = (WorkspaceFolder) baseDAO.find(WorkspaceFolder.class, workspaceFolderID);
+ if (folder != null) {
+ WorkspaceFolder parent = folder.getParentWorkspaceFolder();
+ if ((parent != null) && isUserAuthorizedToModifyFolderContents(workspaceFolderID, userID)) {
+ if (!ifNameExists(parent, newName)) {
+ folder.setName(newName);
+ baseDAO.update(folder);
+ flashMessage = new FlashMessage(IWorkspaceManagementService.MSG_KEY_RENAME, newName);
+ } else {
+ flashMessage = new FlashMessage(IWorkspaceManagementService.MSG_KEY_RENAME,
+ messageService.getMessage("folder.already.exist", new Object[] { newName }),
+ FlashMessage.ERROR);
+ }
+ } else {
+ flashMessage = FlashMessage
+ .getUserNotAuthorized(IWorkspaceManagementService.MSG_KEY_RENAME, userID);
}
- return false;
- }
- /**
- * This method moves a Learning Design from one workspace
- * folder to another.But before it does that it checks whether
- * the given User is authorized to do so.
- *
- * Nothing is physically moved from one folder to another.
- * It just changes the workspace_folder_id
for the
- * given learningdesign in the lams_learning_design_table
- * if the User
is authorized to do so.
- *
- * @param learningDesignID The learning_design_id
of the
- * design to be moved
- * @param targetWorkspaceFolderID The workspaceFolder
under
- * which it has to be moved.
- * @param userID The User
who is requesting this operation
- * @return String Acknowledgement/error message in WDDX format for FLASH
- * @throws IOException
- */
- public String moveLearningDesign(Long learningDesignID,
- Integer targetWorkspaceFolderID,
- Integer userID) throws IOException {
- FlashMessage flashMessage = null;
- try{
- if(isUserAuthorizedToModifyFolderContents(targetWorkspaceFolderID,userID)){
- LearningDesign learningDesign = learningDesignDAO.getLearningDesignById(learningDesignID);
- if (learningDesign != null) {
- WorkspaceFolder workspaceFolder = (WorkspaceFolder)baseDAO.find(WorkspaceFolder.class,targetWorkspaceFolderID);
- if(workspaceFolder != null){
- learningDesign.setWorkspaceFolder(workspaceFolder);
- learningDesignDAO.update(learningDesign);
- flashMessage = new FlashMessage(MSG_KEY_MOVE, targetWorkspaceFolderID);
- }else
- flashMessage = FlashMessage.getNoSuchWorkspaceFolderExsists(MSG_KEY_MOVE,targetWorkspaceFolderID);
- }else
- flashMessage = FlashMessage.getNoSuchLearningDesignExists(MSG_KEY_MOVE, learningDesignID);
- }else
- flashMessage = FlashMessage.getUserNotAuthorized(MSG_KEY_MOVE,userID);
- }catch(UserException ue){
- flashMessage = FlashMessage.getNoSuchUserExists(MSG_KEY_MOVE, userID);
- }catch(WorkspaceFolderException we){
- flashMessage = FlashMessage.getNoSuchWorkspaceFolderExsists(MSG_KEY_MOVE,targetWorkspaceFolderID);
- }
- return flashMessage.serializeMessage();
+ } else {
+ flashMessage = FlashMessage.getNoSuchWorkspaceFolderExsists(IWorkspaceManagementService.MSG_KEY_RENAME,
+ workspaceFolderID);
+ }
+ } catch (UserException ue) {
+ flashMessage = FlashMessage.getNoSuchUserExists(IWorkspaceManagementService.MSG_KEY_RENAME, userID);
+ } catch (WorkspaceFolderException we) {
+ flashMessage = FlashMessage.getNoSuchWorkspaceFolderExsists(IWorkspaceManagementService.MSG_KEY_RENAME,
+ workspaceFolderID);
}
- /**
- * @see org.lamsfoundation.lams.workspace.service.IWorkspaceManagementService#renameResource(Long, String, String, Integer)
- */
- public String renameResource(Long resourceID, String resourceType, String newName, Integer userID)throws IOException{
- String errorMessage = null;
+ return flashMessage.serializeMessage();
+ }
- if ( resourceID == null || newName == null || resourceType == null || userID== null ) {
- errorMessage = messageService.getMessage("rename.resource.error.miss.vaue");
- } else if ( FolderContentDTO.DESIGN.equals(resourceType) ) {
- return renameLearningDesign(resourceID, newName, userID);
- } else if ( FolderContentDTO.FOLDER.equals(resourceType) ) {
- return renameWorkspaceFolder(new Integer(resourceID.intValue()), newName, userID);
- } else if ( FolderContentDTO.FILE.equals(resourceType) ) {
- // TODO implement delete file resource
- errorMessage = messageService.getMessage("rename.resource.unspport");
- } else if ( FolderContentDTO.LESSON.equals(resourceType) ) {
- // TODO implement delete lesson
- errorMessage = messageService.getMessage("rename.resource.unspport");
+ /**
+ * This method renames the Learning design with given learningDesignID
to the new title
.
+ * But before it does that it checks if the user is authorized to do so.
+ *
+ * @param learningDesignID
+ * The learning_design_id
of the design to be renamed
+ * @param title
+ * The new title
+ * @param userID
+ * The User
who requested this operation
+ * @return String Acknowledgement/error message in WDDX format for FLASH
+ * @throws IOException
+ */
+ public String renameLearningDesign(Long learningDesignID, String title, Integer userID) throws IOException {
+ FlashMessage flashMessage = null;
+ LearningDesign design = learningDesignDAO.getLearningDesignById(learningDesignID);
+ Integer folderID = null;
+ try {
+ if (design != null) {
+ folderID = design.getWorkspaceFolder().getWorkspaceFolderId();
+ if (isUserAuthorizedToModifyFolderContents(folderID, userID)) {
+ design.setTitle(title);
+ learningDesignDAO.update(design);
+ flashMessage = new FlashMessage(IWorkspaceManagementService.MSG_KEY_RENAME, title);
+ } else {
+ flashMessage = FlashMessage
+ .getUserNotAuthorized(IWorkspaceManagementService.MSG_KEY_RENAME, userID);
}
-
- FlashMessage message = new FlashMessage(MSG_KEY_RENAME,
- messageService.getMessage("rename.resource.error",new Object[]{errorMessage}),
- FlashMessage.ERROR);
- return message.serializeMessage();
-
+ } else {
+ flashMessage = FlashMessage.getNoSuchLearningDesignExists(IWorkspaceManagementService.MSG_KEY_RENAME,
+ learningDesignID);
+ }
+ } catch (UserException ue) {
+ flashMessage = FlashMessage.getNoSuchUserExists(IWorkspaceManagementService.MSG_KEY_RENAME, userID);
+ } catch (WorkspaceFolderException we) {
+ flashMessage = FlashMessage.getNoSuchWorkspaceFolderExsists(IWorkspaceManagementService.MSG_KEY_RENAME,
+ folderID);
}
- /**
- * This method renames the workspaceFolder
with the
- * given workspaceFolderID
to newName
.
- * But before it does that it checks if the user is authorized to
- * do so.
- *
- * @param workspaceFolderID The workspaceFolder
to be renamed
- * @param newName The newName
to be assigned
- * @param userID The User
who requested this operation
- * @return String Acknowledgement/error message in WDDX format for FLASH
- * @throws IOException
- */
- public String renameWorkspaceFolder(Integer workspaceFolderID,String newName,Integer userID)throws IOException{
- FlashMessage flashMessage = null;
- try{
- WorkspaceFolder folder = (WorkspaceFolder)baseDAO.find(WorkspaceFolder.class,workspaceFolderID);
- if(folder!=null){
- WorkspaceFolder parent = folder.getParentWorkspaceFolder();
- if(parent!=null && isUserAuthorizedToModifyFolderContents(workspaceFolderID,userID)){
- if(!ifNameExists(parent,newName)){
- folder.setName(newName);
- baseDAO.update(folder);
- flashMessage = new FlashMessage(MSG_KEY_RENAME,newName);
- } else {
- flashMessage = new FlashMessage(MSG_KEY_RENAME,
- messageService.getMessage("folder.already.exist",new Object[]{newName}),
- FlashMessage.ERROR);
- }
- } else {
- flashMessage = FlashMessage.getUserNotAuthorized(MSG_KEY_RENAME,userID);
- }
- }else {
- flashMessage = FlashMessage.getNoSuchWorkspaceFolderExsists(MSG_KEY_RENAME,workspaceFolderID);
- }
- }catch(UserException ue){
- flashMessage = FlashMessage.getNoSuchUserExists(MSG_KEY_RENAME, userID);
- }catch(WorkspaceFolderException we){
- flashMessage = FlashMessage.getNoSuchWorkspaceFolderExsists(MSG_KEY_RENAME,workspaceFolderID);
- }
- return flashMessage.serializeMessage();
- }
- /**
- * This method renames the Learning design with given learningDesignID
- * to the new title
. But before it does that it checks if the user
- * is authorized to do so.
- *
- * @param learningDesignID The learning_design_id
of the
- * design to be renamed
- * @param title The new title
- * @param userID The User
who requested this operation
- * @return String Acknowledgement/error message in WDDX format for FLASH
- * @throws IOException
- */
- public String renameLearningDesign(Long learningDesignID, String title,Integer userID)throws IOException {
- FlashMessage flashMessage = null;
- LearningDesign design = learningDesignDAO.getLearningDesignById(learningDesignID);
- Integer folderID = null;
- try{
- if(design!=null){
- folderID = design.getWorkspaceFolder().getWorkspaceFolderId();
- if(isUserAuthorizedToModifyFolderContents(folderID,userID)){
- design.setTitle(title);
- learningDesignDAO.update(design);
- flashMessage = new FlashMessage(MSG_KEY_RENAME,title);
- }else
- flashMessage = FlashMessage.getUserNotAuthorized(MSG_KEY_RENAME,userID);
- }else
- flashMessage = FlashMessage.getNoSuchLearningDesignExists(MSG_KEY_RENAME,learningDesignID);
- }catch(UserException ue){
- flashMessage = FlashMessage.getNoSuchUserExists(MSG_KEY_RENAME, userID);
- }catch(WorkspaceFolderException we){
- flashMessage = FlashMessage.getNoSuchWorkspaceFolderExsists(MSG_KEY_RENAME,folderID);
- }
- return flashMessage.serializeMessage();
- }
- /**
- * (non-Javadoc)
- * @see org.lamsfoundation.lams.workspace.service.IWorkspaceManagementService#getWorkspace(java.lang.Integer)
- */
- public String getWorkspace(Integer userID) throws IOException {
- FlashMessage flashMessage = null;
- User user = (User)baseDAO.find(User.class,userID);
- if (user != null) {
- Workspace workspace = user.getWorkspace();
- flashMessage = new FlashMessage("getWorkspace", workspace.getWorkspaceDTO());
- } else
- flashMessage = FlashMessage.getNoSuchUserExists("getWorkspace",userID);
- return flashMessage.serializeMessage();
- }
-
- /**
- * @see org.lamsfoundation.lams.workspace.service.IWorkspaceManagementService#getOrganisationsByUserRole(Integer, List, Integer, List)
- */
- public String getOrganisationsByUserRole(Integer userID, List roleNames, Integer courseId, List restrictToClassIds) throws IOException
- {
- FlashMessage flashMessage = null;
- User user = (User)baseDAO.find(User.class,userID);
-
- if (user!=null) {
- if ( courseId == null ) {
- flashMessage = new FlashMessage(
- MSG_KEY_ORG_BY_ROLE, userMgmtService.getOrganisationsForUserByRole(user, roleNames));
- } else {
- flashMessage = new FlashMessage(
- MSG_KEY_ORG_BY_ROLE, userMgmtService.getOrganisationsForUserByRole(user, roleNames, courseId, restrictToClassIds));
- }
- } else
- flashMessage = FlashMessage.getNoSuchUserExists(
- MSG_KEY_ORG_BY_ROLE, userID);
+ return flashMessage.serializeMessage();
+ }
- return flashMessage.serializeMessage();
-
+ /**
+ * (non-Javadoc)
+ *
+ * @see org.lamsfoundation.lams.workspace.service.IWorkspaceManagementService#getWorkspace(java.lang.Integer)
+ */
+ @Override
+ public String getWorkspace(Integer userID) throws IOException {
+ FlashMessage flashMessage = null;
+ User user = (User) baseDAO.find(User.class, userID);
+ if (user != null) {
+ Workspace workspace = user.getWorkspace();
+ flashMessage = new FlashMessage("getWorkspace", workspace.getWorkspaceDTO());
+ } else {
+ flashMessage = FlashMessage.getNoSuchUserExists("getWorkspace", userID);
}
-
- /**
- * @see org.lamsfoundation.lams.workspace.service.IWorkspaceManagementService#getUserOrganisation(Integer, String)
- */
- public String getUserOrganisation(Integer userID, Integer organisationId) throws IOException
- {
- FlashMessage flashMessage = null;
- User user = (User)baseDAO.find(User.class,userID);
-
- if (user!=null) {
- OrganisationDTO orgDTO = userMgmtService.getOrganisationForUserWithRole(user, organisationId);
- if ( orgDTO != null ) {
- flashMessage = new FlashMessage(MSG_KEY_ORG, orgDTO);
- } else {
- flashMessage = FlashMessage.getNoSuchOrganisationExists(MSG_KEY_ORG, organisationId);
- }
- } else
- flashMessage = FlashMessage.getNoSuchUserExists(
- MSG_KEY_ORG_BY_ROLE, userID);
+ return flashMessage.serializeMessage();
+ }
- return flashMessage.serializeMessage();
-
+ /**
+ * @see org.lamsfoundation.lams.workspace.service.IWorkspaceManagementService#getOrganisationsByUserRole(Integer,
+ * List, Integer, List)
+ */
+ @Override
+ public String getOrganisationsByUserRole(Integer userID, List roleNames, Integer courseId,
+ List restrictToClassIds) throws IOException {
+ FlashMessage flashMessage = null;
+ User user = (User) baseDAO.find(User.class, userID);
+
+ if (user != null) {
+ if (courseId == null) {
+ flashMessage = new FlashMessage(IWorkspaceManagementService.MSG_KEY_ORG_BY_ROLE,
+ userMgmtService.getOrganisationsForUserByRole(user, roleNames));
+ } else {
+ flashMessage = new FlashMessage(IWorkspaceManagementService.MSG_KEY_ORG_BY_ROLE,
+ userMgmtService.getOrganisationsForUserByRole(user, roleNames, courseId, restrictToClassIds));
+ }
+ } else {
+ flashMessage = FlashMessage.getNoSuchUserExists(IWorkspaceManagementService.MSG_KEY_ORG_BY_ROLE, userID);
}
- /**
- * @see org.lamsfoundation.lams.workspace.service.IWorkspaceManagementService#getUsersFromOrganisationByRole(Integer, String)
- */
- public Vector getUsersFromOrganisationByRole(Integer organisationID, String roleName)
- {
- return (Vector) userMgmtService.getUsersFromOrganisationByRole(organisationID, roleName, true, false);
+ return flashMessage.serializeMessage();
+
+ }
+
+ /**
+ * @see org.lamsfoundation.lams.workspace.service.IWorkspaceManagementService#getUserOrganisation(Integer, String)
+ */
+ @Override
+ public String getUserOrganisation(Integer userID, Integer organisationId) throws IOException {
+ FlashMessage flashMessage = null;
+ User user = (User) baseDAO.find(User.class, userID);
+
+ if (user != null) {
+ OrganisationDTO orgDTO = userMgmtService.getOrganisationForUserWithRole(user, organisationId);
+ if (orgDTO != null) {
+ flashMessage = new FlashMessage(IWorkspaceManagementService.MSG_KEY_ORG, orgDTO);
+ } else {
+ flashMessage = FlashMessage.getNoSuchOrganisationExists(IWorkspaceManagementService.MSG_KEY_ORG,
+ organisationId);
+ }
+ } else {
+ flashMessage = FlashMessage.getNoSuchUserExists(IWorkspaceManagementService.MSG_KEY_ORG_BY_ROLE, userID);
}
-
- /**
- * Get the workspace folders for a particular name. Does not check the user permissions - that will be checked if
- * you try to get anything from the folder.
- */
- public List getWorkspaceFolder(String workspaceFolderName) {
- return (List) baseDAO.findByProperty(WorkspaceFolder.class, "name", workspaceFolderName);
- }
+ return flashMessage.serializeMessage();
+
+ }
+
+ /**
+ * @see org.lamsfoundation.lams.workspace.service.IWorkspaceManagementService#getUsersFromOrganisationByRole(Integer,
+ * String)
+ */
+ @Override
+ public Vector getUsersFromOrganisationByRole(Integer organisationID, String roleName) {
+ return userMgmtService.getUsersFromOrganisationByRole(organisationID, roleName, true, false);
+ }
+
+ /**
+ * Get the workspace folders for a particular name. Does not check the user permissions - that will be checked if
+ * you try to get anything from the folder.
+ */
+ @Override
+ public List getWorkspaceFolder(String workspaceFolderName) {
+ return baseDAO.findByProperty(WorkspaceFolder.class, "name", workspaceFolderName);
+ }
+
}