Added: 
incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/system/assembly/impl/SystemModuleImpl.java
URL: 
http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/system/assembly/impl/SystemModuleImpl.java?rev=389638&view=auto
==============================================================================
--- 
incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/system/assembly/impl/SystemModuleImpl.java
 (added)
+++ 
incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/system/assembly/impl/SystemModuleImpl.java
 Tue Mar 28 16:18:28 2006
@@ -0,0 +1,266 @@
+/**
+ *
+ *  Copyright 2005 The Apache Software Foundation or its licensors, as 
applicable.
+ *
+ *  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.system.assembly.impl;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.tuscany.core.system.assembly.SystemModule;
+import org.apache.tuscany.model.assembly.AssemblyFactory;
+import org.apache.tuscany.model.assembly.AssemblyModelContext;
+import org.apache.tuscany.model.assembly.AssemblyModelVisitor;
+import org.apache.tuscany.model.assembly.Component;
+import org.apache.tuscany.model.assembly.ComponentType;
+import org.apache.tuscany.model.assembly.ConfiguredProperty;
+import org.apache.tuscany.model.assembly.ConfiguredReference;
+import org.apache.tuscany.model.assembly.ConfiguredService;
+import org.apache.tuscany.model.assembly.EntryPoint;
+import org.apache.tuscany.model.assembly.ExternalService;
+import org.apache.tuscany.model.assembly.ModuleFragment;
+import org.apache.tuscany.model.assembly.Multiplicity;
+import org.apache.tuscany.model.assembly.OverrideOption;
+import org.apache.tuscany.model.assembly.Reference;
+import org.apache.tuscany.model.assembly.Service;
+import org.apache.tuscany.model.assembly.ServiceContract;
+import org.apache.tuscany.model.assembly.ServiceURI;
+import org.apache.tuscany.model.assembly.Wire;
+import org.apache.tuscany.model.assembly.impl.AggregateImpl;
+
+/**
+ * An implementation of Module.
+ */
+public class SystemModuleImpl extends AggregateImpl implements SystemModule {
+    
+    private List<ModuleFragment> moduleFragments = new 
ArrayList<ModuleFragment>();
+    private Map<String, ModuleFragment> moduleFragmentsMap;
+    private ComponentType componentType;
+    private Object contextFactory;
+
+    /**
+     * Constructor
+     */
+    protected SystemModuleImpl() {
+    }
+    
+    /**
+     * @see 
org.apache.tuscany.model.assembly.ComponentImplementation#getComponentType()
+     */
+    public ComponentType getComponentType() {
+        return componentType;
+    }
+    
+    /**
+     * @see 
org.apache.tuscany.model.assembly.ComponentImplementation#setComponentType(org.apache.tuscany.model.assembly.ComponentType)
+     */
+    public void setComponentType(ComponentType componentType) {
+        checkNotFrozen();
+        this.componentType=componentType;
+    }
+
+    /**
+     * @see org.apache.tuscany.model.assembly.Module#getModuleFragments()
+     */
+    public List<ModuleFragment> getModuleFragments() {
+        return moduleFragments;
+    }
+
+    /**
+     * @see 
org.apache.tuscany.model.assembly.Module#getModuleFragment(java.lang.String)
+     */
+    public ModuleFragment getModuleFragment(String name) {
+        checkInitialized();
+        return moduleFragmentsMap.get(name);
+    }
+
+    /**
+     * @see 
org.apache.tuscany.model.assembly.AssemblyModelObject#initialize(org.apache.tuscany.model.assembly.AssemblyModelContext)
+     */
+    public void initialize(AssemblyModelContext modelContext) {
+        if (isInitialized())
+            return;
+        
+        // Populate map of module fragments
+        moduleFragmentsMap = new HashMap<String, ModuleFragment>();
+        for (ModuleFragment moduleFragment : moduleFragments) {
+            moduleFragmentsMap.put(moduleFragment.getName(), moduleFragment);
+            
+            // Add all WSDL imports, components, entry points and external 
services from the module fragments
+            getWSDLImports().addAll(moduleFragment.getWSDLImports());
+            getComponents().addAll(moduleFragment.getComponents());
+            getEntryPoints().addAll(moduleFragment.getEntryPoints());
+            getExternalServices().addAll(moduleFragment.getExternalServices());
+            
+            // Add all the wires from the module fragments
+            getWires().addAll(moduleFragment.getWires());
+            
+            moduleFragment.initialize(modelContext);
+        }
+        
+        // Initialize the aggregate
+        super.initialize(modelContext);
+
+        // Derive the component type from the entry points and external 
services in the module
+        // Also derive properties from the overridable properties of the 
components in the module
+        if (componentType==null) {
+            AssemblyFactory factory = modelContext.getAssemblyFactory();
+            componentType = factory.createComponentType();
+            for (EntryPoint entryPoint : getEntryPoints()) {
+                Service service = factory.createService();
+                service.setName(entryPoint.getName());
+                ServiceContract serviceContract = 
entryPoint.getConfiguredService().getService().getServiceContract();
+                if (serviceContract != null)
+                    service.setServiceContract(serviceContract);
+                componentType.getServices().add(service);
+
+                ConfiguredReference configuredReference = 
entryPoint.getConfiguredReference();
+                ServiceURI sourceURI = factory.createServiceURI(null, 
entryPoint, configuredReference);
+                for (String target : configuredReference.getTargets()) {
+                    ServiceURI targetURI =factory.createServiceURI(null, 
target);
+                    Wire wire=factory.createWire();
+                    wire.setSource(sourceURI);
+                    wire.setTarget(targetURI);
+                    getWires().add(wire);
+                }
+            }
+            for (ExternalService externalService : getExternalServices()) {
+                if (externalService.getOverrideOption()==null || 
externalService.getOverrideOption()==OverrideOption.NO)
+                    continue;
+                Reference reference = factory.createReference();
+                reference.setName(externalService.getName());
+                ServiceContract serviceContract = 
externalService.getConfiguredService().getService().getServiceContract();
+                if (serviceContract != null)
+                    reference.setServiceContract(serviceContract);
+                componentType.getReferences().add(reference);
+            }
+            for (Component component : getComponents()) {
+                for (ConfiguredProperty configuredProperty : 
component.getConfiguredProperties()) {
+                    if (configuredProperty.getOverrideOption()==null || 
configuredProperty.getOverrideOption()==OverrideOption.NO)
+                        continue;
+                    
componentType.getProperties().add(configuredProperty.getProperty());
+                }
+
+                for (ConfiguredReference configuredReference : 
component.getConfiguredReferences().values()) {
+                    // Create a wire
+                    ServiceURI sourceURI =factory.createServiceURI(null, 
component, configuredReference);
+                    for (String target : configuredReference.getTargets()) {
+                        ServiceURI targetURI =factory.createServiceURI(null, 
target);
+                        Wire wire=factory.createWire();
+                        wire.setSource(sourceURI);
+                        wire.setTarget(targetURI);
+                        getWires().add(wire);
+                    }
+                }
+            }
+        }
+        componentType.initialize(modelContext);
+
+
+        // Wire the module parts
+        for (Wire wire : getWires()) {
+
+            // Get the source reference
+            ServiceURI sourceURI=wire.getSource();
+            ConfiguredReference configuredReference = null;
+            String partName = sourceURI.getPartName();
+            String referenceName = sourceURI.getServiceName();
+            if (referenceName != null) {
+                Component component = getComponent(partName);
+                if (component != null) {
+                    configuredReference = 
component.getConfiguredReference(referenceName);
+                }
+            } else {
+                EntryPoint entryPoint = getEntryPoint(partName);
+                if (entryPoint != null) {
+                    configuredReference = entryPoint.getConfiguredReference();
+                }
+            }
+            if (configuredReference == null) {
+                throw new IllegalArgumentException("Cannot find wire source " 
+ sourceURI.getAddress());
+            } else {
+
+                // Resolve the target service endpoint
+                ServiceURI targetURI = wire.getTarget();
+                ConfiguredService configuredService = 
getConfiguredService(targetURI);
+                if (configuredService != null) {
+
+                    // Wire the reference to the target
+                    Multiplicity 
multiplicity=configuredReference.getReference().getMultiplicity();
+                    if (multiplicity==Multiplicity.ZERO_N || 
multiplicity==Multiplicity.ONE_N) {
+                        
configuredReference.getTargetConfiguredServices().add(configuredService);
+                    } else {
+                        
configuredReference.getTargetConfiguredServices().clear();
+                        
configuredReference.getTargetConfiguredServices().add(configuredService);
+                    }
+                } else {
+                    throw new IllegalArgumentException("Cannot find service 
for " + targetURI.getAddress());
+                }
+            }
+        }
+    }
+        
+    /**
+     * @see org.apache.tuscany.model.assembly.AssemblyModelObject#freeze()
+     */
+    public void freeze() {
+        if (isFrozen())
+            return;
+        super.freeze();
+        
+        // Freeze component type and module fragments
+        if (componentType!=null)
+            componentType.freeze();
+        moduleFragments=Collections.unmodifiableList(moduleFragments);
+        freeze(moduleFragments);
+    }
+
+    /**
+     * @see 
org.apache.tuscany.model.assembly.ContextFactoryHolder#getContextFactory()
+     */
+    public Object getContextFactory() {
+        return contextFactory;
+    }
+
+    /**
+     * @see 
org.apache.tuscany.model.assembly.ContextFactoryHolder#setContextFactory(java.lang.Object)
+     */
+    public void setContextFactory(Object configuration) {
+        checkNotFrozen();
+        this.contextFactory = configuration;
+    }
+
+    /**
+     * @see 
org.apache.tuscany.model.assembly.impl.AggregateImpl#accept(org.apache.tuscany.model.assembly.AssemblyModelVisitor)
+     */
+    public boolean accept(AssemblyModelVisitor visitor) {
+        if (!super.accept(visitor))
+            return false;
+        
+        if (componentType!=null) {
+            if (!componentType.accept(visitor))
+                return false;
+        }
+        
+        if (!accept(moduleFragments, visitor))
+            return false;
+        
+        return true;
+    }
+    
+}

Modified: 
incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/system/builder/SystemContextFactoryBuilder.java
URL: 
http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/system/builder/SystemContextFactoryBuilder.java?rev=389638&r1=389637&r2=389638&view=diff
==============================================================================
--- 
incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/system/builder/SystemContextFactoryBuilder.java
 (original)
+++ 
incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/system/builder/SystemContextFactoryBuilder.java
 Tue Mar 28 16:18:28 2006
@@ -52,6 +52,7 @@
 import org.apache.tuscany.core.system.annotation.Autowire;
 import org.apache.tuscany.core.system.annotation.ParentContext;
 import org.apache.tuscany.core.system.assembly.SystemImplementation;
+import org.apache.tuscany.core.system.assembly.SystemModule;
 import org.apache.tuscany.core.system.config.SystemContextFactory;
 import org.apache.tuscany.core.system.context.SystemAggregateContextImpl;
 import org.apache.tuscany.core.system.injection.AutowireObjectFactory;
@@ -141,11 +142,13 @@
                 // of system module component context
                 implClass = SystemAggregateContextImpl.class;
                 scope = Scope.AGGREGATE;
-
+            } else if (componentImplementation instanceof SystemModule){
+                implClass = SystemAggregateContextImpl.class;
+                scope = Scope.AGGREGATE;
             } else {
-
                 // The component is an app module component, fix the 
implementation class to our implementation
                 // of app module component context
+                //FIXME this should be extensible, i.e. the model should 
specify the impl class of the module
                 implClass = AggregateContextImpl.class;
                 scope = Scope.AGGREGATE;
             }

