You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuscany.apache.org by an...@apache.org on 2007/04/11 16:46:44 UTC

svn commit: r527508 - in /incubator/tuscany/java/sca/modules/implementation-script/src: main/java/org/apache/tuscany/implementation/script/ test/resources/ test/resources/org.apache.tuscany.implementation.script.itests.javascript/

Author: antelder
Date: Wed Apr 11 07:46:43 2007
New Revision: 527508

URL: http://svn.apache.org/viewvc?view=rev&rev=527508
Log:
Attempt at supporting .componentType sidefiles for scipt components

Added:
    incubator/tuscany/java/sca/modules/implementation-script/src/test/resources/helloworld.componentType
      - copied unchanged from r527480, incubator/tuscany/java/sca/modules/implementation-script/src/test/resources/org.apache.tuscany.implementation.script.itests.javascript/helloworld.componentType
    incubator/tuscany/java/sca/modules/implementation-script/src/test/resources/helloworld.js
      - copied unchanged from r527480, incubator/tuscany/java/sca/modules/implementation-script/src/test/resources/org.apache.tuscany.implementation.script.itests.javascript/helloworld.js
Removed:
    incubator/tuscany/java/sca/modules/implementation-script/src/test/resources/org.apache.tuscany.implementation.script.itests.javascript/helloworld.componentType
    incubator/tuscany/java/sca/modules/implementation-script/src/test/resources/org.apache.tuscany.implementation.script.itests.javascript/helloworld.js
Modified:
    incubator/tuscany/java/sca/modules/implementation-script/src/main/java/org/apache/tuscany/implementation/script/ScriptArtifactProcessor.java
    incubator/tuscany/java/sca/modules/implementation-script/src/main/java/org/apache/tuscany/implementation/script/ScriptComponent.java
    incubator/tuscany/java/sca/modules/implementation-script/src/main/java/org/apache/tuscany/implementation/script/ScriptImplementation.java

Modified: incubator/tuscany/java/sca/modules/implementation-script/src/main/java/org/apache/tuscany/implementation/script/ScriptArtifactProcessor.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/implementation-script/src/main/java/org/apache/tuscany/implementation/script/ScriptArtifactProcessor.java?view=diff&rev=527508&r1=527507&r2=527508
==============================================================================
--- incubator/tuscany/java/sca/modules/implementation-script/src/main/java/org/apache/tuscany/implementation/script/ScriptArtifactProcessor.java (original)
+++ incubator/tuscany/java/sca/modules/implementation-script/src/main/java/org/apache/tuscany/implementation/script/ScriptArtifactProcessor.java Wed Apr 11 07:46:43 2007
@@ -21,6 +21,10 @@
 
 import static javax.xml.stream.XMLStreamConstants.END_ELEMENT;
 
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.Reader;
 import java.net.URL;
 
 import javax.xml.namespace.QName;
@@ -28,6 +32,8 @@
 import javax.xml.stream.XMLStreamReader;
 import javax.xml.stream.XMLStreamWriter;
 
+import org.apache.tuscany.assembly.ComponentType;
+import org.apache.tuscany.assembly.impl.DefaultAssemblyFactory;
 import org.apache.tuscany.assembly.xml.Constants;
 import org.apache.tuscany.services.spi.contribution.ArtifactResolver;
 import org.apache.tuscany.services.spi.contribution.ContributionReadException;
@@ -49,9 +55,8 @@
 
         try {
 
-            ScriptImplementation scriptImplementation = new ScriptImplementation();
-            scriptImplementation.setUnresolved(true);
-            scriptImplementation.setName(reader.getAttributeValue(null, SCRIPT));
+            String scriptName = reader.getAttributeValue(null, SCRIPT);
+            ScriptImplementation scriptImplementation = new ScriptImplementation(scriptName);
 
             // Skip to end element
             while (reader.hasNext()) {
@@ -59,6 +64,9 @@
                     break;
                 }
             }
+
+            processComponentType(scriptImplementation);
+
             return scriptImplementation;
 
         } catch (XMLStreamException e) {
@@ -66,6 +74,22 @@
         }
     }
 
