Author: svkrish
Date: Sat Nov  3 01:28:31 2007
New Revision: 591560

URL: http://svn.apache.org/viewvc?rev=591560&view=rev
Log:
applying patch submitted in https://issues.apache.org/jira/browse/TUSCANY-1887

Added:
    
incubator/tuscany/java/sca/modules/contribution-namespace/src/main/java/org/apache/tuscany/sca/contribution/namespace/impl/ResourceReferenceModelResolver.java
    
incubator/tuscany/java/sca/modules/contribution-osgi/src/main/java/org/apache/tuscany/sca/contribution/osgi/impl/OSGiResourceReferenceModelResolver.java
    
incubator/tuscany/java/sca/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/resolver/ResourceReference.java
Modified:
    
incubator/tuscany/java/sca/modules/assembly-xml/src/main/java/org/apache/tuscany/sca/assembly/xml/CompositeDocumentProcessor.java
    
incubator/tuscany/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/impl/PropertyUtil.java
    
incubator/tuscany/java/sca/modules/contribution-java/src/main/java/org/apache/tuscany/sca/contribution/java/impl/ClassReferenceModelResolver.java
    
incubator/tuscany/java/sca/modules/contribution-namespace/src/main/resources/META-INF/services/org.apache.tuscany.sca.contribution.resolver.ModelResolver
    
incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/impl/TransformationContextImpl.java
    
incubator/tuscany/java/sca/modules/extension-helper/src/main/java/org/apache/tuscany/sca/extension/helper/impl/PojoImplementation.java
    
incubator/tuscany/java/sca/modules/extension-helper/src/main/java/org/apache/tuscany/sca/extension/helper/utils/AbstractStAXArtifactProcessor.java
    
incubator/tuscany/java/sca/modules/extension-helper/src/main/java/org/apache/tuscany/sca/extension/helper/utils/ResourceHelper.java
    
incubator/tuscany/java/sca/modules/implementation-java-runtime/src/main/java/org/apache/tuscany/sca/implementation/java/invocation/JavaImplementationProvider.java
    
incubator/tuscany/java/sca/modules/implementation-script/src/main/java/org/apache/tuscany/sca/implementation/script/ScriptImplementation.java
    
incubator/tuscany/java/sca/modules/implementation-xquery/src/main/java/org/apache/tuscany/sca/implementation/xquery/XQueryImplementation.java
    
incubator/tuscany/java/sca/modules/implementation-xquery/src/main/java/org/apache/tuscany/sca/implementation/xquery/impl/XQueryImplementationImpl.java
    
incubator/tuscany/java/sca/modules/implementation-xquery/src/main/java/org/apache/tuscany/sca/implementation/xquery/xml/XQueryImplementationProcessor.java
    
incubator/tuscany/java/sca/modules/implementation-xquery/src/main/java/org/apache/tuscany/sca/implementation/xquery/xml/XQueryIntrospector.java

Modified: 
incubator/tuscany/java/sca/modules/assembly-xml/src/main/java/org/apache/tuscany/sca/assembly/xml/CompositeDocumentProcessor.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/assembly-xml/src/main/java/org/apache/tuscany/sca/assembly/xml/CompositeDocumentProcessor.java?rev=591560&r1=591559&r2=591560&view=diff
==============================================================================
--- 
incubator/tuscany/java/sca/modules/assembly-xml/src/main/java/org/apache/tuscany/sca/assembly/xml/CompositeDocumentProcessor.java
 (original)
+++ 
incubator/tuscany/java/sca/modules/assembly-xml/src/main/java/org/apache/tuscany/sca/assembly/xml/CompositeDocumentProcessor.java
 Sat Nov  3 01:28:31 2007
@@ -22,16 +22,20 @@
 import java.io.IOException;
 import java.io.InputStream;
 import java.net.URI;
+import java.net.URISyntaxException;
 import java.net.URL;
 
 import javax.xml.stream.XMLInputFactory;
 import javax.xml.stream.XMLStreamException;
 import javax.xml.stream.XMLStreamReader;
 
+import org.apache.tuscany.sca.assembly.Component;
+import org.apache.tuscany.sca.assembly.ComponentProperty;
 import org.apache.tuscany.sca.assembly.Composite;
 import org.apache.tuscany.sca.contribution.processor.StAXArtifactProcessor;
 import org.apache.tuscany.sca.contribution.processor.URLArtifactProcessor;
 import org.apache.tuscany.sca.contribution.resolver.ModelResolver;
+import org.apache.tuscany.sca.contribution.resolver.ResourceReference;
 import org.apache.tuscany.sca.contribution.service.ContributionReadException;
 import 
org.apache.tuscany.sca.contribution.service.ContributionResolveException;
 
@@ -107,6 +111,25 @@
     
     public void resolve(Composite composite, ModelResolver resolver) throws 
