Author: rfeng
Date: Tue Nov  4 14:18:49 2008
New Revision: 711449

URL: http://svn.apache.org/viewvc?rev=711449&view=rev
Log:
Add two more methods to find contribution locations by resource search

Modified:
    
tuscany/branches/sca-equinox/modules/node-api/src/main/java/org/apache/tuscany/sca/node/ContributionLocationHelper.java

Modified: 
tuscany/branches/sca-equinox/modules/node-api/src/main/java/org/apache/tuscany/sca/node/ContributionLocationHelper.java
URL: 
http://svn.apache.org/viewvc/tuscany/branches/sca-equinox/modules/node-api/src/main/java/org/apache/tuscany/sca/node/ContributionLocationHelper.java?rev=711449&r1=711448&r2=711449&view=diff
==============================================================================
--- 
tuscany/branches/sca-equinox/modules/node-api/src/main/java/org/apache/tuscany/sca/node/ContributionLocationHelper.java
 (original)
+++ 
tuscany/branches/sca-equinox/modules/node-api/src/main/java/org/apache/tuscany/sca/node/ContributionLocationHelper.java
 Tue Nov  4 14:18:49 2008
@@ -26,10 +26,10 @@
 /**
  * ContributionLocationHelper
  *
- * @version $Rev: $ $Date: $
+ * @version $Rev$ $Date$
  */
 public class ContributionLocationHelper {
-    
+
     /**
      * Returns the location of the SCA contribution containing the given class.
      * 
@@ -46,4 +46,56 @@
         return uri;
     }
 
+    /**
+     * Find the contribution location by seraching a resource on the classpath
+     * @param resourceName
+     * @return
+     */
+    public static String getContributionLocation(String resourceName) {
+        return getContributionLocation(null, resourceName);
+
+    }
+
+    /**
+     * Find the contribution location by seraching a resource using the given 
classloader
+     * @param classLoader
+     * @param resourceName
+     * @return
+     */
+    public static String getContributionLocation(ClassLoader classLoader, 
String resourceName) {
+        if (classLoader == null) {
+            classLoader = AccessController.doPrivileged(new 
PrivilegedAction<ClassLoader>() {
+                public ClassLoader run() {
+                    return Thread.currentThread().getContextClassLoader();
+                }
+            });
+        }
+        URL resourceURL = getResource(classLoader, resourceName);
+        if (resourceURL == null) {
+            return null;
+        }
+        String location = null;
+        // "jar:file://....../something.jar!/a/b/c/app.composite"
+        String url = resourceURL.toExternalForm();
+        String protocol = resourceURL.getProtocol();
+        if ("file".equals(protocol)) {
+            // directory contribution
+            if (url.endsWith(resourceName)) {
+                location = url.substring(0, url.lastIndexOf(resourceName));
+            }
+        } else if ("jar".equals(protocol) || "wsjar".equals(protocol) || 
"zip".equals(protocol)) {
+            // jar contribution
+            location = url.substring(protocol.length() + 1, 
url.lastIndexOf("!/"));
+        }
+        return location;
+    }
+
+    private static URL getResource(final ClassLoader classLoader, final String 
compositeURI) {
+        return AccessController.doPrivileged(new PrivilegedAction<URL>() {
+            public URL run() {
+                return classLoader.getResource(compositeURI);
+            }
+        });
+    }
+
 }


Reply via email to