diff options
author | Eike Stepper | 2021-11-09 10:23:01 +0000 |
---|---|---|
committer | Eike Stepper | 2021-11-09 10:23:01 +0000 |
commit | c051cd442caed21073948171a0924a6eb8db8f1b (patch) | |
tree | 4e695d82b76040aa221d78876e754548b2f8fc32 /plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common | |
parent | 0061080e02bfb70d3e32cbf2790ce1117f9aa326 (diff) | |
download | cdo-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.java | 60 |
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(); |