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