You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuscany.apache.org by js...@apache.org on 2006/02/23 08:06:36 UTC

svn commit: r380052 - in /incubator/tuscany/java/sca/model/src/main/java/org/apache/tuscany/model/scdl: ./ loader/ loader/impl/

Author: jsdelfino
Date: Wed Feb 22 23:06:32 2006
New Revision: 380052

URL: http://svn.apache.org/viewcvs?rev=380052&view=rev
Log:
integrated loader and scdl to assembly model transformation

Added:
    incubator/tuscany/java/sca/model/src/main/java/org/apache/tuscany/model/scdl/
    incubator/tuscany/java/sca/model/src/main/java/org/apache/tuscany/model/scdl/loader/
    incubator/tuscany/java/sca/model/src/main/java/org/apache/tuscany/model/scdl/loader/SCDLAssemblyModelLoader.java   (with props)
    incubator/tuscany/java/sca/model/src/main/java/org/apache/tuscany/model/scdl/loader/SCDLModelLoader.java   (with props)
    incubator/tuscany/java/sca/model/src/main/java/org/apache/tuscany/model/scdl/loader/impl/
    incubator/tuscany/java/sca/model/src/main/java/org/apache/tuscany/model/scdl/loader/impl/SCDLAssemblyModelLoaderImpl.java   (with props)
    incubator/tuscany/java/sca/model/src/main/java/org/apache/tuscany/model/scdl/loader/impl/SCDLContentHandlerImpl.java   (with props)
    incubator/tuscany/java/sca/model/src/main/java/org/apache/tuscany/model/scdl/loader/impl/SCDLXMLReader.java   (with props)

Added: incubator/tuscany/java/sca/model/src/main/java/org/apache/tuscany/model/scdl/loader/SCDLAssemblyModelLoader.java
URL: http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/model/src/main/java/org/apache/tuscany/model/scdl/loader/SCDLAssemblyModelLoader.java?rev=380052&view=auto
==============================================================================
--- incubator/tuscany/java/sca/model/src/main/java/org/apache/tuscany/model/scdl/loader/SCDLAssemblyModelLoader.java (added)
+++ incubator/tuscany/java/sca/model/src/main/java/org/apache/tuscany/model/scdl/loader/SCDLAssemblyModelLoader.java Wed Feb 22 23:06:32 2006
@@ -0,0 +1,29 @@
+/**
+ *
+ *  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.model.scdl.loader;
+
+import java.util.List;
+
+import org.apache.tuscany.model.assembly.loader.AssemblyModelLoader;
+
+/**
+ * An assembly model loader.
+ */
+public interface SCDLAssemblyModelLoader extends AssemblyModelLoader {
+
+    List<SCDLModelLoader> getSCDLModelLoaders();
+}

Propchange: incubator/tuscany/java/sca/model/src/main/java/org/apache/tuscany/model/scdl/loader/SCDLAssemblyModelLoader.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/tuscany/java/sca/model/src/main/java/org/apache/tuscany/model/scdl/loader/SCDLAssemblyModelLoader.java
------------------------------------------------------------------------------
    svn:keywords = Rev,Date

Added: incubator/tuscany/java/sca/model/src/main/java/org/apache/tuscany/model/scdl/loader/SCDLModelLoader.java
URL: http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/model/src/main/java/org/apache/tuscany/model/scdl/loader/SCDLModelLoader.java?rev=380052&view=auto
==============================================================================
--- incubator/tuscany/java/sca/model/src/main/java/org/apache/tuscany/model/scdl/loader/SCDLModelLoader.java (added)
+++ incubator/tuscany/java/sca/model/src/main/java/org/apache/tuscany/model/scdl/loader/SCDLModelLoader.java Wed Feb 22 23:06:32 2006
@@ -0,0 +1,33 @@
+/**
+ *
+ *  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.model.scdl.loader;
+
+import org.apache.tuscany.model.assembly.AssemblyModelObject;
+
+/**
+ * An SCDL model loader.
+ */
+public interface SCDLModelLoader {
+
+    /**
+     * Load an SCDL model object into an assembly model.
+     * @param object
+     * @return
+     */
+    AssemblyModelObject load(Object object);
+    
+}

Propchange: incubator/tuscany/java/sca/model/src/main/java/org/apache/tuscany/model/scdl/loader/SCDLModelLoader.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/tuscany/java/sca/model/src/main/java/org/apache/tuscany/model/scdl/loader/SCDLModelLoader.java
------------------------------------------------------------------------------
    svn:keywords = Rev,Date

