You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@felix.apache.org by ri...@apache.org on 2006/02/05 14:28:27 UTC

svn commit: r375026 - in /incubator/felix/trunk/org.apache.felix.framework/src/main/java/org/apache/felix/framework: BundleImpl.java Felix.java searchpolicy/ContentClassLoader.java searchpolicy/ContentLoaderImpl.java

Author: rickhall
Date: Sun Feb  5 05:28:26 2006
New Revision: 375026

URL: http://svn.apache.org/viewcvs?rev=375026&view=rev
Log:
Implemented Bundle.getEntry() for accessing the raw bundle JAR file; this
uses non-API methods from the Module Loader layer so it will need to be
tweaked in the future, but it appears to work for now.

Modified:
    incubator/felix/trunk/org.apache.felix.framework/src/main/java/org/apache/felix/framework/BundleImpl.java
    incubator/felix/trunk/org.apache.felix.framework/src/main/java/org/apache/felix/framework/Felix.java
    incubator/felix/trunk/org.apache.felix.framework/src/main/java/org/apache/felix/framework/searchpolicy/ContentClassLoader.java
    incubator/felix/trunk/org.apache.felix.framework/src/main/java/org/apache/felix/framework/searchpolicy/ContentLoaderImpl.java

Modified: incubator/felix/trunk/org.apache.felix.framework/src/main/java/org/apache/felix/framework/BundleImpl.java
URL: http://svn.apache.org/viewcvs/incubator/felix/trunk/org.apache.felix.framework/src/main/java/org/apache/felix/framework/BundleImpl.java?rev=375026&r1=375025&r2=375026&view=diff
==============================================================================
--- incubator/felix/trunk/org.apache.felix.framework/src/main/java/org/apache/felix/framework/BundleImpl.java (original)
+++ incubator/felix/trunk/org.apache.felix.framework/src/main/java/org/apache/felix/framework/BundleImpl.java Sun Feb  5 05:28:26 2006
@@ -55,6 +55,11 @@
         return m_info.getBundleId();
     }
 
+    public URL getEntry(String name)
+    {
+        return m_felix.getBundleEntry(this, name);
+    }
+
     public Dictionary getHeaders()
     {
         return m_felix.getBundleHeaders(this);
@@ -166,12 +171,6 @@
     public Enumeration getEntryPaths(String path)
     {
         // TODO: Implement Bundle.getEntryPaths()
-        return null;
-    }
-
-    public URL getEntry(String name)
-    {
-        // TODO: Implement Bundle.getEntry()
         return null;
     }
 

Modified: incubator/felix/trunk/org.apache.felix.framework/src/main/java/org/apache/felix/framework/Felix.java
URL: http://svn.apache.org/viewcvs/incubator/felix/trunk/org.apache.felix.framework/src/main/java/org/apache/felix/framework/Felix.java?rev=375026&r1=375025&r2=375026&view=diff
==============================================================================
--- incubator/felix/trunk/org.apache.felix.framework/src/main/java/org/apache/felix/framework/Felix.java (original)
+++ incubator/felix/trunk/org.apache.felix.framework/src/main/java/org/apache/felix/framework/Felix.java Sun Feb  5 05:28:26 2006
@@ -966,6 +966,24 @@
         return bundle.getInfo().getCurrentModule().getResource(name);
     }
 
