Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/org.eclipse.emf.cdo.compare/src/org/eclipse/emf/cdo/compare/CDOCompare.java')
-rw-r--r--plugins/org.eclipse.emf.cdo.compare/src/org/eclipse/emf/cdo/compare/CDOCompare.java74
1 files changed, 70 insertions, 4 deletions
diff --git a/plugins/org.eclipse.emf.cdo.compare/src/org/eclipse/emf/cdo/compare/CDOCompare.java b/plugins/org.eclipse.emf.cdo.compare/src/org/eclipse/emf/cdo/compare/CDOCompare.java
index 552f856110..e2d7d6c9a3 100644
--- a/plugins/org.eclipse.emf.cdo.compare/src/org/eclipse/emf/cdo/compare/CDOCompare.java
+++ b/plugins/org.eclipse.emf.cdo.compare/src/org/eclipse/emf/cdo/compare/CDOCompare.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2013, 2015, 2016, 2019-2021 Eike Stepper (Loehne, Germany) and others.
+ * Copyright (c) 2013, 2015, 2016, 2019-2022 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
@@ -64,6 +64,7 @@ import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
+import java.util.function.Supplier;
/**
* A class with many overridable factory methods that help to create EMF {@link Comparison comparisons}.
@@ -76,6 +77,8 @@ public class CDOCompare
private static final boolean USE_RCP_REGISTRIES;
+ private static final ThreadLocal<Supplier<CDOCompare>> SUPPLIER = new ThreadLocal<>();
+
static
{
if (IGNORE_RCP_REGISTRIES)
@@ -107,6 +110,14 @@ public class CDOCompare
}
}
+ /**
+ * @since 4.6
+ */
+ public boolean useRCPRegistries()
+ {
+ return USE_RCP_REGISTRIES;
+ }
+
public Comparison compare(IComparisonScope scope)
{
Function<EObject, String> idFunction = createIDFunction();
@@ -146,7 +157,7 @@ public class CDOCompare
{
Builder builder = EMFCompare.builder();
- if (USE_RCP_REGISTRIES)
+ if (useRCPRegistries())
{
org.eclipse.emf.compare.rcp.internal.extension.IEMFCompareBuilderConfigurator configurator = //
org.eclipse.emf.compare.rcp.internal.extension.impl.EMFCompareBuilderConfigurator.createDefault();
@@ -202,6 +213,11 @@ public class CDOCompare
protected IMatchEngine.Factory.Registry createMatchEngineFactoryRegistry(IEObjectMatcher matcher, IComparisonFactory comparisonFactory)
{
+ if (useRCPRegistries())
+ {
+ return null;
+ }
+
IMatchEngine.Factory.Registry registry = new MatchEngineFactoryRegistryImpl();
registry.add(new CDOMatchEngine.Factory(matcher, comparisonFactory));
return registry;
@@ -209,6 +225,11 @@ public class CDOCompare
protected IDiffEngine createDiffEngine()
{
+ if (useRCPRegistries())
+ {
+ return null;
+ }
+
return new CDODiffEngine();
}
@@ -232,9 +253,36 @@ public class CDOCompare
return null;
}
+ /**
+ * @since 4.7
+ */
+ public static CDOCompare create()
+ {
+ Supplier<CDOCompare> supplier = SUPPLIER.get();
+ if (supplier != null)
+ {
+ SUPPLIER.remove();
+ return supplier.get();
+ }
+
+ return new CDOCompare();
+ }
+
+ /**
+ * @since 4.7
+ */
+ public static void setCompareSupplier(Supplier<CDOCompare> supplier)
+ {
+ SUPPLIER.set(supplier);
+ }
+
+ /**
+ * @deprecated As 4.7 use {@link CDOCompareUtil#getScope(Comparison)}.
+ */
+ @Deprecated
public static IComparisonScope getScope(Comparison comparison)
{
- return EMFUtil.getAdapter(comparison, IComparisonScope.class);
+ return CDOCompareUtil.getScope(comparison);
}
/**
@@ -460,7 +508,10 @@ public class CDOCompare
*/
public static class CDOMatchEngine extends DefaultMatchEngine
{
- CDOMatchEngine(IEObjectMatcher matcher, IComparisonFactory comparisonFactory)
+ /**
+ * @since 4.6
+ */
+ public CDOMatchEngine(IEObjectMatcher matcher, IComparisonFactory comparisonFactory)
{
super(matcher, comparisonFactory);
}
@@ -483,6 +534,21 @@ public class CDOCompare
private int ranking;
+ /**
+ * Default factory configuration used by EMF Compare diff engine factory extension point
+ *
+ * @since 4.6
+ */
+ public Factory()
+ {
+ CDOCompare compare = CDOCompare.create();
+ CDOIDFunction idFunction = compare.createIDFunction();
+ IdentifierEObjectMatcher matcher = compare.createMatcher(idFunction);
+ IEqualityHelperFactory equalityHelperFactory = compare.createEqualityHelperFactory();
+ IComparisonFactory comparisonFactory = compare.createComparisonFactory(equalityHelperFactory);
+ matchEngine = createMatchEngine(matcher, comparisonFactory);
+ }
+
public Factory(IEObjectMatcher matcher, IComparisonFactory comparisonFactory)
{
matchEngine = createMatchEngine(matcher, comparisonFactory);

Back to the top