From 3f1e3da1d487f062ed470aef975c09253edfa29e Mon Sep 17 00:00:00 2001 From: jmisinco Date: Mon, 20 Jun 2011 13:31:31 -0700 Subject: refinement[bgz_349970]: Replace RecursiveBranchProvider with MultiBranchProvider --- .../management/test/mocks/MockBranchProvider.java | 4 +- .../test/purge/MultiBranchProviderTest.java | 72 ++++++++++++++++++++++ .../management/test/purge/PurgeTestSuite.java | 2 +- .../test/purge/RecursiveBranchProviderTest.java | 45 -------------- .../management/internal/OseeBranchService.java | 5 +- .../management/purge/MultiBranchProvider.java | 59 ++++++++++++++++++ .../management/purge/RecursiveBranchProvider.java | 44 ------------- .../admin/BranchManagementCommandProvider.java | 29 +++++++-- 8 files changed, 160 insertions(+), 100 deletions(-) create mode 100644 plugins/org.eclipse.osee.framework.branch.management.test/src/org/eclipse/osee/framework/branch/management/test/purge/MultiBranchProviderTest.java delete mode 100644 plugins/org.eclipse.osee.framework.branch.management.test/src/org/eclipse/osee/framework/branch/management/test/purge/RecursiveBranchProviderTest.java create mode 100644 plugins/org.eclipse.osee.framework.branch.management/src/org/eclipse/osee/framework/branch/management/purge/MultiBranchProvider.java delete mode 100644 plugins/org.eclipse.osee.framework.branch.management/src/org/eclipse/osee/framework/branch/management/purge/RecursiveBranchProvider.java diff --git a/plugins/org.eclipse.osee.framework.branch.management.test/src/org/eclipse/osee/framework/branch/management/test/mocks/MockBranchProvider.java b/plugins/org.eclipse.osee.framework.branch.management.test/src/org/eclipse/osee/framework/branch/management/test/mocks/MockBranchProvider.java index bc45b31e5e0..b1820efc196 100644 --- a/plugins/org.eclipse.osee.framework.branch.management.test/src/org/eclipse/osee/framework/branch/management/test/mocks/MockBranchProvider.java +++ b/plugins/org.eclipse.osee.framework.branch.management.test/src/org/eclipse/osee/framework/branch/management/test/mocks/MockBranchProvider.java @@ -76,8 +76,8 @@ public final class MockBranchProvider implements IBranchesProvider { return branches; } - public static Branch getRootBranch() throws OseeCoreException { - for (Branch branch : MockBranchProvider.createTestBranches()) { + public static Branch getRootBranch(Collection branches) throws OseeCoreException { + for (Branch branch : branches) { if (branch.getName().equals(ROOT_BRANCH_NAME)) { return branch; } diff --git a/plugins/org.eclipse.osee.framework.branch.management.test/src/org/eclipse/osee/framework/branch/management/test/purge/MultiBranchProviderTest.java b/plugins/org.eclipse.osee.framework.branch.management.test/src/org/eclipse/osee/framework/branch/management/test/purge/MultiBranchProviderTest.java new file mode 100644 index 00000000000..8ec7c2cb1aa --- /dev/null +++ b/plugins/org.eclipse.osee.framework.branch.management.test/src/org/eclipse/osee/framework/branch/management/test/purge/MultiBranchProviderTest.java @@ -0,0 +1,72 @@ +/******************************************************************************* + * Copyright (c) 2011 Boeing. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Boeing - initial API and implementation + *******************************************************************************/ +package org.eclipse.osee.framework.branch.management.test.purge; + +import java.util.Collection; +import java.util.Collections; +import java.util.HashSet; +import java.util.Set; +import junit.framework.Assert; +import org.eclipse.osee.framework.branch.management.purge.MultiBranchProvider; +import org.eclipse.osee.framework.branch.management.test.mocks.MockBranchProvider; +import org.eclipse.osee.framework.core.enums.BranchType; +import org.eclipse.osee.framework.core.exception.OseeCoreException; +import org.eclipse.osee.framework.core.model.Branch; +import org.eclipse.osee.framework.core.model.cache.BranchFilter; +import org.junit.Test; + +/** + * @author John Misinco + */ +public class MultiBranchProviderTest { + + @Test + public void testGetBranchesRecursive() throws OseeCoreException { + BranchFilter filter = new BranchFilter(); + filter.setNegatedBranchTypes(BranchType.BASELINE); + Set branchRoots = new HashSet(); + + Collection testBranchesA = MockBranchProvider.createTestBranches(); + Collection testBranchesB = MockBranchProvider.createTestBranches(); + + branchRoots.add(MockBranchProvider.getRootBranch(testBranchesA)); + branchRoots.add(MockBranchProvider.getRootBranch(testBranchesB)); + + MultiBranchProvider provider = new MultiBranchProvider(true, branchRoots, filter); + int numBranches = provider.getBranches().size(); + int expectedSize = testBranchesA.size() + testBranchesB.size(); + Assert.assertEquals(expectedSize, numBranches); + } + + @Test + public void testGetBranchesNonRecursive() throws OseeCoreException { + BranchFilter filter = new BranchFilter(); + filter.setNegatedBranchTypes(BranchType.BASELINE); + + Collection testBranches = MockBranchProvider.createTestBranches(); + + MultiBranchProvider provider1 = + new MultiBranchProvider(false, Collections.singleton(MockBranchProvider.getRootBranch(testBranches)), filter); + int numBranches = provider1.getBranches().size(); + Assert.assertEquals(1, numBranches); + + Set branches = new HashSet(MockBranchProvider.createTestBranches()); + MultiBranchProvider provider2 = new MultiBranchProvider(false, branches, filter); + numBranches = provider2.getBranches().size(); + Assert.assertEquals(branches.size(), numBranches); + } + + @Test(expected = OseeCoreException.class) + public void testGetBranchesException() throws OseeCoreException { + MultiBranchProvider provider = new MultiBranchProvider(true, null, null); + provider.getBranches().size(); + } +} \ No newline at end of file diff --git a/plugins/org.eclipse.osee.framework.branch.management.test/src/org/eclipse/osee/framework/branch/management/test/purge/PurgeTestSuite.java b/plugins/org.eclipse.osee.framework.branch.management.test/src/org/eclipse/osee/framework/branch/management/test/purge/PurgeTestSuite.java index 9834c7b05fd..1ac8f6bd60e 100644 --- a/plugins/org.eclipse.osee.framework.branch.management.test/src/org/eclipse/osee/framework/branch/management/test/purge/PurgeTestSuite.java +++ b/plugins/org.eclipse.osee.framework.branch.management.test/src/org/eclipse/osee/framework/branch/management/test/purge/PurgeTestSuite.java @@ -14,7 +14,7 @@ import org.junit.runner.RunWith; import org.junit.runners.Suite; @RunWith(Suite.class) -@Suite.SuiteClasses({BranchOperationTest.class, DeletedBranchProviderTest.class, RecursiveBranchProviderTest.class}) +@Suite.SuiteClasses({BranchOperationTest.class, DeletedBranchProviderTest.class, MultiBranchProviderTest.class}) /** * @author John Misinco */ diff --git a/plugins/org.eclipse.osee.framework.branch.management.test/src/org/eclipse/osee/framework/branch/management/test/purge/RecursiveBranchProviderTest.java b/plugins/org.eclipse.osee.framework.branch.management.test/src/org/eclipse/osee/framework/branch/management/test/purge/RecursiveBranchProviderTest.java deleted file mode 100644 index d6eefe31f1e..00000000000 --- a/plugins/org.eclipse.osee.framework.branch.management.test/src/org/eclipse/osee/framework/branch/management/test/purge/RecursiveBranchProviderTest.java +++ /dev/null @@ -1,45 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2011 Boeing. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * Boeing - initial API and implementation - *******************************************************************************/ -package org.eclipse.osee.framework.branch.management.test.purge; - -import junit.framework.Assert; -import org.eclipse.osee.framework.branch.management.purge.RecursiveBranchProvider; -import org.eclipse.osee.framework.branch.management.test.mocks.MockBranchProvider; -import org.eclipse.osee.framework.core.enums.BranchType; -import org.eclipse.osee.framework.core.exception.OseeCoreException; -import org.eclipse.osee.framework.core.model.cache.BranchFilter; -import org.junit.Test; - -/** - * @author John Misinco - */ -public class RecursiveBranchProviderTest { - - private int getExpectedNumberOfBranches() throws OseeCoreException { - return MockBranchProvider.createTestBranches().size(); - } - - @Test - public void testGetBranches() throws OseeCoreException { - BranchFilter filter = new BranchFilter(); - filter.setNegatedBranchTypes(BranchType.BASELINE); - - RecursiveBranchProvider provider = new RecursiveBranchProvider(MockBranchProvider.getRootBranch(), filter); - int numBranches = provider.getBranches().size(); - Assert.assertEquals(getExpectedNumberOfBranches(), numBranches); - } - - @Test(expected = OseeCoreException.class) - public void testGetBranchesException() throws OseeCoreException { - RecursiveBranchProvider provider = new RecursiveBranchProvider(null, null); - provider.getBranches().size(); - } -} \ No newline at end of file diff --git a/plugins/org.eclipse.osee.framework.branch.management/src/org/eclipse/osee/framework/branch/management/internal/OseeBranchService.java b/plugins/org.eclipse.osee.framework.branch.management/src/org/eclipse/osee/framework/branch/management/internal/OseeBranchService.java index 7cd28cdd44d..25370b98251 100644 --- a/plugins/org.eclipse.osee.framework.branch.management/src/org/eclipse/osee/framework/branch/management/internal/OseeBranchService.java +++ b/plugins/org.eclipse.osee.framework.branch.management/src/org/eclipse/osee/framework/branch/management/internal/OseeBranchService.java @@ -11,6 +11,7 @@ package org.eclipse.osee.framework.branch.management.internal; import java.util.ArrayList; +import java.util.Collections; import java.util.List; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.osee.framework.branch.management.IOseeBranchService; @@ -22,8 +23,8 @@ import org.eclipse.osee.framework.branch.management.creation.CreateBranchOperati import org.eclipse.osee.framework.branch.management.purge.BranchOperation; import org.eclipse.osee.framework.branch.management.purge.IBranchOperationFactory; import org.eclipse.osee.framework.branch.management.purge.IBranchesProvider; +import org.eclipse.osee.framework.branch.management.purge.MultiBranchProvider; import org.eclipse.osee.framework.branch.management.purge.PurgeBranchOperationFactory; -import org.eclipse.osee.framework.branch.management.purge.RecursiveBranchProvider; import org.eclipse.osee.framework.branch.management.purge.SingleBranchProvider; import org.eclipse.osee.framework.core.enums.BranchArchivedState; import org.eclipse.osee.framework.core.enums.BranchState; @@ -158,7 +159,7 @@ public class OseeBranchService implements IOseeBranchService { IBranchesProvider provider; if (request.isRecursive()) { - provider = new RecursiveBranchProvider(branch, new BranchFilter()); + provider = new MultiBranchProvider(true, Collections.singleton(branch), new BranchFilter()); } else { provider = new SingleBranchProvider(branch); } diff --git a/plugins/org.eclipse.osee.framework.branch.management/src/org/eclipse/osee/framework/branch/management/purge/MultiBranchProvider.java b/plugins/org.eclipse.osee.framework.branch.management/src/org/eclipse/osee/framework/branch/management/purge/MultiBranchProvider.java new file mode 100644 index 00000000000..8892474ae93 --- /dev/null +++ b/plugins/org.eclipse.osee.framework.branch.management/src/org/eclipse/osee/framework/branch/management/purge/MultiBranchProvider.java @@ -0,0 +1,59 @@ +/******************************************************************************* + * Copyright (c) 2011 Boeing. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Boeing - initial API and implementation + *******************************************************************************/ +package org.eclipse.osee.framework.branch.management.purge; + +import java.util.Collection; +import java.util.HashSet; +import java.util.Set; +import org.eclipse.osee.framework.core.exception.OseeCoreException; +import org.eclipse.osee.framework.core.model.Branch; +import org.eclipse.osee.framework.core.model.cache.BranchFilter; +import org.eclipse.osee.framework.core.util.Conditions; + +/** + * @author John Misinco + */ +public class MultiBranchProvider implements IBranchesProvider { + + private final boolean recursive; + private final Set branches; + private final BranchFilter filter; + + public MultiBranchProvider(boolean recursive, Set branches, BranchFilter filter) { + this.recursive = recursive; + this.branches = branches; + this.filter = filter; + } + + private Collection getChildBranches(Branch branch) throws OseeCoreException { + Set children = new HashSet(); + + branch.getChildBranches(children, true, filter); + if (filter.matches(branch)) { + children.add(branch); + } + return children; + } + + @Override + public Collection getBranches() throws OseeCoreException { + Conditions.checkNotNull(branches, "seeds"); + Set result = branches; + if (recursive) { + result = new HashSet(branches); + for (Branch b : branches) { + result.addAll(getChildBranches(b)); + } + } + return result; + } + +} diff --git a/plugins/org.eclipse.osee.framework.branch.management/src/org/eclipse/osee/framework/branch/management/purge/RecursiveBranchProvider.java b/plugins/org.eclipse.osee.framework.branch.management/src/org/eclipse/osee/framework/branch/management/purge/RecursiveBranchProvider.java deleted file mode 100644 index 41308ca27ea..00000000000 --- a/plugins/org.eclipse.osee.framework.branch.management/src/org/eclipse/osee/framework/branch/management/purge/RecursiveBranchProvider.java +++ /dev/null @@ -1,44 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2011 Boeing. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * Boeing - initial API and implementation - *******************************************************************************/ -package org.eclipse.osee.framework.branch.management.purge; - -import java.util.Collection; -import java.util.HashSet; -import java.util.Set; -import org.eclipse.osee.framework.core.exception.OseeCoreException; -import org.eclipse.osee.framework.core.model.Branch; -import org.eclipse.osee.framework.core.model.cache.BranchFilter; -import org.eclipse.osee.framework.core.util.Conditions; - -/** - * @author John Misinco - */ -public final class RecursiveBranchProvider implements IBranchesProvider { - private final Branch parentBranch; - private final BranchFilter filter; - - public RecursiveBranchProvider(Branch parentBranch, BranchFilter filter) { - this.parentBranch = parentBranch; - this.filter = filter; - } - - @Override - public Collection getBranches() throws OseeCoreException { - Conditions.checkNotNull(parentBranch, "seed"); - Set children = new HashSet(); - - parentBranch.getChildBranches(children, true, filter); - if (filter.matches(parentBranch)) { - children.add(parentBranch); - } - return children; - } -} \ No newline at end of file diff --git a/plugins/org.eclipse.osee.framework.server.admin/src/org/eclipse/osee/framework/server/admin/BranchManagementCommandProvider.java b/plugins/org.eclipse.osee.framework.server.admin/src/org/eclipse/osee/framework/server/admin/BranchManagementCommandProvider.java index 2603908b3c8..56e760ae2ba 100644 --- a/plugins/org.eclipse.osee.framework.server.admin/src/org/eclipse/osee/framework/server/admin/BranchManagementCommandProvider.java +++ b/plugins/org.eclipse.osee.framework.server.admin/src/org/eclipse/osee/framework/server/admin/BranchManagementCommandProvider.java @@ -11,7 +11,9 @@ package org.eclipse.osee.framework.server.admin; import java.util.ArrayList; +import java.util.HashSet; import java.util.List; +import java.util.Set; import org.eclipse.core.runtime.jobs.ISchedulingRule; import org.eclipse.core.runtime.jobs.Job; import org.eclipse.osee.framework.branch.management.ExportOptions; @@ -20,8 +22,8 @@ import org.eclipse.osee.framework.branch.management.purge.BranchOperation; import org.eclipse.osee.framework.branch.management.purge.DeletedBranchProvider; import org.eclipse.osee.framework.branch.management.purge.IBranchOperationFactory; import org.eclipse.osee.framework.branch.management.purge.IBranchesProvider; +import org.eclipse.osee.framework.branch.management.purge.MultiBranchProvider; import org.eclipse.osee.framework.branch.management.purge.PurgeBranchOperationFactory; -import org.eclipse.osee.framework.branch.management.purge.RecursiveBranchProvider; import org.eclipse.osee.framework.core.enums.BranchType; import org.eclipse.osee.framework.core.exception.OseeArgumentException; import org.eclipse.osee.framework.core.exception.OseeCoreException; @@ -157,16 +159,31 @@ public class BranchManagementCommandProvider implements CommandProvider { return internalPurgeBranch(logger, branchCache, provider); } - public Job _purge_branch_recursive(CommandInterpreter ci) throws OseeCoreException { + public Job _purge_branch(CommandInterpreter ci) throws OseeCoreException { OperationLogger logger = new CommandInterpreterLogger(ci); - String branchGuid = ci.nextArgument(); + String arg = ci.nextArgument(); + boolean recursive = false; + Set guids = new HashSet(); + + while (Strings.isValid(arg)) { + if (arg.equals("-recursive")) { + recursive = true; + } else { + guids.add(arg); + } + arg = ci.nextArgument(); + } + + Set branches = new HashSet(); BranchCache branchCache = Activator.getOseeCachingService().getBranchCache(); - Branch seed = branchCache.getByGuid(branchGuid); + for (String guid : guids) { + branches.add(branchCache.getByGuid(guid)); + } BranchFilter filter = new BranchFilter(); filter.setNegatedBranchTypes(BranchType.BASELINE); - IBranchesProvider provider = new RecursiveBranchProvider(seed, filter); + IBranchesProvider provider = new MultiBranchProvider(recursive, branches, filter); return internalPurgeBranch(logger, branchCache, provider); } @@ -186,7 +203,7 @@ public class BranchManagementCommandProvider implements CommandProvider { sb.append("\timport_branch [-exclude_baseline_txs] [-allAsRootBranches] [-minTx ] [-maxTx ] [-clean] []+ - import a specific set of branches from an exchange zip file.\n"); sb.append("\tcheck_exchange - checks an exchange file to ensure data integrity\n"); sb.append("\tpurge_deleted_branches - permenatly remove all branches that are both archived and deleted \n"); - sb.append("\tpurge_branch_recursive - removes the branch defined by guid and all its children excluding baseline branches\n"); + sb.append("\tpurge_branch [-recursive] - removes branches defined by guids, if recursive all its children excluding baseline branches are removed\n"); return sb.toString(); } } \ No newline at end of file -- cgit v1.2.3