Author: antelder
Date: Sun Jul 30 02:31:46 2006
New Revision: 426880

URL: http://svn.apache.org/viewvc?rev=426880&view=rev
Log:
Flesh out the impl so that the helloworld sample runs (almost). The problems 
were mainly due to problems with the JavaScriptComponentType and 
JavaScriptImplementation classes.
This still wont run a sample without manually hacking the Launcher to add 
JavaScript to the system.scdl 

Added:
    
incubator/tuscany/java/sca/containers/container.javascript/src/main/java/org/apache/tuscany/container/javascript/JavaScriptComponentTypeLoader.java
Modified:
    
incubator/tuscany/java/sca/containers/container.javascript/src/main/java/org/apache/tuscany/container/javascript/JavaScriptComponentBuilder.java
    
incubator/tuscany/java/sca/containers/container.javascript/src/main/java/org/apache/tuscany/container/javascript/JavaScriptImplementation.java
    
incubator/tuscany/java/sca/containers/container.javascript/src/main/java/org/apache/tuscany/container/javascript/JavaScriptImplementationLoader.java

Modified: 
incubator/tuscany/java/sca/containers/container.javascript/src/main/java/org/apache/tuscany/container/javascript/JavaScriptComponentBuilder.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/containers/container.javascript/src/main/java/org/apache/tuscany/container/javascript/JavaScriptComponentBuilder.java?rev=426880&r1=426879&r2=426880&view=diff
==============================================================================
--- 
incubator/tuscany/java/sca/containers/container.javascript/src/main/java/org/apache/tuscany/container/javascript/JavaScriptComponentBuilder.java
 (original)
+++ 
incubator/tuscany/java/sca/containers/container.javascript/src/main/java/org/apache/tuscany/container/javascript/JavaScriptComponentBuilder.java
 Sun Jul 30 02:31:46 2006
@@ -18,8 +18,6 @@
 
 /**
  * Extension point for creating [EMAIL PROTECTED] JavaScriptComponent}s from 
an assembly configuration
- *
- * @version $$Rev: 424027 $$ $$Date: 2006-07-20 20:26:20 +0100 (Thu, 20 Jul 
2006) $$
  */
 public class JavaScriptComponentBuilder extends 
ComponentBuilderExtension<JavaScriptImplementation> {
 
@@ -28,11 +26,8 @@
     }
 
     @SuppressWarnings("unchecked")
-    public Component<?> build(CompositeComponent<?> parent,
-                              ComponentDefinition<JavaScriptImplementation> 
componentDefinition,
-                              DeploymentContext deploymentContext)
-            throws BuilderConfigException {
-
+    public Component<?> build(CompositeComponent<?> parent, 
ComponentDefinition<JavaScriptImplementation> componentDefinition,
+            DeploymentContext deploymentContext) throws BuilderConfigException 
{
 
         String name = componentDefinition.getName();
         JavaScriptImplementation implementation = 
componentDefinition.getImplementation();
@@ -45,12 +40,15 @@
             
services.add(serviceDefinition.getServiceContract().getInterfaceClass());
         }
 
-
         String script = implementation.getScript();
         RhinoScript rhinoScript = new RhinoScript(name, script);
 
+        //TODO properties
         Map<String, Object> properties = new HashMap<String, Object>();
-        ScopeContainer scopeContainer = 
scopeRegistry.getScopeContainer(componentType.getLifecycleScope());
+
+        // TODO scopes
+        // ScopeContainer scopeContainer = 
scopeRegistry.getScopeContainer(componentType.getLifecycleScope());
+        ScopeContainer scopeContainer = deploymentContext.getModuleScope(); 
 
         return new JavaScriptComponent(name, rhinoScript, services, 
properties, parent, scopeContainer, wireService);
     }

Added: 
incubator/tuscany/java/sca/containers/container.javascript/src/main/java/org/apache/tuscany/container/javascript/JavaScriptComponentTypeLoader.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/containers/container.javascript/src/main/java/org/apache/tuscany/container/javascript/JavaScriptComponentTypeLoader.java?rev=426880&view=auto
==============================================================================
--- 
incubator/tuscany/java/sca/containers/container.javascript/src/main/java/org/apache/tuscany/container/javascript/JavaScriptComponentTypeLoader.java
 (added)
+++ 
incubator/tuscany/java/sca/containers/container.javascript/src/main/java/org/apache/tuscany/container/javascript/JavaScriptComponentTypeLoader.java
 Sun Jul 30 02:31:46 2006