+    /**
+     * Implementation for Bundle.getEntry().
+    **/
+    protected URL getBundleEntry(BundleImpl bundle, String name)
+    {
+        if (bundle.getInfo().getState() == Bundle.UNINSTALLED)
+        {
+            throw new IllegalStateException("The bundle is uninstalled.");
+        }
+// TODO: SECURITY - Implement correct check.
+        else if (System.getSecurityManager() != null)
+        {
+            AccessController.checkPermission(m_adminPerm);
+        }
+        return ((ContentLoaderImpl) bundle.getInfo().getCurrentModule()
+            .getContentLoader()).getResourceFromContent(name);
+    }
+
     protected ServiceReference[] getBundleRegisteredServices(BundleImpl bundle)
     {
         if (bundle.getInfo().getState() == Bundle.UNINSTALLED)

Modified: incubator/felix/trunk/org.apache.felix.framework/src/main/java/org/apache/felix/framework/searchpolicy/ContentClassLoader.java
URL: http://svn.apache.org/viewcvs/incubator/felix/trunk/org.apache.felix.framework/src/main/java/org/apache/felix/framework/searchpolicy/ContentClassLoader.java?rev=375026&r1=375025&r2=375026&view=diff
==============================================================================
--- incubator/felix/trunk/org.apache.felix.framework/src/main/java/org/apache/felix/framework/searchpolicy/ContentClassLoader.java (original)
+++ incubator/felix/trunk/org.apache.felix.framework/src/main/java/org/apache/felix/framework/searchpolicy/ContentClassLoader.java Sun Feb  5 05:28:26 2006
@@ -21,7 +21,6 @@
 import java.security.SecureClassLoader;
 import java.security.cert.Certificate;
 import java.util.Enumeration;
-import java.util.Vector;
 
 import org.apache.felix.framework.Logger;
 import org.apache.felix.framework.util.Util;
@@ -198,48 +197,12 @@
 
     protected URL findResource(String name)
     {
-        URL url = null;
-
-        // Remove leading slash, if present.
-        if (name.startsWith("/"))
-        {
-            name = name.substring(1);
-        }
-
-        // Check the module class path.
-        for (int i = 0;
-            (url == null) &&
-            (i < m_contentLoader.getClassPath().length); i++)
-        {
-            if (m_contentLoader.getClassPath()[i].hasEntry(name))
-            {
-                url = m_contentLoader.getURLPolicy().createURL(i + "/" + name);
-            }
-        }
-
-        return url;
+        return m_contentLoader.getResource(name);
     }
 
     protected Enumeration findResources(String name)
     {
-        Vector v = new Vector();
-
-        // Remove leading slash, if present.
-        if (name.startsWith("/"))
-        {
-            name = name.substring(1);
-        }
-
-        // Check the module class path.
-        for (int i = 0; i < m_contentLoader.getClassPath().length; i++)
-        {
-            if (m_contentLoader.getClassPath()[i].hasEntry(name))
-            {
-                v.addElement(m_contentLoader.getURLPolicy().createURL(i + "/" + name));
-            }
-        }
-
-        return v.elements();
+        return m_contentLoader.getResources(name);
     }
 
     protected String findLibrary(String name)

Modified: incubator/felix/trunk/org.apache.felix.framework/src/main/java/org/apache/felix/framework/searchpolicy/ContentLoaderImpl.java
URL: http://svn.apache.org/viewcvs/incubator/felix/trunk/org.apache.felix.framework/src/main/java/org/apache/felix/framework/searchpolicy/ContentLoaderImpl.java?rev=375026&r1=375025&r2=375026&view=diff
==============================================================================
--- incubator/felix/trunk/org.apache.felix.framework/src/main/java/org/apache/felix/framework/searchpolicy/ContentLoaderImpl.java (original)
+++ incubator/felix/trunk/org.apache.felix.framework/src/main/java/org/apache/felix/framework/searchpolicy/ContentLoaderImpl.java Sun Feb  5 05:28:26 2006
@@ -19,6 +19,8 @@
 import java.io.IOException;
 import java.io.InputStream;
 import java.net.URL;
+import java.util.Enumeration;
+import java.util.Vector;
 
 import org.apache.felix.framework.Logger;
 import org.apache.felix.moduleloader.*;
@@ -111,12 +113,74 @@
 
     public URL getResource(String name)
     {
-        if (m_classLoader == null)
+        URL url = null;
+        // Remove leading slash, if present.
+        if (name.startsWith("/"))
         {
-            m_classLoader = new ContentClassLoader(this);
+            name = name.substring(1);
         }
 
-        return m_classLoader.getResourceFromModule(name);
+        // Check the module class path.
+        for (int i = 0;
+            (url == null) &&
+            (i < getClassPath().length); i++)
+        {
+            if (getClassPath()[i].hasEntry(name))
+            {
+                url = getURLPolicy().createURL((i + 1) + "/" + name);
+            }
+        }
+
+        return url;
+    }
+
+    protected Enumeration getResources(String name)
+    {
+        Vector v = new Vector();
+
+        // Remove leading slash, if present.
+        if (name.startsWith("/"))
+        {
+            name = name.substring(1);
+        }
+
+        // Check the module class path.
+        for (int i = 0; i < getClassPath().length; i++)
+        {
+            if (getClassPath()[i].hasEntry(name))
+            {
+                // Use the class path index + 1 for creating the path so
+                // that we can differentiate between module content URLs
+                // (where the path will start with 0) and module class
+                // path URLs.
+                v.addElement(getURLPolicy().createURL((i + 1) + "/" + name));
+            }
+        }
+
+        return v.elements();
+    }
+
+    // TODO: API: Investigate making this an API call.
+    public URL getResourceFromContent(String name)
+    {
+        URL url = null;
+
+        // Remove leading slash, if present.
+        if (name.startsWith("/"))
+        {
+            name = name.substring(1);
+        }
+
+        // Check the module content.
+        if (getContent().hasEntry(name))
+        {
+            // Module content URLs start with 0, whereas module
+            // class path URLs start with the index into the class
+            // path + 1.
+            url = getURLPolicy().createURL("0/" + name);
+        }
+
+        return url;
     }
 
     public InputStream getResourceAsStream(String name)
@@ -127,10 +191,17 @@
             name = name.substring(1);
         }
         // The name is the path contructed like this:
-        // <class-path-index> / <relative-resource-path>
+        // <index> / <relative-resource-path>
+        // where <index> == 0 is the module content
+        // and <index> > 0 is the index into the class
+        // path - 1.
         int idx = Integer.parseInt(name.substring(0, name.indexOf('/')));
         name = name.substring(name.indexOf('/') + 1);
-        return m_contentPath[idx].getEntryAsStream(name);
+        if (idx == 0)
+        {
+            return m_content.getEntryAsStream(name);
+        }
+        return m_contentPath[idx - 1].getEntryAsStream(name);
     }
 
     public String toString()