Modified: 
incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/system/config/SystemContextFactory.java
URL: 
http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/system/config/SystemContextFactory.java?rev=389638&r1=389637&r2=389638&view=diff
==============================================================================
--- 
incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/system/config/SystemContextFactory.java
 (original)
+++ 
incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/system/config/SystemContextFactory.java
 Tue Mar 28 16:18:28 2006
@@ -20,13 +20,13 @@
 import org.apache.tuscany.model.assembly.Scope;
 
 /**
- * A <code>ContextFactory</code> that handles system component implementation 
types, which may be either simple,
- * leaf types or an aggregates.
+ * A <code>ContextFactory</code> that handles system component implementation 
types, which may be either simple, leaf
+ * types or an aggregates.
  * <p>
  * For aggregate types, this factory delegates to an [EMAIL PROTECTED] 
org.apache.tuscany.core.builder.ObjectFactory} to create an
- * instance of the aggregate implementation and perform injection of 
configuration and references. Once an aggregate instance is
- * created, the factory will register the aggregate's children. This process 
may be done recursively in a lazy fashion,
- * descending down an aggregate hierarchy as a child aggregate is instantiated.
+ * instance of the aggregate implementation and perform injection of 
configuration and references. Once an aggregate
+ * instance is created, the factory will register the aggregate's children. 
This process may be done recursively in a
+ * lazy fashion, descending down an aggregate hierarchy as a child aggregate 
is instantiated.
  * 
  * @version $Rev$ $Date$
  */