Added: incubator/tuscany/java/sca/model/src/main/java/org/apache/tuscany/model/scdl/loader/impl/SCDLAssemblyModelLoaderImpl.java
URL: http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/model/src/main/java/org/apache/tuscany/model/scdl/loader/impl/SCDLAssemblyModelLoaderImpl.java?rev=380052&view=auto
==============================================================================
--- incubator/tuscany/java/sca/model/src/main/java/org/apache/tuscany/model/scdl/loader/impl/SCDLAssemblyModelLoaderImpl.java (added)
+++ incubator/tuscany/java/sca/model/src/main/java/org/apache/tuscany/model/scdl/loader/impl/SCDLAssemblyModelLoaderImpl.java Wed Feb 22 23:06:32 2006
@@ -0,0 +1,132 @@
+/**
+ *
+ *  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.model.scdl.loader.impl;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.List;
+
+import org.apache.tuscany.model.assembly.AssemblyModelContext;
+import org.apache.tuscany.model.assembly.AssemblyModelObject;
+import org.apache.tuscany.model.assembly.ComponentType;
+import org.apache.tuscany.model.assembly.Module;
+import org.apache.tuscany.model.assembly.ModuleFragment;
+import org.apache.tuscany.model.assembly.Subsystem;
+import org.apache.tuscany.model.scdl.loader.SCDLAssemblyModelLoader;
+import org.apache.tuscany.model.scdl.loader.SCDLModelLoader;
+import org.apache.tuscany.model.util.ModelTransformer;
+import org.apache.tuscany.model.util.ModelTransformerImpl;
+import org.apache.tuscany.sdo.util.DataObjectUtil;
+import org.eclipse.emf.ecore.util.EcoreUtil;
+
+/**
+ */
+public class SCDLAssemblyModelLoaderImpl implements SCDLAssemblyModelLoader {
+    
+    private SCDLXMLReader xmlReader=new SCDLXMLReader();
+    private AssemblyModelContext modelContext;
+    
+    private List<SCDLModelLoader> scdlModelLoaders=new ArrayList<SCDLModelLoader>();
+    
+    static {
+        DataObjectUtil.initRuntime();
+    }
+
+    /**
+     * Constructor
+     */
+    public SCDLAssemblyModelLoaderImpl() {
+    }
+    
+    /**
+     * @param modelContext The modelContext to set.
+     */
+    public void setModelContext(AssemblyModelContext modelContext) {
+        this.modelContext = modelContext;
+    }
+
+    /**
+     * @see org.apache.tuscany.model.assembly.loader.AssemblyModelLoader#getComponentType(java.lang.String)
+     */
+    public ComponentType getComponentType(String uri) {
+
+        // Load the SCDL component type
+        org.apache.tuscany.model.scdl.ComponentType scdlComponentType=xmlReader.getComponentType(uri);
+        
+        // Transform it to an assembly component type
+        return transform(scdlComponentType).getComponentType();
+    }
+
+    /**
+     * @see org.apache.tuscany.model.assembly.loader.AssemblyModelLoader#getModule(java.lang.String)
+     */
+    public Module getModule(String uri) {
+
+        // Load the SCDL module
+        org.apache.tuscany.model.scdl.Module scdlModule=xmlReader.getModule(uri);
+        
+        // Transform it to an assembly module
+        return transform(scdlModule).getModule();
+    }
+
+    /**
+     * @see org.apache.tuscany.model.assembly.loader.AssemblyModelLoader#getModuleFragment(java.lang.String)
+     */
+    public ModuleFragment getModuleFragment(String uri) {
+
+        // Load the SCDL module fragment
+        org.apache.tuscany.model.scdl.ModuleFragment scdlFragment=xmlReader.getModuleFragment(uri);
+        
+        // Transform it to an assembly module fragment
+        return transform(scdlFragment).getModuleFragment();
+    }
+    
+    /**
+     * @see org.apache.tuscany.model.assembly.loader.AssemblyModelLoader#getSubsystem(java.lang.String)
+     */
+    public Subsystem getSubsystem(String uri) {
+
+        // Load the SCDL subsystem
+        org.apache.tuscany.model.scdl.Subsystem scdlSubsystem=xmlReader.getSubsystem(uri);
+        
+        return transform(scdlSubsystem).getSubsystem();
+    }
+    
+    /**
+     * @see org.apache.tuscany.model.scdl.loader.SCDLAssemblyModelLoader#getSCDLModelLoaders()
+     */
+    public List<SCDLModelLoader> getSCDLModelLoaders() {
+        return scdlModelLoaders;
+    }
+    
+    /**
+     * Transform a model and return the handler containing the result of the transformation.
+     * @param object
+     * @return
+     */
+    private SCDLContentHandlerImpl transform(Object object) {
+        //FIXME Remove this dependency on EMF
+        Iterator contents=EcoreUtil.getAllContents(Collections.singleton(object), true);
+        
+        ModelTransformer transformer=new ModelTransformerImpl();
+        SCDLContentHandlerImpl handler=new SCDLContentHandlerImpl(modelContext,scdlModelLoaders);
+        transformer.transform(contents, handler);
+        return handler;
+    }
+    
+}

