Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEike Stepper2021-11-09 10:23:01 +0000
committerEike Stepper2021-11-09 10:23:01 +0000
commitc051cd442caed21073948171a0924a6eb8db8f1b (patch)
tree4e695d82b76040aa221d78876e754548b2f8fc32 /plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common
parent0061080e02bfb70d3e32cbf2790ce1117f9aa326 (diff)
downloadcdo-c051cd442caed21073948171a0924a6eb8db8f1b.tar.gz
cdo-c051cd442caed21073948171a0924a6eb8db8f1b.tar.xz
cdo-c051cd442caed21073948171a0924a6eb8db8f1b.zip
[444055] Add ability to delete branches
https://bugs.eclipse.org/bugs/show_bug.cgi?id=444055
Diffstat (limited to 'plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common')
-rw-r--r--plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/branch/CDOBranchManagerImpl.java60
1 files changed, 60 insertions, 0 deletions
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/branch/CDOBranchManagerImpl.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/branch/CDOBranchManagerImpl.java
index 0305705fc3..626d446aee 100644
--- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/branch/CDOBranchManagerImpl.java
+++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/branch/CDOBranchManagerImpl.java
@@ -32,7 +32,10 @@ import org.eclipse.emf.cdo.spi.common.branch.InternalCDOBranchManager.BranchLoad
import org.eclipse.net4j.util.collection.Pair;
import org.eclipse.net4j.util.container.Container;
+import org.eclipse.net4j.util.container.ContainerEvent;
+import org.eclipse.net4j.util.container.IContainerDelta;
import org.eclipse.net4j.util.event.Event;
+import org.eclipse.net4j.util.event.IListener;
import org.eclipse.net4j.util.om.monitor.OMMonitor;
import org.eclipse.net4j.util.ref.ReferenceValueMap;
@@ -42,6 +45,7 @@ import java.text.MessageFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.ConcurrentModificationException;
+import java.util.Iterator;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Map;
@@ -179,6 +183,12 @@ public class CDOBranchManagerImpl extends Container<CDOBranch> implements Intern
}
}
+ CDOTagListImpl tagList = getTagListOrNull();
+ if (tagList != null)
+ {
+ tagList.branchesDeleted(deletedBranches);
+ }
+
fireBranchDeletedEvents(deletedBranches);
fireEvent(new BranchChangedEvent(branch, changeKind, branchIDs));
break;
@@ -816,6 +826,56 @@ public class CDOBranchManagerImpl extends Container<CDOBranch> implements Intern
return result.toArray(new CDOBranchTag[result.size()]);
}
+ public void branchesDeleted(CDOBranch[] deletedBranches)
+ {
+ IListener[] listeners = getListeners();
+ ContainerEvent<CDOBranchTag> event = listeners.length == 0 ? null : new ContainerEvent<>(this);
+ List<CDOBranchTagImpl> deletedTags = new ArrayList<>();
+
+ synchronized (tags)
+ {
+ synchronized (list)
+ {
+ for (Iterator<CDOBranchTag> it = list.iterator(); it.hasNext();)
+ {
+ CDOBranchTagImpl tag = (CDOBranchTagImpl)it.next();
+
+ for (CDOBranch deletedBranch : deletedBranches)
+ {
+ if (tag.getBranch() == deletedBranch)
+ {
+ it.remove();
+ tags.remove(tag.getName());
+ tag.deleteInternal();
+
+ if (event != null)
+ {
+ event.addDelta(tag, IContainerDelta.Kind.REMOVED);
+ }
+
+ if (tag.hasListeners())
+ {
+ deletedTags.add(tag);
+ }
+
+ break;
+ }
+ }
+ }
+ }
+ }
+
+ if (event != null && !event.isEmpty())
+ {
+ fireEvent(event, listeners);
+ }
+
+ for (CDOBranchTagImpl deletedTag : deletedTags)
+ {
+ deletedTag.fireTagDeletedEvent();
+ }
+ }
+
private void addTag(BranchInfo branchInfo)
{
String name = branchInfo.getName();

Back to the top