summaryrefslogtreecommitdiffstats
path: root/sca-java-1.x/tags/java-stable-20060304/sca/container.java/src/main/java/org/apache/tuscany/container/java/loader/JavaSCDLModelLoader.java
diff options
context:
space:
mode:
Diffstat (limited to 'sca-java-1.x/tags/java-stable-20060304/sca/container.java/src/main/java/org/apache/tuscany/container/java/loader/JavaSCDLModelLoader.java')
-rw-r--r--sca-java-1.x/tags/java-stable-20060304/sca/container.java/src/main/java/org/apache/tuscany/container/java/loader/JavaSCDLModelLoader.java81
1 files changed, 81 insertions, 0 deletions
diff --git a/sca-java-1.x/tags/java-stable-20060304/sca/container.java/src/main/java/org/apache/tuscany/container/java/loader/JavaSCDLModelLoader.java b/sca-java-1.x/tags/java-stable-20060304/sca/container.java/src/main/java/org/apache/tuscany/container/java/loader/JavaSCDLModelLoader.java
new file mode 100644
index 0000000000..e1c50a9ff4
--- /dev/null
+++ b/sca-java-1.x/tags/java-stable-20060304/sca/container.java/src/main/java/org/apache/tuscany/container/java/loader/JavaSCDLModelLoader.java
@@ -0,0 +1,81 @@
+package org.apache.tuscany.container.java.loader;
+
+import org.apache.tuscany.container.java.assembly.JavaAssemblyFactory;
+import org.apache.tuscany.container.java.assembly.JavaImplementation;
+import org.apache.tuscany.container.java.assembly.impl.JavaAssemblyFactoryImpl;
+import org.apache.tuscany.core.loader.SCDLModelLoaderRegistry;
+import org.apache.tuscany.core.runtime.RuntimeContext;
+import org.apache.tuscany.core.system.annotation.Autowire;
+import org.apache.tuscany.model.assembly.AssemblyModelContext;
+import org.apache.tuscany.model.assembly.AssemblyModelObject;
+import org.apache.tuscany.model.scdl.loader.SCDLModelLoader;
+import org.osoa.sca.annotations.Destroy;
+import org.osoa.sca.annotations.Init;
+
+/**
+ * Populates the assembly model from an SCDL model
+ */
+@org.osoa.sca.annotations.Scope("MODULE")
+public class JavaSCDLModelLoader implements SCDLModelLoader {
+
+ private RuntimeContext runtimeContext;
+ private SCDLModelLoaderRegistry loaderRegistry;
+ private JavaAssemblyFactory javaFactory;
+
+ /**
+ * Constructs a new JavaSCDLModelLoader.
+ */
+ public JavaSCDLModelLoader() {
+ this.javaFactory=new JavaAssemblyFactoryImpl();
+ }
+
+ /**
+ * @param runtimeContext The runtimeContext to set.
+ */
+ @Autowire
+ public void setRuntimeContext(RuntimeContext runtimeContext) {
+ this.runtimeContext = runtimeContext;
+ }
+
+// @Reference
+ public void setLoaderRegistry(SCDLModelLoaderRegistry registry) {
+ this.loaderRegistry = registry;
+ }
+
+ @Init(eager=true)
+ public void init() {
+ runtimeContext.addLoader(this);
+// loaderRegistry.registerLoader(this);
+ }
+
+ @Destroy
+ public void destroy() {
+// loaderRegistry.unregisterLoader(this);
+ }
+
+ /**
+ * @see org.apache.tuscany.model.scdl.loader.SCDLModelLoader#load(org.apache.tuscany.model.assembly.AssemblyModelContext, java.lang.Object)
+ */
+ public AssemblyModelObject load(AssemblyModelContext modelContext, Object object) {
+ if (object instanceof org.apache.tuscany.model.scdl.JavaImplementation) {
+ org.apache.tuscany.model.scdl.JavaImplementation scdlJavaImplementation=(org.apache.tuscany.model.scdl.JavaImplementation)object;
+ JavaImplementation implementation=javaFactory.createJavaImplementation();
+
+ //FIXME Temp set the current app classloader on the class to load the impl class
+ ClassLoader ccl=Thread.currentThread().getContextClassLoader();
+ Class implementationClass;
+ try {
+ Thread.currentThread().setContextClassLoader(modelContext.getApplicationResourceLoader().getClassLoader());
+ implementationClass=modelContext.getApplicationResourceLoader().loadClass(scdlJavaImplementation.getClass_());
+ } catch (ClassNotFoundException e) {
+ throw new IllegalArgumentException(e);
+ } finally {
+ Thread.currentThread().setContextClassLoader(ccl);
+ }
+ implementation.setImplementationClass(implementationClass);
+
+ return implementation;
+ } else
+ return null;
+ }
+}