You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@felix.apache.org by gn...@apache.org on 2010/10/08 15:51:34 UTC
svn commit: r1005825 - in
/felix/trunk/framework/src/main/java/org/apache/felix/framework: ./ cache/
resolver/
Author: gnodet
Date: Fri Oct 8 13:51:34 2010
New Revision: 1005825
URL: http://svn.apache.org/viewvc?rev=1005825&view=rev
Log:
[FELIX-2645] Add (hidden) way to retrieve a local URL for a given bundle URL
Modified:
felix/trunk/framework/src/main/java/org/apache/felix/framework/ExtensionManager.java
felix/trunk/framework/src/main/java/org/apache/felix/framework/ModuleImpl.java
felix/trunk/framework/src/main/java/org/apache/felix/framework/URLHandlersBundleURLConnection.java
felix/trunk/framework/src/main/java/org/apache/felix/framework/cache/ContentDirectoryContent.java
felix/trunk/framework/src/main/java/org/apache/felix/framework/cache/DirectoryContent.java
felix/trunk/framework/src/main/java/org/apache/felix/framework/cache/JarContent.java
felix/trunk/framework/src/main/java/org/apache/felix/framework/resolver/Content.java
felix/trunk/framework/src/main/java/org/apache/felix/framework/resolver/Module.java
Modified: felix/trunk/framework/src/main/java/org/apache/felix/framework/ExtensionManager.java
URL: http://svn.apache.org/viewvc/felix/trunk/framework/src/main/java/org/apache/felix/framework/ExtensionManager.java?rev=1005825&r1=1005824&r2=1005825&view=diff
==============================================================================
--- felix/trunk/framework/src/main/java/org/apache/felix/framework/ExtensionManager.java (original)
+++ felix/trunk/framework/src/main/java/org/apache/felix/framework/ExtensionManager.java Fri Oct 8 13:51:34 2010
@@ -610,6 +610,11 @@ class ExtensionManager extends URLStream
return null;
}
+ public URL getEntryAsURL(String name)
+ {
+ return null;
+ }
+
//
// Utility methods.
//
@@ -757,5 +762,10 @@ class ExtensionManager extends URLStream
{
return getClass().getClassLoader().getResourceAsStream(urlPath);
}
+
+ public URL getLocalURL(int index, String urlPath)
+ {
+ return getClass().getClassLoader().getResource(urlPath);
+ }
}
}
Modified: felix/trunk/framework/src/main/java/org/apache/felix/framework/ModuleImpl.java
URL: http://svn.apache.org/viewvc/felix/trunk/framework/src/main/java/org/apache/felix/framework/ModuleImpl.java?rev=1005825&r1=1005824&r2=1005825&view=diff
==============================================================================
--- felix/trunk/framework/src/main/java/org/apache/felix/framework/ModuleImpl.java (original)
+++ felix/trunk/framework/src/main/java/org/apache/felix/framework/ModuleImpl.java Fri Oct 8 13:51:34 2010
@@ -1091,6 +1091,19 @@ public class ModuleImpl implements Modul
return getContentPath()[index - 1].getEntryAsStream(urlPath);
}
+ public URL getLocalURL(int index, String urlPath)
+ {
+ if (urlPath.startsWith("/"))
+ {
+ urlPath = urlPath.substring(1);
+ }
+ if (index == 0)
+ {
+ return m_content.getEntryAsURL(urlPath);
+ }
+ return getContentPath()[index - 1].getEntryAsURL(urlPath);
+ }
+
private URL createURL(int port, String path)
{
// Add a slash if there is one already, otherwise
Modified: felix/trunk/framework/src/main/java/org/apache/felix/framework/URLHandlersBundleURLConnection.java
URL: http://svn.apache.org/viewvc/felix/trunk/framework/src/main/java/org/apache/felix/framework/URLHandlersBundleURLConnection.java?rev=1005825&r1=1005824&r2=1005825&view=diff
==============================================================================
--- felix/trunk/framework/src/main/java/org/apache/felix/framework/URLHandlersBundleURLConnection.java (original)
+++ felix/trunk/framework/src/main/java/org/apache/felix/framework/URLHandlersBundleURLConnection.java Fri Oct 8 13:51:34 2010
@@ -28,7 +28,7 @@ import org.apache.felix.framework.resolv
import org.apache.felix.framework.util.Util;
-class URLHandlersBundleURLConnection extends URLConnection
+public class URLHandlersBundleURLConnection extends URLConnection
{
private Felix m_framework;
private Module m_targetModule;
@@ -195,4 +195,18 @@ class URLHandlersBundleURLConnection ext
// re-arranging to get this to work.
return null;
}
+
+ /**
+ * Retrieve the entry as a URL using standard protocols such as file: and jar:
+ *
+ * @return the local URL
+ */
+ public URL getLocalURL()
+ {
+ if ((m_targetModule == null) || (m_classPathIdx < 0))
+ {
+ return url;
+ }
+ return m_targetModule.getLocalURL(m_classPathIdx, url.getPath());
+ }
}
Modified: felix/trunk/framework/src/main/java/org/apache/felix/framework/cache/ContentDirectoryContent.java
URL: http://svn.apache.org/viewvc/felix/trunk/framework/src/main/java/org/apache/felix/framework/cache/ContentDirectoryContent.java?rev=1005825&r1=1005824&r2=1005825&view=diff
==============================================================================
--- felix/trunk/framework/src/main/java/org/apache/felix/framework/cache/ContentDirectoryContent.java (original)
+++ felix/trunk/framework/src/main/java/org/apache/felix/framework/cache/ContentDirectoryContent.java Fri Oct 8 13:51:34 2010
@@ -21,6 +21,7 @@ package org.apache.felix.framework.cache
import org.apache.felix.framework.resolver.Content;
import java.io.IOException;
import java.io.InputStream;
+import java.net.URL;
import java.util.Enumeration;
import java.util.NoSuchElementException;
@@ -81,6 +82,11 @@ public class ContentDirectoryContent imp
return m_content.getEntryAsStream(m_rootPath + name);
}
+ public URL getEntryAsURL(String name)
+ {
+ return m_content.getEntryAsURL(m_rootPath + name);
+ }
+
public Content getEntryAsContent(String name)
{
if ((name.length() > 0) && (name.charAt(0) == '/'))
Modified: felix/trunk/framework/src/main/java/org/apache/felix/framework/cache/DirectoryContent.java
URL: http://svn.apache.org/viewvc/felix/trunk/framework/src/main/java/org/apache/felix/framework/cache/DirectoryContent.java?rev=1005825&r1=1005824&r2=1005825&view=diff
==============================================================================
--- felix/trunk/framework/src/main/java/org/apache/felix/framework/cache/DirectoryContent.java (original)
+++ felix/trunk/framework/src/main/java/org/apache/felix/framework/cache/DirectoryContent.java Fri Oct 8 13:51:34 2010
@@ -20,6 +20,8 @@ package org.apache.felix.framework.cache
import org.apache.felix.framework.resolver.Content;
import java.io.*;
+import java.net.MalformedURLException;
+import java.net.URL;
import java.util.*;
import org.apache.felix.framework.Logger;
import org.apache.felix.framework.util.FelixConstants;
@@ -131,6 +133,23 @@ public class DirectoryContent implements
return new FileInputStream(new File(m_dir, name));
}
+ public URL getEntryAsURL(String name)
+ {
+ if ((name.length() > 0) && (name.charAt(0) == '/'))
+ {
+ name = name.substring(1);
+ }
+
+ try
+ {
+ return new File(m_dir, name).toURI().toURL();
+ }
+ catch (MalformedURLException e)
+ {
+ return null;
+ }
+ }
+
public Content getEntryAsContent(String entryName)
{
// If the entry name refers to the content itself, then
Modified: felix/trunk/framework/src/main/java/org/apache/felix/framework/cache/JarContent.java
URL: http://svn.apache.org/viewvc/felix/trunk/framework/src/main/java/org/apache/felix/framework/cache/JarContent.java?rev=1005825&r1=1005824&r2=1005825&view=diff
==============================================================================
--- felix/trunk/framework/src/main/java/org/apache/felix/framework/cache/JarContent.java (original)
+++ felix/trunk/framework/src/main/java/org/apache/felix/framework/cache/JarContent.java Fri Oct 8 13:51:34 2010
@@ -23,6 +23,8 @@ import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
+import java.net.MalformedURLException;
+import java.net.URL;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Map;
@@ -190,6 +192,18 @@ public class JarContent implements Conte
return is;
}
+ public URL getEntryAsURL(String name)
+ {
+ try
+ {
+ return new URL("jar:" + m_file.toURI().toURL().toExternalForm() + "!/" + name);
+ }
+ catch (MalformedURLException e)
+ {
+ return null;
+ }
+ }
+
public Content getEntryAsContent(String entryName)
{
// If the entry name refers to the content itself, then
Modified: felix/trunk/framework/src/main/java/org/apache/felix/framework/resolver/Content.java
URL: http://svn.apache.org/viewvc/felix/trunk/framework/src/main/java/org/apache/felix/framework/resolver/Content.java?rev=1005825&r1=1005824&r2=1005825&view=diff
==============================================================================
--- felix/trunk/framework/src/main/java/org/apache/felix/framework/resolver/Content.java (original)
+++ felix/trunk/framework/src/main/java/org/apache/felix/framework/resolver/Content.java Fri Oct 8 13:51:34 2010
@@ -20,6 +20,7 @@ package org.apache.felix.framework.resol
import java.io.IOException;
import java.io.InputStream;
+import java.net.URL;
import java.util.Enumeration;
public interface Content
@@ -109,4 +110,15 @@ public interface Content
* corresponding entry was found, <tt>null</tt> otherwise.
**/
String getEntryAsNativeLibrary(String name);
+
+ /**
+ * <p>
+ * This method allows retrieving an entry as a plain standard URL.
+ * </p>
+ *
+ * @param name The name of the entry to retrieve as a URL
+ * @return A URL using a standard protocol such as file, jar
+ * or null if not possible.
+ */
+ URL getEntryAsURL(String name);
}
\ No newline at end of file
Modified: felix/trunk/framework/src/main/java/org/apache/felix/framework/resolver/Module.java
URL: http://svn.apache.org/viewvc/felix/trunk/framework/src/main/java/org/apache/felix/framework/resolver/Module.java?rev=1005825&r1=1005824&r2=1005825&view=diff
==============================================================================
--- felix/trunk/framework/src/main/java/org/apache/felix/framework/resolver/Module.java (original)
+++ felix/trunk/framework/src/main/java/org/apache/felix/framework/resolver/Module.java Fri Oct 8 13:51:34 2010
@@ -72,4 +72,5 @@ public interface Module
throws IOException;
InputStream getInputStream(int index, String urlPath)
throws IOException;
+ URL getLocalURL(int index, String urlPath);
}
\ No newline at end of file