@@ -96,7 +96,11 @@
         this.ctr = ctr;
         this.isAggregate = 
AggregateContext.class.isAssignableFrom(ctr.getDeclaringClass());
         this.scope = scope;
-        stateless = (scope == Scope.INSTANCE);
+        if (isAggregate) {
+            scope = Scope.AGGREGATE;
+        } else {
+            stateless = (scope == Scope.INSTANCE);
+        }
     }
 
     // ----------------------------------

Modified: 
incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/system/context/SystemAggregateContextImpl.java
URL: 
http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/system/context/SystemAggregateContextImpl.java?rev=389638&r1=389637&r2=389638&view=diff
==============================================================================
--- 
incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/system/context/SystemAggregateContextImpl.java
 (original)
+++ 
incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/system/context/SystemAggregateContextImpl.java
 Tue Mar 28 16:18:28 2006
@@ -51,9 +51,7 @@
 import org.apache.tuscany.core.context.QualifiedName;
 import org.apache.tuscany.core.context.RuntimeEventListener;
 import org.apache.tuscany.core.context.ScopeContext;
-import org.apache.tuscany.core.context.ScopeRuntimeException;
 import org.apache.tuscany.core.context.ScopeStrategy;
-import org.apache.tuscany.core.context.SimpleComponentContext;
 import org.apache.tuscany.core.context.SystemAggregateContext;
 import org.apache.tuscany.core.context.TargetException;
 import org.apache.tuscany.core.context.impl.EventContextImpl;
@@ -72,12 +70,15 @@
 import org.apache.tuscany.model.assembly.Aggregate;
 import org.apache.tuscany.model.assembly.AggregatePart;
 import org.apache.tuscany.model.assembly.AssemblyModelObject;
+import org.apache.tuscany.model.assembly.Binding;
 import org.apache.tuscany.model.assembly.Component;
 import org.apache.tuscany.model.assembly.EntryPoint;
 import org.apache.tuscany.model.assembly.Extensible;
 import org.apache.tuscany.model.assembly.ExternalService;
 import org.apache.tuscany.model.assembly.Module;
+import org.apache.tuscany.model.assembly.ModuleComponent;
 import org.apache.tuscany.model.assembly.Scope;
+import org.apache.tuscany.model.assembly.Service;
 import org.apache.tuscany.model.assembly.impl.AssemblyFactoryImpl;
 
 /**
@@ -94,10 +95,6 @@
 
     public static final int DEFAULT_WAIT = 1000 * 60;
 
-    // ----------------------------------
-    // Fields
-    // ----------------------------------
-
     // The parent context, if one exists
     @ParentContext
     protected AggregateContext parentContext;
@@ -223,10 +220,10 @@
                 for (ExternalService es : module.getExternalServices()) {
                     registerAutowire(es);
                 }
-                for (Map.Entry entries : configurationsByScope.entrySet()) {
+                for (Map.Entry<Scope, List<ContextFactory<InstanceContext>>> 
entries : configurationsByScope.entrySet()) {
                     // register configurations with scope contexts
                     ScopeContext scope = scopeContexts.get(entries.getKey());
-                    
scope.registerFactorys((List<ContextFactory<InstanceContext>>) 
entries.getValue());
+                    scope.registerFactories(entries.getValue());
                 }
                 for (ScopeContext scope : scopeContexts.values()) {
                     // register scope contexts as a listeners for events in 
the aggregate context
@@ -259,14 +256,10 @@
         initialized = false;
         if (scopeContexts != null) {
             for (ScopeContext scope : scopeContexts.values()) {
-                try {
-                    if (scope.getLifecycleState() == ScopeContext.RUNNING) {
-                        scope.stop();
-                    }
-                } catch (ScopeRuntimeException e) {
-                    // log.error("Error stopping scope container [" + 
scopeContainers[i].getName() + "]", e);
+                if (scope.getLifecycleState() == ScopeContext.RUNNING) {
+                    scope.stop();
                 }
-            }
+        }
         }
         scopeContexts = null;
         scopeIndex.clear();
@@ -275,10 +268,6 @@
         lifecycleState = STOPPED;
     }
 
-    // ----------------------------------
-    // Methods
-    // ----------------------------------
-
     public void setModule(Module module) {
         assert (module != null) : "Module cannot be null";
         name = module.getName();
@@ -415,7 +404,7 @@
         SystemObjectContextFactory configuration = new 
SystemObjectContextFactory(componentName, instance);
         registerConfiguration(configuration);
         ScopeContext scope = scopeContexts.get(configuration.getScope());
-        NameToScope mapping = new NameToScope(new 
QualifiedName(componentName), scope);
+        NameToScope mapping = new NameToScope(new 
QualifiedName(componentName), scope, false, false);
         autowireIndex.put(service, mapping);
     }
 
@@ -475,9 +464,6 @@
 
     }
 
-    /**
-     * @see org.apache.tuscany.core.context.AggregateContext#getAggregate()
-     */
     public Aggregate getAggregate() {
         return module;
     }