@@ -0,0 +1,106 @@
+/**
+ *
+ * Copyright 2006 The Apache Software Foundation
+ *
+ *  Licensed under the Apache License, Version 2.0 (the "License");
+ *  you may not use this file except in compliance with the License.
+ *  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ */
+package org.apache.tuscany.container.javascript;
+
+import java.net.URL;
+
+import org.apache.tuscany.core.implementation.IntrospectionRegistry;
+import org.apache.tuscany.core.implementation.JavaServiceContract;
+import org.apache.tuscany.core.implementation.ProcessingException;
+import org.apache.tuscany.spi.annotation.Autowire;
+import org.apache.tuscany.spi.component.CompositeComponent;
+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.LoaderRegistry;
+import org.apache.tuscany.spi.model.ServiceContract;
+import org.apache.tuscany.spi.model.ServiceDefinition;
+import org.osoa.sca.annotations.Constructor;
+
+/**
+ * @version $Rev: 423297 $ $Date: 2006-07-19 00:56:32 +0100 (Wed, 19 Jul 2006) 
$
+ */
+public class JavaScriptComponentTypeLoader extends 
ComponentTypeLoaderExtension<JavaScriptImplementation> {
+    // private Introspector introspector;
+
+    @Constructor( { "registry", "introspector" })
+    public JavaScriptComponentTypeLoader(@Autowire LoaderRegistry 
loaderRegistry, @Autowire IntrospectionRegistry introspector) {
+        super(loaderRegistry);
+        // this.introspector = introspector;
+    }
+
+    @Override
+    protected Class<JavaScriptImplementation> getImplementationClass() {
+        return JavaScriptImplementation.class;
+    }
+
+    public void load(CompositeComponent<?> parent, JavaScriptImplementation 
implementation, DeploymentContext deploymentContext)
+            throws LoaderException {
+        String scriptName = implementation.getScriptName();
+        URL resource = 
implementation.getClassLoader().getResource(getBaseName(scriptName) + 
".componentType");
+        if (resource == null) {
+            throw new RuntimeException("can't find .componentType side file 
for " + getBaseName(scriptName));
+        }
+
+        JavaScriptComponentType componentType = 
createDummyComponentType(implementation);
+        // if (resource == null) {
+        // componentType = loadByIntrospection(parent, implementation, 
deploymentContext);
+        // } else {
+        // componentType = loadFromSidefile(resource, deploymentContext);
+        // }
+
+        implementation.setComponentType(componentType);
+    }
+
+    @SuppressWarnings("unchecked")
+    private JavaScriptComponentType 
createDummyComponentType(JavaScriptImplementation implementation) {
+        JavaScriptComponentType componentType = new JavaScriptComponentType();
+        ServiceDefinition service = new ServiceDefinition();
+        ServiceContract sc = new JavaServiceContract();
+        try {
+            sc.setInterfaceClass(Class.forName("helloworld.HelloWorldService", 
true, implementation.getClassLoader()));
+        } catch (ClassNotFoundException e) {
+            throw new RuntimeException(e);
+        }
+        service.setServiceContract(sc);
+        componentType.add(service);
+        return componentType;
+    }
+
+    protected JavaScriptComponentType 
loadByIntrospection(CompositeComponent<?> parent, JavaScriptImplementation 
implementation,
+            DeploymentContext deploymentContext) throws ProcessingException {
+        // PojoComponentType componentType = new PojoComponentType();
+        // Class<?> implClass = implementation.getImplementationClass();
+        // introspector.introspect(parent, implClass, componentType, 
deploymentContext);
+        // return componentType;
+        return null;
+    }
+
+    protected JavaScriptComponentType loadFromSidefile(URL url, 
DeploymentContext deploymentContext) throws LoaderException {
+        return loaderRegistry.load(null, url, JavaScriptComponentType.class, 
deploymentContext);
+    }
+
+    private String getBaseName(String scriptName) {
+        String baseName = scriptName;
+        int lastDot = baseName.lastIndexOf('.');
+        if (lastDot != -1) {
+            baseName = baseName.substring(0, lastDot);
+        }
+        return baseName;
+    }
+
+}

