Author: jboynes
Date: Fri Apr 14 12:53:03 2006
New Revision: 394181

URL: http://svn.apache.org/viewcvs?rev=394181&view=rev
Log:
add ContextFactoryBuilderRegistry

Added:
    
incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/builder/ContextFactoryBuilderRegistry.java
   (with props)
    
incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/builder/impl/ContextFactoryBuilderRegistryImpl.java
   (with props)
Modified:
    
incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/builder/impl/AssemblyVisitorImpl.java
    
incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/runtime/RuntimeContextImpl.java

Added: 
incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/builder/ContextFactoryBuilderRegistry.java
URL: 
http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/builder/ContextFactoryBuilderRegistry.java?rev=394181&view=auto
==============================================================================
--- 
incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/builder/ContextFactoryBuilderRegistry.java
 (added)
+++ 
incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/builder/ContextFactoryBuilderRegistry.java
 Fri Apr 14 12:53:03 2006
@@ -0,0 +1,31 @@
+/**
+ *
+ * Copyright 2006 The Apache Software Foundation
+ *
+ *  Licensed under the Apache License, Version 2.0 (the "License");
+ *  you may not use this file except in compliance with the License.
+ *  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ */
+package org.apache.tuscany.core.builder;
+
+/**
+ * System wide registry for ContextFactoryBuilder implementations.
+ *
+ * @version $Rev$ $Date$
+ */
+public interface ContextFactoryBuilderRegistry {
+    /**
+     * Register a builder. Called by extensions to register their builders.
+     *
+     * @param builder the builder to register
+     */
+    void register(ContextFactoryBuilder builder);
+}

Propchange: 
incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/builder/ContextFactoryBuilderRegistry.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/builder/ContextFactoryBuilderRegistry.java
------------------------------------------------------------------------------
    svn:keywords = Rev,Date

Modified: 
incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/builder/impl/AssemblyVisitorImpl.java
URL: 
http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/builder/impl/AssemblyVisitorImpl.java?rev=394181&r1=394180&r2=394181&view=diff
==============================================================================
--- 
incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/builder/impl/AssemblyVisitorImpl.java
 (original)
+++ 
incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/builder/impl/AssemblyVisitorImpl.java
 Fri Apr 14 12:53:03 2006
