Index: lams_common/src/java/org/lamsfoundation/lams/workspace/service/IWorkspaceManagementService.java =================================================================== RCS file: /usr/local/cvsroot/lams_common/src/java/org/lamsfoundation/lams/workspace/service/Attic/IWorkspaceManagementService.java,v diff -u -r1.4 -r1.5 --- lams_common/src/java/org/lamsfoundation/lams/workspace/service/IWorkspaceManagementService.java 5 May 2005 03:09:57 -0000 1.4 +++ lams_common/src/java/org/lamsfoundation/lams/workspace/service/IWorkspaceManagementService.java 5 May 2005 23:22:42 -0000 1.5 @@ -221,5 +221,29 @@ * @throws Exception */ public String deleteWorkspaceFolderContent(Long folderContentID)throws Exception; + + /** + * This method is called when the user knows which version of the + * worksapceFolderContent he wants to delete. + * + * The content to be deleted can be one of the following + *
    + *
  1. The only version available in the repository, + * In which case both the records from the repository + * and the database should be deleted.
  2. + *
  3. The latest version in the repository, in which case + * the database should be updated with the next available + * latest version.
  4. + *
  5. One of the available versions in the repository, in which + * case the corresponding version is deleted from the repository + * and database is not effected
  6. + *
+ * @param uuid The uuid of the workspaceFolderContent + * @param versionToBeDeleted The versionID of the workspaceFolderContent + * @param folderContentID The folder_content_id of the content to be deleted + * @return String Acknowledgement/error message in WDDX format for FLASH + * @throws Exception + */ + public String deleteContentWithVersion(Long uuid, Long versionToBeDeleted,Long folderContentID)throws Exception; } Index: lams_common/src/java/org/lamsfoundation/lams/workspace/service/WorkspaceManagementService.java =================================================================== RCS file: /usr/local/cvsroot/lams_common/src/java/org/lamsfoundation/lams/workspace/service/Attic/WorkspaceManagementService.java,v diff -u -r1.4 -r1.5 --- lams_common/src/java/org/lamsfoundation/lams/workspace/service/WorkspaceManagementService.java 5 May 2005 03:09:57 -0000 1.4 +++ lams_common/src/java/org/lamsfoundation/lams/workspace/service/WorkspaceManagementService.java 5 May 2005 23:22:38 -0000 1.5 @@ -22,7 +22,9 @@ import org.lamsfoundation.lams.contentrepository.FileException; import org.lamsfoundation.lams.contentrepository.ICredentials; import org.lamsfoundation.lams.contentrepository.ITicket; +import org.lamsfoundation.lams.contentrepository.IVersionedNode; import org.lamsfoundation.lams.contentrepository.InvalidParameterException; +import org.lamsfoundation.lams.contentrepository.ItemNotFoundException; import org.lamsfoundation.lams.contentrepository.NodeKey; import org.lamsfoundation.lams.contentrepository.WorkspaceNotFoundException; import org.lamsfoundation.lams.contentrepository.service.IRepositoryService; @@ -666,39 +668,58 @@ workspaceFolderContent.setVersionID(nodeKey.getVersion()); workspaceFolderContentDAO.update(workspaceFolderContent); return nodeKey; - } - + } /** - * This method is called when the user knows which version of the - * worksapceFolderContent he wants to delete. - * - * The database (lams_workspace_folder_content) - * stores information only about the latest version of the file. - * So if a user deletes all the versions from the repository - * one by one. there is no way the database would get to know - * about the change.So every time a request is received to - * delete a content from the repository, the database is checked - * against the uuid and version_id - * for the given content.If found that record is also deleted. - * - * @param uuid The uuid of the workspaceFolderContent - * @param versionID The versionID of the workspaceFolderContent - * @param folderContentID The folder_content_id of the content to be deleted - * @return String Acknowledgement/error message in WDDX format for FLASH - * @throws Exception + * (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 versionID,Long folderContentID)throws Exception{ + public String deleteContentWithVersion(Long uuid, Long versionToBeDeleted,Long folderContentID)throws Exception{ + WorkspaceFolderContent workspaceFolderContent = workspaceFolderContentDAO.getWorkspaceFolderContentByID(folderContentID); + Long databaseVersion = workspaceFolderContent.getVersionID(); + ITicket ticket = getRepositoryLoginTicket(); - String files[] = repositoryService.deleteVersion(ticket,uuid,versionID); - if(files==null){ - workspaceFolderContentDAO.deleteContentWithVersion(uuid,versionID,folderContentID); - flashMessage = new FlashMessage("deleteContentWithVersion","Content Successfully deleted"); - }else + String files[]=null; + try{ + files = repositoryService.deleteVersion(ticket,uuid,versionToBeDeleted); + }catch(ItemNotFoundException ie){ flashMessage = new FlashMessage("deleteContentWithVersion", - "Following files could not be deleted" + files, - FlashMessage.CRITICAL_ERROR); + "No such content with versionID of " + versionToBeDeleted + " found in repository", + 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(files==null){ + if(databaseVersion.equals(versionToBeDeleted)){ + workspaceFolderContent.setVersionID(latestAvailableVersion); + workspaceFolderContentDAO.update(workspaceFolderContent); + } + flashMessage = new FlashMessage("deleteContentWithVersion","Content Successfully deleted"); + }else + flashMessage = new FlashMessage("deleteContentWithVersion", + "Following files could not be deleted" + files, + FlashMessage.CRITICAL_ERROR); + }catch(ItemNotFoundException ie){ + workspaceFolderContentDAO.delete(workspaceFolderContent); + flashMessage = new FlashMessage("deleteContentWithVersion","Content Successfully deleted"); + } + return flashMessage.serializeMessage(); }