You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuscany.apache.org by jb...@apache.org on 2006/05/27 17:19:39 UTC

svn commit: r409831 [1/2] - in /incubator/tuscany/sandbox/jboynes/sca: containers/container.java/src/main/java/org/apache/tuscany/container/java/ core2/src/main/java/org/apache/tuscany/core/bootstrap/ core2/src/main/java/org/apache/tuscany/core/composi...

Author: jboynes
Date: Sat May 27 08:19:37 2006
New Revision: 409831

URL: http://svn.apache.org/viewvc?rev=409831&view=rev
Log:
Add simple testcase for bootstrap deployer loading a system service and component.
Migrated property factory implementations.
Tightened generics on loader implementations.
Refactored componentType sidefile loading into the extension so it can be reused.

Added:
    incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/injection/JNDIObjectFactory.java   (with props)
    incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/loader/JNDIPropertyFactory.java   (with props)
    incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/loader/StringParserPropertyFactory.java   (with props)
    incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/system/loader/SystemBindingLoader.java   (with props)
    incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/system/loader/SystemCompositeComponentTypeLoader.java   (with props)
    incubator/tuscany/sandbox/jboynes/sca/core2/src/test/java/org/apache/tuscany/core/deployer/
    incubator/tuscany/sandbox/jboynes/sca/core2/src/test/java/org/apache/tuscany/core/deployer/BootstrapDeployerTestCase.java   (with props)
    incubator/tuscany/sandbox/jboynes/sca/core2/src/test/java/org/apache/tuscany/core/mock/component/BasicInterface.java   (with props)
    incubator/tuscany/sandbox/jboynes/sca/core2/src/test/java/org/apache/tuscany/core/mock/component/BasicInterfaceImpl.java   (with props)
    incubator/tuscany/sandbox/jboynes/sca/core2/src/test/resources/org/apache/tuscany/core/deployer/
    incubator/tuscany/sandbox/jboynes/sca/core2/src/test/resources/org/apache/tuscany/core/deployer/boot1.scdl
    incubator/tuscany/sandbox/jboynes/sca/spi/src/main/java/org/apache/tuscany/spi/loader/UndefinedPropertyException.java   (with props)
    incubator/tuscany/sandbox/jboynes/sca/spi/src/main/java/org/apache/tuscany/spi/loader/UnexpectedElementException.java   (with props)
Modified:
    incubator/tuscany/sandbox/jboynes/sca/containers/container.java/src/main/java/org/apache/tuscany/container/java/JavaComponentTypeLoader.java
    incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/bootstrap/DefaultBootstrapper.java
    incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/composite/loader/CompositeLoader.java
    incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/deployer/DeployerImpl.java
    incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/loader/AssemblyConstants.java
    incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/loader/ComponentLoader.java
    incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/loader/ComponentTypeElementLoader.java
    incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/loader/InterfaceJavaLoader.java
    incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/loader/LoaderRegistryImpl.java
    incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/loader/PropertyLoader.java
    incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/loader/ReferenceLoader.java
    incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/loader/ServiceLoader.java
    incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/model/PojoComponentType.java
    incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/system/loader/SystemComponentTypeLoader.java
    incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/system/loader/SystemImplementationLoader.java
    incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/system/model/SystemBinding.java
    incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/system/model/SystemCompositeImplementation.java
    incubator/tuscany/sandbox/jboynes/sca/core2/src/test/java/org/apache/tuscany/core/bootstrap/BootstrapperTestCase.java
    incubator/tuscany/sandbox/jboynes/sca/spi/src/main/java/org/apache/tuscany/spi/deployer/Deployer.java
    incubator/tuscany/sandbox/jboynes/sca/spi/src/main/java/org/apache/tuscany/spi/extension/ComponentTypeLoaderExtension.java
    incubator/tuscany/sandbox/jboynes/sca/spi/src/main/java/org/apache/tuscany/spi/extension/LoaderExtension.java
    incubator/tuscany/sandbox/jboynes/sca/spi/src/main/java/org/apache/tuscany/spi/loader/ComponentTypeLoader.java
    incubator/tuscany/sandbox/jboynes/sca/spi/src/main/java/org/apache/tuscany/spi/loader/LoaderRegistry.java
    incubator/tuscany/sandbox/jboynes/sca/spi/src/main/java/org/apache/tuscany/spi/model/CompositeImplementation.java
    incubator/tuscany/sandbox/jboynes/sca/spi/src/main/java/org/apache/tuscany/spi/model/Implementation.java
    incubator/tuscany/sandbox/jboynes/sca/spi/src/main/java/org/apache/tuscany/spi/model/ModelObject.java
    incubator/tuscany/sandbox/jboynes/sca/spi/src/main/java/org/apache/tuscany/spi/model/Property.java

Modified: incubator/tuscany/sandbox/jboynes/sca/containers/container.java/src/main/java/org/apache/tuscany/container/java/JavaComponentTypeLoader.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/sandbox/jboynes/sca/containers/container.java/src/main/java/org/apache/tuscany/container/java/JavaComponentTypeLoader.java?rev=409831&r1=409830&r2=409831&view=diff
==============================================================================
--- incubator/tuscany/sandbox/jboynes/sca/containers/container.java/src/main/java/org/apache/tuscany/container/java/JavaComponentTypeLoader.java (original)
+++ incubator/tuscany/sandbox/jboynes/sca/containers/container.java/src/main/java/org/apache/tuscany/container/java/JavaComponentTypeLoader.java Sat May 27 08:19:37 2006
@@ -16,22 +16,13 @@
  */
 package org.apache.tuscany.container.java;
 
-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.loader.AssemblyConstants;
 import org.apache.tuscany.core.model.PojoComponentType;
 import org.apache.tuscany.core.util.JavaIntrospectionHelper;
 import org.apache.tuscany.spi.deployer.DeploymentContext;
 import org.apache.tuscany.spi.extension.ComponentTypeLoaderExtension;
 import org.apache.tuscany.spi.loader.LoaderException;
-import org.apache.tuscany.spi.loader.UnrecognizedElementException;
-import org.apache.tuscany.spi.model.ComponentType;
 
 /**
  * @version $Rev$ $Date$
@@ -42,70 +33,24 @@
         super();
     }
 
-    public void load(JavaImplementation implementation, DeploymentContext deploymentContext) {
+    public void load(JavaImplementation implementation, DeploymentContext deploymentContext) throws LoaderException {
         Class<?> implClass = implementation.getImplementationClass();
         URL resource = implClass.getResource(JavaIntrospectionHelper.getBaseName(implClass) + ".componentType");
-        try {
-            if (resource == null) {
-                loadByIntrospection(implementation);
-            } else {
-                loadFromSidefile(implementation, resource, deploymentContext);
-            }
-        } catch (LoaderException e) {
-            // throw new TuscanyRuntimeException(e);
+        PojoComponentType componentType;
+        if (resource == null) {
+            componentType = loadByIntrospection(implementation);
+        } else {
+            componentType = loadFromSidefile(PojoComponentType.class, resource, deploymentContext);
         }
-    }
-
-    protected void loadByIntrospection(JavaImplementation implementation) {
-        Class<?> implClass = implementation.getImplementationClass();
-        PojoComponentType componentType = null; // FIXME: introspector.introspect(implClass);
         implementation.setComponentType(componentType);
     }
 
-    protected ComponentType loadFromSidefile(JavaImplementation implementation, URL sidefile, DeploymentContext deploymentContext)
-            throws LoaderException {
-        try {
-            XMLStreamReader reader;
-            InputStream is;
-            is = sidefile.openStream();
-            try {
-                XMLInputFactory factory = deploymentContext.getXmlFactory();
-                reader = factory.createXMLStreamReader(is);
-                try {
-                    reader.nextTag();
-                    if (!AssemblyConstants.COMPONENT_TYPE.equals(reader.getName())) {
-                        UnrecognizedElementException e = new UnrecognizedElementException(reader.getName());
-                        e.setResourceURI(sidefile.toString());
-                        throw e;
-                    }
-                    return (ComponentType) loaderRegistry.load(reader, deploymentContext);
-                } finally {
-                    try {
-                        reader.close();
-                    } catch (XMLStreamException e) {
-                        // ignore
-                    }
-                }
-            } finally {
-                try {
-                    is.close();
-                } catch (IOException e) {
-                    // ignore
-                }
-            }
-        } catch (IOException e) {
-            LoaderException sfe = new LoaderException(e.getMessage());
-            sfe.setResourceURI(sidefile.toString());
-            throw sfe;
-        } catch (XMLStreamException e) {
-            LoaderException sfe = new LoaderException(e.getMessage());
-            sfe.setResourceURI(sidefile.toString());
-            throw sfe;
-        }
+    protected PojoComponentType loadByIntrospection(JavaImplementation implementation) {
+        throw new UnsupportedOperationException();
     }
 
     @Override
-    protected Class<JavaImplementation> getTypeClass() {
+    protected Class<JavaImplementation> getImplementationClass() {
         return JavaImplementation.class;
     }
 

Modified: incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/bootstrap/DefaultBootstrapper.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/bootstrap/DefaultBootstrapper.java?rev=409831&r1=409830&r2=409831&view=diff
==============================================================================
--- incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/bootstrap/DefaultBootstrapper.java (original)
+++ incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/bootstrap/DefaultBootstrapper.java Sat May 27 08:19:37 2006
@@ -16,41 +16,41 @@
  */
 package org.apache.tuscany.core.bootstrap;
 
