From d74f934789ae53624cbc14ffd237a4b39f45d3ce Mon Sep 17 00:00:00 2001 From: Jan Vonka Date: Tue, 20 Apr 2010 15:36:45 +0000 Subject: [PATCH] Fix ALF-2499 (Deleting a web project also deletes similarly named web projects - Potential Data Loss) git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@19918 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261 --- .../alfresco/wcm/sandbox/SandboxFactory.java | 2 +- .../wcm/sandbox/SandboxServiceImpl.java | 15 +++++++++------ .../wcm/sandbox/SandboxServiceImplTest.java | 18 +++++++++++++++--- .../webproject/WebProjectServiceImplTest.java | 10 ++++++++++ 4 files changed, 35 insertions(+), 10 deletions(-) diff --git a/source/java/org/alfresco/wcm/sandbox/SandboxFactory.java b/source/java/org/alfresco/wcm/sandbox/SandboxFactory.java index 4c2cb6538c..e55574e350 100644 --- a/source/java/org/alfresco/wcm/sandbox/SandboxFactory.java +++ b/source/java/org/alfresco/wcm/sandbox/SandboxFactory.java @@ -948,7 +948,7 @@ public final class SandboxFactory extends WCMUtil String storeName = store.getName(); // list main stores - not preview stores or workflow stores or locally deployed "live" ASR servers (LIVE or TEST) - if ((storeName.startsWith(wpStoreId)) && + if ((WCMUtil.getWebProjectStoreId(storeName).equals(wpStoreId)) && (! WCMUtil.isPreviewStore(storeName)) && ((includeLocalhostDeployed || (! WCMUtil.isLocalhostDeployedStore(wpStoreId, storeName)))) && ((includeWorkflowSandboxes || (! WCMUtil.isWorkflowStore(storeName)))) diff --git a/source/java/org/alfresco/wcm/sandbox/SandboxServiceImpl.java b/source/java/org/alfresco/wcm/sandbox/SandboxServiceImpl.java index 4d6b57a6d3..ea3f927fba 100644 --- a/source/java/org/alfresco/wcm/sandbox/SandboxServiceImpl.java +++ b/source/java/org/alfresco/wcm/sandbox/SandboxServiceImpl.java @@ -251,14 +251,17 @@ public class SandboxServiceImpl implements SandboxService { sbInfos = new ArrayList(1); - SandboxInfo authorSandbox = getAuthorSandbox(wpStoreId, currentUser); - - if (authorSandbox != null) + if (userRole != null) { - sbInfos.add(authorSandbox); + SandboxInfo authorSandbox = getAuthorSandbox(wpStoreId, currentUser); + + if (authorSandbox != null) + { + sbInfos.add(authorSandbox); + } + + sbInfos.add(getSandbox(WCMUtil.buildStagingStoreName(wpStoreId))); // get staging sandbox } - - sbInfos.add(getSandbox(WCMUtil.buildStagingStoreName(wpStoreId))); // get staging sandbox } return sbInfos; diff --git a/source/java/org/alfresco/wcm/sandbox/SandboxServiceImplTest.java b/source/java/org/alfresco/wcm/sandbox/SandboxServiceImplTest.java index f2aff5d4b7..40682cb64d 100644 --- a/source/java/org/alfresco/wcm/sandbox/SandboxServiceImplTest.java +++ b/source/java/org/alfresco/wcm/sandbox/SandboxServiceImplTest.java @@ -254,9 +254,15 @@ public class SandboxServiceImplTest extends AbstractWCMServiceImplTest WebProjectInfo wpInfo = wpService.createWebProject(TEST_SANDBOX+"-list", TEST_WEBPROJ_NAME+" list", TEST_WEBPROJ_TITLE, TEST_WEBPROJ_DESCRIPTION); String wpStoreId = wpInfo.getStoreId(); - List sbInfos = sbService.listSandboxes(wpInfo.getStoreId()); + // Create ANOther web project + WebProjectInfo wpAnoInfo = wpService.createWebProject(TEST_SANDBOX+"-list ano", TEST_WEBPROJ_NAME+" list ano", TEST_WEBPROJ_TITLE, TEST_WEBPROJ_DESCRIPTION); + String wpStoreAnoId = wpAnoInfo.getStoreId(); + + List sbInfos = sbService.listSandboxes(wpStoreId); assertEquals(2, sbInfos.size()); // staging sandbox, author sandbox (for admin) + assertEquals(2, sbService.listSandboxes(wpStoreAnoId).size()); + String expectedUserSandboxId = TEST_SANDBOX+"-list" + "--" + AuthenticationUtil.getAdminUserName(); // Do detailed check of the sandbox info objects @@ -432,7 +438,12 @@ public class SandboxServiceImplTest extends AbstractWCMServiceImplTest WebProjectInfo wpInfo = wpService.createWebProject(TEST_SANDBOX+"-delete", TEST_WEBPROJ_NAME+" delete", TEST_WEBPROJ_TITLE, TEST_WEBPROJ_DESCRIPTION); String wpStoreId = wpInfo.getStoreId(); + // Create ANOther web project + WebProjectInfo wpAnoInfo = wpService.createWebProject(TEST_SANDBOX+"-delete ano", TEST_WEBPROJ_NAME+" delete ano", TEST_WEBPROJ_TITLE, TEST_WEBPROJ_DESCRIPTION); + String wpStoreAnoId = wpAnoInfo.getStoreId(); + assertEquals(2, sbService.listSandboxes(wpStoreId).size()); + assertEquals(2, sbService.listSandboxes(wpStoreAnoId).size()); // Get staging sandbox SandboxInfo sbInfo = sbService.getStagingSandbox(wpStoreId); @@ -460,10 +471,11 @@ public class SandboxServiceImplTest extends AbstractWCMServiceImplTest } // Get admin author sandbox - sbInfo = sbService.getAuthorSandbox(wpInfo.getStoreId()); + sbInfo = sbService.getAuthorSandbox(wpStoreId); sbService.deleteSandbox(sbInfo.getSandboxId()); - assertEquals(1, sbService.listSandboxes(wpInfo.getStoreId()).size()); + assertEquals(1, sbService.listSandboxes(wpStoreId).size()); + assertEquals(2, sbService.listSandboxes(wpStoreAnoId).size()); // Invite web users wpService.inviteWebUser(wpStoreId, USER_ONE, WCMUtil.ROLE_CONTENT_MANAGER); diff --git a/source/java/org/alfresco/wcm/webproject/WebProjectServiceImplTest.java b/source/java/org/alfresco/wcm/webproject/WebProjectServiceImplTest.java index 27f77eff0f..8c30d271c6 100644 --- a/source/java/org/alfresco/wcm/webproject/WebProjectServiceImplTest.java +++ b/source/java/org/alfresco/wcm/webproject/WebProjectServiceImplTest.java @@ -482,6 +482,13 @@ public class WebProjectServiceImplTest extends AbstractWCMServiceImplTest String wpStoreId = wpInfo.getStoreId(); assertNotNull(wpService.getWebProject(wpStoreId)); + // Create ANOther web project + WebProjectInfo wpAnoInfo = wpService.createWebProject(TEST_WEBPROJ_DNS+"-delete ano", TEST_WEBPROJ_NAME+"-delete ano", TEST_WEBPROJ_TITLE, TEST_WEBPROJ_DESCRIPTION, TEST_WEBPROJ_DEFAULT_WEBAPP, true, null); + String wpStoreAnoId = wpAnoInfo.getStoreId(); + + assertEquals(2, sbService.listSandboxes(wpStoreId).size()); + assertEquals(2, sbService.listSandboxes(wpStoreAnoId).size()); + // Switch to USER_ONE AuthenticationUtil.setFullyAuthenticatedUser(USER_ONE); @@ -517,6 +524,9 @@ public class WebProjectServiceImplTest extends AbstractWCMServiceImplTest wpService.deleteWebProject(wpStoreId); assertNull(wpService.getWebProject(wpStoreId)); + assertEquals(0, sbService.listSandboxes(wpStoreId).size()); + assertEquals(2, sbService.listSandboxes(wpStoreAnoId).size()); + try { // Try to delete a web project that isn't there (-ve test)