You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuscany.apache.org by an...@apache.org on 2006/05/14 20:45:07 UTC

svn commit: r406402 - in /incubator/tuscany/sandbox/container.groovy/src/main/java/org/apache/tuscany: container/extension/ container/extension/config/ container/extension/context/ container/extension/loader/ container/groovy/builder/ container/groovy/...

Author: antelder
Date: Sun May 14 11:45:05 2006
New Revision: 406402

URL: http://svn.apache.org/viewcvs?rev=406402&view=rev
Log:
TUSCANY-317, apply latest code changes to Groovy container in the sandbox

Added:
    incubator/tuscany/sandbox/container.groovy/src/main/java/org/apache/tuscany/container/extension/
    incubator/tuscany/sandbox/container.groovy/src/main/java/org/apache/tuscany/container/extension/config/
    incubator/tuscany/sandbox/container.groovy/src/main/java/org/apache/tuscany/container/extension/config/AbstractContextFactory.java
    incubator/tuscany/sandbox/container.groovy/src/main/java/org/apache/tuscany/container/extension/context/
    incubator/tuscany/sandbox/container.groovy/src/main/java/org/apache/tuscany/container/extension/context/AbstractComponentContext.java
    incubator/tuscany/sandbox/container.groovy/src/main/java/org/apache/tuscany/container/extension/loader/
    incubator/tuscany/sandbox/container.groovy/src/main/java/org/apache/tuscany/container/extension/loader/AbstractImplementationLoader.java
Modified:
    incubator/tuscany/sandbox/container.groovy/src/main/java/org/apache/tuscany/container/groovy/builder/GroovyContextFactoryBuilder.java
    incubator/tuscany/sandbox/container.groovy/src/main/java/org/apache/tuscany/container/groovy/config/GroovyContextFactory.java
    incubator/tuscany/sandbox/container.groovy/src/main/java/org/apache/tuscany/container/groovy/context/GroovyComponentContext.java
    incubator/tuscany/sandbox/container.groovy/src/main/java/org/apache/tuscany/container/groovy/loader/GroovyImplementationLoader.java
    incubator/tuscany/sandbox/container.groovy/src/main/java/org/apache/tuscany/samples/groovy/GreetingClient.java

Added: incubator/tuscany/sandbox/container.groovy/src/main/java/org/apache/tuscany/container/extension/config/AbstractContextFactory.java
URL: http://svn.apache.org/viewcvs/incubator/tuscany/sandbox/container.groovy/src/main/java/org/apache/tuscany/container/extension/config/AbstractContextFactory.java?rev=406402&view=auto
==============================================================================
--- incubator/tuscany/sandbox/container.groovy/src/main/java/org/apache/tuscany/container/extension/config/AbstractContextFactory.java (added)
+++ incubator/tuscany/sandbox/container.groovy/src/main/java/org/apache/tuscany/container/extension/config/AbstractContextFactory.java Sun May 14 11:45:05 2006
@@ -0,0 +1,143 @@
+/**
+ *
+ *  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.container.extension.config;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.tuscany.core.builder.ContextFactory;
+import org.apache.tuscany.core.context.AtomicContext;
+import org.apache.tuscany.core.context.CompositeContext;
+import org.apache.tuscany.core.wire.SourceWireFactory;
+import org.apache.tuscany.core.wire.TargetWireFactory;
+import org.apache.tuscany.model.assembly.Scope;
+
+/**
+ * Abstract context factory.
+ */
+public abstract class AbstractContextFactory<T extends AtomicContext> implements ContextFactory<T> {
+
+	// Context scope
+    private Scope scope;
+
+    // Context name
+    private String name;
+
+    // SOurce proxy factories
+    private List<SourceWireFactory> sourceProxyFactories = new ArrayList<SourceWireFactory>();
+    
+    // Target proxy factories
+    private Map<String, TargetWireFactory> targetProxyFactories = new HashMap<String, TargetWireFactory>();
+    
+    /**
+     * Initializes the context factory.
+     * 
+     * @param name Context name.
+     * @param scope Context scope.
+     * @param groovyScript Groovy script to run.
+     */
+    public AbstractContextFactory(String name, Scope scope) {
+        this.name = name;
+        this.scope = scope;
+    }
+
+    /**
+     * Returns the context scope.
+     * @return Context scope.
+     */
+    public final Scope getScope() {
+        return scope;
+    }
+
+    /**
+     * Returns the context name.
+     * @return Context name.
+     */
+    public final String getName() {
+        return name;
+    }
+
+    /**
+     * Adds a property.
+     * 
+     * @param propertyName Property name.
+     * @param value Property value.
+     */
+    public final void addProperty(String propertyName, Object value) {
+    }
+
+    /**
+     * Adds a target proxy factory.
+     * 
+     * @param serviceName Service name.
+     * @param factory Target proxy factory.
+     */
+    public final void addTargetWireFactory(String serviceName, TargetWireFactory factory) {
+        targetProxyFactories.put(serviceName, factory);
+    }
+
+    /**
+     * Gets a target proxy factory by name.
+     * 
+     * @param serviceName Service name.
+     * @return Target wire factory for the specified service.
+     */
+    public final TargetWireFactory getTargetWireFactory(String serviceName) {
+        return targetProxyFactories.get(serviceName);
+    }
+
+    /**
+     * Returns all the target wire factories.
+     * @return All the target wire factories for the context.
+     */
+    public final Map<String, TargetWireFactory> getTargetWireFactories() {
+        return targetProxyFactories;
+    }
+
+    /**
+     * Adds a source wire factory.
+     * 
+     * @param referenceName Reference name.
+     * @param factory SOurce wire factory.
+     */
+    public final void addSourceWireFactory(String referenceName, SourceWireFactory factory) {
+        sourceProxyFactories.add(factory);
+    }
+
+    /**
+     * Adds all source wire factories.
+     */
+    public final void addSourceWireFactories(String referenceName, Class referenceInterface, List<SourceWireFactory> factory, boolean multiplicity) {
+    	sourceProxyFactories.addAll(factory);
+    }
+
+    /**
+     * Returns all the source wire factories.
+     */
+    public final List<SourceWireFactory> getSourceWireFactories() {
+        return sourceProxyFactories;
+    }
+
+    /**
+     * Notification that the parent factory has been activated.
+     */
+    public final void prepare(CompositeContext parent) {
+    }
+
+}