+    private void processComponentType(ScriptImplementation scriptImplementation) {
+        // Form the URI of the expected .componentType file;
+
+        String ctName = scriptImplementation.getName();
+        int lastDot = ctName.lastIndexOf('.');
+        ctName = ctName.substring(0, lastDot) + ".componentType";
+        
+        String uri = ctName;
+
+        // Create a ComponentType and mark it unresolved
+        ComponentType componentType = new DefaultAssemblyFactory().createComponentType();
+        componentType.setURI(uri);
+        componentType.setUnresolved(true);
+        scriptImplementation.setComponentType(componentType);
+    }
+
     public void write(ScriptImplementation scriptImplementation, XMLStreamWriter writer) throws ContributionWriteException {
         try {
 
@@ -81,26 +105,14 @@
     }
 
     public void resolve(ScriptImplementation scriptImplementation, ArtifactResolver resolver) throws ContributionResolveException {
-        try {
 
-            // TODO: implement
-            URL scriptSrcUrl = Thread.currentThread().getContextClassLoader().getResource(scriptImplementation.getName());
-//            Class javaClass = Class.forName(scriptImplementation.getName(), true, Thread.currentThread().getContextClassLoader());
-//            scriptImplementation.setJavaClass(javaClass);
-//            
-//            //FIXME JavaImplementationDefinition should not be mandatory 
-//            if (scriptImplementation instanceof ScriptImplementationDefinition) {
-//                introspectionRegistry.introspect(scriptImplementation.getJavaClass(), (ScriptImplementationDefinition)scriptImplementation);
-//                
-//                //FIXME the introspector should always create at least one service
-//                if (scriptImplementation.getServices().isEmpty()) {
-//                    scriptImplementation.getServices().add(new ServiceImpl());
-//                }
-//            }
+        scriptImplementation.setScriptSrc(readScript(scriptImplementation.getName()));
 
-        } catch (Exception e) {
-            throw new ContributionResolveException(e);
+        ComponentType componentType = resolver.resolve(ComponentType.class, scriptImplementation.getComponentType());
+        if (componentType.isUnresolved()) {
+            throw new ContributionResolveException("missing .componentType side file");
         }
+        scriptImplementation.setComponentType(componentType);
     }
 
     public void wire(ScriptImplementation model) throws ContributionWireException {
@@ -113,6 +125,43 @@
 
     public Class<ScriptImplementation> getModelType() {
         return ScriptImplementation.class;
+    }
+
+    protected String readScript(String scriptName) throws ContributionResolveException {
+        ClassLoader cl = Thread.currentThread().getContextClassLoader();
+        URL scriptSrcUrl = cl.getResource(scriptName);
+        if (scriptSrcUrl == null) {
+            throw new ContributionResolveException("No script: " + scriptName);
+        }
+
+        InputStream is;
+        try {
+            is = scriptSrcUrl.openStream();
+        } catch (IOException e) {
+            throw new ContributionResolveException(e);
+        }
+
+        try {
+
+            Reader reader = new InputStreamReader(is, "UTF-8");
+            char[] buffer = new char[1024];
+            StringBuilder source = new StringBuilder();
+            int count;
+            while ((count = reader.read(buffer)) > 0) {
+                source.append(buffer, 0, count);
+            }
+
+            return source.toString();
+
+        } catch (IOException e) {
+            throw new ContributionResolveException(e);
+        } finally {
+            try {
+                is.close();
+            } catch (IOException e) {
+                // ignore
+            }
+        }
     }
 
 }

Modified: incubator/tuscany/java/sca/modules/implementation-script/src/main/java/org/apache/tuscany/implementation/script/ScriptComponent.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/implementation-script/src/main/java/org/apache/tuscany/implementation/script/ScriptComponent.java?view=diff&rev=527508&r1=527507&r2=527508
==============================================================================
--- incubator/tuscany/java/sca/modules/implementation-script/src/main/java/org/apache/tuscany/implementation/script/ScriptComponent.java (original)
+++ incubator/tuscany/java/sca/modules/implementation-script/src/main/java/org/apache/tuscany/implementation/script/ScriptComponent.java Wed Apr 11 07:46:43 2007
@@ -19,12 +19,9 @@
 
 package org.apache.tuscany.implementation.script;
 
-import java.io.IOException;
-import java.io.InputStreamReader;
 import java.io.Reader;
 import java.io.StringReader;
 import java.net.URI;
-import java.net.URL;
 import java.util.List;
 
 import javax.script.ScriptEngine;

Modified: incubator/tuscany/java/sca/modules/implementation-script/src/main/java/org/apache/tuscany/implementation/script/ScriptImplementation.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/implementation-script/src/main/java/org/apache/tuscany/implementation/script/ScriptImplementation.java?view=diff&rev=527508&r1=527507&r2=527508
==============================================================================
--- incubator/tuscany/java/sca/modules/implementation-script/src/main/java/org/apache/tuscany/implementation/script/ScriptImplementation.java (original)
+++ incubator/tuscany/java/sca/modules/implementation-script/src/main/java/org/apache/tuscany/implementation/script/ScriptImplementation.java Wed Apr 11 07:46:43 2007
@@ -18,6 +18,7 @@
  */
 package org.apache.tuscany.implementation.script;
 
+import org.apache.tuscany.assembly.ComponentType;
 import org.apache.tuscany.assembly.Implementation;
 import org.apache.tuscany.assembly.impl.ComponentTypeImpl;
 
@@ -28,16 +29,15 @@
 
     private String scriptName;
     private String scriptSrc;
+    private ComponentType componentType;
 
-    public String getName() {
-        return scriptName;
+    public ScriptImplementation(String scriptName) {
+        this.scriptName = scriptName;
+        setUnresolved(true);
     }
 
-    public void setName(String scriptName) {
-        if (!isUnresolved()) {
-            throw new IllegalStateException();
-        }
-        this.scriptName = scriptName;
+    public String getName() {
+        return scriptName;
     }
 
     public String getScriptSrc() {
@@ -48,6 +48,14 @@
         this.scriptSrc = scriptSrc;
     }
 
+    public ComponentType getComponentType() {
+        return componentType;
+    }
+
+    public void setComponentType(ComponentType componentType) {
+        this.componentType = componentType;
+    }
+
     @Override
     public int hashCode() {
         return String.valueOf(getName()).hashCode();
@@ -62,4 +70,5 @@
         else
             return false;
     }
+
 }



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