@@ -601,7 +587,7 @@
             if (assemblyFactory != null) {
                 return instanceInterface.cast(assemblyFactory);
             } else {
-                return 
instanceInterface.cast(autowireContext.resolveInstance(instanceInterface));
+                return autowireContext.resolveInstance(instanceInterface);
             }
         }
 
@@ -615,49 +601,76 @@
                 throw ae;
             }
         }
-        return null;
+        if (autowireContext != null) {
+            return autowireContext.resolveInstance(instanceInterface);
+        } else {
+            return null;
+        }
     }
 
+    public <T> T resolveExternalInstance(Class<T> instanceInterface) throws 
AutowireResolutionException {
+        NameToScope nts = autowireIndex.get(instanceInterface);
+        if (nts != null && nts.isVisible()) {
+            return 
instanceInterface.cast(nts.getScopeContext().getInstance(nts.getName()));
+        } else {
+            return null;
+        }
+    }
+
+    @SuppressWarnings("unchecked")
     private void registerAutowire(Extensible model) throws 
ConfigurationException {
         if (lifecycleState == INITIALIZING || lifecycleState == INITIALIZED || 
lifecycleState == RUNNING) {
             if (model instanceof EntryPoint) {
                 EntryPoint ep = (EntryPoint) model;
-                if (ep.getBindings() != null) {
-                    if (ep.getBindings().get(0) instanceof SystemBinding) {
-                        ScopeContext scope = 
scopeContexts.get(((ContextFactory) 
ep.getConfiguredReference().getContextFactory())
-                                .getScope());
-                        if (scope == null) {
-                            ConfigurationException ce = new 
ConfigurationException("Scope not found for entry point");
-                            ce.setIdentifier(ep.getName());
-                            ce.addContextName(getName());
-                            throw ce;
+                for (Binding binding : ep.getBindings()) {
+                    if (binding instanceof SystemBinding) {
+                        Class interfaze = 
ep.getConfiguredService().getService().getServiceContract().getInterface();
+                        NameToScope nts = autowireIndex.get(interfaze);
+                        if (nts == null || !nts.isEntryPoint()) { // handle 
special case where two entry points with
+                                                                    // same 
interface register: first wins
+                            ScopeContext scope = 
scopeContexts.get(((ContextFactory) ep.getConfiguredReference()
+                                    .getContextFactory()).getScope());
+                            if (scope == null) {
+                                ConfigurationException ce = new 
ConfigurationException("Scope not found for entry point");
+                                ce.setIdentifier(ep.getName());
+                                ce.addContextName(getName());
+                                throw ce;
+                            }
+                            // only register if an impl has not already been 
registered
+                            NameToScope mapping = new NameToScope(new 
QualifiedName(ep.getName()), scope, true, true);
+                            autowireIndex.put(interfaze, mapping);
+                        }
+                    }
+                }
+            } else if (model instanceof ModuleComponent) {
+                ModuleComponent component = (ModuleComponent) model;
+                for (EntryPoint ep : 
component.getModuleImplementation().getEntryPoints()) {
+                    for (Binding binding : ep.getBindings()) {
+                        if (binding instanceof SystemBinding) {
+                            Class interfaze = 
ep.getConfiguredService().getService().getServiceContract().getInterface();
+                            if (autowireIndex.get(interfaze) == null) {
+                                ScopeContext scope = 
scopeContexts.get(Scope.AGGREGATE);
+                                // only register if an impl has not already 
been registered, ensuring it is not visible outside the containment
+                                NameToScope mapping = new NameToScope(new 
QualifiedName(component.getName()
+                                        + QualifiedName.NAME_SEPARATOR + 
ep.getName()), scope, false, false); 
+                                autowireIndex.put(interfaze, mapping);
+                            }
                         }
-                        NameToScope mapping = new NameToScope(new 
QualifiedName(ep.getName()), scope);
-                        
autowireIndex.put(ep.getConfiguredService().getService().getServiceContract().getInterface(),
 mapping);
+                    }
+                }
+            } else if (model instanceof Component) {
+                Component component = (Component) model;
+                for (Service service : 
component.getComponentImplementation().getComponentType().getServices()) {
+                    Class interfaze = 
service.getServiceContract().getInterface();
+                    if (autowireIndex.get(interfaze) == null) {
+                        // only register if an impl has not already been 
registered
+                        ScopeContext scopeCtx = 
scopeContexts.get(service.getServiceContract().getScope());
+                        NameToScope mapping = new NameToScope(new 
QualifiedName(component.getName()), scopeCtx, false, false);
+                        autowireIndex.put(interfaze, mapping);
                     }
                 }
             }
         }
-
-            // only autowire entry points with system bindings
-//            if (model instanceof EntryPoint) {
-//                EntryPoint ep = (EntryPoint) model;
-//                if (ep.getBindings() != null) {
-//                    if (ep.getBindings().get(0) instanceof SystemBinding) {
-//                        ScopeContext scope = 
scopeContexts.get(((ContextFactory) 
ep.getConfiguredReference().getContextFactory())
-//                                .getScope());
-//                        if (scope == null) {
-//                            ConfigurationException ce = new 
ConfigurationException("Scope not found for entry point");
-//                            ce.setIdentifier(ep.getName());
-//                            ce.addContextName(getName());
-//                            throw ce;
-//                        }
-//                        NameToScope mapping = new NameToScope(new 
QualifiedName(ep.getName()), scope);
-//                        
autowireIndex.put(ep.getConfiguredService().getService().getServiceContract().getInterface(),
 mapping);
-//                    }
-//                }
-//            }
-//        }
     }
 
     // ----------------------------------
@@ -706,24 +719,40 @@
 
     /**
      * Maps a context name to a scope
+     * 
+     * TODO this is a duplicate of aggregate context
      */
     private class NameToScope {
 
-        private QualifiedName epName;
+        private QualifiedName qName;
 
         private ScopeContext scope;
 
-        public NameToScope(QualifiedName epName, ScopeContext scope) {
-            this.epName = epName;
+        private boolean visible;
+
+        private boolean entryPoint;
+
+        public NameToScope(QualifiedName name, ScopeContext scope, boolean 
visible, boolean entryPoint) {
+            this.qName = name;
             this.scope = scope;
+            this.visible = visible;
+            this.entryPoint = entryPoint;
         }
 
         public QualifiedName getName() {
-            return epName;
+            return qName;
         }
 
         public ScopeContext getScopeContext() {
             return scope;
+        }
+
+        public boolean isVisible() {
+            return visible;
+        }
+
+        public boolean isEntryPoint() {
+            return entryPoint;
         }
 
     }

Modified: 
incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/system/context/SystemComponentContext.java
URL: 
http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/system/context/SystemComponentContext.java?rev=389638&r1=389637&r2=389638&view=diff
==============================================================================
--- 
incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/system/context/SystemComponentContext.java
 (original)
+++ 
incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/system/context/SystemComponentContext.java
 Tue Mar 28 16:18:28 2006
@@ -16,8 +16,6 @@
  */
 package org.apache.tuscany.core.system.context;
 
-import java.util.Iterator;
-
 import org.apache.tuscany.core.builder.ObjectFactory;
 import org.apache.tuscany.core.context.AbstractContext;
 import org.apache.tuscany.core.context.Context;
@@ -27,7 +25,6 @@
 import org.apache.tuscany.core.context.SimpleComponentContext;
 import org.apache.tuscany.core.context.TargetException;
 import org.apache.tuscany.core.injection.EventInvoker;
-import org.apache.tuscany.core.injection.Injector;
 import org.apache.tuscany.core.injection.ObjectCallbackException;
 import org.apache.tuscany.core.injection.ObjectCreationException;
 

Modified: 
incubator/tuscany/java/sca/core/src/test/java/org/apache/tuscany/core/invocation/mock/MockScopeContext.java
URL: 
http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/core/src/test/java/org/apache/tuscany/core/invocation/mock/MockScopeContext.java?rev=389638&r1=389637&r2=389638&view=diff
==============================================================================
--- 
incubator/tuscany/java/sca/core/src/test/java/org/apache/tuscany/core/invocation/mock/MockScopeContext.java
 (original)
+++ 
incubator/tuscany/java/sca/core/src/test/java/org/apache/tuscany/core/invocation/mock/MockScopeContext.java
 Tue Mar 28 16:18:28 2006
@@ -97,7 +97,7 @@
     }
 
 
-    public void registerFactorys(List<ContextFactory<InstanceContext>> 
configurations) {
+    public void registerFactories(List<ContextFactory<InstanceContext>> 
configurations) {
     } 
 
     public void registerFactory(ContextFactory<InstanceContext> configuration) 
{

Modified: 
incubator/tuscany/java/sca/core/src/test/java/org/apache/tuscany/core/mock/MockFactory.java
URL: 
http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/core/src/test/java/org/apache/tuscany/core/mock/MockFactory.java?rev=389638&r1=389637&r2=389638&view=diff
==============================================================================
--- 
incubator/tuscany/java/sca/core/src/test/java/org/apache/tuscany/core/mock/MockFactory.java
 (original)
+++ 
incubator/tuscany/java/sca/core/src/test/java/org/apache/tuscany/core/mock/MockFactory.java
 Tue Mar 28 16:18:28 2006
@@ -30,11 +30,11 @@
 import org.apache.tuscany.core.system.assembly.SystemAssemblyFactory;
 import org.apache.tuscany.core.system.assembly.SystemBinding;
 import org.apache.tuscany.core.system.assembly.SystemImplementation;
+import org.apache.tuscany.core.system.assembly.SystemModule;
 import org.apache.tuscany.core.system.assembly.impl.SystemAssemblyFactoryImpl;
 import org.apache.tuscany.core.system.builder.SystemContextFactoryBuilder;
 import org.apache.tuscany.core.system.builder.SystemEntryPointBuilder;
 import org.apache.tuscany.core.system.builder.SystemExternalServiceBuilder;
-import org.apache.tuscany.core.system.context.SystemAggregateContextImpl;
 import org.apache.tuscany.model.assembly.AggregatePart;
 import org.apache.tuscany.model.assembly.AssemblyModelContext;
 import org.apache.tuscany.model.assembly.Component;
@@ -69,10 +69,11 @@
     /**
      * Creates an aggregate component with the given name
      */
-    public static Component createAggregateComponent(String name) {
-        Component sc = systemFactory.createModuleComponent();
-        SystemImplementation impl = systemFactory.createSystemImplementation();
-        impl.setImplementationClass(AggregateContextImpl.class);
+    public static ModuleComponent createAggregateComponent(String name) {
+        ModuleComponent sc = systemFactory.createModuleComponent();
+        Module impl = systemFactory.createModule();
+        impl.setName(name);
+        //impl.setImplementationClass(AggregateContextImpl.class);
         sc.setComponentImplementation(impl);
         Service s = systemFactory.createService();
         JavaServiceContract ji = systemFactory.createJavaServiceContract();
@@ -88,10 +89,11 @@
     /**
      * Creates an aggregate component with the given name
      */
-    public static Component createSystemAggregateComponent(String name) {
-        Component sc = systemFactory.createModuleComponent();
-        SystemImplementation impl = systemFactory.createSystemImplementation();
-        impl.setImplementationClass(SystemAggregateContextImpl.class);
+    public static ModuleComponent createSystemAggregateComponent(String name) {
+        ModuleComponent sc = systemFactory.createModuleComponent();
+        SystemModule impl = systemFactory.createSystemModule();
+        impl.setName(name);
+        //impl.setImplementationClass(SystemAggregateContextImpl.class);
         sc.setComponentImplementation(impl);
         Service s = systemFactory.createService();
         JavaServiceContract ji = systemFactory.createJavaServiceContract();
@@ -251,6 +253,10 @@
         return module;
     }
 
+    public static <T> Component createSystemComponent(String name,  Class<T> 
service, Class<? extends T> impl,Scope scope ){
+       return systemFactory.createSystemComponent(name,service,impl,scope);
+    }
+    
     /**
      * Creates a test system module with source and target components wired 
together.
      * 

Added: 
incubator/tuscany/java/sca/core/src/test/java/org/apache/tuscany/core/mock/component/AutowireSourceImpl.java
URL: 
http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/core/src/test/java/org/apache/tuscany/core/mock/component/AutowireSourceImpl.java?rev=389638&view=auto
==============================================================================
--- 
incubator/tuscany/java/sca/core/src/test/java/org/apache/tuscany/core/mock/component/AutowireSourceImpl.java
 (added)
+++ 
incubator/tuscany/java/sca/core/src/test/java/org/apache/tuscany/core/mock/component/AutowireSourceImpl.java
 Tue Mar 28 16:18:28 2006
@@ -0,0 +1,64 @@
+/**
+ * 
+ * Copyright 2005 The Apache Software Foundation or its licensors, as 
applicable.
+ * 
+ * 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.mock.component;
+
+import java.util.List;
+
+import org.apache.tuscany.core.system.annotation.Autowire;
+
+/**
+ * Mock system component implementation used in autowire tests
+ * 
+ * @version $Rev$ $Date$
+ */
+public class AutowireSourceImpl implements Source {
+
+    @Autowire
+    private Target target;
+    
+    private List<Target> targets;
+
+    private List<Target> targetsThroughField;
+
+    public void setTarget(Target target) {
+        this.target = target;
+    }
+
+    public Target getTarget() {
+        return target;
+    }
+
+    public List<Target> getTargets() {
+        return targets;
+    }
+
+    public void setTargets(List<Target> targets) {
+        this.targets = targets;
+    }
+
+    public List<Target> getTargetsThroughField() {
+        return targetsThroughField;
+    }
+
+    private Target[] targetsArray;
+    
+    public Target[] getArrayOfTargets() {
+        return targetsArray;
+    }
+
+    public void setArrayOfTargets(Target[] targets) {
+        targetsArray = targets;
+    }
+
+}

Modified: 
incubator/tuscany/java/sca/core/src/test/java/org/apache/tuscany/core/system/context/AggregateNestingTestCase.java
URL: 
http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/core/src/test/java/org/apache/tuscany/core/system/context/AggregateNestingTestCase.java?rev=389638&r1=389637&r2=389638&view=diff
==============================================================================
--- 
incubator/tuscany/java/sca/core/src/test/java/org/apache/tuscany/core/system/context/AggregateNestingTestCase.java
 (original)
+++ 
incubator/tuscany/java/sca/core/src/test/java/org/apache/tuscany/core/system/context/AggregateNestingTestCase.java
 Tue Mar 28 16:18:28 2006
@@ -26,7 +26,7 @@
 import org.apache.tuscany.model.assembly.Scope;
 
 /**
- * Tests registering of arbirarily deep child aggregate contexts
+ * Tests registering arbirarily deep child aggregate contexts
  * 
  * @version $Rev$ $Date$
  */

Added: 
incubator/tuscany/java/sca/core/src/test/java/org/apache/tuscany/core/system/context/AutowireTestCase.java
URL: 
http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/core/src/test/java/org/apache/tuscany/core/system/context/AutowireTestCase.java?rev=389638&view=auto
==============================================================================
--- 
incubator/tuscany/java/sca/core/src/test/java/org/apache/tuscany/core/system/context/AutowireTestCase.java
 (added)
+++ 
incubator/tuscany/java/sca/core/src/test/java/org/apache/tuscany/core/system/context/AutowireTestCase.java
 Tue Mar 28 16:18:28 2006
@@ -0,0 +1,310 @@
+/**
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as 
applicable.
+ *
+ * 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.system.context;
+
+import junit.framework.TestCase;
+
+import org.apache.tuscany.core.context.AggregateContext;
+import org.apache.tuscany.core.context.EventContext;
+import org.apache.tuscany.core.context.SystemAggregateContext;
+import org.apache.tuscany.core.mock.MockFactory;
+import org.apache.tuscany.core.mock.component.AutowireSourceImpl;
+import org.apache.tuscany.core.mock.component.Source;
+import org.apache.tuscany.core.mock.component.Target;
+import org.apache.tuscany.core.mock.component.TargetImpl;
+import org.apache.tuscany.core.runtime.RuntimeContext;
+import org.apache.tuscany.core.system.assembly.SystemAssemblyFactory;
+import org.apache.tuscany.core.system.assembly.impl.SystemAssemblyFactoryImpl;
+import org.apache.tuscany.model.assembly.AssemblyModelContext;
+import org.apache.tuscany.model.assembly.Component;
+import org.apache.tuscany.model.assembly.ConfiguredService;
+import org.apache.tuscany.model.assembly.EntryPoint;
+import org.apache.tuscany.model.assembly.Module;
+import org.apache.tuscany.model.assembly.ModuleComponent;
+import org.apache.tuscany.model.assembly.Scope;
+import org.apache.tuscany.model.assembly.Service;
+import org.apache.tuscany.model.assembly.impl.AssemblyModelContextImpl;
+
+/**
+ * Tests autowiring for serveral scenarios according to the following runtime 
scheme:
+ * 
+ * <code>
+ *       tuscany.runtime
+ *        |
+ *        + tuscany.system
+ *        |   |
+ *        |   + system1
+ *        |   |   |
+ *        |   |   + system1a
+ *        |   |
+ *        |   + system2
+ *        |
+ *        + tuscany.root
+ *            |
+ *            + app1
+ *                |
+ *                + app1a
+ *                |
+ *                + app1b
+ * </code>
+ * 
+ * @version $Rev$ $Date$
+ */
+public class AutowireTestCase extends TestCase {
+
+    private static SystemAssemblyFactory systemFactory = new 
SystemAssemblyFactoryImpl();
+
+    /**
+     * Covers the case where a component in app1a requests autowire, which is 
resolved by the runtime to a service
+     * exposed on an entry point in tuscany.system. The entry point is wired 
to an entry point on system1, which itself
+     * is wired to a component in system1
+     */
+    public void testScenario1() throws Exception {
+        RuntimeContext runtime = createScenario1Runtime();
+        AggregateContext root = runtime.getRootContext();
+        SystemAggregateContext system = runtime.getSystemContext();
+        AggregateContext system1 = (AggregateContext) 
system.getContext("system1");
+        system1.fireEvent(EventContext.MODULE_START, null);
+        Target target = (Target) 
system.getContext("target.system.ep").getInstance(null);
+        assertNotNull(target);
+        AggregateContext app1 = (AggregateContext) root.getContext("app1");
+        app1.fireEvent(EventContext.MODULE_START, null);
+        AggregateContext app1a = (AggregateContext) app1.getContext("app1a");
+        app1a.fireEvent(EventContext.MODULE_START, null);
+        app1a.fireEvent(EventContext.MODULE_STOP, null);
+        app1.fireEvent(EventContext.MODULE_STOP, null);
+        Source source = (Source) app1a.getContext("source").getInstance(null);
+        assertEquals(target, source.getTarget());
+        source.getTarget().getString();
+        runtime.stop();
+    }
+
+    /**
+     * Covers the case where a component in app1a requests autowire, which is 
resolved to service exposed as an entry
+     * point on app1b. The entry point is wired to a component in app1b.
+     */
+    public void testScenario2() throws Exception {
+        RuntimeContext runtime = createScenario2Runtime();
+        AggregateContext root = runtime.getRootContext();
+        AggregateContext app1 = (AggregateContext) root.getContext("app1");
+        app1.fireEvent(EventContext.MODULE_START, null);
+        AggregateContext app1b = (AggregateContext) app1.getContext("app1b");
+        app1b.fireEvent(EventContext.MODULE_START, null);
+        AggregateContext app1a = (AggregateContext) app1.getContext("app1a");
+        app1a.fireEvent(EventContext.MODULE_START, null);
+        Target target = (Target) 
app1b.getContext("target.ep").getInstance(null);
+        assertNotNull(target);
+        Source source = (Source) app1a.getContext("source").getInstance(null);
+        assertEquals(target, source.getTarget());
+        source.getTarget().getString();
+        runtime.stop();
+    }
+
+    /**
+     * Covers the case where a component in system1a requests autowire, which 
is resolved to an entry point exposed on
+     * system2. The entry point is wired to a component in system2.
+     */
+    public void testScenario3() throws Exception {
+        RuntimeContext runtime = createScenario3Runtime();
+        AggregateContext root = runtime.getRootContext();
+        SystemAggregateContext system = runtime.getSystemContext();
+
+        AggregateContext system2 = (AggregateContext) 
system.getContext("system2");
+        system2.fireEvent(EventContext.MODULE_START, null);
+        Target target = (Target) 
system2.getContext("target.ep").getInstance(null);
+        assertNotNull(target);
+
+        AggregateContext system1 = (AggregateContext) 
system.getContext("system1");
+        system1.fireEvent(EventContext.MODULE_START, null);
+        AggregateContext system1a = (AggregateContext) 
system1.getContext("system1a");
+        system1a.fireEvent(EventContext.MODULE_START, null);
+
+        Source source = (Source) 
system1a.getContext("source").getInstance(null);
+        assertEquals(target, source.getTarget());
+        source.getTarget().getString();
+        runtime.stop();
+    }
+
+    /**
+     * Covers the case where a component in system1a requests autowire, which 
is resolved to component in its parent,
+     * system1.
+     */
+    public void testScenario4() throws Exception {
+        RuntimeContext runtime = createScenario4Runtime();
+        AggregateContext root = runtime.getRootContext();
+        SystemAggregateContext system = runtime.getSystemContext();
+        AggregateContext system1 = (AggregateContext) 
system.getContext("system1");
+        system1.fireEvent(EventContext.MODULE_START, null);
+        Target target = (Target) 
system1.getContext("target").getInstance(null);
+        assertNotNull(target);
+        AggregateContext system1a = (AggregateContext) 
system1.getContext("system1a");
+        system1a.fireEvent(EventContext.MODULE_START, null);
+
+        Source source = (Source) 
system1a.getContext("source").getInstance(null);
+        assertEquals(target, source.getTarget());
+        source.getTarget().getString();
+        runtime.stop();
+    }
+
+    /**
+     * Covers the case where a component in system1a requests autowire, which 
is resolved to component in the parent of
+     * its parent (grandparent), system.
+     */
+    public void testScenario5() throws Exception {
+        RuntimeContext runtime = createScenario5Runtime();
+        AggregateContext root = runtime.getRootContext();
+        SystemAggregateContext system = runtime.getSystemContext();
+        AggregateContext system1 = (AggregateContext) 
system.getContext("system1");
+        system1.fireEvent(EventContext.MODULE_START, null);
+        Target target = (Target) system.getContext("target").getInstance(null);
+        assertNotNull(target);
+        AggregateContext system1a = (AggregateContext) 
system1.getContext("system1a");
+        system1a.fireEvent(EventContext.MODULE_START, null);
+
+        Source source = (Source) 
system1a.getContext("source").getInstance(null);
+        assertEquals(target, source.getTarget());
+        source.getTarget().getString();
+        runtime.stop();
+    }
+
+    private RuntimeContext createScenario1Runtime() throws Exception {
+        RuntimeContext runtime = MockFactory.createCoreRuntime();
+        runtime.start();
+        SystemAggregateContext system = runtime.getSystemContext();
+        ModuleComponent system1Component = 
MockFactory.createSystemAggregateComponent("system1");
+        ModuleComponent system1aComponent = 
MockFactory.createSystemAggregateComponent("system1a");
+        
system1Component.getModuleImplementation().getComponents().add(system1aComponent);
+        Component target = MockFactory.createSystemComponent("target", 
Target.class, TargetImpl.class, Scope.MODULE);
+        system1Component.getModuleImplementation().getComponents().add(target);
+
+        EntryPoint ep = MockFactory.createEPSystemBinding("target.ep", 
Target.class, "target", target);
+        system1Component.getModuleImplementation().getEntryPoints().add(ep);
+        system.registerModelObject(system1Component);
+        EntryPoint systemEp = 
MockFactory.createEPSystemBinding("target.system.ep", Target.class, "ref");
+
+        systemEp.getBindings().add(systemFactory.createSystemBinding());
+        Service service = systemFactory.createService();
+        service.setName("system1/target.ep");
+        ((ConfiguredService) 
systemEp.getConfiguredReference().getTargetConfiguredServices().get(0)).setService(service);
+
+        system.registerModelObject(systemEp);
+        ModuleComponent app1Component = createAppModuleComponent("app1");
+        ModuleComponent app1aComponent = createAppModuleComponent("app1a");
+        Component source = MockFactory.createSystemComponent("source", 
Source.class, AutowireSourceImpl.class, Scope.MODULE);
+        app1aComponent.getModuleImplementation().getComponents().add(source);
+        
app1Component.getModuleImplementation().getComponents().add(app1aComponent);
+        AggregateContext root = runtime.getRootContext();
+        root.registerModelObject(app1Component);
+        system.fireEvent(EventContext.MODULE_START, null);
+        return runtime;
+    }
+
+    private RuntimeContext createScenario2Runtime() throws Exception {
+        RuntimeContext runtime = MockFactory.createCoreRuntime();
+        runtime.start();
+
+        ModuleComponent app1Component = createAppModuleComponent("app1");
+        ModuleComponent app1aComponent = createAppModuleComponent("app1a");
+        ModuleComponent app1bComponent = createAppModuleComponent("app1b");
+        Component source = MockFactory.createSystemComponent("source", 
Source.class, AutowireSourceImpl.class, Scope.MODULE);
+        app1aComponent.getModuleImplementation().getComponents().add(source);
+        
app1Component.getModuleImplementation().getComponents().add(app1aComponent);
+        
app1Component.getModuleImplementation().getComponents().add(app1bComponent);
+
+        Component target = MockFactory.createSystemComponent("target", 
Target.class, TargetImpl.class, Scope.MODULE);
+        app1bComponent.getModuleImplementation().getComponents().add(target);
+
+        EntryPoint ep = MockFactory.createEPSystemBinding("target.ep", 
Target.class, "target", target);
+        ep.getBindings().add(systemFactory.createSystemBinding());
+        Service service = systemFactory.createService();
+        service.setName("target.ep");
+        ((ConfiguredService) 
ep.getConfiguredReference().getTargetConfiguredServices().get(0)).setService(service);
+        app1bComponent.getModuleImplementation().getEntryPoints().add(ep);
+
+        AggregateContext root = runtime.getRootContext();
+        root.registerModelObject(app1Component);
+        return runtime;
+    }
+
+    private RuntimeContext createScenario3Runtime() throws Exception {
+        RuntimeContext runtime = MockFactory.createCoreRuntime();
+        runtime.start();
+        SystemAggregateContext system = runtime.getSystemContext();
+        ModuleComponent system1Component = 
MockFactory.createSystemAggregateComponent("system1");
+        ModuleComponent system2Component = 
MockFactory.createSystemAggregateComponent("system2");
+        ModuleComponent system1aComponent = 
MockFactory.createSystemAggregateComponent("system1a");
+        
system1Component.getModuleImplementation().getComponents().add(system1aComponent);
+
+        Component target = MockFactory.createSystemComponent("target", 
Target.class, TargetImpl.class, Scope.MODULE);
+        system2Component.getModuleImplementation().getComponents().add(target);
+        EntryPoint ep = MockFactory.createEPSystemBinding("target.ep", 
Target.class, "target", target);
+        system2Component.getModuleImplementation().getEntryPoints().add(ep);
+        system.registerModelObject(system2Component);
+
+        Component source = MockFactory.createSystemComponent("source", 
Source.class, AutowireSourceImpl.class, Scope.MODULE);
+        
system1aComponent.getModuleImplementation().getComponents().add(source);
+        system.registerModelObject(system1Component);
+        system.fireEvent(EventContext.MODULE_START, null);
+        return runtime;
+    }
+
+    private RuntimeContext createScenario4Runtime() throws Exception {
+        RuntimeContext runtime = MockFactory.createCoreRuntime();
+        runtime.start();
+        SystemAggregateContext system = runtime.getSystemContext();
+        ModuleComponent system1Component = 
MockFactory.createSystemAggregateComponent("system1");
+        ModuleComponent system1aComponent = 
MockFactory.createSystemAggregateComponent("system1a");
+        
system1Component.getModuleImplementation().getComponents().add(system1aComponent);
+
+        Component target = MockFactory.createSystemComponent("target", 
Target.class, TargetImpl.class, Scope.MODULE);
+        system1Component.getModuleImplementation().getComponents().add(target);
+
+        Component source = MockFactory.createSystemComponent("source", 
Source.class, AutowireSourceImpl.class, Scope.MODULE);
+        
system1aComponent.getModuleImplementation().getComponents().add(source);
+        system.registerModelObject(system1Component);
+        system.fireEvent(EventContext.MODULE_START, null);
+        return runtime;
+    }
+
+    private RuntimeContext createScenario5Runtime() throws Exception {
+        RuntimeContext runtime = MockFactory.createCoreRuntime();
+        runtime.start();
+        SystemAggregateContext system = runtime.getSystemContext();
+        ModuleComponent system1Component = 
MockFactory.createSystemAggregateComponent("system1");
+        ModuleComponent system1aComponent = 
MockFactory.createSystemAggregateComponent("system1a");
+        
system1Component.getModuleImplementation().getComponents().add(system1aComponent);
+
+        Component target = MockFactory.createSystemComponent("target", 
Target.class, TargetImpl.class, Scope.MODULE);
+        system.registerModelObject(target);
+
+        Component source = MockFactory.createSystemComponent("source", 
Source.class, AutowireSourceImpl.class, Scope.MODULE);
+        
system1aComponent.getModuleImplementation().getComponents().add(source);
+        system.registerModelObject(system1Component);
+        system.fireEvent(EventContext.MODULE_START, null);
+        return runtime;
+    }
+
+    private ModuleComponent createAppModuleComponent(String name) {
+        AssemblyModelContext assemblyContext = new 
AssemblyModelContextImpl(systemFactory, null, null);
+        ModuleComponent mc = systemFactory.createModuleComponent();
+        mc.setName(name);
+        Module module = systemFactory.createModule();
+        module.setName(name);
+        module.initialize(assemblyContext);
+        mc.setComponentImplementation(module);
+        return mc;
+    }
+
+}


Reply via email to