Added: incubator/tuscany/sandbox/container.groovy/src/main/java/org/apache/tuscany/container/extension/context/AbstractComponentContext.java
URL: http://svn.apache.org/viewcvs/incubator/tuscany/sandbox/container.groovy/src/main/java/org/apache/tuscany/container/extension/context/AbstractComponentContext.java?rev=406402&view=auto
==============================================================================
--- incubator/tuscany/sandbox/container.groovy/src/main/java/org/apache/tuscany/container/extension/context/AbstractComponentContext.java (added)
+++ incubator/tuscany/sandbox/container.groovy/src/main/java/org/apache/tuscany/container/extension/context/AbstractComponentContext.java Sun May 14 11:45:05 2006
@@ -0,0 +1,114 @@
+/**
+ *
+ *  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.container.extension.context;
+
+import java.util.Map;
+
+import org.apache.tuscany.core.context.AtomicContext;
+import org.apache.tuscany.core.context.CoreRuntimeException;
+import org.apache.tuscany.core.context.QualifiedName;
+import org.apache.tuscany.core.context.TargetException;
+import org.apache.tuscany.core.context.event.InstanceCreated;
+import org.apache.tuscany.core.context.impl.AbstractContext;
+import org.apache.tuscany.core.wire.ProxyCreationException;
+import org.apache.tuscany.core.wire.TargetWireFactory;
+import org.apache.tuscany.core.wire.WireFactory;
+
+/**
+ * Abstract component context.
+ *
+ */
+public abstract class AbstractComponentContext extends AbstractContext implements AtomicContext {
+
+    private Map<String, TargetWireFactory> targetProxyFactories;
+
+    public AbstractComponentContext(String name, Map<String, TargetWireFactory> targetProxyFactories) {
+        super(name);
+        this.targetProxyFactories = targetProxyFactories;
+    }
+
+    public Object getInstance(QualifiedName qName) throws TargetException {
+        return getInstance(qName, true);
+    }
+
+    /**
+     * Init method.
+     */
+    public void init() throws TargetException {
+    }
+
+    /**
+     * Detsroy method.
+     */
+    public void destroy() throws TargetException {
+    }
+
+    private synchronized Object getInstance(QualifiedName qName, boolean notify) throws TargetException {
+        String portName = qName.getPortName();
+        WireFactory targetFactory;
+        if (portName != null) {
+            targetFactory = targetProxyFactories.get(portName);
+        } else {
+            targetFactory = targetProxyFactories.values().iterator().next();
+        }
+        if (targetFactory == null) {
+            TargetException e = new TargetException("Target service not found");
+            e.setIdentifier(qName.getPortName());
+            e.addContextName(getName());
+            throw e;
+        }
+        try {
+            Object proxy = targetFactory.createProxy();
+            if (notify) {
+                publish(new InstanceCreated(this));
+            }
+            return proxy;
+        } catch (ProxyCreationException e) {
+            TargetException te = new TargetException("Error returning target", e);
+            e.setIdentifier(qName.getPortName());
+            e.addContextName(getName());
+            throw te;
+        }
+    }
+
+    /**
+     * Whether this context supports eager init.
+     */
+    public boolean isEagerInit() {
+        return false;
+    }
+
+    /**
+     * Whether this context is destroyable.
+     */
+    public boolean isDestroyable() {
+        return false;
+    }
+
+    /**
+     * Starts the context.
+     */
+    public void start() throws CoreRuntimeException {
+    }
+
+    /**
+     * Stops the context.
+     */
+    public void stop() throws CoreRuntimeException {
+    }
+
+}

