Author: jboynes
Date: Wed Apr  5 19:40:30 2006
New Revision: 391882

URL: http://svn.apache.org/viewcvs?rev=391882&view=rev
Log:
simplify JavaScript Implementation by moving introspection into loader

Modified:
    
incubator/tuscany/java/sca/containers/container.js/src/main/java/org/apache/tuscany/container/js/assembly/JavaScriptImplementation.java
    
incubator/tuscany/java/sca/containers/container.js/src/main/java/org/apache/tuscany/container/js/assembly/impl/JavaScriptImplementationImpl.java
    
incubator/tuscany/java/sca/containers/container.js/src/main/java/org/apache/tuscany/container/js/builder/JavaScriptContextFactoryBuilder.java
    
incubator/tuscany/java/sca/containers/container.js/src/main/java/org/apache/tuscany/container/js/loader/JavaScriptImplementationLoader.java
    
incubator/tuscany/java/sca/containers/container.js/src/test/java/org/apache/tuscany/container/js/mock/MockAssemblyFactory.java
    
incubator/tuscany/java/sca/containers/container.js/src/test/java/org/apache/tuscany/container/js/mock/MockModuleFactory.java

Modified: 
incubator/tuscany/java/sca/containers/container.js/src/main/java/org/apache/tuscany/container/js/assembly/JavaScriptImplementation.java
URL: 
http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/containers/container.js/src/main/java/org/apache/tuscany/container/js/assembly/JavaScriptImplementation.java?rev=391882&r1=391881&r2=391882&view=diff
==============================================================================
--- 
incubator/tuscany/java/sca/containers/container.js/src/main/java/org/apache/tuscany/container/js/assembly/JavaScriptImplementation.java
 (original)
+++ 
incubator/tuscany/java/sca/containers/container.js/src/main/java/org/apache/tuscany/container/js/assembly/JavaScriptImplementation.java
 Wed Apr  5 19:40:30 2006
@@ -17,6 +17,7 @@
 package org.apache.tuscany.container.js.assembly;
 
 import org.apache.tuscany.model.assembly.ComponentImplementation;
+import org.apache.tuscany.common.resource.ResourceLoader;
 
 /**
  * A representation of a JavaScript component implementation type
@@ -28,8 +29,16 @@
     public String getScriptFile();
 
     public void setScriptFile(String fn);
-    
+
     public String getStyle();
-    
+
     public void setStyle(String style);
+
+    String getScript();
+
+    void setScript(String script);
+
+    void setResourceLoader(ResourceLoader resourceLoader);
+
+    ResourceLoader getResourceLoader();
 }

Modified: 
incubator/tuscany/java/sca/containers/container.js/src/main/java/org/apache/tuscany/container/js/assembly/impl/JavaScriptImplementationImpl.java
URL: 
http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/containers/container.js/src/main/java/org/apache/tuscany/container/js/assembly/impl/JavaScriptImplementationImpl.java?rev=391882&r1=391881&r2=391882&view=diff
==============================================================================
--- 
incubator/tuscany/java/sca/containers/container.js/src/main/java/org/apache/tuscany/container/js/assembly/impl/JavaScriptImplementationImpl.java
 (original)
+++ 
incubator/tuscany/java/sca/containers/container.js/src/main/java/org/apache/tuscany/container/js/assembly/impl/JavaScriptImplementationImpl.java
 Wed Apr  5 19:40:30 2006
@@ -16,20 +16,13 @@
  */
 package org.apache.tuscany.container.js.assembly.impl;
 
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.URL;
-
 import org.apache.tuscany.common.resource.ResourceLoader;
 import org.apache.tuscany.container.js.assembly.JavaScriptImplementation;
-import org.apache.tuscany.model.assembly.AssemblyModelContext;
-import org.apache.tuscany.model.assembly.ComponentType;
-import org.apache.tuscany.model.assembly.ModelInitException;
 import org.apache.tuscany.model.assembly.impl.ComponentImplementationImpl;
 
 /**
  * Default implementation of a JavScript component implementation type
- * 
+ *
  * @version $Rev$ $Date$
  */
 public class JavaScriptImplementationImpl extends ComponentImplementationImpl 
implements JavaScriptImplementation {
@@ -38,7 +31,7 @@
 
     private String style;
 
-    private String scriptCode;
+    private String script;
 
     private ResourceLoader resourceLoader;
 
@@ -46,32 +39,12 @@
         super();
     }
 
