Added more flexible ways to create DataContextFactoryRegistry. In the Membrane sub-project it will become relevant (for METAMODEL-1159) to be able to make copies of the "default" registry, but with additional tenant-specific factories, too. So this change makes it easier for Membrane to copy a DataContextFactoryRegistry.
Project: http://git-wip-us.apache.org/repos/asf/metamodel/repo Commit: http://git-wip-us.apache.org/repos/asf/metamodel/commit/f82a5d39 Tree: http://git-wip-us.apache.org/repos/asf/metamodel/tree/f82a5d39 Diff: http://git-wip-us.apache.org/repos/asf/metamodel/diff/f82a5d39 Branch: refs/heads/master Commit: f82a5d39b3dfd7a619f8302f2cac2a6788dc6a7b Parents: a9d0041 Author: Kasper Sørensen <[email protected]> Authored: Wed Nov 7 21:48:07 2018 -0800 Committer: Kasper Sørensen <[email protected]> Committed: Wed Nov 7 21:48:07 2018 -0800 ---------------------------------------------------------------------- .../factory/DataContextFactoryRegistryImpl.java | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/metamodel/blob/f82a5d39/core/src/main/java/org/apache/metamodel/factory/DataContextFactoryRegistryImpl.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/metamodel/factory/DataContextFactoryRegistryImpl.java b/core/src/main/java/org/apache/metamodel/factory/DataContextFactoryRegistryImpl.java index 0dfb897..91dc480 100644 --- a/core/src/main/java/org/apache/metamodel/factory/DataContextFactoryRegistryImpl.java +++ b/core/src/main/java/org/apache/metamodel/factory/DataContextFactoryRegistryImpl.java @@ -26,15 +26,19 @@ import java.util.ServiceLoader; import org.apache.metamodel.DataContext; -public class DataContextFactoryRegistryImpl implements DataContextFactoryRegistry { +public class DataContextFactoryRegistryImpl implements DataContextFactoryRegistry, Cloneable { private static final DataContextFactoryRegistry DEFAULT_INSTANCE; static { + DEFAULT_INSTANCE = createFromClasspath(); + } + + public static DataContextFactoryRegistry createFromClasspath() { final ResourceFactoryRegistry resourceFactoryRegistry = ResourceFactoryRegistryImpl.getDefaultInstance(); final DataContextFactoryRegistryImpl registry = new DataContextFactoryRegistryImpl(resourceFactoryRegistry); registry.discoverFromClasspath(); - DEFAULT_INSTANCE = registry; + return registry; } public static DataContextFactoryRegistry getDefaultInstance() { @@ -49,6 +53,17 @@ public class DataContextFactoryRegistryImpl implements DataContextFactoryRegistr this.resourceFactoryRegistry = resourceFactoryRegistry; } + public DataContextFactoryRegistryImpl(Collection<DataContextFactory> factories, + ResourceFactoryRegistry resourceFactoryRegistry) { + this.factories = new ArrayList<>(factories); + this.resourceFactoryRegistry = resourceFactoryRegistry; + } + + @Override + public DataContextFactoryRegistryImpl clone() { + return new DataContextFactoryRegistryImpl(factories, resourceFactoryRegistry); + } + @Override public void addFactory(DataContextFactory factory) { factories.add(factory);