@@ -26,7 +26,7 @@
  */
 public class AssemblyVisitorImpl implements AssemblyVisitor {
 
-    List<ContextFactoryBuilder> builders;
+    private List<ContextFactoryBuilder> builders;
 
     /**
      * Constructs a visitor

Added: 
incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/builder/impl/ContextFactoryBuilderRegistryImpl.java
URL: 
http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/builder/impl/ContextFactoryBuilderRegistryImpl.java?rev=394181&view=auto
==============================================================================
--- 
incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/builder/impl/ContextFactoryBuilderRegistryImpl.java
 (added)
+++ 
incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/builder/impl/ContextFactoryBuilderRegistryImpl.java
 Fri Apr 14 12:53:03 2006
@@ -0,0 +1,38 @@
+/**
+ *
+ * Copyright 2006 The Apache Software Foundation
+ *
+ *  Licensed under the Apache License, Version 2.0 (the "License");
+ *  you may not use this file except in compliance with the License.
+ *  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ */
+package org.apache.tuscany.core.builder.impl;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.tuscany.core.builder.ContextFactoryBuilderRegistry;
+import org.apache.tuscany.core.builder.ContextFactoryBuilder;
+
+/**
+ * @version $Rev$ $Date$
+ */
+public class ContextFactoryBuilderRegistryImpl implements 
ContextFactoryBuilderRegistry {
+    private final List<ContextFactoryBuilder> builders = new ArrayList();
+
+    public void register(ContextFactoryBuilder builder) {
+        builders.add(builder);
+    }
+
+    public List<ContextFactoryBuilder> getBuilders() {
+        return builders;
+    }
+}

Propchange: 
incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/builder/impl/ContextFactoryBuilderRegistryImpl.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/builder/impl/ContextFactoryBuilderRegistryImpl.java
------------------------------------------------------------------------------
    svn:keywords = Rev,Date

Modified: 
incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/runtime/RuntimeContextImpl.java
URL: 
http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/runtime/RuntimeContextImpl.java?rev=394181&r1=394180&r2=394181&view=diff
==============================================================================
--- 
incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/runtime/RuntimeContextImpl.java
 (original)
+++ 
incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/runtime/RuntimeContextImpl.java
 Fri Apr 14 12:53:03 2006
@@ -13,39 +13,39 @@
  */
 package org.apache.tuscany.core.runtime;
 
+import java.util.List;
+
 import org.apache.tuscany.common.monitor.MonitorFactory;
 import org.apache.tuscany.common.monitor.impl.NullMonitorFactory;
 import org.apache.tuscany.core.builder.BuilderConfigException;
 import org.apache.tuscany.core.builder.ContextFactoryBuilder;
+import org.apache.tuscany.core.builder.ContextFactoryBuilderRegistry;
 import org.apache.tuscany.core.builder.HierarchicalWireBuilder;
 import org.apache.tuscany.core.builder.WireBuilder;
 import org.apache.tuscany.core.builder.impl.AssemblyVisitorImpl;
+import org.apache.tuscany.core.builder.impl.ContextFactoryBuilderRegistryImpl;
 import org.apache.tuscany.core.builder.impl.DefaultWireBuilder;
 import org.apache.tuscany.core.config.ConfigurationException;
-import org.apache.tuscany.core.context.impl.CompositeContextImpl;
-import org.apache.tuscany.core.context.impl.EventContextImpl;
-import org.apache.tuscany.core.context.RuntimeEventListener;
-import org.apache.tuscany.core.context.SystemCompositeContext;
+import org.apache.tuscany.core.context.AutowireContext;
+import org.apache.tuscany.core.context.AutowireResolutionException;
 import org.apache.tuscany.core.context.CompositeContext;
-import org.apache.tuscany.core.context.impl.AbstractContext;
+import org.apache.tuscany.core.context.ConfigurationContext;
 import org.apache.tuscany.core.context.CoreRuntimeException;
 import org.apache.tuscany.core.context.EventException;
 import org.apache.tuscany.core.context.QualifiedName;
-import org.apache.tuscany.core.context.TargetException;
 import org.apache.tuscany.core.context.ScopeContext;
-import org.apache.tuscany.core.context.AutowireResolutionException;
-import org.apache.tuscany.core.context.ConfigurationContext;
-import org.apache.tuscany.core.context.AutowireContext;
+import org.apache.tuscany.core.context.SystemCompositeContext;
+import org.apache.tuscany.core.context.TargetException;
+import org.apache.tuscany.core.context.impl.AbstractContext;
+import org.apache.tuscany.core.context.impl.CompositeContextImpl;
+import org.apache.tuscany.core.context.impl.EventContextImpl;
 import org.apache.tuscany.core.invocation.spi.ProxyFactory;
 import org.apache.tuscany.core.system.context.SystemCompositeContextImpl;
 import org.apache.tuscany.core.system.context.SystemScopeStrategy;
-import org.apache.tuscany.model.assembly.Composite;
 import org.apache.tuscany.model.assembly.AssemblyObject;
+import org.apache.tuscany.model.assembly.Composite;
 import org.apache.tuscany.model.assembly.Extensible;
 
-import java.util.ArrayList;
-import java.util.List;
-
 /**
  * Implementation of a RuntimeContext that forms the foundation for a Tuscany 
environment.
  * 
@@ -53,8 +53,6 @@
  */
 public class RuntimeContextImpl extends AbstractContext implements 
RuntimeContext {
 
-    private final List<ContextFactoryBuilder> builders;
-
     // the top-level wire builder in the runtime
     private final HierarchicalWireBuilder wireBuilder;
 
@@ -66,6 +64,8 @@
 
     private final MonitorFactory monitorFactory;
 
+    private final ContextFactoryBuilderRegistryImpl builderRegistry;
+
     /**
      * Default constructor that creates a runtime with a NullMonitorFactory 
and no builders.
      */
@@ -83,12 +83,18 @@
     public RuntimeContextImpl(MonitorFactory monitorFactory, 
List<ContextFactoryBuilder> builders, HierarchicalWireBuilder wireBuilder) {
         super(RUNTIME);
         this.monitorFactory = monitorFactory;
-        this.builders = (builders == null) ? new 
ArrayList<ContextFactoryBuilder>(1) : builders;
         this.wireBuilder = (wireBuilder == null) ? new DefaultWireBuilder() : 
wireBuilder;
 
-        rootContext = new CompositeContextImpl(ROOT, this, this, new 
RuntimeScopeStrategy(), new EventContextImpl(), this
-        );
+        rootContext = new CompositeContextImpl(ROOT, this, this, new 
RuntimeScopeStrategy(), new EventContextImpl(), this);
         systemContext = new SystemCompositeContextImpl(SYSTEM, this, this, new 
SystemScopeStrategy(), new EventContextImpl(), this);
+
+        // bootstrap the builder regsitry
+        builderRegistry = new ContextFactoryBuilderRegistryImpl();
+        if (builders != null) {
+            for (ContextFactoryBuilder builder: builders) {
+                builderRegistry.register(builder);
+            }
+        }
     }
 
     /**
@@ -97,20 +103,18 @@
      * @param monitorFactory the default [EMAIL PROTECTED] 
org.apache.tuscany.common.monitor.MonitorFactory} for this runtime
      * @param rootContext the context to use for the root of the user context 
tree
      * @param systemContext the context to use for the root of the system 
context tree
-     * @param builders a list of builders automatically made available; may be 
null
      * @param wireBuilder the top-level hierarchical wire builder for the 
runtime; if not specified, a default
      */
     public RuntimeContextImpl(MonitorFactory monitorFactory,
                               CompositeContext rootContext,
                               SystemCompositeContext systemContext,
-                              List<ContextFactoryBuilder> builders,
                               HierarchicalWireBuilder wireBuilder) {
         super(RUNTIME);
         this.rootContext = rootContext;
         this.systemContext = systemContext;
         this.monitorFactory = monitorFactory;
-        this.builders = (builders == null) ? new 
ArrayList<ContextFactoryBuilder>(1) : builders;
         this.wireBuilder = (wireBuilder == null) ? new DefaultWireBuilder() : 
wireBuilder;
+        builderRegistry = null;
     }
 
     public void start() throws CoreRuntimeException {
@@ -118,6 +122,12 @@
             return;
         }
         systemContext.start();
+        try {
+            
systemContext.registerJavaObject(ContextFactoryBuilderRegistry.class.getName(), 
ContextFactoryBuilderRegistry.class, builderRegistry);
+        } catch (ConfigurationException e) {
+            throw new AssertionError();
+        }
+
         rootContext.start();
         lifecycleState = RUNNING;
     }
@@ -133,7 +143,7 @@
 
     public void addBuilder(ContextFactoryBuilder builder) {
         assert (builder != null) : "Builder was null";
-        builders.add(builder);
+        builderRegistry.register(builder);
     }
 
     public void addBuilder(WireBuilder builder) {
@@ -203,7 +213,7 @@
     }
 
     public synchronized void build(AssemblyObject model) throws 
BuilderConfigException {
-        AssemblyVisitorImpl visitor = new AssemblyVisitorImpl(builders);
+        AssemblyVisitorImpl visitor = new 
AssemblyVisitorImpl(builderRegistry.getBuilders());
         visitor.start(model);
     }
 


Reply via email to