You are viewing a plain text version of this content. The canonical link for it is here.
Posted to scm@geronimo.apache.org by ga...@apache.org on 2009/12/19 02:53:40 UTC

svn commit: r892418 - /geronimo/server/trunk/framework/modules/geronimo-kernel/src/main/java/org/apache/geronimo/kernel/osgi/BundleDescription.java

Author: gawor
Date: Sat Dec 19 01:53:40 2009
New Revision: 892418

URL: http://svn.apache.org/viewvc?rev=892418&view=rev
Log:
parse out Require-Bundle and Fragment-Host

Modified:
    geronimo/server/trunk/framework/modules/geronimo-kernel/src/main/java/org/apache/geronimo/kernel/osgi/BundleDescription.java

Modified: geronimo/server/trunk/framework/modules/geronimo-kernel/src/main/java/org/apache/geronimo/kernel/osgi/BundleDescription.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/framework/modules/geronimo-kernel/src/main/java/org/apache/geronimo/kernel/osgi/BundleDescription.java?rev=892418&r1=892417&r2=892418&view=diff
==============================================================================
--- geronimo/server/trunk/framework/modules/geronimo-kernel/src/main/java/org/apache/geronimo/kernel/osgi/BundleDescription.java (original)
+++ geronimo/server/trunk/framework/modules/geronimo-kernel/src/main/java/org/apache/geronimo/kernel/osgi/BundleDescription.java Sat Dec 19 01:53:40 2009
@@ -74,8 +74,7 @@
             ExportPackage p = new ExportPackage(element.getName(), element.getAttributes(), element.getDirectives());
             exports.add(p);
         }
-        return exports;
-        
+        return exports;        
     }
     
     /**
@@ -103,14 +102,31 @@
         return false;
     }
     
-    public List<String> getRequireBundle() {
+    /**
+     * Returns a list of bundle names that are listed in <i>Require-Bundle</i> header.
+     */
+    public List<RequireBundle> getRequireBundle() {
         String headerValue = (String) headers.get(Constants.REQUIRE_BUNDLE);
-        List<String> required = new ArrayList<String>();
+        List<RequireBundle> requireBundles = new ArrayList<RequireBundle>();
         List<HeaderElement> elements = HeaderParser.parseHeader(headerValue);
         for (HeaderElement element : elements) {
-            required.add(element.getName());
+            RequireBundle p = new RequireBundle(element.getName(), element.getAttributes(), element.getDirectives());
+            requireBundles.add(p);
         }
-        return required;
+        return requireBundles;   
+    }
+    
+    /**
+     * Returns <i>Fragment-Host</i> header.
+     */
+    public FragmentHost getFragmentHost() {
+        String headerValue = (String) headers.get(Constants.REQUIRE_BUNDLE);
+        List<HeaderElement> elements = HeaderParser.parseHeader(headerValue);
+        if (elements.size() == 1) {
+            HeaderElement element = elements.get(0);
+            return new FragmentHost(element.getName(), element.getAttributes(), element.getDirectives());
+        }
+        return null;
     }
     
     /**
@@ -118,13 +134,7 @@
      */
     public List<HeaderEntry> getDynamicImportPackage() {
         String headerValue = (String) headers.get(Constants.DYNAMICIMPORT_PACKAGE);
-        List<HeaderEntry> imports = new ArrayList<HeaderEntry>();
-        List<HeaderElement> elements = HeaderParser.parseHeader(headerValue);
-        for (HeaderElement element : elements) {
-            HeaderEntry p = new HeaderEntry(element.getName(), element.getAttributes(), element.getDirectives());
-            imports.add(p);
-        }
-        return imports;
+        return parseStandardHeader(headerValue);
     }
     
     public SymbolicName getSymbolicName() {
@@ -137,10 +147,25 @@
         return null;
     }
     
+    public Version getVersion() {
+        String headerValue = (String) headers.get(Constants.BUNDLE_VERSION);
+        return getVersionRange(headerValue).getLow();
+    }
+    
     public Map getHeaders() {
         return headers;
     }
     
+    private List<HeaderEntry> parseStandardHeader(String headerValue) {
+        List<HeaderEntry> imports = new ArrayList<HeaderEntry>();
+        List<HeaderElement> elements = HeaderParser.parseHeader(headerValue);
+        for (HeaderElement element : elements) {
+            HeaderEntry p = new HeaderEntry(element.getName(), element.getAttributes(), element.getDirectives());
+            imports.add(p);
+        }
+        return imports;
+    }
+    
     private static Map<String, String> manifestToMap(Manifest manifest) {
         Attributes attributes = manifest.getMainAttributes();
         Map<String, String> headers = new HashMap<String, String>();
@@ -152,6 +177,13 @@
         return headers;
     }
     
+    private static VersionRange getVersionRange(String version) {
+        if (version == null) {
+            version = "0.0.0";
+        }
+        return VersionRange.parse(version);
+    }
+    
     public static class HeaderEntry {
     
         private String name;
@@ -186,13 +218,6 @@
             return builder.toString();
         }
         
-        protected VersionRange getVersionRange() {
-            String version = attributes.get(Constants.VERSION_ATTRIBUTE);
-            if (version == null) {
-                version = "0.0.0";
-            }
-            return VersionRange.parse(version);
-        }
     }
     
     public static class ExportPackage extends HeaderEntry {
@@ -203,7 +228,7 @@
                              Map<String, String> attributes,
                              Map<String, String> directives) {
             super(name, attributes, directives);
-            version = getVersionRange().getLow();
+            version = BundleDescription.getVersionRange(attributes.get(Constants.VERSION_ATTRIBUTE)).getLow();
         }
         
         public Version getVersion() {
@@ -224,7 +249,7 @@
             String resolution = directives.get(Constants.RESOLUTION_DIRECTIVE);
             optional = Constants.RESOLUTION_OPTIONAL.equals(resolution);
             
-            versionRange = super.getVersionRange();
+            versionRange = BundleDescription.getVersionRange(attributes.get(Constants.VERSION_ATTRIBUTE));
         }
         
         public boolean isOptional() {
@@ -249,4 +274,49 @@
         }
         
     }
+    
+    public static class RequireBundle extends HeaderEntry {
+
+        private boolean optional;
+        private VersionRange versionRange;
+        
+        public RequireBundle(String name,
+                             Map<String, String> attributes,
+                             Map<String, String> directives) {
+            super(name, attributes, directives);
+
+            String resolution = directives.get(Constants.RESOLUTION_DIRECTIVE);
+            optional = Constants.RESOLUTION_OPTIONAL.equals(resolution);
+            
+            versionRange = BundleDescription.getVersionRange(attributes.get(Constants.BUNDLE_VERSION_ATTRIBUTE));
+        }
+        
+        public boolean isOptional() {
+            return optional;
+        }
+        
+        public boolean isMandatory() {
+            return !optional;
+        }
+        
+        public VersionRange getVersionRange() {
+            return versionRange;
+        }
+    }
+    
+    public static class FragmentHost extends HeaderEntry {
+
+        private VersionRange versionRange;
+        
+        public FragmentHost(String name,
+                             Map<String, String> attributes,
+                             Map<String, String> directives) {
+            super(name, attributes, directives);
+            versionRange = BundleDescription.getVersionRange(attributes.get(Constants.BUNDLE_VERSION_ATTRIBUTE));
+        }
+        
+        public VersionRange getVersionRange() {
+            return versionRange;
+        }
+    }
 }