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);
+ }
+ });
+ }
+
}