diff options
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.java | 74 |
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); |