Added: incubator/tuscany/sandbox/container.groovy/src/main/java/org/apache/tuscany/container/extension/loader/AbstractImplementationLoader.java
URL: http://svn.apache.org/viewcvs/incubator/tuscany/sandbox/container.groovy/src/main/java/org/apache/tuscany/container/extension/loader/AbstractImplementationLoader.java?rev=406402&view=auto
==============================================================================
--- incubator/tuscany/sandbox/container.groovy/src/main/java/org/apache/tuscany/container/extension/loader/AbstractImplementationLoader.java (added)
+++ incubator/tuscany/sandbox/container.groovy/src/main/java/org/apache/tuscany/container/extension/loader/AbstractImplementationLoader.java Sun May 14 11:45:05 2006
@@ -0,0 +1,160 @@
+/**
+ *
+ *  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.container.extension.loader;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URL;
+
+import javax.xml.stream.XMLInputFactory;
+import javax.xml.stream.XMLStreamException;
+import javax.xml.stream.XMLStreamReader;
+
+import org.apache.tuscany.core.config.ConfigurationLoadException;
+import org.apache.tuscany.core.config.InvalidRootElementException;
+import org.apache.tuscany.core.config.MissingResourceException;
+import org.apache.tuscany.core.config.SidefileLoadException;
+import org.apache.tuscany.core.loader.LoaderContext;
+import org.apache.tuscany.core.loader.StAXElementLoader;
+import org.apache.tuscany.core.loader.StAXLoaderRegistry;
+import org.apache.tuscany.core.loader.assembly.AssemblyConstants;
+import org.apache.tuscany.core.system.annotation.Autowire;
+import org.apache.tuscany.model.assembly.ComponentType;
+import org.apache.tuscany.model.assembly.Implementation;
+import org.osoa.sca.annotations.Scope;
+
+/**
+ * Abstract implementation loader.
+ *
+ */
+@Scope("MODULE")
+public abstract class AbstractImplementationLoader<T extends Implementation> implements StAXElementLoader<T> {
+
+	// Injected Stax loader registry.
+    protected StAXLoaderRegistry registry;
+
+    // XML input factory.
+    protected XMLInputFactory xmlFactory;
+
+    /**
+     * Initializes the XML input factory.
+     *
+     */
+    public AbstractImplementationLoader() {
+        xmlFactory = XMLInputFactory.newInstance();
+    }
+
+    /**
+     * Injection method for Stax loader registry.
+     * @param registry Stax loader registry.
+     */
+    @Autowire
+    public void setRegistry(StAXLoaderRegistry registry) {
+        this.registry = registry;
+    }
+
+    /**
+     * Loads the Groovy implementation.
+     *
+     * @param Stax XML stream reader.
+     * @param loaderContext Loader context.
+     * @return Groovy implementation.
+     */
+	public T load(XMLStreamReader reader, LoaderContext loaderContext) throws XMLStreamException, ConfigurationLoadException {
+
+		T assemblyObject = getAssemblyObject(reader, loaderContext);
+		
+		URL componentTypeFile = getSideFile(reader, loaderContext);
+        ComponentType componentType = loadComponentType(componentTypeFile, loaderContext);
+
+		assemblyObject.setComponentType(componentType);
+
+		return assemblyObject;
+
+	}
+	
+	/**
+	 * Required to be implemented by the concrete classes.
+	 * @return Implementation object.
+	 */
+	protected abstract T getAssemblyObject(XMLStreamReader reader, LoaderContext loaderContext);
+
+    /**
+     * Gets the side file.
+     * 
+     * @param reader Reader for the module file.
+     * @param loaderContext Loader context.
+     * @return Side file Url.
+     * @throws MissingResourceException
+     */
+	protected abstract URL getSideFile(XMLStreamReader reader, LoaderContext loaderContext) throws MissingResourceException;
+
+	/**
+	 * Loads the SIDE file to get the component information.
+	 *
+	 * @param scriptFile SCript file name.
+	 * @param loaderContext Loader context.
+	 * @return Component information.
+	 * @throws SidefileLoadException
+	 * @throws MissingResourceException
+	 */
+    private ComponentType loadComponentType(URL componentTypeFile, LoaderContext loaderContext) throws SidefileLoadException, MissingResourceException{
+    	
+    	XMLStreamReader reader = null;
+    	InputStream is = null;
+
+        try {
+            is = componentTypeFile.openStream();
+            reader = xmlFactory.createXMLStreamReader(is);
+            reader.nextTag();
+            if (!AssemblyConstants.COMPONENT_TYPE.equals(reader.getName())) {
+                InvalidRootElementException e = new InvalidRootElementException(AssemblyConstants.COMPONENT_TYPE, reader.getName());
+                e.setResourceURI(componentTypeFile.toString());
+                throw e;
+            }
+            return (ComponentType) registry.load(reader, loaderContext);
+        } catch (IOException e) {
+            SidefileLoadException sfe = new SidefileLoadException(e.getMessage());
+            sfe.setResourceURI(componentTypeFile.toString());
+            throw sfe;
+        } catch (XMLStreamException e) {
+            SidefileLoadException sfe = new SidefileLoadException(e.getMessage());
+            sfe.setResourceURI(componentTypeFile.toString());
+            throw sfe;
+        } catch (ConfigurationLoadException e) {
+            SidefileLoadException sfe = new SidefileLoadException(e.getMessage());
+            sfe.setResourceURI(componentTypeFile.toString());
+            throw sfe;
+        } finally {
+            try {
+            	if(reader != null) {
+            		reader.close();
+            	}
+            } catch (XMLStreamException e) {
+                // ignore
+            }
+            try {
+            	if(is != null) {
+            		is.close();
+            	}
+            } catch (IOException e) {
+                // ignore
+            }
+        }
+    }
+
+}

