Author: rickhall
Date: Fri Aug 29 09:17:26 2008
New Revision: 690313

URL: http://svn.apache.org/viewvc?rev=690313&view=rev
Log:
Support JAR-wide manifest package metadata. (FELIX-682)

Modified:
    felix/trunk/framework/src/main/java/org/apache/felix/framework/Felix.java
    
felix/trunk/framework/src/main/java/org/apache/felix/framework/cache/DirectoryRevision.java
    
felix/trunk/framework/src/main/java/org/apache/felix/framework/cache/JarRevision.java
    
felix/trunk/framework/src/main/java/org/apache/felix/framework/searchpolicy/ContentLoaderImpl.java
    
felix/trunk/framework/src/main/java/org/apache/felix/framework/searchpolicy/ModuleDefinition.java
    
felix/trunk/framework/src/main/java/org/apache/felix/framework/searchpolicy/R4SearchPolicyCore.java

Modified: 
felix/trunk/framework/src/main/java/org/apache/felix/framework/Felix.java
URL: 
http://svn.apache.org/viewvc/felix/trunk/framework/src/main/java/org/apache/felix/framework/Felix.java?rev=690313&r1=690312&r2=690313&view=diff
==============================================================================
--- felix/trunk/framework/src/main/java/org/apache/felix/framework/Felix.java 
(original)
+++ felix/trunk/framework/src/main/java/org/apache/felix/framework/Felix.java 
Fri Aug 29 09:17:26 2008
@@ -3445,6 +3445,7 @@
         // Note, in case this is an extension bundle it's exports are removed -
         // they will be added to the system bundle directly later on.
         IModuleDefinition md = new ModuleDefinition(
+            headerMap,
             (isExtensionBundle) ? null : mp.getCapabilities(),
             mp.getRequirements(),
             mp.getDynamicRequirements(),

Modified: 
felix/trunk/framework/src/main/java/org/apache/felix/framework/cache/DirectoryRevision.java
URL: 
http://svn.apache.org/viewvc/felix/trunk/framework/src/main/java/org/apache/felix/framework/cache/DirectoryRevision.java?rev=690313&r1=690312&r2=690313&view=diff
==============================================================================
--- 
felix/trunk/framework/src/main/java/org/apache/felix/framework/cache/DirectoryRevision.java
 (original)
+++ 
felix/trunk/framework/src/main/java/org/apache/felix/framework/cache/DirectoryRevision.java
 Fri Aug 29 09:17:26 2008
@@ -21,18 +21,12 @@
 import java.io.File;
 import java.io.IOException;
 import java.io.InputStream;
-import java.util.ArrayList;
-import java.util.List;
 import java.util.Map;
 import java.util.jar.Manifest;
 
 import org.apache.felix.framework.Logger;
-import org.apache.felix.framework.util.FelixConstants;
 import org.apache.felix.framework.util.StringMap;
-import org.apache.felix.framework.util.manifestparser.ManifestParser;
-import org.apache.felix.framework.cache.DirectoryContent;
 import org.apache.felix.moduleloader.IContent;
-import org.apache.felix.framework.cache.JarContent;
 
 /**
  * <p>
@@ -44,7 +38,6 @@
 class DirectoryRevision extends BundleRevision
 {
     private File m_refDir = null;
-    private Map m_header = null;
 
     public DirectoryRevision(
         Logger logger, File revisionRootDir, String location) throws Exception
@@ -76,11 +69,6 @@
     public synchronized Map getManifestHeader()
         throws Exception
     {
-        if (m_header != null)
-        {
-            return m_header;
-        }
-
         // Read the header file from the reference directory.
         InputStream is = null;
 
@@ -98,8 +86,7 @@
             // Get manifest.
             Manifest mf = new Manifest(is);
             // Create a case insensitive map of manifest attributes.
-            m_header = new StringMap(mf.getMainAttributes(), false);
-            return m_header;
+            return new StringMap(mf.getMainAttributes(), false);
         }
         finally
         {

Modified: 
felix/trunk/framework/src/main/java/org/apache/felix/framework/cache/JarRevision.java
URL: 
http://svn.apache.org/viewvc/felix/trunk/framework/src/main/java/org/apache/felix/framework/cache/JarRevision.java?rev=690313&r1=690312&r2=690313&view=diff
==============================================================================
--- 
felix/trunk/framework/src/main/java/org/apache/felix/framework/cache/JarRevision.java
 (original)
+++ 
felix/trunk/framework/src/main/java/org/apache/felix/framework/cache/JarRevision.java
 Fri Aug 29 09:17:26 2008
@@ -48,7 +48,6 @@
     private static final transient String BUNDLE_JAR_FILE = "bundle.jar";
 
     private File m_bundleFile = null;
-    private Map m_header = null;
 
     public JarRevision(
         Logger logger, File revisionRootDir, String location, boolean 
byReference)
@@ -81,11 +80,6 @@
 
     public synchronized Map getManifestHeader() throws Exception
     {
-        if (m_header != null)
-        {
-            return m_header;
-        }
-
         // Get the embedded resource.
         JarFile jarFile = null;
 
@@ -101,9 +95,7 @@
             // Get manifest.
             Manifest mf = jarFile.getManifest();
             // Create a case insensitive map of manifest attributes.
-            m_header = new StringMap(mf.getMainAttributes(), false);
-            return m_header;
-
+            return new StringMap(mf.getMainAttributes(), false);
         }
         finally
         {

Modified: 
felix/trunk/framework/src/main/java/org/apache/felix/framework/searchpolicy/ContentLoaderImpl.java
URL: 
http://svn.apache.org/viewvc/felix/trunk/framework/src/main/java/org/apache/felix/framework/searchpolicy/ContentLoaderImpl.java?rev=690313&r1=690312&r2=690313&view=diff
==============================================================================
--- 
felix/trunk/framework/src/main/java/org/apache/felix/framework/searchpolicy/ContentLoaderImpl.java
 (original)
+++ 
felix/trunk/framework/src/main/java/org/apache/felix/framework/searchpolicy/ContentLoaderImpl.java
 Fri Aug 29 09:17:26 2008
@@ -332,6 +332,10 @@
         Map headers = null;
         try
         {
+// TODO: REFACTOR - It seems that we shouldn't have to get the manifest
+//       here since we already have it in our module definition, but we
+//       don't have access to the module definition here. This is something
+//       to be considered when we refactor the module layer.
             is = content.getEntryAsStream("META-INF/MANIFEST.MF");
             headers = new StringMap(new Manifest(is).getMainAttributes(), 
false);
         }

Modified: 
felix/trunk/framework/src/main/java/org/apache/felix/framework/searchpolicy/ModuleDefinition.java
URL: 
http://svn.apache.org/viewvc/felix/trunk/framework/src/main/java/org/apache/felix/framework/searchpolicy/ModuleDefinition.java?rev=690313&r1=690312&r2=690313&view=diff
==============================================================================
--- 
felix/trunk/framework/src/main/java/org/apache/felix/framework/searchpolicy/ModuleDefinition.java
 (original)
+++ 
felix/trunk/framework/src/main/java/org/apache/felix/framework/searchpolicy/ModuleDefinition.java
 Fri Aug 29 09:17:26 2008
@@ -18,26 +18,34 @@
  */
 package org.apache.felix.framework.searchpolicy;
 
+import java.util.Map;
 import org.apache.felix.framework.util.manifestparser.R4Library;
 import org.apache.felix.moduleloader.*;
 
 public class ModuleDefinition implements IModuleDefinition
 {
-    public ICapability[] m_capabilities = null;
-    public IRequirement[] m_requirements = null;
-    public IRequirement[] m_dynamicRequirements = null;
+    private Map m_headerMap = null;
+    private ICapability[] m_capabilities = null;
+    private IRequirement[] m_requirements = null;
+    private IRequirement[] m_dynamicRequirements = null;
     private R4Library[] m_libraries = null;
 
     public ModuleDefinition(
-        ICapability[] capabilities, IRequirement[] requirements,
+        Map headerMap, ICapability[] capabilities, IRequirement[] requirements,
         IRequirement[] dynamicRequirements, R4Library[] libraries)
     {
+        m_headerMap = headerMap;
         m_capabilities = capabilities;
         m_requirements = requirements;
         m_dynamicRequirements = dynamicRequirements;
         m_libraries = libraries;
     }
 
+    public Map getHeaders()
+    {
+        return m_headerMap;
+    }
+
     public ICapability[] getCapabilities()
     {
 // TODO: RB - These should probably all return copies of the array.

Modified: 
felix/trunk/framework/src/main/java/org/apache/felix/framework/searchpolicy/R4SearchPolicyCore.java
URL: 
http://svn.apache.org/viewvc/felix/trunk/framework/src/main/java/org/apache/felix/framework/searchpolicy/R4SearchPolicyCore.java?rev=690313&r1=690312&r2=690313&view=diff
==============================================================================
--- 
felix/trunk/framework/src/main/java/org/apache/felix/framework/searchpolicy/R4SearchPolicyCore.java
 (original)
+++ 
felix/trunk/framework/src/main/java/org/apache/felix/framework/searchpolicy/R4SearchPolicyCore.java
 Fri Aug 29 09:17:26 2008
@@ -33,7 +33,6 @@
 import org.apache.felix.framework.BundleProtectionDomain;
 import org.apache.felix.framework.Logger;
 import org.apache.felix.framework.util.CompoundEnumeration;
-import org.apache.felix.framework.util.FelixConstants;
 import org.apache.felix.framework.util.SecurityManagerEx;
 import org.apache.felix.framework.util.Util;
 import org.apache.felix.framework.util.manifestparser.Capability;
@@ -43,7 +42,6 @@
 import org.apache.felix.framework.util.manifestparser.R4Library;
 import org.apache.felix.framework.util.manifestparser.Requirement;
 import org.apache.felix.moduleloader.ICapability;
-import org.apache.felix.moduleloader.IContent;
 import org.apache.felix.moduleloader.IModule;
 import org.apache.felix.moduleloader.IModuleFactory;
 import org.apache.felix.moduleloader.IRequirement;
@@ -158,25 +156,23 @@
 
     public Object[] definePackage(IModule module, String pkgName)
     {
-        try
-        {
-            ICapability cap = Util.getSatisfyingCapability(module,
-                new Requirement(ICapability.PACKAGE_NAMESPACE, "(package=" + 
pkgName + ")"));
-            if (cap != null)
-            {
-                return new Object[] {
-                    pkgName, // Spec title.
-                    
cap.getProperties().get(ICapability.VERSION_PROPERTY).toString(), // Spec 
version.
-                    "", // Spec vendor.
-                    "", // Impl title.
-                    "", // Impl version.
-                    "" // Impl vendor.
-                };
-            }
-        }
-        catch (InvalidSyntaxException ex)
-        {
-            // This should never happen.
+        Map headerMap = ((ModuleDefinition) 
module.getDefinition()).getHeaders();
+        String spectitle = (String) headerMap.get("Specification-Title");
+        String specversion = (String) headerMap.get("Specification-Version");
+        String specvendor = (String) headerMap.get("Specification-Vendor");
+        String impltitle = (String) headerMap.get("Implementation-Title");
+        String implversion = (String) headerMap.get("Implementation-Version");
+        String implvendor = (String) headerMap.get("Implementation-Vendor");
+        if ((spectitle != null)
+            || (specversion != null)
+            || (specvendor != null)
+            || (impltitle != null)
+            || (implversion != null)
+            || (implvendor != null))
+        {
+            return new Object[] {
+                spectitle, specversion, specvendor, impltitle, implversion, 
implvendor
+            };
         }
         return null;
     }


Reply via email to