Propchange: incubator/tuscany/java/sca/model/src/main/java/org/apache/tuscany/model/scdl/loader/impl/SCDLAssemblyModelLoaderImpl.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/tuscany/java/sca/model/src/main/java/org/apache/tuscany/model/scdl/loader/impl/SCDLAssemblyModelLoaderImpl.java
------------------------------------------------------------------------------
    svn:keywords = Rev,Date

Added: incubator/tuscany/java/sca/model/src/main/java/org/apache/tuscany/model/scdl/loader/impl/SCDLContentHandlerImpl.java
URL: http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/model/src/main/java/org/apache/tuscany/model/scdl/loader/impl/SCDLContentHandlerImpl.java?rev=380052&view=auto
==============================================================================
--- incubator/tuscany/java/sca/model/src/main/java/org/apache/tuscany/model/scdl/loader/impl/SCDLContentHandlerImpl.java (added)
+++ incubator/tuscany/java/sca/model/src/main/java/org/apache/tuscany/model/scdl/loader/impl/SCDLContentHandlerImpl.java Wed Feb 22 23:06:32 2006
@@ -0,0 +1,584 @@
+/**
+ *
+ *  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.model.scdl.loader.impl;
+
+import java.util.List;
+import java.util.Map;
+
+import org.apache.tuscany.model.assembly.AssemblyFactory;
+import org.apache.tuscany.model.assembly.AssemblyModelContext;
+import org.apache.tuscany.model.assembly.ComponentImplementation;
+import org.apache.tuscany.model.assembly.ConfiguredProperty;
+import org.apache.tuscany.model.assembly.ConfiguredReference;
+import org.apache.tuscany.model.assembly.ConfiguredService;
+import org.apache.tuscany.model.assembly.OverrideOption;
+import org.apache.tuscany.model.assembly.ServiceContract;
+import org.apache.tuscany.model.assembly.SimpleComponent;
+import org.apache.tuscany.model.scdl.Binding;
+import org.apache.tuscany.model.scdl.Component;
+import org.apache.tuscany.model.scdl.ComponentType;
+import org.apache.tuscany.model.scdl.EntryPoint;
+import org.apache.tuscany.model.scdl.ExternalService;
+import org.apache.tuscany.model.scdl.Implementation;
+import org.apache.tuscany.model.scdl.JavaInterface;
+import org.apache.tuscany.model.scdl.Module;
+import org.apache.tuscany.model.scdl.ModuleComponent;
+import org.apache.tuscany.model.scdl.ModuleWire;
+import org.apache.tuscany.model.scdl.Multiplicity;
+import org.apache.tuscany.model.scdl.OverrideOptions;
+import org.apache.tuscany.model.scdl.Property;
+import org.apache.tuscany.model.scdl.PropertyValues;
+import org.apache.tuscany.model.scdl.Reference;
+import org.apache.tuscany.model.scdl.Service;
+import org.apache.tuscany.model.scdl.Subsystem;
+import org.apache.tuscany.model.scdl.SystemWire;
+import org.apache.tuscany.model.scdl.WSDLPortType;
+import org.apache.tuscany.model.scdl.loader.SCDLModelLoader;
+import org.apache.tuscany.model.scdl.util.ScdlSwitch;
+import org.apache.tuscany.model.types.java.JavaServiceContract;
+import org.apache.tuscany.model.types.wsdl.WSDLServiceContract;
+import org.apache.tuscany.model.util.ModelContentHandler;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.util.FeatureMap;
+
+import commonj.sdo.DataObject;
+import commonj.sdo.Sequence;
+
+/**
+ * A model content handler that transforms an SCDL model into an assembly model.
+ */
+public class SCDLContentHandlerImpl extends ScdlSwitch implements ModelContentHandler {
+
+    private List contents;
+    private List linkers;
+    private Map targets;
+    
+    private List<SCDLModelLoader> scdlModelLoaders;
+
+    private AssemblyModelContext modelContext;
+    private AssemblyFactory factory;
+    private org.apache.tuscany.model.assembly.ComponentType currentComponentType;
+    private org.apache.tuscany.model.assembly.Service currentService;
+    private org.apache.tuscany.model.assembly.Reference currentReference;
+    private org.apache.tuscany.model.assembly.Module currentModule;
+    private SimpleComponent currentComponent;
+    private org.apache.tuscany.model.assembly.ExternalService currentExternalService;
+    private org.apache.tuscany.model.assembly.EntryPoint currentEntryPoint;
+    private org.apache.tuscany.model.assembly.ModuleFragment currentModuleFragment;
+    private org.apache.tuscany.model.assembly.Subsystem currentSubsystem;
+    private org.apache.tuscany.model.assembly.ModuleComponent currentModuleComponent;
+    
+    /**
+     * Constructor
+     */
+    public SCDLContentHandlerImpl(AssemblyModelContext modelContext, List<SCDLModelLoader> scdlModelLoaders) {
+        this.modelContext=modelContext;
+        this.factory=modelContext.getAssemblyFactory();
+        this.scdlModelLoaders=scdlModelLoaders;
+    }
+    
+    /**
+     * @see org.apache.tuscany.model.util.ModelContentHandler#doSwitch(java.lang.Object)
+     */
+    public Object doSwitch(Object object) {
+        return super.doSwitch((EObject)object);
+    }
+
+    /**
+     * @see org.apache.tuscany.model.util.ModelContentHandler#startModel()
+     */
+    public void startModel() {
+    }
+    
+    /**
+     * @see org.apache.tuscany.model.util.ModelContentHandler#endModel()
+     */
+    public void endModel() {
+    }
+
+    /**
+     * @see org.apache.tuscany.model.util.ModelContentHandler#setContents(java.util.List)
+     */
+    public void setContents(List contents) {
+        this.contents=contents;
+    }
+
+    /**
+     * @see org.apache.tuscany.model.util.ModelContentHandler#setLinkers(java.util.List)
+     */
+    public void setLinkers(List linkers) {
+        this.linkers=linkers;
+    }
+
+    /**
+     * @see org.apache.tuscany.model.util.ModelContentHandler#setTargets(java.util.Map)
+     */
+    public void setTargets(Map targets) {
+        this.targets=targets;
+    }
+    
+    /**
+     * @return Returns the componentType.
+     */
+    public org.apache.tuscany.model.assembly.ComponentType getComponentType() {
+        return currentComponentType;
+    }
+    
+    /**
+     * @return Returns the module.
+     */
+    public org.apache.tuscany.model.assembly.Module getModule() {
+        return currentModule;
+    }
+    
+    /**
+     * @return Returns the subsystem.
+     */
+    public org.apache.tuscany.model.assembly.Subsystem getSubsystem() {
+        return currentSubsystem;
+    }
+    
+    /**
+     * @return Returns the moduleFragment.
+     */
+    public org.apache.tuscany.model.assembly.ModuleFragment getModuleFragment() {
+        return currentModuleFragment;
+    }
+    
+    /**
+     * @see org.apache.tuscany.model.scdl.util.ScdlSwitch#caseComponentType(org.apache.tuscany.model.scdl.ComponentType)
+     */
+    public Object caseComponentType(ComponentType object) {
+        org.apache.tuscany.model.assembly.ComponentType componentType=factory.createComponentType();
+        contents.add(componentType);
+        currentComponentType=componentType;
+        return componentType;
+    }
+    
+    /**
+     * @see org.apache.tuscany.model.scdl.util.ScdlSwitch#caseService(org.apache.tuscany.model.scdl.Service)
+     */
+    public Object caseService(Service object) {
+        final org.apache.tuscany.model.assembly.Service service=factory.createService();
+        service.setName(object.getName());
+        
+        linkers.add(new Runnable() {
+            public void run() {
+                currentComponentType.getServices().add(service);
+            };
+        });
+        
+        currentService=service;
+        return service;
+    }
+
+    /**
+     * @see org.apache.tuscany.model.scdl.util.ScdlSwitch#caseReference(org.apache.tuscany.model.scdl.Reference)
+     */
+    public Object caseReference(Reference object) {
+        final org.apache.tuscany.model.assembly.Reference reference=factory.createReference();
+        reference.setName(object.getName());
+        reference.setMultiplicity(transformMultiplicity(object.getMultiplicity()));
+        
+        linkers.add(new Runnable() {
+            public void run() {
+                currentComponentType.getReferences().add(reference);
+            };
+        });
+        
+        currentReference=reference;
+        return reference;
+    }
+    
+    /**
+     * Transforms an SCDL multiplicity into an assembly model multiplicity. 
+     * @param multiplicity
+     * @return
+     */
+    private org.apache.tuscany.model.assembly.Multiplicity transformMultiplicity(Multiplicity multiplicity) {
+        if (multiplicity==Multiplicity._01_LITERAL)
+            return org.apache.tuscany.model.assembly.Multiplicity.ZERO_ONE;
+        else if (multiplicity==Multiplicity._0N_LITERAL)
+            return org.apache.tuscany.model.assembly.Multiplicity.ZERO_N;
+        else if (multiplicity==Multiplicity._11_LITERAL)
+            return org.apache.tuscany.model.assembly.Multiplicity.ONE_ONE;
+        else if (multiplicity==Multiplicity._1N_LITERAL)
+            return org.apache.tuscany.model.assembly.Multiplicity.ONE_N;
+        else
+            return org.apache.tuscany.model.assembly.Multiplicity.ONE_ONE;
+    }
+    
+    /**
+     * @see org.apache.tuscany.model.scdl.util.ScdlSwitch#caseJavaInterface(org.apache.tuscany.model.scdl.JavaInterface)
+     */
+    public Object caseJavaInterface(JavaInterface object) {
+        final JavaServiceContract serviceContract=factory.createJavaServiceContract();
+        serviceContract.setInterface(null);
+        serviceContract.setCallbackInterface(null);
+        
+        linkServiceContract(object, serviceContract);
+        
+        return serviceContract;
+    }
+    
+    /**
+     * @see org.apache.tuscany.model.scdl.util.ScdlSwitch#caseWSDLPortType(org.apache.tuscany.model.scdl.WSDLPortType)
+     */
+    public Object caseWSDLPortType(WSDLPortType object) {
+        final WSDLServiceContract serviceContract=factory.createWSDLServiceContract();
+        serviceContract.setInterface(null);
+        serviceContract.setCallbackInterface(null);
+        
+        linkServiceContract(object, serviceContract);
+
+        return serviceContract;
+    }
+
+    /**
+     * Link a service contract with the correct owner.
+     * @param object
+     * @param serviceContract
+     */
+    private void linkServiceContract(Object object, final ServiceContract serviceContract) {
+        Object container=((DataObject)object).getContainer();
+        if (container instanceof Service) {
+            
+            // Set a service contract on a service
+            final org.apache.tuscany.model.assembly.Service service=currentService;
+            linkers.add(new Runnable() {
+                public void run() {
+                    service.setServiceContract(serviceContract);
+                }
+            });
+        }
+        else if (container instanceof Reference) {
+
+            // Set a service contract on a reference
+            final org.apache.tuscany.model.assembly.Reference reference=currentReference;
+            linkers.add(new Runnable() {
+                public void run() {
+                    reference.setServiceContract(serviceContract);
+                }
+            });
+        } else if (container instanceof ExternalService) {
+            
+            // Set a service contract on an external service
+            final org.apache.tuscany.model.assembly.ExternalService externalService=currentExternalService;
+            linkers.add(new Runnable() {
+                public void run() {
+                    externalService.getConfiguredService().getService().setServiceContract(serviceContract);
+                }
+            });
+        } else if (container instanceof EntryPoint) {
+
+            // Set a service contract on an entry point
+            final org.apache.tuscany.model.assembly.EntryPoint entryPoint=currentEntryPoint;
+            linkers.add(new Runnable() {
+                public void run() {
+                    entryPoint.getConfiguredService().getService().setServiceContract(serviceContract);
+                    entryPoint.getConfiguredReference().getReference().setServiceContract(serviceContract);
+                }
+            });
+        }
+    }
+    
+    /**
+     * @see org.apache.tuscany.model.scdl.util.ScdlSwitch#caseProperty(org.apache.tuscany.model.scdl.Property)
+     */
+    public Object caseProperty(Property object) {
+        final org.apache.tuscany.model.assembly.Property property=factory.createProperty();
+        property.setName(object.getName());
+        property.setDefaultValue(object.getDefault());
+        property.setMany(object.isMany());
+        property.setRequired(object.isRequired());
+        //FIXME derive the Java type from the XSD type name
+        property.setType(String.class);
+        
+        linkers.add(new Runnable() {
+            public void run() {
+                currentComponentType.getProperties().add(property);
+            };
+        });
+        
+        return property;
+    }
+    
+    /**
+     * @see org.apache.tuscany.model.scdl.util.ScdlSwitch#caseModule(org.apache.tuscany.model.scdl.Module)
+     */
+    public Object caseModule(Module object) {
+        org.apache.tuscany.model.assembly.Module module=factory.createModule();
+        module.setName(object.getName());
+        contents.add(module);
+        currentModule=module;
+        return module;
+    }
+    
+    /**
+     * @see org.apache.tuscany.model.scdl.util.ScdlSwitch#caseComponent(org.apache.tuscany.model.scdl.Component)
+     */
+    public Object caseComponent(Component object) {
+        final SimpleComponent component=factory.createSimpleComponent();
+        component.setName(object.getName());
+        linkers.add(new Runnable() {
+            public void run() {
+                currentModule.getComponents().add(component);
+                component.initialize(modelContext);
+            };
+        });
+        currentComponent=component;
+        return component;
+    }
+
+    /**
+     * @see org.apache.tuscany.model.scdl.util.ScdlSwitch#casePropertyValues(org.apache.tuscany.model.scdl.PropertyValues)
+     */
+    public Object casePropertyValues(final PropertyValues object) {
+
+        // Grab the current component
+        final SimpleComponent component=currentComponent;
+        linkers.add(new Runnable() {
+            public void run() {
+                
+                // Initialize the component's configured properties
+                Sequence sequence = object.getAny();
+                for (int p = 0, n = sequence.size(); p < n; p++) {
+
+                    // Get each property value element
+                    commonj.sdo.Property propertyElementDef = sequence.getProperty(p);
+                    DataObject propertyElement = (DataObject) sequence.getValue(p);
+
+                    // Get the corresponding property definition
+                    String propertyName = propertyElementDef.getName();
+                    ConfiguredProperty configuredProperty=component.getConfiguredProperty(propertyName);
+                    if (configuredProperty == null) {
+                        throw new IllegalArgumentException("Undefined property " + propertyName);
+                    }
+
+                    // Get the property value text and convert to the expected java type
+                    //FIXME just handle string for now
+                    //FIXME SDO returns a featuremap instead of a sequence
+                    //Sequence text = propertyElement.getSequence(0);
+                    FeatureMap text = (FeatureMap)propertyElement.get(0);
+                    if (text != null && text.size() != 0) {
+                        Object rawValue = text.getValue(0);
+                        configuredProperty.setValue(rawValue);
+                    }
+                }
+            }
+        });
+        
+        return object;
+    }
+
+    /**
+     * @see org.apache.tuscany.model.scdl.util.ScdlSwitch#caseReferenceValues(org.apache.tuscany.model.scdl.ReferenceValues)
+     */
+    public Object caseReferenceValues(final org.apache.tuscany.model.scdl.ReferenceValues object) {
+
+        // Grab the current component
+        final SimpleComponent component=this.currentComponent;
+        
+        linkers.add(new Runnable() {
+            public void run() {
+                
+                // Initialize the component's configured references
+                Sequence sequence = object.getAny();
+                for (int r = 0, n = sequence.size(); r < n; r++) {
+
+                    // Get each reference value element
+                    commonj.sdo.Property referenceElementDef = sequence.getProperty(r);
+                    DataObject referenceElement = (DataObject) sequence.getValue(r);
+
+                    // Get the corresponding reference definition
+                    String referenceName = referenceElementDef.getName();
+                    ConfiguredReference configuredReference=component.getConfiguredReference(referenceName);
+                    if (configuredReference == null) {
+                        throw new IllegalArgumentException("Undefined reference " + referenceName);
+                    }
+
+                    // Get the reference value text
+                    //FIXME SDO returns a featuremap instead of a sequence
+                    //Sequence text = propertyElement.getSequence(0);
+                    FeatureMap text = (FeatureMap)referenceElement.get(0);
+                    if (text != null && text.size() != 0) {
+                        Object rawValue = text.getValue(0);
+                        //FIXME
+                        //configuredReference.setValue(rawValue);
+                    }
+                }
+            }
+        });
+        
+        return object;
+    }
+    
+    /**
+     * @see org.apache.tuscany.model.scdl.util.ScdlSwitch#caseEntryPoint(org.apache.tuscany.model.scdl.EntryPoint)
+     */
+    public Object caseEntryPoint(EntryPoint object) {
+        final org.apache.tuscany.model.assembly.EntryPoint entryPoint=factory.createEntryPoint();
+        entryPoint.setName(object.getName());
+
+        // Create a configured service and a configured reference for this entry point
+        org.apache.tuscany.model.assembly.Service service=factory.createService();
+        service.setName(entryPoint.getName());
+        ConfiguredService configuredService=factory.createConfiguredService();
+        configuredService.setService(service);
+        entryPoint.setConfiguredService(configuredService);
+        org.apache.tuscany.model.assembly.Reference reference=factory.createReference();
+        reference.setName("");
+        reference.setMultiplicity(transformMultiplicity(object.getMultiplicity()));
+        ConfiguredReference configuredReference=factory.createConfiguredReference();
+        configuredReference.setReference(reference);
+        entryPoint.setConfiguredReference(configuredReference);
+        
+        
+        linkers.add(new Runnable() {
+            public void run() {
+                currentModule.getEntryPoints().add(entryPoint);
+            };
+        });
+        
+        currentEntryPoint=entryPoint;
+        return entryPoint;
+    }
+    
+    /**
+     * @see org.apache.tuscany.model.scdl.util.ScdlSwitch#caseExternalService(org.apache.tuscany.model.scdl.ExternalService)
+     */
+    public Object caseExternalService(ExternalService object) {
+        final org.apache.tuscany.model.assembly.ExternalService externalService=factory.createExternalService();
+        externalService.setName(object.getName());
+        
+        OverrideOptions overrideOptions=object.getOverridable();
+        if (overrideOptions==OverrideOptions.MAY_LITERAL)
+            externalService.setOverrideOption(OverrideOption.MAY);
+        else if (overrideOptions==OverrideOptions.MUST_LITERAL)
+            externalService.setOverrideOption(OverrideOption.MUST);
+        else if (overrideOptions==OverrideOptions.NO_LITERAL)
+            externalService.setOverrideOption(OverrideOption.NO);
+        else
+            externalService.setOverrideOption(OverrideOption.NO);
+        
+        // Create a configured service for this external service
+        org.apache.tuscany.model.assembly.Service service=factory.createService();
+        service.setName(externalService.getName());
+        ConfiguredService configuredService=factory.createConfiguredService();
+        configuredService.setService(service);
+        externalService.setConfiguredService(configuredService);
+        
+        linkers.add(new Runnable() {
+            public void run() {
+                currentModule.getExternalServices().add(externalService);
+            };
+        });
+        currentExternalService=externalService;
+        return externalService;
+    }
+
+    /**
+     * @see org.apache.tuscany.model.scdl.util.ScdlSwitch#caseSubsystem(org.apache.tuscany.model.scdl.Subsystem)
+     */
+    public Object caseSubsystem(Subsystem object) {
+        org.apache.tuscany.model.assembly.Subsystem subsystem=factory.createSubsystem();
+        subsystem.setName(object.getName());
+        subsystem.setURI(object.getUri());
+        currentSubsystem=subsystem;
+        return subsystem;
+    }
+    
+    /**
+     * @see org.apache.tuscany.model.scdl.util.ScdlSwitch#caseModuleComponent(org.apache.tuscany.model.scdl.ModuleComponent)
+     */
+    public Object caseModuleComponent(ModuleComponent object) {
+        final org.apache.tuscany.model.assembly.ModuleComponent moduleComponent=factory.createModuleComponent();
+        moduleComponent.setName(object.getName());
+        moduleComponent.setURI(object.getUri());
+
+        linkers.add(new Runnable() {
+            public void run() {
+                currentSubsystem.getComponents().add(moduleComponent);
+            };
+        });
+        
+        currentModuleComponent=moduleComponent;
+        return moduleComponent;
+    }
+    
+    /**
+     * @see org.apache.tuscany.model.scdl.util.ScdlSwitch#caseModuleWire(org.apache.tuscany.model.scdl.ModuleWire)
+     */
+    public Object caseModuleWire(ModuleWire object) {
+        // TODO Auto-generated method stub
+        return super.caseModuleWire(object);
+    }
+    
+    /**
+     * @see org.apache.tuscany.model.scdl.util.ScdlSwitch#caseSystemWire(org.apache.tuscany.model.scdl.SystemWire)
+     */
+    public Object caseSystemWire(SystemWire object) {
+        // TODO Auto-generated method stub
+        return super.caseSystemWire(object);
+    }
+    
+    /**
+     * @see org.apache.tuscany.model.scdl.util.ScdlSwitch#caseImplementation(org.apache.tuscany.model.scdl.Implementation)
+     */
+    public Object caseImplementation(Implementation object) {
+        final SimpleComponent component=currentComponent;
+        
+        for (SCDLModelLoader scdlModelLoader : scdlModelLoaders) {
+                
+            // Invoke an SCDL loader to handle the specific implementation type
+            final ComponentImplementation implementation=(ComponentImplementation)scdlModelLoader.load(object);
+            if (implementation!=null) {
+                component.setComponentImplementation(implementation);
+                return implementation;
+            }
+            
+        }
+        return null;
+    }
+    
+    /**
+     * @see org.apache.tuscany.model.scdl.util.ScdlSwitch#caseBinding(org.apache.tuscany.model.scdl.Binding)
+     */
+    public Object caseBinding(Binding object) {
+        
+        final List<org.apache.tuscany.model.assembly.Binding> bindings;
+        Object container=((DataObject)object).getContainer();
+        if (container instanceof EntryPoint) {
+            bindings=currentEntryPoint.getBindings();
+        } else if (container instanceof ExternalService) {
+            bindings=currentExternalService.getBindings();
+        } else
+            bindings=null;
+
+        for (SCDLModelLoader scdlModelLoader : scdlModelLoaders) {
+                
+            // Invoke an SCDL loader to handle the specific binding type
+            final org.apache.tuscany.model.assembly.Binding binding=(org.apache.tuscany.model.assembly.Binding)scdlModelLoader.load(object);
+            if (binding!=null) {
+                bindings.add(binding);
+                return binding;
+            }
+            
+        }
+        return null;
+    }
+}