-import java.net.URI;
-
 import org.apache.tuscany.core.builder.BuilderRegistryImpl;
 import org.apache.tuscany.core.builder.Connector;
 import org.apache.tuscany.core.builder.ConnectorImpl;
+import org.apache.tuscany.core.composite.loader.CompositeLoader;
 import org.apache.tuscany.core.context.WorkContextImpl;
-import org.apache.tuscany.core.context.scope.ModuleScopeContext;
 import org.apache.tuscany.core.context.scope.ScopeRegistryImpl;
 import org.apache.tuscany.core.deployer.DeployerImpl;
+import org.apache.tuscany.core.loader.AssemblyConstants;
+import org.apache.tuscany.core.loader.ComponentLoader;
+import org.apache.tuscany.core.loader.ComponentTypeElementLoader;
+import org.apache.tuscany.core.loader.InterfaceJavaLoader;
 import org.apache.tuscany.core.loader.LoaderRegistryImpl;
-import org.apache.tuscany.core.model.PojoComponentType;
+import org.apache.tuscany.core.loader.PropertyLoader;
+import org.apache.tuscany.core.loader.ReferenceLoader;
+import org.apache.tuscany.core.loader.ServiceLoader;
+import org.apache.tuscany.core.loader.StringParserPropertyFactory;
 import org.apache.tuscany.core.system.builder.SystemBindingBuilder;
 import org.apache.tuscany.core.system.builder.SystemComponentBuilder;
 import org.apache.tuscany.core.system.builder.SystemCompositeBuilder;
 import org.apache.tuscany.core.system.loader.SystemComponentTypeLoader;
+import org.apache.tuscany.core.system.loader.SystemImplementationLoader;
+import org.apache.tuscany.core.system.loader.SystemCompositeComponentTypeLoader;
+import org.apache.tuscany.core.system.loader.SystemBindingLoader;
 import org.apache.tuscany.core.system.model.SystemBinding;
 import org.apache.tuscany.core.system.model.SystemCompositeImplementation;
 import org.apache.tuscany.core.system.model.SystemImplementation;
-import org.apache.tuscany.core.system.context.SystemCompositeContext;
 import org.apache.tuscany.core.wire.jdk.JDKWireFactoryService;
 import org.apache.tuscany.core.wire.system.WireServiceImpl;
 import org.apache.tuscany.spi.builder.BuilderRegistry;
-import org.apache.tuscany.spi.context.CompositeContext;
-import org.apache.tuscany.spi.context.Context;
-import org.apache.tuscany.spi.context.ScopeContext;
 import org.apache.tuscany.spi.context.ScopeRegistry;
 import org.apache.tuscany.spi.deployer.Deployer;
-import org.apache.tuscany.spi.deployer.DeploymentContext;
 import org.apache.tuscany.spi.loader.LoaderRegistry;
-import org.apache.tuscany.spi.model.BoundService;
-import org.apache.tuscany.spi.model.Component;
-import org.apache.tuscany.spi.model.CompositeComponentType;
-import org.apache.tuscany.spi.model.JavaServiceContract;
-import org.apache.tuscany.spi.model.Service;
+import org.apache.tuscany.spi.loader.StAXPropertyFactory;
 import org.apache.tuscany.spi.wire.WireService;
+import org.apache.tuscany.spi.monitor.MonitorFactory;
 
 /**
  * @version $Rev$ $Date$
@@ -66,13 +66,21 @@
         this.connector = connector;
     }
 
-    public DefaultBootstrapper() {
+    public DefaultBootstrapper(MonitorFactory monitorFactory) {
         this.builderRegistry = getDefaultBuilderRegistry();
-        this.loaderRegistry = getDefaultLoaderRegistry();
+        this.loaderRegistry = getDefaultLoaderRegistry(monitorFactory, new StringParserPropertyFactory());
         this.connector = getDefaultConnector();
     }
 
-    public static BuilderRegistry getDefaultBuilderRegistry() {
+    public Deployer createDeployer() {
+        DeployerImpl deployer = new DeployerImpl();
+        deployer.setBuilderRegistry(builderRegistry);
+        deployer.setLoaderRegistry(loaderRegistry);
+        deployer.setConnector(connector);
+        return deployer;
+    }
+
+    protected BuilderRegistry getDefaultBuilderRegistry() {
         WireService wireService = new WireServiceImpl(new JDKWireFactoryService());
         ScopeRegistry scopeRegistry = new ScopeRegistryImpl(new WorkContextImpl());
         BuilderRegistry builderRegistry = new BuilderRegistryImpl(wireService, scopeRegistry);
@@ -82,37 +90,29 @@
         return builderRegistry;
     }
 
-    public static LoaderRegistry getDefaultLoaderRegistry() {
-        LoaderRegistry loaderRegistry = new LoaderRegistryImpl();
+    protected LoaderRegistry getDefaultLoaderRegistry(MonitorFactory monitorFactory, StAXPropertyFactory propertyFactory) {
+        LoaderRegistryImpl loaderRegistry = new LoaderRegistryImpl();
+        loaderRegistry.setMonitor(monitorFactory.getMonitor(LoaderRegistryImpl.Monitor.class));
+
+        // register component type loaders
         loaderRegistry.registerLoader(SystemImplementation.class, new SystemComponentTypeLoader());
-        return loaderRegistry;
-    }
+        loaderRegistry.registerLoader(SystemCompositeImplementation.class, new SystemCompositeComponentTypeLoader(loaderRegistry));
 
-    public static Connector getDefaultConnector() {
-        return new ConnectorImpl();
-    }
+        // register element loaders
+        loaderRegistry.registerLoader(AssemblyConstants.COMPONENT, new ComponentLoader(loaderRegistry, propertyFactory));
+        loaderRegistry.registerLoader(AssemblyConstants.COMPONENT_TYPE, new ComponentTypeElementLoader(loaderRegistry));
+        loaderRegistry.registerLoader(AssemblyConstants.COMPOSITE, new CompositeLoader(loaderRegistry));
+        loaderRegistry.registerLoader(AssemblyConstants.INTERFACE_JAVA, new InterfaceJavaLoader(loaderRegistry));
+        loaderRegistry.registerLoader(AssemblyConstants.PROPERTY, new PropertyLoader(loaderRegistry));
+        loaderRegistry.registerLoader(AssemblyConstants.REFERENCE, new ReferenceLoader(loaderRegistry));
+        loaderRegistry.registerLoader(AssemblyConstants.SERVICE, new ServiceLoader(loaderRegistry));
 
-    public Context<Deployer> createDeployer(String name, CompositeContext<?> parent) {
-        ScopeContext moduleScope = new ModuleScopeContext();
-        DeploymentContext deploymentContext = new DeploymentContext(null, null, moduleScope);
-        CompositeComponentType composite = new CompositeComponentType();
-
-        // expose the deployer as a system service
-        composite.add(new BoundService<SystemBinding>("deployer", new JavaServiceContract(Deployer.class), new SystemBinding(), URI.create("deployerImpl")));
-
-        // create the deployer component
-        composite.add(createdeployer());
-
-        Component<SystemCompositeImplementation> deployerComposite = new Component<SystemCompositeImplementation>(name, new SystemCompositeImplementation(composite));
-        SystemCompositeContext<Deployer> context = (SystemCompositeContext<Deployer>) builderRegistry.build(parent, deployerComposite, deploymentContext);
-        context.setScopeContext(moduleScope);
-        connector.connect(context);
-        return context;
+        loaderRegistry.registerLoader(SystemImplementationLoader.SYSTEM_IMPLEMENTATION, new SystemImplementationLoader(loaderRegistry));
+        loaderRegistry.registerLoader(SystemBindingLoader.SYSTEM_BINDING, new SystemBindingLoader(loaderRegistry));
+        return loaderRegistry;
     }
 
-    protected Component<SystemImplementation> createdeployer() {
-        PojoComponentType type = new PojoComponentType();
-        type.add(new Service("default", new JavaServiceContract(Deployer.class)));
-        return new Component<SystemImplementation>("deployerImpl", new SystemImplementation(type, DeployerImpl.class));
+    protected Connector getDefaultConnector() {
+        return new ConnectorImpl();
     }
 }

Modified: incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/composite/loader/CompositeLoader.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/composite/loader/CompositeLoader.java?rev=409831&r1=409830&r2=409831&view=diff
==============================================================================
--- incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/composite/loader/CompositeLoader.java (original)
+++ incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/composite/loader/CompositeLoader.java Sat May 27 08:19:37 2006
@@ -31,6 +31,7 @@
 import org.apache.tuscany.spi.model.Implementation;
 import org.apache.tuscany.spi.deployer.DeploymentContext;
 import org.apache.tuscany.spi.loader.LoaderException;
+import org.apache.tuscany.spi.loader.LoaderRegistry;
 import org.apache.tuscany.spi.extension.LoaderExtension;
 import org.apache.tuscany.core.loader.AssemblyConstants;
 
@@ -38,6 +39,13 @@
  * @version $Rev$ $Date$
  */
 public class CompositeLoader extends LoaderExtension<CompositeComponentType> {
+    public CompositeLoader() {
+    }
+
+    public CompositeLoader(LoaderRegistry registry) {
+        super(registry);
+    }
+
     protected QName getXMLType() {
         return AssemblyConstants.COMPOSITE;
     }

Modified: incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/deployer/DeployerImpl.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/deployer/DeployerImpl.java?rev=409831&r1=409830&r2=409831&view=diff
==============================================================================
--- incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/deployer/DeployerImpl.java (original)
+++ incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/deployer/DeployerImpl.java Sat May 27 08:19:37 2006
@@ -26,6 +26,7 @@
 import org.apache.tuscany.spi.deployer.Deployer;
 import org.apache.tuscany.spi.deployer.DeploymentContext;
 import org.apache.tuscany.spi.loader.LoaderRegistry;
+import org.apache.tuscany.spi.loader.LoaderException;
 import org.apache.tuscany.spi.model.Component;
 import org.apache.tuscany.spi.model.Implementation;
 
@@ -54,7 +55,7 @@
         this.connector = connector;
     }
 