Modified: incubator/tuscany/sandbox/container.groovy/src/main/java/org/apache/tuscany/container/groovy/builder/GroovyContextFactoryBuilder.java
URL: http://svn.apache.org/viewcvs/incubator/tuscany/sandbox/container.groovy/src/main/java/org/apache/tuscany/container/groovy/builder/GroovyContextFactoryBuilder.java?rev=406402&r1=406401&r2=406402&view=diff
==============================================================================
--- incubator/tuscany/sandbox/container.groovy/src/main/java/org/apache/tuscany/container/groovy/builder/GroovyContextFactoryBuilder.java (original)
+++ incubator/tuscany/sandbox/container.groovy/src/main/java/org/apache/tuscany/container/groovy/builder/GroovyContextFactoryBuilder.java Sun May 14 11:45:05 2006
@@ -19,104 +19,21 @@
 import org.apache.tuscany.container.groovy.assembly.GroovyImplementation;
 import org.apache.tuscany.container.groovy.config.GroovyContextFactory;
 import org.apache.tuscany.container.groovy.invoker.GroovyScript;
-import org.apache.tuscany.core.builder.BuilderException;
-import org.apache.tuscany.core.builder.ContextFactoryBuilder;
-import org.apache.tuscany.core.builder.ContextFactoryBuilderRegistry;
-import org.apache.tuscany.core.system.annotation.Autowire;
-import org.apache.tuscany.core.wire.TargetWireFactory;
-import org.apache.tuscany.core.wire.service.WireFactoryService;
-import org.apache.tuscany.model.assembly.AssemblyObject;
-import org.apache.tuscany.model.assembly.AtomicComponent;
-import org.apache.tuscany.model.assembly.ConfiguredService;
-import org.apache.tuscany.model.assembly.Implementation;
+import org.apache.tuscany.core.builder.ContextFactory;
+import org.apache.tuscany.core.extension.ContextFactoryBuilderSupport;
 import org.apache.tuscany.model.assembly.Scope;
-import org.apache.tuscany.model.assembly.Service;
-import org.osoa.sca.annotations.Init;
 
 /**
  * Groovy context factory builder.
  *
  */
 @org.osoa.sca.annotations.Scope("MODULE")