Propchange: incubator/tuscany/java/sca/model/src/main/java/org/apache/tuscany/model/scdl/loader/impl/SCDLContentHandlerImpl.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/tuscany/java/sca/model/src/main/java/org/apache/tuscany/model/scdl/loader/impl/SCDLContentHandlerImpl.java
------------------------------------------------------------------------------
    svn:keywords = Rev,Date

Added: incubator/tuscany/java/sca/model/src/main/java/org/apache/tuscany/model/scdl/loader/impl/SCDLXMLReader.java
URL: http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/model/src/main/java/org/apache/tuscany/model/scdl/loader/impl/SCDLXMLReader.java?rev=380052&view=auto
==============================================================================
--- incubator/tuscany/java/sca/model/src/main/java/org/apache/tuscany/model/scdl/loader/impl/SCDLXMLReader.java (added)
+++ incubator/tuscany/java/sca/model/src/main/java/org/apache/tuscany/model/scdl/loader/impl/SCDLXMLReader.java Wed Feb 22 23:06:32 2006
@@ -0,0 +1,103 @@
+/**
+ *
+ *  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.model.scdl.loader.impl;
+
+import java.io.IOException;
+import java.net.URL;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.tuscany.model.scdl.ComponentType;
+import org.apache.tuscany.model.scdl.Module;
+import org.apache.tuscany.model.scdl.ModuleFragment;
+import org.apache.tuscany.model.scdl.Subsystem;
+import org.apache.tuscany.model.scdl.impl.ScdlPackageImpl;
+import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
+
+import commonj.sdo.helper.XMLDocument;
+import commonj.sdo.helper.XMLHelper;
+
+/**
+ */
+public class SCDLXMLReader extends ResourceSetImpl {
+    
+    private Map<String, Object> cache=new HashMap<String, Object>();
+
+    /**
+     * Constructor
+     */
+    public SCDLXMLReader() {
+        
+        // Initialize SCDL package
+        ScdlPackageImpl.eINSTANCE.eClass();
+    }
+
+    /**
+     * Returns an SCDL module.
+     * @param uri
+     * @return
+     */
+    public Module getModule(String uri) {
+        return (Module)getRootObject(uri);
+    }
+
+    /**
+     * Returns an SCDL module fragment.
+     * @param uri
+     * @return
+     */
+    public ModuleFragment getModuleFragment(String uri) {
+        return (ModuleFragment)getRootObject(uri);
+    }
+
+    /**
+     * Returns an SCDL component type.
+     * @param uri
+     * @return
+     */
+    public ComponentType getComponentType(String uri) {
+        return (ComponentType)getRootObject(uri);
+    }
+    
+    /**
+     * Returns an SCDL subsystem.
+     * @param uri
+     * @return
+     */
+    public Subsystem getSubsystem(String uri) {
+        return (Subsystem)getRootObject(uri);
+    }
+
+    /**
+     * Returns the root object at the given URI.
+     * @param uri
+     * @return
+     */
+    private Object getRootObject(String uri) {
+        Object object = cache.get(uri);
+        if (object==null) {
+            try {
+                XMLDocument document=XMLHelper.INSTANCE.load(new URL(uri).openStream());
+                return (Module)document.getRootObject();
+            } catch (IOException e) {
+                throw new RuntimeException(e);
+            }
+        }
+        return object;
+    }
+    
+}

Propchange: incubator/tuscany/java/sca/model/src/main/java/org/apache/tuscany/model/scdl/loader/impl/SCDLXMLReader.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/tuscany/java/sca/model/src/main/java/org/apache/tuscany/model/scdl/loader/impl/SCDLXMLReader.java
------------------------------------------------------------------------------
    svn:keywords = Rev,Date