-    public <I extends Implementation<?>> void deploy(CompositeContext<?> parent, Component<I> component) {
+    public <I extends Implementation<?>> void deploy(CompositeContext<?> parent, Component<I> component) throws LoaderException {
         ScopeContext moduleScope = new ModuleScopeContext();
         DeploymentContext deploymentContext = new DeploymentContext(null, null, moduleScope);
         load(component, deploymentContext);
@@ -70,7 +71,7 @@
      * @param component         the component being deployed
      * @param deploymentContext the current deployment context
      */
-    protected <I extends Implementation<?>> void load(Component<I> component, DeploymentContext deploymentContext) {
+    protected <I extends Implementation<?>> void load(Component<I> component, DeploymentContext deploymentContext) throws LoaderException {
         loaderRegistry.loadComponentType(component.getImplementation(), deploymentContext);
     }
 

Added: incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/injection/JNDIObjectFactory.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/injection/JNDIObjectFactory.java?rev=409831&view=auto
==============================================================================
--- incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/injection/JNDIObjectFactory.java (added)
+++ incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/injection/JNDIObjectFactory.java Sat May 27 08:19:37 2006
@@ -0,0 +1,49 @@
+/**
+ *
+ * Copyright 2006 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.injection;
+
+import javax.naming.Context;
+import javax.naming.NamingException;
+
+import org.apache.tuscany.spi.ObjectFactory;
+import org.apache.tuscany.spi.ObjectCreationException;
+
+/**
+ * An implementation of ObjectFactory that creates instances
+ * by looking them up in a JNDI context.
+ *
+ * @version $Rev$ $Date$
+ */
+public class JNDIObjectFactory<T> implements ObjectFactory<T> {
+    private final Context context;
+    private final String name;
+
+    public JNDIObjectFactory(Context context, String name) {
+        this.context = context;
+        this.name = name;
+    }
+
+
+    @SuppressWarnings("unchecked")
+    public T getInstance() throws ObjectCreationException {
+        try {
+            return (T) context.lookup(name);
+        } catch (NamingException e) {
+            throw new ObjectCreationException(e);
+        }
+    }
+}

Propchange: incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/injection/JNDIObjectFactory.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/injection/JNDIObjectFactory.java
------------------------------------------------------------------------------
    svn:keywords = Rev,Date

Modified: incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/loader/AssemblyConstants.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/loader/AssemblyConstants.java?rev=409831&r1=409830&r2=409831&view=diff
==============================================================================
--- incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/loader/AssemblyConstants.java (original)
+++ incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/loader/AssemblyConstants.java Sat May 27 08:19:37 2006
@@ -27,7 +27,6 @@
     public static final QName COMPONENT = new QName(SCA_NAMESPACE, "component");
     public static final QName COMPONENT_TYPE = new QName(SCA_NAMESPACE, "componentType");
     public static final QName COMPOSITE = new QName(SCA_NAMESPACE, "composite");
-    public static final QName IMPORT_WSDL = new QName(SCA_NAMESPACE, "import.wsdl");
     public static final QName INTERFACE_JAVA = new QName(SCA_NAMESPACE, "interface.java");
     public static final QName INTERFACE_WSDL = new QName(SCA_NAMESPACE, "interface.wsdl");
     public static final QName PROPERTY = new QName(SCA_NAMESPACE, "property");

Modified: incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/loader/ComponentLoader.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/loader/ComponentLoader.java?rev=409831&r1=409830&r2=409831&view=diff
==============================================================================
--- incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/loader/ComponentLoader.java (original)
+++ incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/loader/ComponentLoader.java Sat May 27 08:19:37 2006
@@ -25,6 +25,15 @@
 import javax.xml.stream.XMLStreamReader;
 
 import org.apache.tuscany.spi.ObjectFactory;
+import org.apache.tuscany.spi.annotation.Autowire;
+import org.apache.tuscany.spi.deployer.DeploymentContext;
+import org.apache.tuscany.spi.extension.LoaderExtension;
+import org.apache.tuscany.spi.loader.InvalidReferenceException;
+import org.apache.tuscany.spi.loader.LoaderException;
+import org.apache.tuscany.spi.loader.LoaderRegistry;
+import org.apache.tuscany.spi.loader.MissingImplementationException;
+import org.apache.tuscany.spi.loader.StAXPropertyFactory;
+import org.apache.tuscany.spi.loader.UndefinedPropertyException;
 import org.apache.tuscany.spi.model.Component;
 import org.apache.tuscany.spi.model.ComponentType;
 import org.apache.tuscany.spi.model.Implementation;
@@ -32,22 +41,21 @@
 import org.apache.tuscany.spi.model.Property;
 import org.apache.tuscany.spi.model.PropertyValue;
 import org.apache.tuscany.spi.model.ReferenceTarget;
-import org.apache.tuscany.spi.annotation.Autowire;
-import org.apache.tuscany.spi.loader.InvalidReferenceException;
-import org.apache.tuscany.spi.deployer.DeploymentContext;
-import org.apache.tuscany.spi.loader.LoaderException;
-import org.apache.tuscany.spi.extension.LoaderExtension;
-import org.apache.tuscany.spi.loader.MissingImplementationException;
-import org.apache.tuscany.spi.loader.StAXPropertyFactory;
-import org.osoa.sca.annotations.Scope;
 
 /**
  * @version $Rev$ $Date$
  */
-@Scope("MODULE")
-public class ComponentLoader extends LoaderExtension {
+public class ComponentLoader extends LoaderExtension<Component<?>> {
     private StAXPropertyFactory defaultPropertyFactory;
 
+    public ComponentLoader() {
+    }
+
+    public ComponentLoader(LoaderRegistry registry, StAXPropertyFactory propertyFactory) {
+        super(registry);
+        this.defaultPropertyFactory = propertyFactory;
+    }
+
     @Autowire
     public void setDefaultPropertyFactory(StAXPropertyFactory defaultPropertyFactory) {
         this.defaultPropertyFactory = defaultPropertyFactory;
@@ -70,21 +78,27 @@
         Implementation<?> impl = (Implementation<?>) o;
         Component<?> component = new Component<Implementation<?>>(impl);
         component.setName(name);
+        registry.loadComponentType(impl, deploymentContext);
 
-        while (true) {
-            switch (reader.next()) {
-                case START_ELEMENT:
-                    QName qname = reader.getName();
-                    if (AssemblyConstants.PROPERTY.equals(qname)) {
-                        loadProperty(reader, deploymentContext, component);
-                    } else if (AssemblyConstants.REFERENCE.equals(qname)) {
-                        loadReference(reader, deploymentContext, component);
-                    }
-                    reader.next();
-                    break;
-                case END_ELEMENT:
-                    return component;
+        try {
+            while (true) {
+                switch (reader.next()) {
+                    case START_ELEMENT:
+                        QName qname = reader.getName();
+                        if (AssemblyConstants.PROPERTY.equals(qname)) {
+                            loadProperty(reader, deploymentContext, component);
+                        } else if (AssemblyConstants.REFERENCE.equals(qname)) {
+                            loadReference(reader, deploymentContext, component);
+                        }
+                        reader.next();
+                        break;
+                    case END_ELEMENT:
+                        return component;
+                }
             }
+        } catch (LoaderException e) {
+            e.addContextName(component.getName());
+            throw e;
         }
     }
 
@@ -93,6 +107,11 @@
         Implementation<?> implementation = component.getImplementation();
         ComponentType componentType = implementation.getComponentType();
         Property<?> property = componentType.getProperties().get(name);
+        if (property == null) {
+            LoaderException e = new UndefinedPropertyException(name);
+            e.setIdentifier(name);
+            throw e;
+        }
         component.add(createPropertyValue(reader, property, name));
     }
 

Modified: incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/loader/ComponentTypeElementLoader.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/loader/ComponentTypeElementLoader.java?rev=409831&r1=409830&r2=409831&view=diff
==============================================================================
--- incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/loader/ComponentTypeElementLoader.java (original)
+++ incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/loader/ComponentTypeElementLoader.java Sat May 27 08:19:37 2006
@@ -29,12 +29,20 @@
 import org.apache.tuscany.spi.model.Service;
 import org.apache.tuscany.spi.deployer.DeploymentContext;
 import org.apache.tuscany.spi.loader.LoaderException;
+import org.apache.tuscany.spi.loader.LoaderRegistry;
 import org.apache.tuscany.spi.extension.LoaderExtension;
 
 /**
  * @version $Rev$ $Date$
  */
-public class ComponentTypeElementLoader extends LoaderExtension {
+public class ComponentTypeElementLoader extends LoaderExtension<ComponentType> {
+    public ComponentTypeElementLoader() {
+    }
+
+    public ComponentTypeElementLoader(LoaderRegistry registry) {
+        super(registry);
+    }
+
     public QName getXMLType() {
         return AssemblyConstants.COMPONENT_TYPE;
     }

Modified: incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/loader/InterfaceJavaLoader.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/loader/InterfaceJavaLoader.java?rev=409831&r1=409830&r2=409831&view=diff
==============================================================================
--- incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/loader/InterfaceJavaLoader.java (original)
+++ incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/loader/InterfaceJavaLoader.java Sat May 27 08:19:37 2006
@@ -23,12 +23,20 @@
 import org.apache.tuscany.spi.model.JavaServiceContract;
 import org.apache.tuscany.spi.deployer.DeploymentContext;
 import org.apache.tuscany.spi.loader.LoaderException;
+import org.apache.tuscany.spi.loader.LoaderRegistry;
 import org.apache.tuscany.spi.extension.LoaderExtension;
 
 /**
  * @version $Rev$ $Date$
  */
-public class InterfaceJavaLoader extends LoaderExtension {
+public class InterfaceJavaLoader extends LoaderExtension<JavaServiceContract> {
+    public InterfaceJavaLoader() {
+    }
+
+    public InterfaceJavaLoader(LoaderRegistry registry) {
+        super(registry);
+    }
+
     public QName getXMLType() {
         return AssemblyConstants.INTERFACE_JAVA;
     }
@@ -47,7 +55,10 @@
 
         name = reader.getAttributeValue(null, "callbackInterface");
         serviceContract.setCallbackName(name);
-        serviceContract.setCallbackClass(StAXUtil.loadClass(name, deploymentContext.getClassLoader()));
+        if (name != null) {
+            serviceContract.setCallbackClass(StAXUtil.loadClass(name, deploymentContext.getClassLoader()));
+        }
+        StAXUtil.skipToEndElement(reader);
         return serviceContract;
     }
 }

Added: incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/loader/JNDIPropertyFactory.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/loader/JNDIPropertyFactory.java?rev=409831&view=auto
==============================================================================
--- incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/loader/JNDIPropertyFactory.java (added)
+++ incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/loader/JNDIPropertyFactory.java Sat May 27 08:19:37 2006
@@ -0,0 +1,62 @@
+/**
+ *
+ * Copyright 2006 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.loader;
+
+import javax.xml.stream.XMLStreamReader;
+import javax.xml.stream.XMLStreamException;
+import javax.naming.Context;
+import javax.naming.InitialContext;
+import javax.naming.NamingException;
+
+import org.apache.tuscany.spi.ObjectFactory;
+import org.apache.tuscany.spi.model.Property;
+import org.apache.tuscany.spi.loader.StAXPropertyFactory;
+import org.apache.tuscany.spi.loader.LoaderException;
+import org.apache.tuscany.core.injection.JNDIObjectFactory;
+
+/**
+ * A StAXPropertyFactory that creates property values by looking them
+ * up in the default JNDI InitialContext.
+ *
+ * This can be used to locate resources in a J2EE environment and inject
+ * them as configuration properties. For example, to access a database
+ * a component could write:
+ * <code>
+ *     &at;Property DataSource myDB;
+ * </code>
+ * and configure with
+ * <code>
+ *     &lt;properties&gt;
+ *       &lt;v:myDb&gt;java:comp/env/jdbc/MyDatabase&lt;/v:myDB&gt;
+ *     &lt;/properties&gt;
+ * </code>
+ *
+ * @version $Rev$ $Date$
+ */
+public class JNDIPropertyFactory implements StAXPropertyFactory {
+    public <T> ObjectFactory<T> createObjectFactory(XMLStreamReader reader, Property<T> property) throws XMLStreamException, LoaderException {
+        Class<T> type = property.getJavaType();
+        assert type != null : "property type is null";
+        String text = reader.getElementText();
+        try {
+            Context context = new InitialContext();
+            return new JNDIObjectFactory<T>(context, text);
+        } catch (NamingException e) {
+            throw new LoaderException(e);
+        }
+    }
+}

Propchange: incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/loader/JNDIPropertyFactory.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/loader/JNDIPropertyFactory.java
------------------------------------------------------------------------------
    svn:keywords = Rev,Date

Modified: incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/loader/LoaderRegistryImpl.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/loader/LoaderRegistryImpl.java?rev=409831&r1=409830&r2=409831&view=diff
==============================================================================
--- incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/loader/LoaderRegistryImpl.java (original)
+++ incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/loader/LoaderRegistryImpl.java Sat May 27 08:19:37 2006
@@ -76,7 +76,7 @@
     }
 
     @SuppressWarnings("unchecked")
-    public <I extends Implementation<?>> void loadComponentType(I implementation, DeploymentContext deploymentContext) {
+    public <I extends Implementation<?>> void loadComponentType(I implementation, DeploymentContext deploymentContext) throws LoaderException {
         Class<I> key = (Class<I>) implementation.getClass();
         ComponentTypeLoader<I> loader = (ComponentTypeLoader<I>) componentTypeLoaders.get(key);
         if (loader == null) {

Modified: incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/loader/PropertyLoader.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/loader/PropertyLoader.java?rev=409831&r1=409830&r2=409831&view=diff
==============================================================================
--- incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/loader/PropertyLoader.java (original)
+++ incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/loader/PropertyLoader.java Sat May 27 08:19:37 2006
@@ -24,12 +24,20 @@
 import org.apache.tuscany.spi.model.Property;
 import org.apache.tuscany.spi.deployer.DeploymentContext;
 import org.apache.tuscany.spi.loader.LoaderException;
+import org.apache.tuscany.spi.loader.LoaderRegistry;
 import org.apache.tuscany.spi.extension.LoaderExtension;
 
 /**
  * @version $Rev$ $Date$
  */
-public class PropertyLoader extends LoaderExtension {
+public class PropertyLoader extends LoaderExtension<Property> {
+    public PropertyLoader() {
+    }
+
+    public PropertyLoader(LoaderRegistry registry) {
+        super(registry);
+    }
+
     public QName getXMLType() {
         return PROPERTY;
     }

Modified: incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/loader/ReferenceLoader.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/loader/ReferenceLoader.java?rev=409831&r1=409830&r2=409831&view=diff
==============================================================================
--- incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/loader/ReferenceLoader.java (original)
+++ incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/loader/ReferenceLoader.java Sat May 27 08:19:37 2006
@@ -28,12 +28,20 @@
 import org.apache.tuscany.spi.model.ServiceContract;
 import org.apache.tuscany.spi.deployer.DeploymentContext;
 import org.apache.tuscany.spi.loader.LoaderException;
+import org.apache.tuscany.spi.loader.LoaderRegistry;
 import org.apache.tuscany.spi.extension.LoaderExtension;
 
 /**
  * @version $Rev$ $Date$
  */
-public class ReferenceLoader extends LoaderExtension {
+public class ReferenceLoader extends LoaderExtension<Reference> {
+    public ReferenceLoader() {
+    }
+
+    public ReferenceLoader(LoaderRegistry registry) {
+        super(registry);
+    }
+
     public QName getXMLType() {
         return AssemblyConstants.REFERENCE;
     }

Modified: incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/loader/ServiceLoader.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/loader/ServiceLoader.java?rev=409831&r1=409830&r2=409831&view=diff
==============================================================================
--- incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/loader/ServiceLoader.java (original)
+++ incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/loader/ServiceLoader.java Sat May 27 08:19:37 2006
@@ -25,34 +25,50 @@
 import org.apache.tuscany.spi.model.ModelObject;
 import org.apache.tuscany.spi.model.Service;
 import org.apache.tuscany.spi.model.ServiceContract;
+import org.apache.tuscany.spi.model.Binding;
+import org.apache.tuscany.spi.model.BoundService;
 import org.apache.tuscany.spi.deployer.DeploymentContext;
 import org.apache.tuscany.spi.loader.LoaderException;
+import org.apache.tuscany.spi.loader.LoaderRegistry;
 import org.apache.tuscany.spi.extension.LoaderExtension;
 
 /**
  * @version $Rev$ $Date$
  */
-public class ServiceLoader extends LoaderExtension {
+public class ServiceLoader extends LoaderExtension<Service> {
+    public ServiceLoader() {
+    }
+
+    public ServiceLoader(LoaderRegistry registry) {
+        super(registry);
+    }
+
     public QName getXMLType() {
         return AssemblyConstants.SERVICE;
     }
 
     public Service load(XMLStreamReader reader, DeploymentContext deploymentContext) throws XMLStreamException, LoaderException {
         assert AssemblyConstants.SERVICE.equals(reader.getName());
-        Service service = new Service();
-        service.setName(reader.getAttributeValue(null, "name"));
-
+        String name = reader.getAttributeValue(null, "name");
+        Binding binding = null;
+        ServiceContract serviceContract = null;
         while (true) {
             int i = reader.next();
             switch (i) {
                 case START_ELEMENT:
                     ModelObject o = registry.load(reader, deploymentContext);
                     if (o instanceof ServiceContract) {
-                        service.setServiceContract((ServiceContract) o);
+                        serviceContract = (ServiceContract) o;
+                    } else if (o instanceof Binding) {
+                        binding = (Binding) o;
                     }
                     break;
                 case END_ELEMENT:
-                    return service;
+                    if (binding != null) {
+                        return new BoundService<Binding>(name, serviceContract, binding, null);
+                    } else {
+                        return new Service(name, serviceContract);
+                    }
             }
         }
     }

Added: incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/loader/StringParserPropertyFactory.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/loader/StringParserPropertyFactory.java?rev=409831&view=auto
==============================================================================
--- incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/loader/StringParserPropertyFactory.java (added)
+++ incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/loader/StringParserPropertyFactory.java Sat May 27 08:19:37 2006
@@ -0,0 +1,105 @@
+/**
+ *
+ * Copyright 2006 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.loader;
+
+import java.beans.PropertyEditor;
+import java.beans.PropertyEditorManager;
+import java.lang.reflect.Constructor;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.lang.reflect.Modifier;
+import javax.xml.stream.XMLStreamException;
+import javax.xml.stream.XMLStreamReader;
+
+import org.apache.tuscany.core.injection.SingletonObjectFactory;
+import org.apache.tuscany.spi.ObjectFactory;
+import org.apache.tuscany.spi.loader.LoaderException;
+import org.apache.tuscany.spi.loader.StAXPropertyFactory;
+import org.apache.tuscany.spi.model.Property;
+
+/**
+ * @version $Rev$ $Date$
+ */
+public class StringParserPropertyFactory implements StAXPropertyFactory {
+    public <T> ObjectFactory<T> createObjectFactory(XMLStreamReader reader, Property<T> property) throws XMLStreamException, LoaderException {
+        Class<T> type = property.getJavaType();
+        assert type != null : "property type is null";
+        String text = reader.getElementText();
+
+        // degenerate case where we are returning a String
+        if (String.class.equals(type)) {
+            return new SingletonObjectFactory<T>(type.cast(text));
+        }
+
+        // special handler to convert hexBinary to a byte[]
+        if (byte[].class.equals(type)) {
+            byte[] instance = new byte[text.length() >> 1];
+            for (int i = 0; i < instance.length; i++) {
+                instance[i] = (byte) (Character.digit(text.charAt(i << 1), 16) << 4 | Character.digit(text.charAt((i << 1) + 1), 16));
+            }
+            return new SingletonObjectFactory<T>(type.cast(instance));
+        }
+
+        // does this type have a static valueOf(String) method?
+        try {
+            Method valueOf = type.getMethod("valueOf", String.class);
+            if (Modifier.isStatic(valueOf.getModifiers())) {
+                try {
+                    return new SingletonObjectFactory<T>(type.cast(valueOf.invoke(null, text)));
+                } catch (IllegalAccessException e) {
+                    throw new AssertionError("getMethod returned an inaccessible method");
+                } catch (InvocationTargetException e) {
+                    // FIXME we should throw something better
+                    throw new LoaderException(e.getCause());
+                }
+            }
+        } catch (NoSuchMethodException e) {
+            // try something else
+        }
+
+        // does this type have a constructor that takes a String?
+        try {
+            Constructor<T> ctr = type.getConstructor(String.class);
+            return new SingletonObjectFactory<T>(ctr.newInstance(text));
+        } catch (NoSuchMethodException e) {
+            // try something else
+        } catch (IllegalAccessException e) {
+            throw new AssertionError("getConstructor returned an inaccessible method");
+        } catch (InstantiationException e) {
+            throw new LoaderException("Property type cannot be instantiated: " + type.getName());
+        } catch (InvocationTargetException e) {
+            // FIXME we should throw something better
+            throw new LoaderException(e.getCause());
+        }
+
+        // do we have a property editor for it?
+        PropertyEditor editor = PropertyEditorManager.findEditor(type);
+        if (editor != null) {
+            try {
+                editor.setAsText(text);
+                return new SingletonObjectFactory<T>(type.cast(editor.getValue()));
+            } catch (IllegalArgumentException e) {
+                // FIXME we should throw something better
+                throw new LoaderException(e);
+
+            }
+        }
+
+        // FIXME we should throw something better
+        throw new LoaderException("Do not have a way to parse a String into a " + type.getName());
+    }
+}

Propchange: incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/loader/StringParserPropertyFactory.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/loader/StringParserPropertyFactory.java
------------------------------------------------------------------------------
    svn:keywords = Rev,Date

Modified: incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/model/PojoComponentType.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/model/PojoComponentType.java?rev=409831&r1=409830&r2=409831&view=diff
==============================================================================
--- incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/model/PojoComponentType.java (original)
+++ incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/model/PojoComponentType.java Sat May 27 08:19:37 2006
@@ -46,7 +46,6 @@
         this.destroyInvoker = destroyInvoker;
     }
 
-
     public List<Injector> getInjectors() {
         return injectors;
     }

Added: incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/system/loader/SystemBindingLoader.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/system/loader/SystemBindingLoader.java?rev=409831&view=auto
==============================================================================
--- incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/system/loader/SystemBindingLoader.java (added)
+++ incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/system/loader/SystemBindingLoader.java Sat May 27 08:19:37 2006
@@ -0,0 +1,51 @@
+/**
+ *
+ * Copyright 2006 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.loader;
+
+import javax.xml.namespace.QName;
+import javax.xml.stream.XMLStreamReader;
+import javax.xml.stream.XMLStreamException;
+
+import org.apache.tuscany.spi.extension.LoaderExtension;
+import org.apache.tuscany.spi.deployer.DeploymentContext;
+import org.apache.tuscany.spi.loader.LoaderException;
+import org.apache.tuscany.spi.loader.LoaderRegistry;
+import org.apache.tuscany.core.system.model.SystemBinding;
+import org.apache.tuscany.core.loader.StAXUtil;
+
+/**
+ * @version $Rev$ $Date$
+ */
+public class SystemBindingLoader extends LoaderExtension<SystemBinding> {
+    public static final QName SYSTEM_BINDING = new QName("http://tuscany.apache.org/xmlns/system/0.9", "binding.system");
+
+    public SystemBindingLoader() {
+    }
+
+    public SystemBindingLoader(LoaderRegistry registry) {
+        super(registry);
+    }
+
+    protected QName getXMLType() {
+        return SYSTEM_BINDING;
+    }
+
+    public SystemBinding load(XMLStreamReader reader, DeploymentContext deploymentContext) throws XMLStreamException, LoaderException {
+        StAXUtil.skipToEndElement(reader);
+        return new SystemBinding();
+    }
+}

Propchange: incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/system/loader/SystemBindingLoader.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/system/loader/SystemBindingLoader.java
------------------------------------------------------------------------------
    svn:keywords = Rev,Date

Modified: incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/system/loader/SystemComponentTypeLoader.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/system/loader/SystemComponentTypeLoader.java?rev=409831&r1=409830&r2=409831&view=diff
==============================================================================
--- incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/system/loader/SystemComponentTypeLoader.java (original)
+++ incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/system/loader/SystemComponentTypeLoader.java Sat May 27 08:19:37 2006
@@ -18,33 +18,38 @@
 
 import java.net.URL;
 
+import javax.xml.namespace.QName;
+
 import org.apache.tuscany.core.system.model.SystemImplementation;
 import org.apache.tuscany.core.util.JavaIntrospectionHelper;
+import org.apache.tuscany.core.model.PojoComponentType;
 import org.apache.tuscany.spi.deployer.DeploymentContext;
 import org.apache.tuscany.spi.extension.ComponentTypeLoaderExtension;
+import org.apache.tuscany.spi.loader.LoaderException;
+import org.apache.tuscany.spi.model.Property;
 
 /**
  * @version $Rev$ $Date$
  */
 public class SystemComponentTypeLoader extends ComponentTypeLoaderExtension<SystemImplementation> {
-    protected Class<SystemImplementation> getTypeClass() {
+    protected Class<SystemImplementation> getImplementationClass() {
         return SystemImplementation.class;
     }
 
-    public void load(SystemImplementation implementation, DeploymentContext deploymentContext) {
+    public void load(SystemImplementation implementation, DeploymentContext deploymentContext) throws LoaderException {
         Class<?> implClass = implementation.getImplementationClass();
-        URL resource = implClass.getResource(JavaIntrospectionHelper.getBaseName(implClass) + ".componentType");
-        if (resource == null) {
-            loadByIntrospection(implementation);
+        URL sidefile = implClass.getResource(JavaIntrospectionHelper.getBaseName(implClass) + ".componentType");
+        PojoComponentType componentType;
+        if (sidefile == null) {
+            componentType = loadByIntrospection(implementation);
         } else {
-            loadFromSidefile(implementation, resource);
+            componentType = loadFromSidefile(PojoComponentType.class, sidefile, deploymentContext);
         }
+        implementation.setComponentType(componentType);
     }
 
-    protected void loadByIntrospection(SystemImplementation implementation) {
-    }
-
-    protected void loadFromSidefile(SystemImplementation implementation, URL sidefile) {
-        throw new UnsupportedOperationException();
+    protected PojoComponentType loadByIntrospection(SystemImplementation implementation) {
+        PojoComponentType componentType = new PojoComponentType();
+        return componentType;
     }
 }

Added: incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/system/loader/SystemCompositeComponentTypeLoader.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/system/loader/SystemCompositeComponentTypeLoader.java?rev=409831&view=auto
==============================================================================
--- incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/system/loader/SystemCompositeComponentTypeLoader.java (added)
+++ incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/system/loader/SystemCompositeComponentTypeLoader.java Sat May 27 08:19:37 2006
@@ -0,0 +1,49 @@
+/**
+ *
+ * Copyright 2006 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.loader;
+
+import java.net.URL;
+
+import org.apache.tuscany.core.system.model.SystemCompositeImplementation;
+import org.apache.tuscany.spi.extension.ComponentTypeLoaderExtension;
+import org.apache.tuscany.spi.deployer.DeploymentContext;
+import org.apache.tuscany.spi.loader.LoaderException;
+import org.apache.tuscany.spi.loader.LoaderRegistry;
+import org.apache.tuscany.spi.model.ComponentType;
+import org.apache.tuscany.spi.model.CompositeComponentType;
+
+/**
+ * @version $Rev$ $Date$
+ */
+public class SystemCompositeComponentTypeLoader extends ComponentTypeLoaderExtension<SystemCompositeImplementation> {
+    public SystemCompositeComponentTypeLoader() {
+    }
+
+    public SystemCompositeComponentTypeLoader(LoaderRegistry loaderRegistry) {
+        super(loaderRegistry);
+    }
+
+    protected Class<SystemCompositeImplementation> getImplementationClass() {
+        return SystemCompositeImplementation.class;
+    }
+
+    public void load(SystemCompositeImplementation implementation, DeploymentContext deploymentContext) throws LoaderException {
+        URL scdlLocation = implementation.getScdlLocation();
+        CompositeComponentType componentType = loadFromSidefile(CompositeComponentType.class, scdlLocation, deploymentContext);
+        implementation.setComponentType(componentType);
+    }
+}

Propchange: incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/system/loader/SystemCompositeComponentTypeLoader.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/system/loader/SystemCompositeComponentTypeLoader.java
------------------------------------------------------------------------------
    svn:keywords = Rev,Date

Modified: incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/system/loader/SystemImplementationLoader.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/system/loader/SystemImplementationLoader.java?rev=409831&r1=409830&r2=409831&view=diff
==============================================================================
--- incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/system/loader/SystemImplementationLoader.java (original)
+++ incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/system/loader/SystemImplementationLoader.java Sat May 27 08:19:37 2006
@@ -24,12 +24,20 @@
 import org.apache.tuscany.core.system.model.SystemImplementation;
 import org.apache.tuscany.spi.deployer.DeploymentContext;
 import org.apache.tuscany.spi.loader.LoaderException;
+import org.apache.tuscany.spi.loader.LoaderRegistry;
 import org.apache.tuscany.spi.extension.LoaderExtension;
 
 /**
  * @version $Rev$ $Date$
  */
-public class SystemImplementationLoader extends LoaderExtension {
+public class SystemImplementationLoader extends LoaderExtension<SystemImplementation> {
+    public SystemImplementationLoader() {
+    }
+
+    public SystemImplementationLoader(LoaderRegistry registry) {
+        super(registry);
+    }
+
     public static final QName SYSTEM_IMPLEMENTATION = new QName("http://tuscany.apache.org/xmlns/system/0.9", "implementation.system");
 
     protected QName getXMLType() {

Modified: incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/system/model/SystemBinding.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/system/model/SystemBinding.java?rev=409831&r1=409830&r2=409831&view=diff
==============================================================================
--- incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/system/model/SystemBinding.java (original)
+++ incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/system/model/SystemBinding.java Sat May 27 08:19:37 2006
@@ -1,5 +1,7 @@
 package org.apache.tuscany.core.system.model;
 
+import javax.xml.namespace.QName;
+
 import org.apache.tuscany.spi.model.Binding;
 
 /**

Modified: incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/system/model/SystemCompositeImplementation.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/system/model/SystemCompositeImplementation.java?rev=409831&r1=409830&r2=409831&view=diff
==============================================================================
--- incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/system/model/SystemCompositeImplementation.java (original)
+++ incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/system/model/SystemCompositeImplementation.java Sat May 27 08:19:37 2006
@@ -16,18 +16,31 @@
  */
 package org.apache.tuscany.core.system.model;
 
+import java.net.URL;
+
 import org.apache.tuscany.spi.model.CompositeComponentType;
 import org.apache.tuscany.spi.model.Implementation;
 
 /**
- * Represents a system composite type
+ * Represents a system composite type.
+ *
  * @version $Rev$ $Date$
  */
 public class SystemCompositeImplementation extends Implementation<CompositeComponentType> {
+    private URL scdlLocation;
+
     public SystemCompositeImplementation() {
     }
 
     public SystemCompositeImplementation(CompositeComponentType componentType) {
         super(componentType);
+    }
+
+    public URL getScdlLocation() {
+        return scdlLocation;
+    }
+
+    public void setScdlLocation(URL scdlLocation) {
+        this.scdlLocation = scdlLocation;
     }
 }

Modified: incubator/tuscany/sandbox/jboynes/sca/core2/src/test/java/org/apache/tuscany/core/bootstrap/BootstrapperTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/sandbox/jboynes/sca/core2/src/test/java/org/apache/tuscany/core/bootstrap/BootstrapperTestCase.java?rev=409831&r1=409830&r2=409831&view=diff
==============================================================================
--- incubator/tuscany/sandbox/jboynes/sca/core2/src/test/java/org/apache/tuscany/core/bootstrap/BootstrapperTestCase.java (original)
+++ incubator/tuscany/sandbox/jboynes/sca/core2/src/test/java/org/apache/tuscany/core/bootstrap/BootstrapperTestCase.java Sat May 27 08:19:37 2006
@@ -19,6 +19,8 @@
 import junit.framework.TestCase;
 import org.apache.tuscany.core.system.context.SystemCompositeContext;
 import org.apache.tuscany.core.system.context.SystemCompositeContextImpl;
+import org.apache.tuscany.core.deployer.DeployerImpl;
+import org.apache.tuscany.core.monitor.NullMonitorFactory;
 import org.apache.tuscany.spi.deployer.Deployer;
 import org.apache.tuscany.spi.bootstrap.ContextNames;
 
@@ -29,21 +31,11 @@
     private DefaultBootstrapper bootstrapper;
 
     public void testDeployerBootstrap() {
-        SystemCompositeContext parent = new SystemCompositeContextImpl("test", null, null);
-        SystemCompositeContext<Deployer> context =
-                (SystemCompositeContext<Deployer>) bootstrapper.createDeployer(ContextNames.TUSCANY_DEPLOYER, parent);
-        assertEquals("tuscany.deployer", context.getName());
-        context.start();
-
-        // todo this should work
-//        Deployer deployer = context.getService();
-//        assertNotNull(deployer);
-        Deployer deployer = context.resolveExternalInstance(Deployer.class);
-        assertNotNull(deployer);
+        DeployerImpl deployer = (DeployerImpl) bootstrapper.createDeployer();
     }
 
     protected void setUp() throws Exception {
         super.setUp();
-        bootstrapper = new DefaultBootstrapper();
+        bootstrapper = new DefaultBootstrapper(new NullMonitorFactory());
     }
 }

Added: incubator/tuscany/sandbox/jboynes/sca/core2/src/test/java/org/apache/tuscany/core/deployer/BootstrapDeployerTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/sandbox/jboynes/sca/core2/src/test/java/org/apache/tuscany/core/deployer/BootstrapDeployerTestCase.java?rev=409831&view=auto
==============================================================================
--- incubator/tuscany/sandbox/jboynes/sca/core2/src/test/java/org/apache/tuscany/core/deployer/BootstrapDeployerTestCase.java (added)
+++ incubator/tuscany/sandbox/jboynes/sca/core2/src/test/java/org/apache/tuscany/core/deployer/BootstrapDeployerTestCase.java Sat May 27 08:19:37 2006
@@ -0,0 +1,71 @@
+/**
+ *
+ * Copyright 2006 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.deployer;
+
+import java.net.URL;
+import java.util.Map;
+import javax.xml.stream.XMLInputFactory;
+
+import junit.framework.TestCase;
+
+import org.apache.tuscany.core.bootstrap.DefaultBootstrapper;
+import org.apache.tuscany.core.mock.component.BasicInterface;
+import org.apache.tuscany.core.monitor.NullMonitorFactory;
+import org.apache.tuscany.core.system.model.SystemBinding;
+import org.apache.tuscany.core.system.model.SystemCompositeImplementation;
+import org.apache.tuscany.spi.deployer.DeploymentContext;
+import org.apache.tuscany.spi.loader.LoaderException;
+import org.apache.tuscany.spi.model.BoundService;
+import org.apache.tuscany.spi.model.Component;
+import org.apache.tuscany.spi.model.CompositeComponentType;
+import org.apache.tuscany.spi.model.Service;
+
+/**
+ * @version $Rev$ $Date$
+ */
+public class BootstrapDeployerTestCase extends TestCase {
+    private DeployerImpl deployer;
+    private DeploymentContext deploymentContext;
+    private Component<SystemCompositeImplementation> component;
+    private SystemCompositeImplementation implementation;
+
+    public void testBoot1() throws LoaderException {
+        URL scdl = BootstrapDeployerTestCase.class.getResource("boot1.scdl");
+        implementation.setScdlLocation(scdl);
+        deployer.load(component, deploymentContext);
+        CompositeComponentType componentType = implementation.getComponentType();
+        assertNotNull(componentType);
+        assertEquals("simple", componentType.getName());
+        Map<String, Service> services = componentType.getServices();
+        assertEquals(1, services.size());
+        BoundService service = (BoundService) services.get("service");
+        assertNotNull(service);
+        assertEquals("service", service.getName());
+        assertEquals(BasicInterface.class, service.getServiceContract().getInterfaceClass());
+        assertTrue(service.getBinding() instanceof SystemBinding);
+    }
+
+    protected void setUp() throws Exception {
+        super.setUp();
+        XMLInputFactory xmlFactory = XMLInputFactory.newInstance();
+        DefaultBootstrapper bootstrapper = new DefaultBootstrapper(new NullMonitorFactory());
+        deployer = (DeployerImpl) bootstrapper.createDeployer();
+        deploymentContext = new DeploymentContext(getClass().getClassLoader(), xmlFactory, null);
+        implementation = new SystemCompositeImplementation();
+        component = new Component<SystemCompositeImplementation>(implementation);
+    }
+}

Propchange: incubator/tuscany/sandbox/jboynes/sca/core2/src/test/java/org/apache/tuscany/core/deployer/BootstrapDeployerTestCase.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/tuscany/sandbox/jboynes/sca/core2/src/test/java/org/apache/tuscany/core/deployer/BootstrapDeployerTestCase.java
------------------------------------------------------------------------------
    svn:keywords = Rev,Date

Added: incubator/tuscany/sandbox/jboynes/sca/core2/src/test/java/org/apache/tuscany/core/mock/component/BasicInterface.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/sandbox/jboynes/sca/core2/src/test/java/org/apache/tuscany/core/mock/component/BasicInterface.java?rev=409831&view=auto
==============================================================================
--- incubator/tuscany/sandbox/jboynes/sca/core2/src/test/java/org/apache/tuscany/core/mock/component/BasicInterface.java (added)
+++ incubator/tuscany/sandbox/jboynes/sca/core2/src/test/java/org/apache/tuscany/core/mock/component/BasicInterface.java Sat May 27 08:19:37 2006
@@ -0,0 +1,28 @@
+/**
+ *
+ * Copyright 2006 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;
+
+/**
+ * @version $Rev$ $Date$
+ */
+public interface BasicInterface {
+    String returnsProperty();
+
+    BasicInterface returnsReference();
+
+    int returnsInt();
+}

Propchange: incubator/tuscany/sandbox/jboynes/sca/core2/src/test/java/org/apache/tuscany/core/mock/component/BasicInterface.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/tuscany/sandbox/jboynes/sca/core2/src/test/java/org/apache/tuscany/core/mock/component/BasicInterface.java
------------------------------------------------------------------------------
    svn:keywords = Rev,Date

Added: incubator/tuscany/sandbox/jboynes/sca/core2/src/test/java/org/apache/tuscany/core/mock/component/BasicInterfaceImpl.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/sandbox/jboynes/sca/core2/src/test/java/org/apache/tuscany/core/mock/component/BasicInterfaceImpl.java?rev=409831&view=auto
==============================================================================
--- incubator/tuscany/sandbox/jboynes/sca/core2/src/test/java/org/apache/tuscany/core/mock/component/BasicInterfaceImpl.java (added)
+++ incubator/tuscany/sandbox/jboynes/sca/core2/src/test/java/org/apache/tuscany/core/mock/component/BasicInterfaceImpl.java Sat May 27 08:19:37 2006
@@ -0,0 +1,54 @@
+/**
+ *
+ * Copyright 2006 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;
+
+/**
+ * @version $Rev$ $Date$
+ */
+public class BasicInterfaceImpl implements BasicInterface {
+    protected String protectedProperty;
+
+    public String publicProperty;
+
+    private String privateProperty;
+
+    public void setPrivateProperty(String privateProperty) {
+        this.privateProperty = privateProperty;
+    }
+
+    protected BasicInterface protectedReference;
+
+    public BasicInterface publicReference;
+
+    private BasicInterface privateReference;
+
+    public void setPrivateReference(BasicInterface privateReference) {
+        this.privateReference = privateReference;
+    }
+
+    public String returnsProperty() {
+        return privateProperty;
+    }
+
+    public BasicInterface returnsReference() {
+        return privateReference;
+    }
+    
+    public int returnsInt() {
+        return 0;
+    }
+}

Propchange: incubator/tuscany/sandbox/jboynes/sca/core2/src/test/java/org/apache/tuscany/core/mock/component/BasicInterfaceImpl.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/tuscany/sandbox/jboynes/sca/core2/src/test/java/org/apache/tuscany/core/mock/component/BasicInterfaceImpl.java
------------------------------------------------------------------------------
    svn:keywords = Rev,Date

Added: incubator/tuscany/sandbox/jboynes/sca/core2/src/test/resources/org/apache/tuscany/core/deployer/boot1.scdl
URL: http://svn.apache.org/viewvc/incubator/tuscany/sandbox/jboynes/sca/core2/src/test/resources/org/apache/tuscany/core/deployer/boot1.scdl?rev=409831&view=auto
==============================================================================
--- incubator/tuscany/sandbox/jboynes/sca/core2/src/test/resources/org/apache/tuscany/core/deployer/boot1.scdl (added)
+++ incubator/tuscany/sandbox/jboynes/sca/core2/src/test/resources/org/apache/tuscany/core/deployer/boot1.scdl Sat May 27 08:19:37 2006
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Copyright (c) 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.
+ -->
+<composite xmlns="http://www.osoa.org/xmlns/sca/0.9"
+           xmlns:system="http://tuscany.apache.org/xmlns/system/0.9"
+           name="simple">
+    <service name="service">
+        <interface.java interface="org.apache.tuscany.core.mock.component.BasicInterface"/>
+        <system:binding.system/>
+    </service>
+
+    <component name="component">
+        <system:implementation.system class="org.apache.tuscany.core.mock.component.BasicInterfaceImpl"/>
+<!--
+        <property name="publicProperty">propval</property>
+        <reference name="publicReference" target="target"/>
+-->
+    </component>
+</composite>
\ No newline at end of file

Modified: incubator/tuscany/sandbox/jboynes/sca/spi/src/main/java/org/apache/tuscany/spi/deployer/Deployer.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/sandbox/jboynes/sca/spi/src/main/java/org/apache/tuscany/spi/deployer/Deployer.java?rev=409831&r1=409830&r2=409831&view=diff
==============================================================================
--- incubator/tuscany/sandbox/jboynes/sca/spi/src/main/java/org/apache/tuscany/spi/deployer/Deployer.java (original)
+++ incubator/tuscany/sandbox/jboynes/sca/spi/src/main/java/org/apache/tuscany/spi/deployer/Deployer.java Sat May 27 08:19:37 2006
@@ -19,6 +19,7 @@
 import org.apache.tuscany.spi.context.CompositeContext;
 import org.apache.tuscany.spi.model.Component;
 import org.apache.tuscany.spi.model.Implementation;
+import org.apache.tuscany.spi.loader.LoaderException;
 
 /**
  * Interface that can be used to deploy SCA bundles to a runtime.
@@ -32,5 +33,5 @@
      * @param parent the parent context
      * @param component the component definition
      */
-    <I extends Implementation<?>> void deploy(CompositeContext<?> parent, Component<I> component);
+    <I extends Implementation<?>> void deploy(CompositeContext<?> parent, Component<I> component) throws LoaderException;
 }

Modified: incubator/tuscany/sandbox/jboynes/sca/spi/src/main/java/org/apache/tuscany/spi/extension/ComponentTypeLoaderExtension.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/sandbox/jboynes/sca/spi/src/main/java/org/apache/tuscany/spi/extension/ComponentTypeLoaderExtension.java?rev=409831&r1=409830&r2=409831&view=diff
==============================================================================
--- incubator/tuscany/sandbox/jboynes/sca/spi/src/main/java/org/apache/tuscany/spi/extension/ComponentTypeLoaderExtension.java (original)
+++ incubator/tuscany/sandbox/jboynes/sca/spi/src/main/java/org/apache/tuscany/spi/extension/ComponentTypeLoaderExtension.java Sat May 27 08:19:37 2006
@@ -16,34 +16,100 @@
  */
 package org.apache.tuscany.spi.extension;
 
+import java.net.URL;
+import java.io.InputStream;
+import java.io.IOException;
+
+import javax.xml.stream.XMLStreamReader;
+import javax.xml.stream.XMLInputFactory;
+import javax.xml.stream.XMLStreamException;
+import javax.xml.namespace.QName;
+
 import org.osoa.sca.annotations.Init;
 import org.osoa.sca.annotations.Property;
 import org.osoa.sca.annotations.Destroy;
 
 import org.apache.tuscany.spi.loader.ComponentTypeLoader;
 import org.apache.tuscany.spi.loader.LoaderRegistry;
+import org.apache.tuscany.spi.loader.LoaderException;
+import org.apache.tuscany.spi.loader.UnrecognizedElementException;
 import org.apache.tuscany.spi.model.Implementation;
+import org.apache.tuscany.spi.model.ComponentType;
+import org.apache.tuscany.spi.model.ModelObject;
+import org.apache.tuscany.spi.deployer.DeploymentContext;
 
 /**
  * @version $Rev$ $Date$
  */
-public abstract class ComponentTypeLoaderExtension<T extends Implementation> implements ComponentTypeLoader<T> {
+public abstract class ComponentTypeLoaderExtension<I extends Implementation> implements ComponentTypeLoader<I> {
     protected LoaderRegistry loaderRegistry;
 
+    protected ComponentTypeLoaderExtension() {
+    }
+
+    protected ComponentTypeLoaderExtension(LoaderRegistry loaderRegistry) {
+        this.loaderRegistry = loaderRegistry;
+    }
+
     @Property
     public void setLoaderRegistry(LoaderRegistry loaderRegistry) {
         this.loaderRegistry = loaderRegistry;
     }
 
-    protected abstract Class<T> getTypeClass();
-    
+    protected abstract Class<I> getImplementationClass();
+
     @Init
     public void start() {
-        loaderRegistry.registerLoader(getTypeClass(), this);
+        loaderRegistry.registerLoader(getImplementationClass(), this);
     }
 
     @Destroy
     public void stop() {
-        loaderRegistry.unregisterLoader(getTypeClass());
+        loaderRegistry.unregisterLoader(getImplementationClass());
     }
+
+    protected <CT extends ComponentType> CT loadFromSidefile(Class<CT> type, URL sidefile, DeploymentContext deploymentContext) throws LoaderException {
+        try {
+            XMLStreamReader reader;
+            InputStream is;
+            is = sidefile.openStream();
+            try {
+                XMLInputFactory factory = deploymentContext.getXmlFactory();
+                reader = factory.createXMLStreamReader(is);
+                try {
+                    reader.nextTag();
+                    QName name = reader.getName();
+                    ModelObject mo = loaderRegistry.load(reader, deploymentContext);
+                    if (type.isInstance(mo)) {
+                        return type.cast(mo);
+                    } else {
+                        UnrecognizedElementException e = new UnrecognizedElementException(name);
+                        e.setResourceURI(sidefile.toString());
+                        throw e;
+                    }
+                } finally {
+                    try {
+                        reader.close();
+                    } catch (XMLStreamException e) {
+                        // ignore
+                    }
+                }
+            } finally {
+                try {
+                    is.close();
+                } catch (IOException e) {
+                    // ignore
+                }
+            }
+        } catch (IOException e) {
+            LoaderException sfe = new LoaderException(e.getMessage());
+            sfe.setResourceURI(sidefile.toString());
+            throw sfe;
+        } catch (XMLStreamException e) {
+            LoaderException sfe = new LoaderException(e.getMessage());
+            sfe.setResourceURI(sidefile.toString());
+            throw sfe;
+        }
+    }
+
 }

Modified: incubator/tuscany/sandbox/jboynes/sca/spi/src/main/java/org/apache/tuscany/spi/extension/LoaderExtension.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/sandbox/jboynes/sca/spi/src/main/java/org/apache/tuscany/spi/extension/LoaderExtension.java?rev=409831&r1=409830&r2=409831&view=diff
==============================================================================
--- incubator/tuscany/sandbox/jboynes/sca/spi/src/main/java/org/apache/tuscany/spi/extension/LoaderExtension.java (original)
+++ incubator/tuscany/sandbox/jboynes/sca/spi/src/main/java/org/apache/tuscany/spi/extension/LoaderExtension.java Sat May 27 08:19:37 2006
@@ -33,6 +33,13 @@
 public abstract class LoaderExtension<T extends ModelObject> implements StAXElementLoader<T> {
     protected LoaderRegistry registry;
 
+    protected LoaderExtension() {
+    }
+
+    protected LoaderExtension(LoaderRegistry registry) {
+        this.registry = registry;
+    }
+
     @Autowire
     public void setRegistry(LoaderRegistry registry) {
         this.registry = registry;

Modified: incubator/tuscany/sandbox/jboynes/sca/spi/src/main/java/org/apache/tuscany/spi/loader/ComponentTypeLoader.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/sandbox/jboynes/sca/spi/src/main/java/org/apache/tuscany/spi/loader/ComponentTypeLoader.java?rev=409831&r1=409830&r2=409831&view=diff
==============================================================================
--- incubator/tuscany/sandbox/jboynes/sca/spi/src/main/java/org/apache/tuscany/spi/loader/ComponentTypeLoader.java (original)
+++ incubator/tuscany/sandbox/jboynes/sca/spi/src/main/java/org/apache/tuscany/spi/loader/ComponentTypeLoader.java Sat May 27 08:19:37 2006
@@ -28,6 +28,7 @@
      *
      * @param implementation    the implementation whose component type information should be loaded
      * @param deploymentContext the current deployment context
+     * @throws LoaderException  if there was a problem loading the configuration type
      */
-    void load(I implementation, DeploymentContext deploymentContext);
+    void load(I implementation, DeploymentContext deploymentContext) throws LoaderException;
 }

Modified: incubator/tuscany/sandbox/jboynes/sca/spi/src/main/java/org/apache/tuscany/spi/loader/LoaderRegistry.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/sandbox/jboynes/sca/spi/src/main/java/org/apache/tuscany/spi/loader/LoaderRegistry.java?rev=409831&r1=409830&r2=409831&view=diff
==============================================================================
--- incubator/tuscany/sandbox/jboynes/sca/spi/src/main/java/org/apache/tuscany/spi/loader/LoaderRegistry.java (original)
+++ incubator/tuscany/sandbox/jboynes/sca/spi/src/main/java/org/apache/tuscany/spi/loader/LoaderRegistry.java Sat May 27 08:19:37 2006
@@ -75,5 +75,5 @@
 
     <I extends Implementation<?>> void unregisterLoader(Class<I> key);
 
-    <I extends Implementation<?>> void loadComponentType(I implementation, DeploymentContext deploymentContext);
+    <I extends Implementation<?>> void loadComponentType(I implementation, DeploymentContext deploymentContext) throws LoaderException;
 }

Added: incubator/tuscany/sandbox/jboynes/sca/spi/src/main/java/org/apache/tuscany/spi/loader/UndefinedPropertyException.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/sandbox/jboynes/sca/spi/src/main/java/org/apache/tuscany/spi/loader/UndefinedPropertyException.java?rev=409831&view=auto
==============================================================================
--- incubator/tuscany/sandbox/jboynes/sca/spi/src/main/java/org/apache/tuscany/spi/loader/UndefinedPropertyException.java (added)
+++ incubator/tuscany/sandbox/jboynes/sca/spi/src/main/java/org/apache/tuscany/spi/loader/UndefinedPropertyException.java Sat May 27 08:19:37 2006
@@ -0,0 +1,26 @@
+/**
+ *
+ * Copyright 2006 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.spi.loader;
+
+/**
+ * @version $Rev$ $Date$
+ */
+public class UndefinedPropertyException extends LoaderException {
+    public UndefinedPropertyException(String name) {
+        super(name);
+    }
+}

Propchange: incubator/tuscany/sandbox/jboynes/sca/spi/src/main/java/org/apache/tuscany/spi/loader/UndefinedPropertyException.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/tuscany/sandbox/jboynes/sca/spi/src/main/java/org/apache/tuscany/spi/loader/UndefinedPropertyException.java
------------------------------------------------------------------------------
    svn:keywords = Rev,Date



---------------------------------------------------------------------
To unsubscribe, e-mail: tuscany-commits-unsubscribe@ws.apache.org
For additional commands, e-mail: tuscany-commits-help@ws.apache.org