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;
- // }
-
}