Modified: 
incubator/tuscany/java/sca/containers/container.javascript/src/main/java/org/apache/tuscany/container/javascript/JavaScriptImplementation.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/containers/container.javascript/src/main/java/org/apache/tuscany/container/javascript/JavaScriptImplementation.java?rev=426880&r1=426879&r2=426880&view=diff
==============================================================================
--- 
incubator/tuscany/java/sca/containers/container.javascript/src/main/java/org/apache/tuscany/container/javascript/JavaScriptImplementation.java
 (original)
+++ 
incubator/tuscany/java/sca/containers/container.javascript/src/main/java/org/apache/tuscany/container/javascript/JavaScriptImplementation.java
 Sun Jul 30 02:31:46 2006
@@ -24,6 +24,9 @@
 public class JavaScriptImplementation extends 
AtomicImplementation<JavaScriptComponentType> {
 
     private String script;
+    private String scriptName;
+    private ClassLoader cl;
+    private JavaScriptComponentType componentType;
 
     /**
      * Returns the JavaScript source to be executed.
@@ -39,4 +42,27 @@
         this.script = script;
     }
 
+    public JavaScriptComponentType getComponentType() {
+        return componentType;
+    }
+
+    public void setComponentType(JavaScriptComponentType componentType) {
+        this.componentType =  componentType;
+    }
+
+    public String getScriptName() {
+        return scriptName;
+    }
+
+    public void setScriptName(String scriptName) {
+        this.scriptName = scriptName;
+    }
+
+    public ClassLoader getClassLoader() {
+        return cl;
+    }
+
+    public void setClassLoader(ClassLoader cl) {
+        this.cl = cl;
+    }
 }

Modified: 
incubator/tuscany/java/sca/containers/container.javascript/src/main/java/org/apache/tuscany/container/javascript/JavaScriptImplementationLoader.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/containers/container.javascript/src/main/java/org/apache/tuscany/container/javascript/JavaScriptImplementationLoader.java?rev=426880&r1=426879&r2=426880&view=diff
==============================================================================
--- 
incubator/tuscany/java/sca/containers/container.javascript/src/main/java/org/apache/tuscany/container/javascript/JavaScriptImplementationLoader.java
 (original)
+++ 
incubator/tuscany/java/sca/containers/container.javascript/src/main/java/org/apache/tuscany/container/javascript/JavaScriptImplementationLoader.java
 Sun Jul 30 02:31:46 2006
@@ -25,6 +25,7 @@
 import javax.xml.stream.XMLStreamException;
 import javax.xml.stream.XMLStreamReader;
 
+import org.apache.tuscany.spi.annotation.Autowire;
 import org.apache.tuscany.spi.component.CompositeComponent;
 import org.apache.tuscany.spi.deployer.DeploymentContext;
 import org.apache.tuscany.spi.extension.LoaderExtension;
@@ -32,14 +33,16 @@
 import org.apache.tuscany.spi.loader.LoaderRegistry;
 import org.apache.tuscany.spi.loader.LoaderUtil;
 import org.apache.tuscany.spi.loader.MissingResourceException;
+import org.osoa.sca.annotations.Constructor;
 
 /**
- * Loader for handling JavaScript <js:implementation> elements.
+ * Loader for handling JavaScript <js:implementation.js> elements.
  */
 public class JavaScriptImplementationLoader extends 
LoaderExtension<JavaScriptImplementation> {
-    private static final QName IMPLEMENTATION_JAVASCRIPT = new 
QName("http://tuscany.apache.org/xmlns/js/1.0";, "implementation");
+    private static final QName IMPLEMENTATION_JAVASCRIPT = new 
QName("http://tuscany.apache.org/xmlns/js/1.0";, "implementation.js");
 
-    public JavaScriptImplementationLoader(LoaderRegistry registry) {
+    @Constructor({"registry"})
+    public JavaScriptImplementationLoader(@Autowire LoaderRegistry registry) {
         super(registry);
     }
 
@@ -54,12 +57,16 @@
         if (script == null) {
             throw new MissingResourceException("No script supplied");
         }
-        String source = loadSource(deploymentContext.getClassLoader(), script);
+        
+        ClassLoader cl = deploymentContext.getClassLoader();
+        String source = loadSource(cl, script);
 
         LoaderUtil.skipToEndElement(reader);
 
         JavaScriptImplementation implementation = new 
JavaScriptImplementation();
         implementation.setScript(source);
+        implementation.setScriptName(script);
+        implementation.setClassLoader(cl);
         registry.loadComponentType(parent, implementation, deploymentContext);
         return implementation;
     }



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to