Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEike Stepper2021-11-03 15:13:04 +0000
committerEike Stepper2021-11-03 15:13:04 +0000
commit4d6e437df30ffcb6e2df64911945cf28102f9eeb (patch)
tree172db1959f5d52a101273ac4d624c31260157107 /plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf
parenta44e2799d89eb22157a9d0728b1669f71869b311 (diff)
downloadcdo-4d6e437df30ffcb6e2df64911945cf28102f9eeb.tar.gz
cdo-4d6e437df30ffcb6e2df64911945cf28102f9eeb.tar.xz
cdo-4d6e437df30ffcb6e2df64911945cf28102f9eeb.zip
[260036] Provide "revert to the history revision" operation
https://bugs.eclipse.org/bugs/show_bug.cgi?id=260036
Diffstat (limited to 'plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf')
-rw-r--r--plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/commit/CDOChangeSetData.java13
-rw-r--r--plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/commit/CDOChangeSetDataImpl.java27
-rw-r--r--plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/commit/CDOCommitHistoryImpl.java6
-rw-r--r--plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/commit/CDOCommitInfoImpl.java7
-rw-r--r--plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/commit/DelegatingCommitInfo.java6
-rw-r--r--plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/commit/FailureCommitInfo.java6
-rw-r--r--plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/branch/CDOBranchUtil.java6
-rw-r--r--plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/branch/InternalCDOBranchManager.java5
-rw-r--r--plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/commit/CDOChangeSetSegment.java27
-rw-r--r--plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/revision/CDORevisionProviderWithSynthetics.java25
-rw-r--r--plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/revision/ManagedRevisionProvider.java45
11 files changed, 143 insertions, 30 deletions
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/commit/CDOChangeSetData.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/commit/CDOChangeSetData.java
index e17b43c131..f38448cd7c 100644
--- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/commit/CDOChangeSetData.java
+++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/commit/CDOChangeSetData.java
@@ -52,27 +52,34 @@ public interface CDOChangeSetData extends CDOChangeKindProvider
public void merge(CDOChangeSetData changeSetData);
/**
- * Returns a collection of keys denoting which revisions have been added in the context of a commit operation.
+ * Returns a list of keys denoting which revisions have been added in the context of a commit operation.
* Depending on various conditions like change subscriptions particular elements can also be full {@link CDORevision
* revisions}.
*/
public List<CDOIDAndVersion> getNewObjects();
/**
- * Returns a collection of revision keys denoting which (original) revisions have been changed in the context of a
+ * Returns a list of revision keys denoting which (original) revisions have been changed in the context of a
* commit operation. Depending on various conditions like change subscriptions particular elements can also be full
* {@link CDORevisionDelta revision deltas}.
*/
public List<CDORevisionKey> getChangedObjects();
/**
- * Returns a collection of keys denoting which revisions have been revised (corresponds to detached objects) in the
+ * Returns a list of keys denoting which revisions have been revised (corresponds to detached objects) in the
* context of a commit operation. Depending on various conditions the version part of particular elements can be
* {@link CDOBranchVersion#UNSPECIFIED_VERSION unspecified}.
*/
public List<CDOIDAndVersion> getDetachedObjects();
/**
+ * Returns a list of ids denoting which revisions have been added, changed, or revised in the context of a commit operation.
+ *
+ * @since 4.15
+ */
+ public List<CDOID> getAffectedIDs();
+
+ /**
* @since 4.1
*/
public Map<CDOID, CDOChangeKind> getChangeKinds();
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/commit/CDOChangeSetDataImpl.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/commit/CDOChangeSetDataImpl.java
index 8a72deb9cf..9fa349970d 100644
--- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/commit/CDOChangeSetDataImpl.java
+++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/commit/CDOChangeSetDataImpl.java
@@ -199,6 +199,12 @@ public class CDOChangeSetDataImpl implements CDOChangeSetData
}
@Override
+ public List<CDOID> getAffectedIDs()
+ {
+ return getAffectedIDs(this);
+ }
+
+ @Override
public synchronized Map<CDOID, CDOChangeKind> getChangeKinds()
{
if (changeKindCache == null)
@@ -222,6 +228,27 @@ public class CDOChangeSetDataImpl implements CDOChangeSetData
newObjects.size(), changedObjects.size(), detachedObjects.size());
}
+ public static List<CDOID> getAffectedIDs(CDOChangeSetData changeSetData)
+ {
+ List<CDOID> ids = new ArrayList<>();
+ for (CDOIDAndVersion object : changeSetData.getNewObjects())
+ {
+ ids.add(object.getID());
+ }
+
+ for (CDORevisionKey object : changeSetData.getChangedObjects())
+ {
+ ids.add(object.getID());
+ }
+
+ for (CDOIDAndVersion object : changeSetData.getDetachedObjects())
+ {
+ ids.add(object.getID());
+ }
+
+ return ids;
+ }
+
public static String format(CDOChangeSetData changeSetData)
{
StringBuilder builder = new StringBuilder();
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/commit/CDOCommitHistoryImpl.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/commit/CDOCommitHistoryImpl.java
index a320771e07..de90013eaf 100644
--- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/commit/CDOCommitHistoryImpl.java
+++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/commit/CDOCommitHistoryImpl.java
@@ -731,6 +731,12 @@ public class CDOCommitHistoryImpl extends Container<CDOCommitInfo> implements CD
}
@Override
+ public List<CDOID> getAffectedIDs()
+ {
+ return null;
+ }
+
+ @Override
public List<CDOIDAndVersion> getNewObjects()
{
return null;
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/commit/CDOCommitInfoImpl.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/commit/CDOCommitInfoImpl.java
index 413461e38d..db5abcb189 100644
--- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/commit/CDOCommitInfoImpl.java
+++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/commit/CDOCommitInfoImpl.java
@@ -198,6 +198,13 @@ public class CDOCommitInfoImpl extends CDOBranchPointImpl implements CDOCommitIn
}
@Override
+ public synchronized List<CDOID> getAffectedIDs()
+ {
+ loadCommitDataIfNeeded();
+ return commitData.getAffectedIDs();
+ }
+
+ @Override
public Map<CDOID, CDOChangeKind> getChangeKinds()
{
loadCommitDataIfNeeded();
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/commit/DelegatingCommitInfo.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/commit/DelegatingCommitInfo.java
index bbb00e6a32..50be5d21be 100644
--- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/commit/DelegatingCommitInfo.java
+++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/commit/DelegatingCommitInfo.java
@@ -132,6 +132,12 @@ public abstract class DelegatingCommitInfo implements CDOCommitInfo
}
@Override
+ public List<CDOID> getAffectedIDs()
+ {
+ return getDelegate().getAffectedIDs();
+ }
+
+ @Override
public Map<CDOID, CDOChangeKind> getChangeKinds()
{
return getDelegate().getChangeKinds();
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/commit/FailureCommitInfo.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/commit/FailureCommitInfo.java
index c88fad99b4..230e288fd2 100644
--- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/commit/FailureCommitInfo.java
+++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/commit/FailureCommitInfo.java
@@ -141,6 +141,12 @@ public class FailureCommitInfo implements CDOCommitInfo
}
@Override
+ public List<CDOID> getAffectedIDs()
+ {
+ return Collections.emptyList();
+ }
+
+ @Override
public Map<CDOID, CDOChangeKind> getChangeKinds()
{
return Collections.emptyMap();
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/branch/CDOBranchUtil.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/branch/CDOBranchUtil.java
index ccbb2eef06..bd4d72bf97 100644
--- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/branch/CDOBranchUtil.java
+++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/branch/CDOBranchUtil.java
@@ -219,6 +219,12 @@ public final class CDOBranchUtil
}
}
+ /**
+ * Returns <code>true</code> if the first given branch point "contained" is reachable from the second given branch point "container"
+ * by following the {@link CDOBranch#getBase() branch bases} <i>upwards</i>, <code>false</code> otherwise.
+ * <p>
+ *
+ */
public static boolean isContainedBy(CDOBranchPoint contained, CDOBranchPoint container)
{
CDOBranch containerBranch = container.getBranch();
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/branch/InternalCDOBranchManager.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/branch/InternalCDOBranchManager.java
index 6eecc7344e..7f52bf4d21 100644
--- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/branch/InternalCDOBranchManager.java
+++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/branch/InternalCDOBranchManager.java
@@ -356,11 +356,6 @@ public interface InternalCDOBranchManager extends CDOBranchManager, ILifecycle
*/
public interface BranchLoader4 extends BranchLoader3
{
- // public CDOBranchPoint changeTag(AtomicInteger modCount, String oldName, String newName, CDOBranchPoint
- // branchPoint);
- //
- // public void loadTags(AtomicInteger modCount, String name, Consumer<BranchInfo> handler);
-
public CDOBranchPoint changeTag(AtomicInteger modCount, String oldName, String newName, CDOBranchPoint branchPoint);
public void loadTags(String name, Consumer<BranchInfo> handler);
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/commit/CDOChangeSetSegment.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/commit/CDOChangeSetSegment.java
index 7df98e380f..a73050d07b 100644
--- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/commit/CDOChangeSetSegment.java
+++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/commit/CDOChangeSetSegment.java
@@ -160,16 +160,11 @@ public class CDOChangeSetSegment implements CDOBranchPoint
*/
public static CDOChangeSetSegment[] createFrom(long startTime, CDOBranchPoint endPoint)
{
- final LinkedList<CDOChangeSetSegment> result = new LinkedList<>();
+ LinkedList<CDOChangeSetSegment> result = new LinkedList<>();
- handleSegments(startTime, endPoint, new Handler()
- {
- @Override
- public boolean handleSegment(CDOChangeSetSegment segment)
- {
- result.addFirst(segment);
- return true;
- }
+ handleSegments(startTime, endPoint, (Handler)segment -> {
+ result.addFirst(segment);
+ return true;
});
return result.toArray(new CDOChangeSetSegment[result.size()]);
@@ -177,16 +172,11 @@ public class CDOChangeSetSegment implements CDOBranchPoint
public static CDOChangeSetSegment[] createFrom(CDOBranchPoint startPoint, CDOBranchPoint endPoint)
{
- final LinkedList<CDOChangeSetSegment> result = new LinkedList<>();
+ LinkedList<CDOChangeSetSegment> result = new LinkedList<>();
- handleSegments(startPoint, endPoint, new Handler()
- {
- @Override
- public boolean handleSegment(CDOChangeSetSegment segment)
- {
- result.addFirst(segment);
- return true;
- }
+ handleSegments(startPoint, endPoint, (Handler)segment -> {
+ result.addFirst(segment);
+ return true;
});
return result.toArray(new CDOChangeSetSegment[result.size()]);
@@ -212,6 +202,7 @@ public class CDOChangeSetSegment implements CDOBranchPoint
* @author Eike Stepper
* @since 4.6
*/
+ @FunctionalInterface
public interface Handler
{
public boolean handleSegment(CDOChangeSetSegment segment);
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/revision/CDORevisionProviderWithSynthetics.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/revision/CDORevisionProviderWithSynthetics.java
new file mode 100644
index 0000000000..55f6a43950
--- /dev/null
+++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/revision/CDORevisionProviderWithSynthetics.java
@@ -0,0 +1,25 @@
+/*
+ * Copyright (c) 2021 Eike Stepper (Loehne, Germany) and others.
+ * 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:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.emf.cdo.spi.common.revision;
+
+import org.eclipse.emf.cdo.common.id.CDOID;
+import org.eclipse.emf.cdo.common.revision.CDORevisionProvider;
+
+/**
+ * A revision provider that can also provide {@link SyntheticCDORevision synthetic revisions}.
+ *
+ * @author Eike Stepper
+ * @since 4.15
+ */
+public interface CDORevisionProviderWithSynthetics extends CDORevisionProvider
+{
+ public SyntheticCDORevision getSynthetic(CDOID id);
+}
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/revision/ManagedRevisionProvider.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/revision/ManagedRevisionProvider.java
index b57ee09572..a2997234d8 100644
--- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/revision/ManagedRevisionProvider.java
+++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/revision/ManagedRevisionProvider.java
@@ -17,21 +17,28 @@ import org.eclipse.emf.cdo.common.revision.CDORevisionManager;
import org.eclipse.emf.cdo.common.revision.CDORevisionProvider;
/**
- * If the meaning of this type isn't clear, there really should be more of a description here...
+ * A revision provider backed by a {@link CDORevisionManager revision manager} that provides revisions which are
+ * {@link CDORevision#isValid(CDOBranchPoint) valid} at the configured {@link #getBranchPoint() branch point}.
*
* @author Eike Stepper
* @since 4.0
*/
public class ManagedRevisionProvider implements CDORevisionProvider
{
- private CDORevisionManager revisionManager;
+ /**
+ * @since 4.15
+ */
+ protected final InternalCDORevisionManager revisionManager;
- private CDOBranchPoint branchPoint;
+ /**
+ * @since 4.15
+ */
+ protected final CDOBranchPoint branchPoint;
public ManagedRevisionProvider(CDORevisionManager revisionManager, CDOBranchPoint branchPoint)
{
this.branchPoint = branchPoint;
- this.revisionManager = revisionManager;
+ this.revisionManager = (InternalCDORevisionManager)revisionManager;
}
public CDORevisionManager getRevisionManager()
@@ -49,4 +56,34 @@ public class ManagedRevisionProvider implements CDORevisionProvider
{
return revisionManager.getRevision(id, branchPoint, CDORevision.UNCHUNKED, CDORevision.DEPTH_NONE, true);
}
+
+ /**
+ * @since 4.15
+ */
+ public CDORevisionProviderWithSynthetics withSynthetics()
+ {
+ return new WithSynthetics(revisionManager, branchPoint);
+ }
+
+ /**
+ * A managed revision provider that can also provide {@link SyntheticCDORevision synthetic revisions}.
+ *
+ * @author Eike Stepper
+ * @since 4.15
+ */
+ public static class WithSynthetics extends ManagedRevisionProvider implements CDORevisionProviderWithSynthetics
+ {
+ public WithSynthetics(CDORevisionManager revisionManager, CDOBranchPoint branchPoint)
+ {
+ super(revisionManager, branchPoint);
+ }
+
+ @Override
+ public SyntheticCDORevision getSynthetic(CDOID id)
+ {
+ SyntheticCDORevision[] synthetic = { null };
+ revisionManager.getRevision(id, branchPoint, CDORevision.UNCHUNKED, CDORevision.DEPTH_NONE, true, synthetic);
+ return synthetic[0];
+ }
+ }
}

Back to the top