tuscany-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From rf...@apache.org
Subject svn commit: r711449 - /tuscany/branches/sca-equinox/modules/node-api/src/main/java/org/apache/tuscany/sca/node/ContributionLocationHelper.java
Date Tue, 04 Nov 2008 22:18:49 GMT
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);
+            }
+        });
+    }
+
 }



Mime
View raw message