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);

Reply via email to