-    public ResourceLoader getResourceLoader() {
-        return resourceLoader;
+    public void setResourceLoader(ResourceLoader resourceLoader) {
+        this.resourceLoader = resourceLoader;
     }
 
-    public void initialize(AssemblyModelContext modelContext) throws 
ModelInitException {
-        if (isInitialized()) {
-            return;
-        }
-        this.resourceLoader = modelContext.getApplicationResourceLoader();
-        if(resourceLoader == null){
-            throw new ModelInitException("No resource loader set on model 
context");
-        }
-
-        // Initialize the component type
-        ComponentType componentType = getComponentType();
-        if (componentType == null) {
-            try {
-                componentType = createComponentType(modelContext);
-            } catch (IOException e) {
-                throw new ModelInitException("Error retrieving component type 
file",e);
-            }
-            setComponentType(componentType);
-        }
-
-        super.initialize(modelContext);
-
+    public ResourceLoader getResourceLoader() {
+        return resourceLoader;
     }
 
     public String getScriptFile() {
@@ -90,51 +63,11 @@
         this.style = style;
     }
 
-    public String getScript() throws ModelInitException {
-        if (scriptCode != null) {
-            return scriptCode;
-        }
-        try {
-            URL url = resourceLoader.getResource(getScriptFile());
-            if (url == null) {
-                ModelInitException ce = new ModelInitException("Script not 
found");
-                ce.setIdentifier(getScriptFile());
-                throw ce;
-            }
-            InputStream inputStream = url.openStream();
-            try {
-                StringBuffer sb = new StringBuffer();
-                int n = 0;
-                while ((n = inputStream.read()) != -1) {
-                    sb.append((char) n);
-                }
-                scriptCode = sb.toString();
-                return scriptCode;
-            } finally {
-                inputStream.close();
-            }
-        } catch (IOException e) {
-            ModelInitException ce = new ModelInitException("Error reading 
script file",e);
-            ce.setIdentifier(getScriptFile());
-            throw ce;
-        }
-    }
-
-    /**
-     * Create the component type
-     * 
-     * @param modelContext
-     * @param implementationClass
-     */
-    private ComponentType createComponentType(AssemblyModelContext 
modelContext) throws IOException{
-        String prefix = scriptFile.substring(0,scriptFile.lastIndexOf('.'));
-        URL componentTypeFile = resourceLoader.getResource(prefix + 
".componentType");
-        if (componentTypeFile != null) {
-            return 
modelContext.getAssemblyLoader().loadComponentType(componentTypeFile.toString());
-        } else {
-            // TODO we could introspect the JavaScript source
-            return modelContext.getAssemblyFactory().createComponentType();
-        }
+    public String getScript() {
+        return script;
     }
 
+    public void setScript(String script) {
+        this.script = script;
+    }
 }

Modified: 
incubator/tuscany/java/sca/containers/container.js/src/main/java/org/apache/tuscany/container/js/builder/JavaScriptContextFactoryBuilder.java
URL: 
http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/containers/container.js/src/main/java/org/apache/tuscany/container/js/builder/JavaScriptContextFactoryBuilder.java?rev=391882&r1=391881&r2=391882&view=diff
==============================================================================
--- 
incubator/tuscany/java/sca/containers/container.js/src/main/java/org/apache/tuscany/container/js/builder/JavaScriptContextFactoryBuilder.java
 (original)
+++ 
incubator/tuscany/java/sca/containers/container.js/src/main/java/org/apache/tuscany/container/js/builder/JavaScriptContextFactoryBuilder.java
 Wed Apr  5 19:40:30 2006
@@ -22,12 +22,13 @@
 import java.util.List;
 import java.util.Map;
 
+import commonj.sdo.helper.TypeHelper;
+import org.osoa.sca.annotations.Init;
+
 import org.apache.tuscany.container.js.assembly.JavaScriptImplementation;
-import 
org.apache.tuscany.container.js.assembly.impl.JavaScriptImplementationImpl;
 import org.apache.tuscany.container.js.config.JavaScriptContextFactory;
 import org.apache.tuscany.container.js.rhino.RhinoE4XScript;
 import org.apache.tuscany.container.js.rhino.RhinoScript;
-import org.apache.tuscany.core.builder.BuilderConfigException;
 import org.apache.tuscany.core.builder.BuilderException;
 import org.apache.tuscany.core.builder.ContextFactoryBuilder;
 import org.apache.tuscany.core.context.AggregateContext;
@@ -46,14 +47,10 @@
 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.ModelInitException;
 import org.apache.tuscany.model.assembly.Scope;
 import org.apache.tuscany.model.assembly.Service;
 import org.apache.tuscany.model.assembly.ServiceContract;
 import org.apache.tuscany.model.assembly.SimpleComponent;
-import org.osoa.sca.annotations.Init;
-
-import commonj.sdo.helper.TypeHelper;
 
 /**
  * Builds [EMAIL PROTECTED] 
org.apache.tuscany.container.js.config.JavaScriptContextFactory}s from a 
JavaScript
@@ -139,14 +136,8 @@
             defaultProperties.put(property.getName(), 
property.getDefaultValue());
         }
 
-        // TODO: avoid casting to JavaScriptImplementationImpl
-               String script;
-           try {
-               script = ((JavaScriptImplementationImpl) impl).getScript();
-           } catch (ModelInitException e) {
-               throw new BuilderConfigException(e);
-           }
-        ClassLoader cl = ((JavaScriptImplementationImpl) 
impl).getResourceLoader().getClassLoader();
+               String script = impl.getScript();
+        ClassLoader cl = impl.getResourceLoader().getClassLoader();
         
         RhinoScript invoker;
         if ("e4x".equalsIgnoreCase(impl.getStyle())) {  // TODO is constant 
"e4x" somewhere?
@@ -197,7 +188,7 @@
                        referenceBuilder.build(configuredService);
                    }
                    // add tail interceptor
-                   for (InvocationConfiguration iConfig : 
(Collection<InvocationConfiguration>) iConfigMap.values()) {
+                   for (InvocationConfiguration iConfig : iConfigMap.values()) 
{
                        iConfig.addTargetInterceptor(new InvokerInterceptor());
                    }
                    config.addTargetProxyFactory(service.getName(), 
proxyFactory);
@@ -218,7 +209,7 @@
                        String targetCompName = 
reference.getTargetConfiguredServices().get(0).getAggregatePart().getName();
                        String targetSerivceName = 
reference.getTargetConfiguredServices().get(0).getService().getName();
 
-                       QualifiedName qName = new QualifiedName(targetCompName 
+ "/" + targetSerivceName);
+                       QualifiedName qName = new QualifiedName(targetCompName 
+ '/' + targetSerivceName);
                 ProxyConfiguration pConfiguration = new 
ProxyConfiguration(reference.getReference().getName(), qName,
                         iConfigMap, interfaze.getInterface().getClassLoader(), 
msgFactory);
                        
proxyFactory.setBusinessInterface(interfaze.getInterface());

Modified: 
incubator/tuscany/java/sca/containers/container.js/src/main/java/org/apache/tuscany/container/js/loader/JavaScriptImplementationLoader.java
URL: 
http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/containers/container.js/src/main/java/org/apache/tuscany/container/js/loader/JavaScriptImplementationLoader.java?rev=391882&r1=391881&r2=391882&view=diff
==============================================================================
--- 
incubator/tuscany/java/sca/containers/container.js/src/main/java/org/apache/tuscany/container/js/loader/JavaScriptImplementationLoader.java
 (original)
+++ 
incubator/tuscany/java/sca/containers/container.js/src/main/java/org/apache/tuscany/container/js/loader/JavaScriptImplementationLoader.java
 Wed Apr  5 19:40:30 2006
@@ -16,9 +16,13 @@
  */
 package org.apache.tuscany.container.js.loader;
 
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URL;
 import javax.xml.namespace.QName;
 import javax.xml.stream.XMLStreamException;
 import javax.xml.stream.XMLStreamReader;
+import javax.xml.stream.XMLInputFactory;
 
 import org.osoa.sca.annotations.Destroy;
 import org.osoa.sca.annotations.Init;
@@ -31,7 +35,9 @@
 import org.apache.tuscany.core.config.ConfigurationLoadException;
 import org.apache.tuscany.core.loader.StAXElementLoader;
 import org.apache.tuscany.core.loader.StAXLoaderRegistry;
+import org.apache.tuscany.core.loader.assembly.AssemblyConstants;
 import org.apache.tuscany.core.system.annotation.Autowire;
+import org.apache.tuscany.model.assembly.ComponentType;
 
 /**
  * @version $Rev$ $Date$
@@ -44,6 +50,13 @@
 
     protected StAXLoaderRegistry registry;
 
+    private XMLInputFactory xmlFactory;
+
+    public JavaScriptImplementationLoader() {
+        // todo make this a reference to a system service
+        xmlFactory = XMLInputFactory.newInstance();
+    }
+
     @Autowire
     public void setRegistry(StAXLoaderRegistry registry) {
         this.registry = registry;
@@ -63,14 +76,93 @@
         return IMPLEMENTATION_JS;
     }
 
-    public Class getModelType() {
+    public Class<JavaScriptImplementation> getModelType() {
         return JavaScriptImplementation.class;
     }
 
     public JavaScriptImplementation load(XMLStreamReader reader, 
ResourceLoader resourceLoader) throws XMLStreamException, 
ConfigurationLoadException {
+        String scriptFile = reader.getAttributeValue(null, "scriptFile");
+        String style = reader.getAttributeValue(null, "style");
+        String script = loadScript(scriptFile, resourceLoader);
+        ComponentType componentType = loadComponentType(scriptFile, 
resourceLoader);
+
         JavaScriptImplementation jsImpl = 
factory.createJavaScriptImplementation();
-        jsImpl.setScriptFile(reader.getAttributeValue(null, "scriptFile"));
-        jsImpl.setStyle(reader.getAttributeValue(null, "style"));
+        jsImpl.setComponentType(componentType);
+        jsImpl.setScriptFile(scriptFile);
+        jsImpl.setStyle(style);
+        jsImpl.setScript(script);
+        jsImpl.setResourceLoader(resourceLoader);
         return jsImpl;
+    }
+
+    protected String loadScript(String scriptFile, ResourceLoader 
resourceLoader) throws ConfigurationLoadException {
+        URL url = resourceLoader.getResource(scriptFile);
+        if (url == null) {
+            throw new ConfigurationLoadException(scriptFile);
+        }
+        InputStream inputStream;
+        try {
+            inputStream = url.openStream();
+        } catch (IOException e) {
+            throw new ConfigurationLoadException(scriptFile, e);
+        }
+        try {
+            StringBuilder sb = new StringBuilder(1024);
+            int n;
+            while ((n = inputStream.read()) != -1) {
+                sb.append((char) n);
+            }
+            return sb.toString();
+        } catch (IOException e) {
+            throw new ConfigurationLoadException(scriptFile, e);
+        } finally {
+            try {
+                inputStream.close();
+            } catch (IOException e) {
+                // ignore
+            }
+        }
+    }
+
+    protected ComponentType loadComponentType(String scriptFile, 
ResourceLoader resourceLoader) throws ConfigurationLoadException, 
XMLStreamException {
+        String sidefile = scriptFile.substring(0, scriptFile.lastIndexOf('.')) 
+ ".componentType";
+        URL componentTypeFile = resourceLoader.getResource(sidefile);
+        if (componentTypeFile == null) {
+            throw new ConfigurationLoadException(sidefile);
+        }
+
+        XMLStreamReader reader;
+        InputStream is;
+        try {
+            is = componentTypeFile.openStream();
+        } catch (IOException e) {
+            throw (ConfigurationLoadException) new 
ConfigurationLoadException(e.getMessage()).initCause(e);
+        }
+        try {
+            try {
+                reader = xmlFactory.createXMLStreamReader(is);
+            } catch (XMLStreamException e) {
+                throw (ConfigurationLoadException) new 
ConfigurationLoadException(e.getMessage()).initCause(e);
+            }
+            try {
+                reader.nextTag();
+                if 
(!AssemblyConstants.COMPONENT_TYPE.equals(reader.getName())) {
+                    throw new ConfigurationLoadException(sidefile + " is not a 
<componentType> document");
+                }
+                return (ComponentType) registry.load(reader, resourceLoader);
+            } finally{
+                try {
+                    reader.close();
+                } catch (XMLStreamException e) {
+                    // ignore
+                }
+            }
+        } finally{
+            try {
+                is.close();
+            } catch (IOException e) {
+                // ignore
+            }
+        }
     }
 }

Modified: 
incubator/tuscany/java/sca/containers/container.js/src/test/java/org/apache/tuscany/container/js/mock/MockAssemblyFactory.java
URL: 
http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/containers/container.js/src/test/java/org/apache/tuscany/container/js/mock/MockAssemblyFactory.java?rev=391882&r1=391881&r2=391882&view=diff
==============================================================================
--- 
incubator/tuscany/java/sca/containers/container.js/src/test/java/org/apache/tuscany/container/js/mock/MockAssemblyFactory.java
 (original)
+++ 
incubator/tuscany/java/sca/containers/container.js/src/test/java/org/apache/tuscany/container/js/mock/MockAssemblyFactory.java
 Wed Apr  5 19:40:30 2006
@@ -16,6 +16,9 @@
  */
 package org.apache.tuscany.container.js.mock;
 
+import java.io.InputStream;
+import java.io.IOException;
+
 import org.apache.tuscany.container.js.assembly.JavaScriptAssemblyFactory;
 import org.apache.tuscany.container.js.assembly.JavaScriptImplementation;
 import 
org.apache.tuscany.container.js.assembly.impl.JavaScriptAssemblyFactoryImpl;
@@ -31,6 +34,7 @@
 import org.apache.tuscany.model.assembly.SimpleComponent;
 import org.apache.tuscany.model.assembly.impl.AssemblyModelContextImpl;
 import org.apache.tuscany.model.types.java.JavaServiceContract;
+import org.apache.tuscany.common.resource.impl.ResourceLoaderImpl;
 
 /**
  * Generates test components and module assemblies
@@ -48,6 +52,8 @@
         JavaScriptImplementation impl = 
factory.createJavaScriptImplementation();
         impl.setComponentType(factory.createComponentType());
         impl.setScriptFile(scriptFile);
+        
impl.setScript(readScript(type.getClassLoader().getResourceAsStream(scriptFile)));
+        impl.setResourceLoader(new ResourceLoaderImpl(type.getClassLoader()));
         sc.setComponentImplementation(impl);
         Service s = factory.createService();
         String serviceName = 
type.getName().substring(type.getName().lastIndexOf('.')+1);
@@ -87,5 +93,19 @@
         sc.setName(name);
         sc.setComponentImplementation(impl);
         return sc;
+    }
+
+    private static String readScript(InputStream is) {
+        try {
+            StringBuilder sb = new StringBuilder(1024);
+            int n;
+            while ((n = is.read()) != -1) {
+                sb.append((char) n);
+            }
+            is.close();
+            return sb.toString();
+        } catch (IOException e) {
+            throw new AssertionError();
+        }
     }
 }

Modified: 
incubator/tuscany/java/sca/containers/container.js/src/test/java/org/apache/tuscany/container/js/mock/MockModuleFactory.java
URL: 
http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/containers/container.js/src/test/java/org/apache/tuscany/container/js/mock/MockModuleFactory.java?rev=391882&r1=391881&r2=391882&view=diff
==============================================================================
--- 
incubator/tuscany/java/sca/containers/container.js/src/test/java/org/apache/tuscany/container/js/mock/MockModuleFactory.java
 (original)
+++ 
incubator/tuscany/java/sca/containers/container.js/src/test/java/org/apache/tuscany/container/js/mock/MockModuleFactory.java
 Wed Apr  5 19:40:30 2006
@@ -79,36 +79,4 @@
         module.initialize(assemblyContext);
         return module;
     }
-
-    // public static Module createModule() throws Exception {
-    // Component sourceComponent =
-    // 
MockAssemblyFactory.createComponent("source","org/apache/tuscany/container/js/assembly/mock/HelloWorldImpl.js",HelloWorldService.class.getCanonicalName(),ScopeEnum.MODULE_LITERAL);
-    // Component targetComponent =
-    // 
MockAssemblyFactory.createComponent("target","org/apache/tuscany/container/js/assembly/mock/HelloWorldImpl.js",HelloWorldService.class.getCanonicalName(),ScopeEnum.MODULE_LITERAL);
-    // PojoReference ref = new PojoReference();
-    // PojoConfiguredReference cref = new PojoConfiguredReference();
-    // ref.setName("helloWorld");
-    // PojoInterface inter = new PojoJavaInterface();
-    // PojoInterfaceType type = new PojoInterfaceType();
-    // type.setInstanceClass(HelloWorldService.class);
-    // PojoOperationType oType = new PojoOperationType();
-    // oType.setName("hello");
-    // SDOType inputType = new SDOType("String","",String.class,null);
-    // oType.setInputType(inputType);
-    // type.addOperationType(oType);
-    // inter.setInterfaceType(type);
-    // ref.setInterfaceContract(inter);
-    // cref.setReference(ref);
-    // cref.setPart(targetComponent);
-    // PojoPort port = new PojoPort();
-    // port.setName("HelloWorldService");
-    // cref.setPort(port);
-    // sourceComponent.getConfiguredReferences().add(cref);
-    // PojoModule module = new PojoModule();
-    // module.setName("test.module");
-    // module.addComponent(sourceComponent);
-    // module.addComponent(targetComponent);
-    // return module;
-    // }
-
 }


Reply via email to