-public class GroovyContextFactoryBuilder implements ContextFactoryBuilder {
+public class GroovyContextFactoryBuilder extends ContextFactoryBuilderSupport<GroovyImplementation> {
 
-	// Context factory builder registry.
-    private ContextFactoryBuilderRegistry builderRegistry;
-    
-    // Wire factory service.
-    private WireFactoryService wireFactoryService;
-
-    /**
-     * Lifecycle method used for registering the builder.
-     *
-     */
-    @Init(eager = true)
-    public void init() {
-        builderRegistry.register(this);
-    }
-
-    /**
-     * Injection method for builder registry.
-     * @param builderRegistry
-     */
-    @Autowire
-    public void setBuilderRegistry(ContextFactoryBuilderRegistry builderRegistry) {
-        this.builderRegistry = builderRegistry;
-    }
-
-    /**
-     * Injection method for wire factory service.
-     * @param wireFactoryService WIre factory service.
-     */
-    @Autowire
-    public void setWireFactoryService(WireFactoryService wireFactoryService) {
-        this.wireFactoryService = wireFactoryService;
-    }
-
-    /**
-     * Builds the groovy component implementation.
-     * @param assemblyObject Assembly object.
-     */
-    public void build(AssemblyObject assemblyObject) throws BuilderException {
-    	
-        if (assemblyObject instanceof AtomicComponent) {
-            AtomicComponent component = (AtomicComponent) assemblyObject;
-            Implementation impl = component.getImplementation();
-            if (impl instanceof GroovyImplementation) {
-                buildGroovyComponent(component, (GroovyImplementation) impl);
-            } else {
-            	throw new IllegalArgumentException("Unexpected component type: " + 
-            			impl.getClass());
-            }
-        }
-        
-    }
-
-    /*
-     * Builds the groovy component.
-     */
-    private void buildGroovyComponent(AtomicComponent component, GroovyImplementation impl) {
-        
-    	Scope scope = impl.getComponentType().getServices().get(0).getServiceContract().getScope();
-        
-        GroovyScript groovyScript = new GroovyScript(impl.getScript());
-        GroovyContextFactory contextFactory = new GroovyContextFactory(component.getName(),
-                scope, groovyScript);
-
-        addTargetInvocationChains(component, contextFactory);
-        component.setContextFactory(contextFactory);
-        
-    }
-
-    /*
-     * Add target-side wire chains for each service offered by the implementation
-     */
-    private void addTargetInvocationChains(AtomicComponent component, GroovyContextFactory contextFactory) {
-        for (ConfiguredService configuredService : component.getConfiguredServices()) {
-            Service service = configuredService.getPort();
-            TargetWireFactory wireFactory = wireFactoryService.createTargetFactory(configuredService);
-            contextFactory.addTargetWireFactory(service.getName(), wireFactory);
-        }
+    @Override
+    protected ContextFactory createContextFactory(String componentName, GroovyImplementation implementation, Scope scope) {
+        GroovyScript groovyScript = new GroovyScript(implementation.getScript());
+        return new GroovyContextFactory(componentName, scope, groovyScript);
     }
 
 }

Modified: incubator/tuscany/sandbox/container.groovy/src/main/java/org/apache/tuscany/container/groovy/config/GroovyContextFactory.java
URL: http://svn.apache.org/viewcvs/incubator/tuscany/sandbox/container.groovy/src/main/java/org/apache/tuscany/container/groovy/config/GroovyContextFactory.java?rev=406402&r1=406401&r2=406402&view=diff
==============================================================================
--- incubator/tuscany/sandbox/container.groovy/src/main/java/org/apache/tuscany/container/groovy/config/GroovyContextFactory.java (original)
+++ incubator/tuscany/sandbox/container.groovy/src/main/java/org/apache/tuscany/container/groovy/config/GroovyContextFactory.java Sun May 14 11:45:05 2006
@@ -16,39 +16,19 @@
  */
 package org.apache.tuscany.container.groovy.config;
 
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
+import org.apache.tuscany.container.extension.config.AbstractContextFactory;
 import org.apache.tuscany.container.groovy.context.GroovyComponentContext;
 import org.apache.tuscany.container.groovy.invoker.GroovyScript;
 import org.apache.tuscany.core.builder.ContextCreationException;
-import org.apache.tuscany.core.builder.ContextFactory;
-import org.apache.tuscany.core.context.CompositeContext;
-import org.apache.tuscany.core.wire.SourceWireFactory;
-import org.apache.tuscany.core.wire.TargetWireFactory;
 import org.apache.tuscany.model.assembly.Scope;
 
 /**
  * Groovy context factory.
  */
-public class GroovyContextFactory implements ContextFactory<GroovyComponentContext> {
-
-	// Context scope
-    private Scope scope;
-
-    // Context name
-    private String name;
+public class GroovyContextFactory extends AbstractContextFactory<GroovyComponentContext> {
     
     // Groovy script to run
     private GroovyScript groovyScript;
-
-    // SOurce proxy factories
-    private List<SourceWireFactory> sourceProxyFactories = new ArrayList<SourceWireFactory>();
-    
-    // Target proxy factories
-    private Map<String, TargetWireFactory> targetProxyFactories = new HashMap<String, TargetWireFactory>();
     
     /**
      * Initializes the context factory.
@@ -58,8 +38,7 @@
      * @param groovyScript Groovy script to run.
      */
     public GroovyContextFactory(String name, Scope scope, GroovyScript groovyScript) {
-        this.name = name;
-        this.scope = scope;
+        super(name, scope);
         this.groovyScript = groovyScript;
     }
 
@@ -67,92 +46,10 @@
      * Creates the Groovy component context.
      */
     public GroovyComponentContext createContext() throws ContextCreationException {
-        return new GroovyComponentContext(name, sourceProxyFactories, 
-        		targetProxyFactories, groovyScript);
-    }
-
-    /**
-     * Returns the context scope.
-     * @return Context scope.
-     */
-    public Scope getScope() {
-        return scope;
-    }
-
-    /**
-     * Returns the context name.
-     * @return Context name.
-     */
-    public String getName() {
-        return name;
-    }
-
-    /**
-     * Adds a property.
-     * 
-     * @param propertyName Property name.
-     * @param value Property value.
-     */
-    public void addProperty(String propertyName, Object value) {
-    }
-
-    /**
-     * Adds a target proxy factory.
-     * 
-     * @param serviceName Service name.
-     * @param factory Target proxy factory.
-     */
-    public void addTargetWireFactory(String serviceName, TargetWireFactory factory) {
-        targetProxyFactories.put(serviceName, factory);
-    }
-
-    /**
-     * Gets a target proxy factory by name.
-     * 
-     * @param serviceName Service name.
-     * @return Target wire factory for the specified service.
-     */
-    public TargetWireFactory getTargetWireFactory(String serviceName) {
-        return targetProxyFactories.get(serviceName);
-    }
-
-    /**
-     * Returns all the target wire factories.
-     * @return All the target wire factories for the context.
-     */
-    public Map<String, TargetWireFactory> getTargetWireFactories() {
-        return targetProxyFactories;
+        return new GroovyComponentContext(
+                getName(), 
+        		getTargetWireFactories(), 
+                groovyScript);
     }
-
-    /**
-     * Adds a source wire factory.
-     * 
-     * @param referenceName Reference name.
-     * @param factory SOurce wire factory.
-     */
-    public void addSourceWireFactory(String referenceName, SourceWireFactory factory) {
-        sourceProxyFactories.add(factory);
-    }
-
-    /**
-     * Adds all source wire factories.
-     */
-    public void addSourceWireFactories(String referenceName, Class referenceInterface, List<SourceWireFactory> factory, boolean multiplicity) {
-    	sourceProxyFactories.addAll(factory);
-    }
-
-    /**
-     * Returns all the source wire factories.
-     */
-    public List<SourceWireFactory> getSourceWireFactories() {
-        return sourceProxyFactories;
-    }
-
-    /**
-     * Notification that the parent factory has been activated.
-     */
-    public void prepare(CompositeContext parent) {
-    }
-
 
 }

Modified: incubator/tuscany/sandbox/container.groovy/src/main/java/org/apache/tuscany/container/groovy/context/GroovyComponentContext.java
URL: http://svn.apache.org/viewcvs/incubator/tuscany/sandbox/container.groovy/src/main/java/org/apache/tuscany/container/groovy/context/GroovyComponentContext.java?rev=406402&r1=406401&r2=406402&view=diff
==============================================================================
--- incubator/tuscany/sandbox/container.groovy/src/main/java/org/apache/tuscany/container/groovy/context/GroovyComponentContext.java (original)
+++ incubator/tuscany/sandbox/container.groovy/src/main/java/org/apache/tuscany/container/groovy/context/GroovyComponentContext.java Sun May 14 11:45:05 2006
@@ -16,94 +16,41 @@
  */
 package org.apache.tuscany.container.groovy.context;
 
-import java.util.List;
 import java.util.Map;
 
+import org.apache.tuscany.container.extension.context.AbstractComponentContext;
 import org.apache.tuscany.container.groovy.invoker.GroovyScript;
-import org.apache.tuscany.core.context.AtomicContext;
-import org.apache.tuscany.core.context.CoreRuntimeException;
-import org.apache.tuscany.core.context.QualifiedName;
 import org.apache.tuscany.core.context.TargetException;
-import org.apache.tuscany.core.context.event.InstanceCreated;
-import org.apache.tuscany.core.context.impl.AbstractContext;
-import org.apache.tuscany.core.wire.ProxyCreationException;
-import org.apache.tuscany.core.wire.SourceWireFactory;
 import org.apache.tuscany.core.wire.TargetWireFactory;
-import org.apache.tuscany.core.wire.WireFactory;
 
-public class GroovyComponentContext extends AbstractContext implements AtomicContext {
-
-    private List<SourceWireFactory> sourceProxyFactories;
-
-    private Map<String, TargetWireFactory> targetProxyFactories;
+/**
+ * Groovy component context.
+ *
+ */
+public class GroovyComponentContext extends AbstractComponentContext {
     
+    // Groovy script.
     private GroovyScript groovyScript;
 
+    /**
+     * Initializes the context.
+     * 
+     * @param name Component name.
+     * @param targetProxyFactories Target wire factories.
+     * @param groovyScript Groovy script.
+     */
     public GroovyComponentContext(String name, 
-    		List<SourceWireFactory> sourceProxyFactories, 
     		Map<String, TargetWireFactory> targetProxyFactories, 
     		GroovyScript groovyScript) {
-        super(name);
-        this.sourceProxyFactories = sourceProxyFactories;
-        this.targetProxyFactories = targetProxyFactories;
+        super(name, targetProxyFactories);
         this.groovyScript = groovyScript;
     }
 
-    public Object getInstance(QualifiedName qName) throws TargetException {
-        return getInstance(qName, true);
-    }
-
-    public void init() throws TargetException {
-    }
-
-    public void destroy() throws TargetException {
-
-    }
-
-    private synchronized Object getInstance(QualifiedName qName, boolean notify) throws TargetException {
-        String portName = qName.getPortName();
-        WireFactory targetFactory;
-        if (portName != null) {
-            targetFactory = targetProxyFactories.get(portName);
-        } else {
-            targetFactory = targetProxyFactories.values().iterator().next();
-        }
-        if (targetFactory == null) {
-            TargetException e = new TargetException("Target service not found");
-            e.setIdentifier(qName.getPortName());
-            e.addContextName(getName());
-            throw e;
-        }
-        try {
-            Object proxy = targetFactory.createProxy();
-            if (notify) {
-                publish(new InstanceCreated(this));
-            }
-            return proxy;
-        } catch (ProxyCreationException e) {
-            TargetException te = new TargetException("Error returning target", e);
-            e.setIdentifier(qName.getPortName());
-            e.addContextName(getName());
-            throw te;
-        }
-    }
-
+    /**
+     * Gets the target invocation instance.
+     */
     public Object getTargetInstance() throws TargetException {
         return groovyScript;
-    }
-
-    public boolean isEagerInit() {
-        return false;
-    }
-
-    public boolean isDestroyable() {
-        return false;
-    }
-
-    public void start() throws CoreRuntimeException {
-    }
-
-    public void stop() throws CoreRuntimeException {
     }
 
 }

Modified: incubator/tuscany/sandbox/container.groovy/src/main/java/org/apache/tuscany/container/groovy/loader/GroovyImplementationLoader.java
URL: http://svn.apache.org/viewcvs/incubator/tuscany/sandbox/container.groovy/src/main/java/org/apache/tuscany/container/groovy/loader/GroovyImplementationLoader.java?rev=406402&r1=406401&r2=406402&view=diff
==============================================================================
--- incubator/tuscany/sandbox/container.groovy/src/main/java/org/apache/tuscany/container/groovy/loader/GroovyImplementationLoader.java (original)
+++ incubator/tuscany/sandbox/container.groovy/src/main/java/org/apache/tuscany/container/groovy/loader/GroovyImplementationLoader.java Sun May 14 11:45:05 2006
@@ -16,26 +16,15 @@
  */
 package org.apache.tuscany.container.groovy.loader;
 
-import java.io.IOException;
-import java.io.InputStream;
 import java.net.URL;
 
 import javax.xml.namespace.QName;
-import javax.xml.stream.XMLInputFactory;
-import javax.xml.stream.XMLStreamException;
 import javax.xml.stream.XMLStreamReader;
 
-import org.apache.tuscany.core.config.ConfigurationLoadException;
-import org.apache.tuscany.core.config.InvalidRootElementException;
+import org.apache.tuscany.container.extension.loader.AbstractImplementationLoader;
+import org.apache.tuscany.container.groovy.assembly.GroovyImplementation;
 import org.apache.tuscany.core.config.MissingResourceException;
-import org.apache.tuscany.core.config.SidefileLoadException;
 import org.apache.tuscany.core.loader.LoaderContext;
-import org.apache.tuscany.core.loader.StAXElementLoader;
-import org.apache.tuscany.core.loader.StAXLoaderRegistry;
-import org.apache.tuscany.core.loader.assembly.AssemblyConstants;
-import org.apache.tuscany.core.system.annotation.Autowire;
-import org.apache.tuscany.container.groovy.assembly.GroovyImplementation;
-import org.apache.tuscany.model.assembly.ComponentType;
 import org.osoa.sca.annotations.Destroy;
 import org.osoa.sca.annotations.Init;
 import org.osoa.sca.annotations.Scope;
@@ -45,34 +34,11 @@
  *
  */
 @Scope("MODULE")
-public class GroovyImplementationLoader implements StAXElementLoader<GroovyImplementation> {
-	
+public class GroovyImplementationLoader extends AbstractImplementationLoader<GroovyImplementation> {
+
 	// Qualified name for the Groovy implementation.
 	public static final QName NAME = new QName("http://org.apache.tuscany/xmlns/groovy/0.9", "implementation.groovy");
 
-	// Injected Stax loader registry.
-    protected StAXLoaderRegistry registry;
-    
-    // XML input factory.
-    private XMLInputFactory xmlFactory;
-
-    /**
-     * Initializes the XML input factory.
-     *
-     */
-    public GroovyImplementationLoader() {
-        xmlFactory = XMLInputFactory.newInstance();
-    }
-
-    /**
-     * Injection method for Stax loader registry.
-     * @param registry Stax loader registry.
-     */
-    @Autowire
-    public void setRegistry(StAXLoaderRegistry registry) {
-        this.registry = registry;
-    }
-
     /**
      * Lifecycle method registers the implementation loader.
      *
@@ -90,93 +56,42 @@
     public void stop() {
         registry.unregisterLoader(NAME, this);
     }
-
-    /**
-     * Loads the Groovy implementation.
-     * 
-     * @param Stax XML stream reader.
-     * @param loaderContext Loader context.
-     * @return Groovy implementation.
-     */
-	public GroovyImplementation load(XMLStreamReader reader, LoaderContext loaderContext) throws XMLStreamException, ConfigurationLoadException {
-
+	
+	/**
+	 * Required to be implemented by the concrete classes.
+	 * @return Implementation object.
+	 */
+	protected GroovyImplementation getAssemblyObject(XMLStreamReader reader, LoaderContext loaderContext) {
+		
 		GroovyImplementation groovyImplementation = new GroovyImplementation();
 		String script = reader.getAttributeValue(null, "script");
-        ComponentType componentType = loadComponentType(script, loaderContext);
 		
 		groovyImplementation.setScript(script);
-		groovyImplementation.setComponentType(componentType);
 		groovyImplementation.setResourceLoader(loaderContext.getResourceLoader());
-		
+
 		return groovyImplementation;
 		
 	}
 
-	/**
-	 * Loads the SIDE file to get the component information.
-	 * 
-	 * @param scriptFile SCript file name.
-	 * @param loaderContext Loader context.
-	 * @return Component information.
-	 * @throws SidefileLoadException
-	 * @throws MissingResourceException
-	 */
-    protected ComponentType loadComponentType(String scriptFile, LoaderContext loaderContext) throws SidefileLoadException, MissingResourceException{
-        
-    	URL componentTypeFile = getSideFile(scriptFile, loaderContext);
-    	XMLStreamReader reader = null;
-    	InputStream is = null;
-    	
-        try {
-            is = componentTypeFile.openStream();
-            reader = xmlFactory.createXMLStreamReader(is);
-            reader.nextTag();
-            if (!AssemblyConstants.COMPONENT_TYPE.equals(reader.getName())) {
-                InvalidRootElementException e = new InvalidRootElementException(AssemblyConstants.COMPONENT_TYPE, reader.getName());
-                e.setResourceURI(componentTypeFile.toString());
-                throw e;
-            }
-            return (ComponentType) registry.load(reader, loaderContext);
-        } catch (IOException e) {
-            SidefileLoadException sfe = new SidefileLoadException(e.getMessage());
-            sfe.setResourceURI(componentTypeFile.toString());
-            throw sfe;
-        } catch (XMLStreamException e) {
-            SidefileLoadException sfe = new SidefileLoadException(e.getMessage());
-            sfe.setResourceURI(componentTypeFile.toString());
-            throw sfe;
-        } catch (ConfigurationLoadException e) {
-            SidefileLoadException sfe = new SidefileLoadException(e.getMessage());
-            sfe.setResourceURI(componentTypeFile.toString());
-            throw sfe;
-        } finally {
-            try {
-            	if(reader != null) {
-            		reader.close();
-            	}
-            } catch (XMLStreamException e) {
-                // ignore
-            }
-            try {
-            	if(is != null) {
-            		is.close();
-            	}
-            } catch (IOException e) {
-                // ignore
-            }
-        }
-    }
-
-    /*
-     * Gets the Side file URL.
+    /**
+     * Gets the side file.
+     * 
+     * @param reader Reader for the module file.
+     * @param loaderContext Loader context.
+     * @return Side file Url.
+     * @throws MissingResourceException
      */
-	private URL getSideFile(String scriptFile, LoaderContext loaderContext) throws MissingResourceException {
-		String sidefile = scriptFile.substring(0, scriptFile.lastIndexOf('.')) + ".componentType";
+	protected URL getSideFile(XMLStreamReader reader, LoaderContext loaderContext) 
+	throws MissingResourceException {
+		
+		String script = reader.getAttributeValue(null, "script");
+		String sidefile = script.substring(0, script.lastIndexOf('.')) + ".componentType";
         URL componentTypeFile = loaderContext.getResourceLoader().getResource(sidefile);
         if (componentTypeFile == null) {
             throw new MissingResourceException(sidefile);
         }
 		return componentTypeFile;
+		
 	}
 
 }

Modified: incubator/tuscany/sandbox/container.groovy/src/main/java/org/apache/tuscany/samples/groovy/GreetingClient.java
URL: http://svn.apache.org/viewcvs/incubator/tuscany/sandbox/container.groovy/src/main/java/org/apache/tuscany/samples/groovy/GreetingClient.java?rev=406402&r1=406401&r2=406402&view=diff
==============================================================================
--- incubator/tuscany/sandbox/container.groovy/src/main/java/org/apache/tuscany/samples/groovy/GreetingClient.java (original)
+++ incubator/tuscany/sandbox/container.groovy/src/main/java/org/apache/tuscany/samples/groovy/GreetingClient.java Sun May 14 11:45:05 2006
@@ -29,7 +29,7 @@
 
 /**
  * This client program shows how to create an SCA runtime, start it,
- * locate a simple HelloWorld service component and invoke it.
+ * locate a simple groovy service component and invoke it.
  */
 public class GreetingClient {