ContributionResolveException {
         extensionProcessor.resolve(composite, resolver);
+        
+        for (Component component : composite.getComponents()) {
+               for (ComponentProperty prop : component.getProperties()) {
+                       String file = prop.getFile();
+                        if (file != null) {
+                               ResourceReference resourceRef = new 
ResourceReference(file);
+                               resourceRef = 
resolver.resolveModel(ResourceReference.class, resourceRef);
+
+                               try {
+                                   if (!resourceRef.isUnresolved()) {
+                                                       
prop.setFile(resourceRef.getResource().toURI().toString());
+                                               
+                                   }
+                               } catch (URISyntaxException e) {
+                                       throw new IllegalArgumentException(e);
+                       }
+                       }                           
+               }
+        }
     }
 
     public String getArtifactType() {

Modified: 
incubator/tuscany/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/impl/PropertyUtil.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/impl/PropertyUtil.java?rev=591560&r1=591559&r2=591560&view=diff
==============================================================================
--- 
incubator/tuscany/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/impl/PropertyUtil.java
 (original)
+++ 
incubator/tuscany/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/impl/PropertyUtil.java
 Sat Nov  3 01:28:31 2007
@@ -89,13 +89,8 @@
     static private Document loadFromFile(String file) throws 
MalformedURLException, IOException,
         TransformerException, ParserConfigurationException {
         URI uri = URI.create(file);
-        URL url = null;
-        if (!uri.isAbsolute()) {
-            //FIXME Should already be given an absolute file 
-            url = 
Thread.currentThread().getContextClassLoader().getResource(file);
-        } else {
-            url = uri.toURL();
-        }
+        // URI resolution for relative uris is done when the composite is 
resolved.
+        URL url = uri.toURL();
         InputStream is = url.openStream();
 
         Source streamSource = new SAXSource(new InputSource(is));

Modified: 
incubator/tuscany/java/sca/modules/contribution-java/src/main/java/org/apache/tuscany/sca/contribution/java/impl/ClassReferenceModelResolver.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/contribution-java/src/main/java/org/apache/tuscany/sca/contribution/java/impl/ClassReferenceModelResolver.java?rev=591560&r1=591559&r2=591560&view=diff
==============================================================================
--- 
incubator/tuscany/java/sca/modules/contribution-java/src/main/java/org/apache/tuscany/sca/contribution/java/impl/ClassReferenceModelResolver.java
 (original)
+++ 
incubator/tuscany/java/sca/modules/contribution-java/src/main/java/org/apache/tuscany/sca/contribution/java/impl/ClassReferenceModelResolver.java
 Sat Nov  3 01:28:31 2007
@@ -82,14 +82,18 @@
 
         //Load a class on demand
         Class clazz = null;
-
-        try {
-            clazz = Class.forName(((ClassReference)unresolved).getClassName(), 
true, classLoader.get());
-        } catch (ClassNotFoundException e) {
-            //we will later try to delegate to imported model resolvers
-            if (osgiResolver != null) {
-                resolved = osgiResolver.resolveModel(modelClass, unresolved);
-                clazz = ((ClassReference)resolved).getJavaClass();
+        
+        if (osgiResolver != null) {
+            resolved = osgiResolver.resolveModel(modelClass, unresolved);
+            clazz = ((ClassReference)resolved).getJavaClass();
+        }
+        
+        if (clazz == null) {
+            try {
+               // Search contribution classloader (which has visibility of 
classes in the contribution
+               // as well as explicitly imported packages from other 
contributions)
+                clazz = 
Class.forName(((ClassReference)unresolved).getClassName(), true, 
classLoader.get());
+            } catch (ClassNotFoundException e) {
             }
         }
 

Added: 
incubator/tuscany/java/sca/modules/contribution-namespace/src/main/java/org/apache/tuscany/sca/contribution/namespace/impl/ResourceReferenceModelResolver.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/contribution-namespace/src/main/java/org/apache/tuscany/sca/contribution/namespace/impl/ResourceReferenceModelResolver.java?rev=591560&view=auto
==============================================================================
--- 
incubator/tuscany/java/sca/modules/contribution-namespace/src/main/java/org/apache/tuscany/sca/contribution/namespace/impl/ResourceReferenceModelResolver.java
 (added)
+++ 
incubator/tuscany/java/sca/modules/contribution-namespace/src/main/java/org/apache/tuscany/sca/contribution/namespace/impl/ResourceReferenceModelResolver.java
 Sat Nov  3 01:28:31 2007
@@ -0,0 +1,117 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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.sca.contribution.namespace.impl;
+
+import java.io.File;
+import java.lang.ref.WeakReference;
+import java.lang.reflect.Constructor;
+import java.net.MalformedURLException;
+import java.net.URI;
+import java.net.URL;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.tuscany.sca.contribution.Contribution;
+import org.apache.tuscany.sca.contribution.ModelFactoryExtensionPoint;
+import org.apache.tuscany.sca.contribution.resolver.ResourceReference;
+import org.apache.tuscany.sca.contribution.resolver.ModelResolver;
+
+/**
+ * A Model Resolver for ResourceReferences.
+ *
+ */
+public class ResourceReferenceModelResolver implements ModelResolver {
+    private Contribution contribution;
+    protected WeakReference<ClassLoader> classLoader;
+    private Map<String, ResourceReference> map = new HashMap<String, 
ResourceReference>();
+
+    private ModelResolver osgiResolver;
+
+    public ResourceReferenceModelResolver(Contribution contribution, 
ModelFactoryExtensionPoint modelFactories) {
+        this.contribution = contribution;
+        this.classLoader = new 
WeakReference<ClassLoader>(this.contribution.getClassLoader());        
+
+        try {
+            Class osgiResolverClass =
+                
Class.forName("org.apache.tuscany.sca.contribution.osgi.impl.OSGiResourceReferenceModelResolver");
+            if (osgiResolverClass != null) {
+                Constructor constructor =
+                    osgiResolverClass.getConstructor(Contribution.class, 
ModelFactoryExtensionPoint.class);
+                this.osgiResolver = 
(ModelResolver)constructor.newInstance(contribution, modelFactories);
+            }
+        } catch (Exception e) {
+        }
+    }
+
+    public void addModel(Object resolved) {
+        ResourceReference resourceRef = (ResourceReference)resolved;
+        map.put(resourceRef.getResourceName(), resourceRef);
+    }
+
+    public Object removeModel(Object resolved) {
+        return map.remove(((ResourceReference)resolved).getResourceName());
+    }
+
+  
+
+    public <T> T resolveModel(Class<T> modelClass, T unresolved) {
+        Object resolved = map.get(unresolved);
+
+        if (resolved != null) {
+            return modelClass.cast(resolved);
+        }
+
+        //Get a resource
+        String resourceName = 
((ResourceReference)unresolved).getResourceName();
+        URL resourceURL = null;
+        
+        if (URI.create(resourceName).isAbsolute()) {
+               try {
+                       File resourceFile = new File(resourceName);
+                       if (resourceFile.exists())
+                                   resourceURL = resourceFile.toURL();
+                       } catch (MalformedURLException e) {
+                       }
+        }
+        
+        if (osgiResolver != null) {
+            resolved = osgiResolver.resolveModel(modelClass, unresolved);
+            resourceURL = ((ResourceReference)resolved).getResource();
+        }
+        
+        if (resourceURL == null) {
+               resourceURL = classLoader.get().getResource(resourceName);
+        }
+
+        if (resourceURL != null) {          
+            // Store a new ResourceReference wrappering the resource
+            ResourceReference resourceReference = new 
ResourceReference(resourceName, resourceURL);
+            map.put(resourceName, resourceReference);
+
+            // Return the resolved ResourceReference
+            return modelClass.cast(resourceReference);
+        } else {
+            return unresolved;
+        }
+
+    }
+
+   
+}

Modified: 
incubator/tuscany/java/sca/modules/contribution-namespace/src/main/resources/META-INF/services/org.apache.tuscany.sca.contribution.resolver.ModelResolver
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/contribution-namespace/src/main/resources/META-INF/services/org.apache.tuscany.sca.contribution.resolver.ModelResolver?rev=591560&r1=591559&r2=591560&view=diff
==============================================================================
--- 
incubator/tuscany/java/sca/modules/contribution-namespace/src/main/resources/META-INF/services/org.apache.tuscany.sca.contribution.resolver.ModelResolver
 (original)
+++ 
incubator/tuscany/java/sca/modules/contribution-namespace/src/main/resources/META-INF/services/org.apache.tuscany.sca.contribution.resolver.ModelResolver
 Sat Nov  3 01:28:31 2007
@@ -15,4 +15,4 @@
 # specific language governing permissions and limitations
 # under the License. 
 
-org.apache.tuscany.sca.contribution.java.impl.ClassReferenceModelResolver;model=org.apache.tuscany.sca.contribution.resolver.ClassReference
+org.apache.tuscany.sca.contribution.namespace.impl.ResourceReferenceModelResolver;model=org.apache.tuscany.sca.contribution.resolver.ResourceReference

Added: 
incubator/tuscany/java/sca/modules/contribution-osgi/src/main/java/org/apache/tuscany/sca/contribution/osgi/impl/OSGiResourceReferenceModelResolver.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/contribution-osgi/src/main/java/org/apache/tuscany/sca/contribution/osgi/impl/OSGiResourceReferenceModelResolver.java?rev=591560&view=auto
==============================================================================
--- 
incubator/tuscany/java/sca/modules/contribution-osgi/src/main/java/org/apache/tuscany/sca/contribution/osgi/impl/OSGiResourceReferenceModelResolver.java
 (added)
+++ 
incubator/tuscany/java/sca/modules/contribution-osgi/src/main/java/org/apache/tuscany/sca/contribution/osgi/impl/OSGiResourceReferenceModelResolver.java
 Sat Nov  3 01:28:31 2007
@@ -0,0 +1,123 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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.sca.contribution.osgi.impl;
+
+import java.net.URL;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.tuscany.sca.contribution.Contribution;
+import org.apache.tuscany.sca.contribution.Import;
+import org.apache.tuscany.sca.contribution.ModelFactoryExtensionPoint;
+import org.apache.tuscany.sca.contribution.resolver.ModelResolver;
+import org.apache.tuscany.sca.contribution.resolver.ResourceReference;
+import org.apache.tuscany.sca.osgi.runtime.OSGiRuntime;
+import org.osgi.framework.Bundle;
+
+/**
+ * A Model Resolver for ResourceReferences from OSGi bundles.
+ *
+ */
+public class OSGiResourceReferenceModelResolver implements ModelResolver {
+    private Contribution contribution;
+    private Map<String, ResourceReference> map = new HashMap<String, 
ResourceReference>();
+    private Bundle bundle;
+    private boolean initialized;
+
+    public OSGiResourceReferenceModelResolver(Contribution contribution, 
ModelFactoryExtensionPoint modelFactories) {
+        this.contribution = contribution;
+    }
+
+    public void addModel(Object resolved) {
+        ResourceReference resourceRef = (ResourceReference)resolved;
+        map.put(resourceRef.getResourceName(), resourceRef);
+    }
+
+    public Object removeModel(Object resolved) {
+        return map.remove(((ResourceReference)resolved).getResourceName());
+    }
+
+    /**
+     * Handle artifact resolution when the specific class reference is 
imported from another contribution
+     * @param unresolved
+     * @return
+     */
+    private ResourceReference resolveImportedModel(ResourceReference 
unresolved) {
+       ResourceReference resolved = unresolved;
+
+        if (this.contribution != null) {
+            for (Import import_ : this.contribution.getImports()) {
+
+                if (resolved == unresolved && bundle != null) {
+                    resolved = 
import_.getModelResolver().resolveModel(ResourceReference.class, unresolved);
+                    if (resolved != unresolved)
+                        break;
+                }
+            }
+
+        }
+        return resolved;
+    }
+
+    public <T> T resolveModel(Class<T> modelClass, T unresolved) {
+        Object resolved = map.get(unresolved);
+
+        if (resolved != null) {
+            return modelClass.cast(resolved);
+        }
+        initialize();
+
+        // Get a resource
+        String resourceName = 
((ResourceReference)unresolved).getResourceName();
+        URL resourceURL = null;
+        if (bundle != null) {
+            try {
+               resourceURL = bundle.getResource(resourceName);
+            } catch (Exception e) {
+                // we will later try to delegate to imported model resolvers
+            }
+        }
+
+        if (resourceURL != null) {       
+            // Store a new ResourceReference wrappering the resource
+               ResourceReference resourceReference = new 
ResourceReference(resourceName, resourceURL);
+            map.put(resourceName, resourceReference);
+
+            // Return the resolved ClassReference
+            return modelClass.cast(resourceReference);
+        } else {
+            //delegate resolution of the class
+            resolved = 
this.resolveImportedModel((ResourceReference)unresolved);
+            return modelClass.cast(resolved);
+        }
+
+    }
+
+    private void initialize() {
+        if (initialized)
+            return;
+
+        initialized = true;
+        try {
+            bundle = 
OSGiRuntime.findInstalledBundle(contribution.getLocation());
+        } catch (Exception e) {
+        }
+    }
+}

Added: 
incubator/tuscany/java/sca/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/resolver/ResourceReference.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/resolver/ResourceReference.java?rev=591560&view=auto
==============================================================================
--- 
incubator/tuscany/java/sca/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/resolver/ResourceReference.java
 (added)
+++ 
incubator/tuscany/java/sca/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/resolver/ResourceReference.java
 Sat Nov  3 01:28:31 2007
@@ -0,0 +1,100 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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.sca.contribution.resolver;
+
+import java.net.URL;
+
+/**
+ * A resource URL, which should be used to register resources
+ * with an ArtifactResolver and resolve these resources later.
+ *
+ * 
+ */
+public class ResourceReference {
+    
+    private URL resourceURL;
+    private String resourceName;
+
+    /**
+     * Constructs a new ResourceReference.
+     * 
+     * @param resourceName Name of resource
+     * @param resourceURL  The resource url
+     */
+    public ResourceReference(String resourceName, URL resourceURL) {
+        this.resourceURL = resourceURL;
+        this.resourceName = resourceName;
+    }
+    
+    /**
+     * Constructs a new ResourceReference.
+     * 
+     * @param resourceName Name of resource
+     */
+    public ResourceReference(String resourceName) {
+        this.resourceName = resourceName;
+    }
+    
+    /**
+     * Get the resource URL.
+     * 
+     * @return The resource URL
+     */
+    public URL getResource() {
+        return resourceURL;
+    }
+    
+    /**
+     * Get the resource name.
+     * 
+     * @return The resource name
+     */
+    public String getResourceName() {
+        return resourceName;
+    }
+    
+    /**
+     * Returns true if the resource reference is unresolved.
+     * 
+     * @return Whether or not the resource has been resolved
+     */
+    public boolean isUnresolved() {
+        return resourceURL == null;
+    }
+
+    @Override
+    public int hashCode() {
+        return resourceName.hashCode();
+    }
+    
+    @Override
+    public boolean equals(Object obj) {
+        if (obj == this) {
+            return true;
+        } else {
+            if (obj instanceof ResourceReference) {
+                return 
resourceName.equals(((ResourceReference)obj).resourceName);
+            } else {
+                return false;
+            }
+        }
+    }
+
+}

Modified: 
incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/impl/TransformationContextImpl.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/impl/TransformationContextImpl.java?rev=591560&r1=591559&r2=591560&view=diff
==============================================================================
--- 
incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/impl/TransformationContextImpl.java
 (original)
+++ 
incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/impl/TransformationContextImpl.java
 Sat Nov  3 01:28:31 2007
@@ -37,7 +37,7 @@
 
     public TransformationContextImpl() {
         super();
-        //FIXME The classloader should be passed in
+        // This is used only for testing
         setClassLoader(Thread.currentThread().getContextClassLoader());
     }
 

Modified: 
incubator/tuscany/java/sca/modules/extension-helper/src/main/java/org/apache/tuscany/sca/extension/helper/impl/PojoImplementation.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/extension-helper/src/main/java/org/apache/tuscany/sca/extension/helper/impl/PojoImplementation.java?rev=591560&r1=591559&r2=591560&view=diff
==============================================================================
--- 
incubator/tuscany/java/sca/modules/extension-helper/src/main/java/org/apache/tuscany/sca/extension/helper/impl/PojoImplementation.java
 (original)
+++ 
incubator/tuscany/java/sca/modules/extension-helper/src/main/java/org/apache/tuscany/sca/extension/helper/impl/PojoImplementation.java
 Sat Nov  3 01:28:31 2007
@@ -19,6 +19,9 @@
 
 package org.apache.tuscany.sca.extension.helper.impl;
 
+import java.lang.reflect.Method;
+
+import org.apache.tuscany.sca.contribution.resolver.ModelResolver;
 import org.apache.tuscany.sca.extension.helper.utils.DynamicImplementation;
 
 /**
@@ -38,5 +41,16 @@
         return userImpl;
     }
     
+    public void resolve(ModelResolver resolver) {
+       
+       try {
+                   Method resolveMethod;
+                   if (userImpl != null &&
+                                 (resolveMethod = 
userImpl.getClass().getMethod("resolve", ModelResolver.class)) != null) {
+                           resolveMethod.invoke(userImpl, resolver);
+                 }
+           } catch (Exception e) {
+           }
+    }
 
 }

Modified: 
incubator/tuscany/java/sca/modules/extension-helper/src/main/java/org/apache/tuscany/sca/extension/helper/utils/AbstractStAXArtifactProcessor.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/extension-helper/src/main/java/org/apache/tuscany/sca/extension/helper/utils/AbstractStAXArtifactProcessor.java?rev=591560&r1=591559&r2=591560&view=diff
==============================================================================
--- 
incubator/tuscany/java/sca/modules/extension-helper/src/main/java/org/apache/tuscany/sca/extension/helper/utils/AbstractStAXArtifactProcessor.java
 (original)
+++ 
incubator/tuscany/java/sca/modules/extension-helper/src/main/java/org/apache/tuscany/sca/extension/helper/utils/AbstractStAXArtifactProcessor.java
 Sat Nov  3 01:28:31 2007
@@ -19,6 +19,8 @@
 
 package org.apache.tuscany.sca.extension.helper.utils;
 
+import java.lang.reflect.Method;
+
 import org.apache.tuscany.sca.assembly.AssemblyFactory;
 import org.apache.tuscany.sca.assembly.ComponentType;
 import org.apache.tuscany.sca.assembly.Implementation;
@@ -57,6 +59,15 @@
               model.getServices().add(dynamicService);
           }
       }
+      
+      // Allow implementation classes to resolve themselves
+      try {
+                 Method resolveMethod;
+                 if ((resolveMethod = model.getClass().getMethod("resolve", 
ModelResolver.class)) != null) {
+                         resolveMethod.invoke(model, resolver);
+                 }
+         } catch (Exception e) {
+         }
 
       model.setUnresolved(false);
     }

Modified: 
incubator/tuscany/java/sca/modules/extension-helper/src/main/java/org/apache/tuscany/sca/extension/helper/utils/ResourceHelper.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/extension-helper/src/main/java/org/apache/tuscany/sca/extension/helper/utils/ResourceHelper.java?rev=591560&r1=591559&r2=591560&view=diff
==============================================================================
--- 
incubator/tuscany/java/sca/modules/extension-helper/src/main/java/org/apache/tuscany/sca/extension/helper/utils/ResourceHelper.java
 (original)
+++ 
incubator/tuscany/java/sca/modules/extension-helper/src/main/java/org/apache/tuscany/sca/extension/helper/utils/ResourceHelper.java
 Sat Nov  3 01:28:31 2007
@@ -30,15 +30,8 @@
  */
 public class ResourceHelper {
 
-    public static String readResource(String scriptName) {
+    public static String readResource(URL scriptSrcUrl) {
         
-        //FIXME The classloader should be passed in
-        ClassLoader cl = Thread.currentThread().getContextClassLoader();
-        URL scriptSrcUrl = cl.getResource(scriptName);
-        if (scriptSrcUrl == null) {
-            throw new RuntimeException("No script: " + scriptName);
-        }
-
         InputStream is;
         try {
             is = scriptSrcUrl.openStream();

Modified: 
incubator/tuscany/java/sca/modules/implementation-java-runtime/src/main/java/org/apache/tuscany/sca/implementation/java/invocation/JavaImplementationProvider.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/implementation-java-runtime/src/main/java/org/apache/tuscany/sca/implementation/java/invocation/JavaImplementationProvider.java?rev=591560&r1=591559&r2=591560&view=diff
==============================================================================
--- 
incubator/tuscany/java/sca/modules/implementation-java-runtime/src/main/java/org/apache/tuscany/sca/implementation/java/invocation/JavaImplementationProvider.java
 (original)
+++ 
incubator/tuscany/java/sca/modules/implementation-java-runtime/src/main/java/org/apache/tuscany/sca/implementation/java/invocation/JavaImplementationProvider.java
 Sat Nov  3 01:28:31 2007
@@ -61,7 +61,7 @@
     private JavaImplementation implementation;
     private JavaComponentContextProvider componentContextProvider;
     private RequestContextFactory requestContextFactory;
-    private Map<QName, String> policyHandlerClassNames = null;
+    private Map<ClassLoader, Map<QName, String>> policyHandlerClassNames = 
null;
     
     public JavaImplementationProvider(RuntimeComponent component,
                                       JavaImplementation implementation,
@@ -119,9 +119,9 @@
         if ( policyHandlerClassNames == null ) {
                Hashtable<ClassLoader, Set<URL>> policySetResources = 
                        
ServiceDiscovery.getInstance().getServiceResources("org.apache.tuscany.sca.policy.PolicySetHandlers");
-            policyHandlerClassNames = new HashMap<QName, String>();
+            policyHandlerClassNames = new HashMap<ClassLoader, Map<QName, 
String>>();
             for (ClassLoader classLoader : policySetResources.keySet()) {
-               
policyHandlerClassNames.putAll(PolicySetHandlerUtil.getPolicyHandlers(
+               policyHandlerClassNames.put(classLoader, 
PolicySetHandlerUtil.getPolicyHandlers(
                                classLoader, 
policySetResources.get(classLoader)));
             }
         }
@@ -130,14 +130,19 @@
             PolicyHandler aHandler = null;
             PolicySetAttachPoint policiedImpl = 
(PolicySetAttachPoint)implementation;
             for ( PolicySet policySet : policiedImpl.getPolicySets() ) {
-                String handlerClassName = 
policyHandlerClassNames.get(policySet.getName());
-                
-                if ( handlerClassName != null ) {
-                    aHandler = 
-                        (PolicyHandler)Class.forName(handlerClassName, true, 
Thread.currentThread().getContextClassLoader()).newInstance();
-                    aHandler.setApplicablePolicySet(policySet);
-                    javaImpl.getPolicyHandlers().put(policySet, aHandler);
-                } else {
+                String handlerClassName = null;
+                for (ClassLoader classLoader : 
policyHandlerClassNames.keySet()) {
+                       handlerClassName = 
policyHandlerClassNames.get(classLoader).get(policySet.getName());
+                       if ( handlerClassName != null ) {
+                        aHandler = 
+                            (PolicyHandler)Class.forName(handlerClassName, 
true, classLoader).newInstance();
+                        aHandler.setApplicablePolicySet(policySet);
+                        javaImpl.getPolicyHandlers().put(policySet, aHandler);
+                        break;
+                       }
+                }
+                                
+                if (aHandler == null) {
                     //FIXME : maybe there must be a warning thrown here
                 }
             }

Modified: 
incubator/tuscany/java/sca/modules/implementation-script/src/main/java/org/apache/tuscany/sca/implementation/script/ScriptImplementation.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/implementation-script/src/main/java/org/apache/tuscany/sca/implementation/script/ScriptImplementation.java?rev=591560&r1=591559&r2=591560&view=diff
==============================================================================
--- 
incubator/tuscany/java/sca/modules/implementation-script/src/main/java/org/apache/tuscany/sca/implementation/script/ScriptImplementation.java
 (original)
+++ 
incubator/tuscany/java/sca/modules/implementation-script/src/main/java/org/apache/tuscany/sca/implementation/script/ScriptImplementation.java
 Sat Nov  3 01:28:31 2007
@@ -18,6 +18,10 @@
  */
 package org.apache.tuscany.sca.implementation.script;
 
+import java.net.URL;
+
+import org.apache.tuscany.sca.contribution.resolver.ModelResolver;
+import org.apache.tuscany.sca.contribution.resolver.ResourceReference;
 import org.apache.tuscany.sca.extension.helper.utils.ResourceHelper;
 
 /**
@@ -26,6 +30,7 @@
 public class ScriptImplementation {
 
     protected String scriptName;
+    protected URL scriptURL;
     protected String scriptSrc;
     protected String scriptLanguage;
 
@@ -60,10 +65,22 @@
             if (scriptName == null) {
                 throw new IllegalArgumentException("script name is null and no 
inline source used");
             }
+            if (scriptURL == null) {
+                throw new RuntimeException("No script: " + scriptName);
+            }
 
-            // TODO: how should resources be read? Soould this use the 
contrabution sevrice?
-            scriptSrc = ResourceHelper.readResource(scriptName);
+            scriptSrc = ResourceHelper.readResource(scriptURL);
         }
         return scriptSrc;
+    }
+    
+    public void resolve(ModelResolver resolver) {
+       
+       if (scriptName != null) {
+           ResourceReference resourceRef = new ResourceReference(scriptName);
+           resourceRef = resolver.resolveModel(ResourceReference.class, 
resourceRef);
+           if (!resourceRef.isUnresolved())
+                   scriptURL = resourceRef.getResource();
+       }
     }
 }

Modified: 
incubator/tuscany/java/sca/modules/implementation-xquery/src/main/java/org/apache/tuscany/sca/implementation/xquery/XQueryImplementation.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/implementation-xquery/src/main/java/org/apache/tuscany/sca/implementation/xquery/XQueryImplementation.java?rev=591560&r1=591559&r2=591560&view=diff
==============================================================================
--- 
incubator/tuscany/java/sca/modules/implementation-xquery/src/main/java/org/apache/tuscany/sca/implementation/xquery/XQueryImplementation.java
 (original)
+++ 
incubator/tuscany/java/sca/modules/implementation-xquery/src/main/java/org/apache/tuscany/sca/implementation/xquery/XQueryImplementation.java
 Sat Nov  3 01:28:31 2007
@@ -19,6 +19,7 @@
 package org.apache.tuscany.sca.implementation.xquery;
 
 import java.lang.reflect.Method;
+import java.net.URL;
 import java.util.Map;
 
 import net.sf.saxon.query.XQueryExpression;
@@ -38,6 +39,10 @@
     public String getLocation();
 
     public void setLocation(String location);
+    
+    public URL getLocationURL();
+
+    public void setLocationURL(URL location);
 
     /**
      * The XQuery expression that is loaded from the xquery implementation file

Modified: 
incubator/tuscany/java/sca/modules/implementation-xquery/src/main/java/org/apache/tuscany/sca/implementation/xquery/impl/XQueryImplementationImpl.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/implementation-xquery/src/main/java/org/apache/tuscany/sca/implementation/xquery/impl/XQueryImplementationImpl.java?rev=591560&r1=591559&r2=591560&view=diff
==============================================================================
--- 
incubator/tuscany/java/sca/modules/implementation-xquery/src/main/java/org/apache/tuscany/sca/implementation/xquery/impl/XQueryImplementationImpl.java
 (original)
+++ 
incubator/tuscany/java/sca/modules/implementation-xquery/src/main/java/org/apache/tuscany/sca/implementation/xquery/impl/XQueryImplementationImpl.java
 Sat Nov  3 01:28:31 2007
@@ -19,6 +19,7 @@
 package org.apache.tuscany.sca.implementation.xquery.impl;
 
 import java.lang.reflect.Method;
+import java.net.URL;
 import java.util.HashMap;
 import java.util.Map;
 
@@ -34,6 +35,7 @@
 public class XQueryImplementationImpl extends ComponentTypeImpl implements 
XQueryImplementation {
 
     private String location;
+    private URL locationURL;
     private String xqExpression;
 
     private Map<String, XQueryExpression> compiledExpressionsCache = new 
HashMap<String, XQueryExpression>();
@@ -49,6 +51,14 @@
 
     public void setLocation(String location) {
         this.location = location;
+    }
+    
+    public URL getLocationURL() {
+        return locationURL;
+    }
+
+    public void setLocationURL(URL locationURL) {
+        this.locationURL = locationURL;
     }
 
     public String getXqExpression() {

Modified: 
incubator/tuscany/java/sca/modules/implementation-xquery/src/main/java/org/apache/tuscany/sca/implementation/xquery/xml/XQueryImplementationProcessor.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/implementation-xquery/src/main/java/org/apache/tuscany/sca/implementation/xquery/xml/XQueryImplementationProcessor.java?rev=591560&r1=591559&r2=591560&view=diff
==============================================================================
--- 
incubator/tuscany/java/sca/modules/implementation-xquery/src/main/java/org/apache/tuscany/sca/implementation/xquery/xml/XQueryImplementationProcessor.java
 (original)
+++ 
incubator/tuscany/java/sca/modules/implementation-xquery/src/main/java/org/apache/tuscany/sca/implementation/xquery/xml/XQueryImplementationProcessor.java
 Sat Nov  3 01:28:31 2007
@@ -30,6 +30,7 @@
 import org.apache.tuscany.sca.contribution.ModelFactoryExtensionPoint;
 import org.apache.tuscany.sca.contribution.processor.StAXArtifactProcessor;
 import org.apache.tuscany.sca.contribution.resolver.ModelResolver;
+import org.apache.tuscany.sca.contribution.resolver.ResourceReference;
 import org.apache.tuscany.sca.contribution.service.ContributionReadException;
 import 
org.apache.tuscany.sca.contribution.service.ContributionResolveException;
 import org.apache.tuscany.sca.contribution.service.ContributionWriteException;
@@ -110,6 +111,12 @@
      */
     public void resolve(XQueryImplementation xqueryImplementation, 
ModelResolver resolver)
         throws ContributionResolveException {
+       
+       ResourceReference resourceRef = new 
ResourceReference(xqueryImplementation.getLocation());
+       resourceRef = resolver.resolveModel(ResourceReference.class, 
resourceRef);
+       if (!resourceRef.isUnresolved())
+               throw new ContributionResolveException("Could not locate file: 
" + xqueryImplementation.getLocation());
+       xqueryImplementation.setLocationURL(resourceRef.getResource());
 
         XQueryIntrospector introspector = new 
XQueryIntrospector(assemblyFactory, javaFactory);
 

Modified: 
incubator/tuscany/java/sca/modules/implementation-xquery/src/main/java/org/apache/tuscany/sca/implementation/xquery/xml/XQueryIntrospector.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/implementation-xquery/src/main/java/org/apache/tuscany/sca/implementation/xquery/xml/XQueryIntrospector.java?rev=591560&r1=591559&r2=591560&view=diff
==============================================================================
--- 
incubator/tuscany/java/sca/modules/implementation-xquery/src/main/java/org/apache/tuscany/sca/implementation/xquery/xml/XQueryIntrospector.java
 (original)
+++ 
incubator/tuscany/java/sca/modules/implementation-xquery/src/main/java/org/apache/tuscany/sca/implementation/xquery/xml/XQueryIntrospector.java
 Sat Nov  3 01:28:31 2007
@@ -19,12 +19,11 @@
 package org.apache.tuscany.sca.implementation.xquery.xml;
 
 import java.io.ByteArrayOutputStream;
-import java.io.File;
-import java.io.FileInputStream;
 import java.io.FileNotFoundException;
 import java.io.IOException;
 import java.io.InputStream;
 import java.lang.reflect.Method;
+import java.net.URL;
 import java.util.Iterator;
 
 import javax.xml.namespace.QName;
@@ -74,12 +73,9 @@
 
     public boolean introspect(XQueryImplementation xqueryImplementation) 
throws ContributionResolveException {
         
-        //FIXME The classloader should be passed in
-        cl = Thread.currentThread().getContextClassLoader();
-
         String xqExpression = null;
         try {
-            xqExpression = 
loadXQExpression(xqueryImplementation.getLocation(), cl);
+            xqExpression = 
loadXQExpression(xqueryImplementation.getLocationURL());
         } catch (FileNotFoundException e) {
             throw new ContributionResolveException(e);
         } catch (IOException e) {
@@ -124,14 +120,9 @@
     /**
      * Loads the xquery expression from the location that is provided with the 
implementation
      */
-    private String loadXQExpression(String location, ClassLoader cl) throws 
FileNotFoundException, IOException {
-        File locationFile = new File(location);
-        InputStream xqResourceStream = null;
-        if (locationFile.exists()) {
-            xqResourceStream = new FileInputStream(locationFile);
-        } else {
-            xqResourceStream = cl.getResourceAsStream(location);
-        }
+    private String loadXQExpression(URL locationURL) throws 
FileNotFoundException, IOException {
+       
+        InputStream xqResourceStream = locationURL.openStream();
 
         if (xqResourceStream == null) {
             return null;



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

Reply via email to