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/18 17:59:35 UTC
svn commit: r892313 - in
/geronimo/server/trunk/framework/modules/geronimo-kernel/src:
main/java/org/apache/geronimo/kernel/osgi/
test/java/org/apache/geronimo/kernel/osgi/
Author: gawor
Date: Fri Dec 18 16:59:35 2009
New Revision: 892313
URL: http://svn.apache.org/viewvc?rev=892313&view=rev
Log:
a few more parsing improvments
Modified:
geronimo/server/trunk/framework/modules/geronimo-kernel/src/main/java/org/apache/geronimo/kernel/osgi/BundleClassLoader.java
geronimo/server/trunk/framework/modules/geronimo-kernel/src/main/java/org/apache/geronimo/kernel/osgi/BundleDescription.java
geronimo/server/trunk/framework/modules/geronimo-kernel/src/test/java/org/apache/geronimo/kernel/osgi/BundleDescriptionTest.java
Modified: geronimo/server/trunk/framework/modules/geronimo-kernel/src/main/java/org/apache/geronimo/kernel/osgi/BundleClassLoader.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/framework/modules/geronimo-kernel/src/main/java/org/apache/geronimo/kernel/osgi/BundleClassLoader.java?rev=892313&r1=892312&r2=892313&view=diff
==============================================================================
--- geronimo/server/trunk/framework/modules/geronimo-kernel/src/main/java/org/apache/geronimo/kernel/osgi/BundleClassLoader.java (original)
+++ geronimo/server/trunk/framework/modules/geronimo-kernel/src/main/java/org/apache/geronimo/kernel/osgi/BundleClassLoader.java Fri Dec 18 16:59:35 2009
@@ -137,7 +137,7 @@
// handle static wire via Import-Package
List<BundleDescription.ImportPackage> imports = description.getExternalImports();
LinkedHashSet<Bundle> wiredBundles = new LinkedHashSet<Bundle>();
- for (BundleDescription.Package packageImport : imports) {
+ for (BundleDescription.ImportPackage packageImport : imports) {
ExportedPackage[] exports = packageAdmin.getExportedPackages(packageImport.getName());
Bundle wiredBundle = getWiredBundle(exports);
if (wiredBundle != null) {
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=892313&r1=892312&r2=892313&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 Fri Dec 18 16:59:35 2009
@@ -20,8 +20,11 @@
import java.util.ArrayList;
import java.util.Dictionary;
+import java.util.HashMap;
import java.util.List;
import java.util.Map;
+import java.util.jar.Attributes;
+import java.util.jar.Manifest;
import org.apache.geronimo.kernel.osgi.HeaderParser.HeaderElement;
import org.osgi.framework.Constants;
@@ -34,6 +37,10 @@
private Map headers;
+ public BundleDescription(Manifest manifest) {
+ this.headers = manifestToMap(manifest);
+ }
+
public BundleDescription(Dictionary dictionary) {
this.headers = new DictionaryMap(dictionary);
}
@@ -87,8 +94,8 @@
return realImports;
}
- private static boolean isExported(List<ExportPackage> exports, Package p) {
- for (Package export : exports) {
+ private static boolean isExported(List<ExportPackage> exports, ImportPackage p) {
+ for (ExportPackage export : exports) {
if (export.getName().equals(p.getName())) {
return true;
}
@@ -109,34 +116,51 @@
/**
* Returns a list of packages that are listed in <i>DynamicImport-Package</i> header.
*/
- public List<Package> getDynamicImportPackage() {
+ public List<HeaderEntry> getDynamicImportPackage() {
String headerValue = (String) headers.get(Constants.DYNAMICIMPORT_PACKAGE);
- List<Package> imports = new ArrayList<Package>();
+ List<HeaderEntry> imports = new ArrayList<HeaderEntry>();
List<HeaderElement> elements = HeaderParser.parseHeader(headerValue);
for (HeaderElement element : elements) {
- Package p = new Package(element.getName(), element.getAttributes(), element.getDirectives());
+ HeaderEntry p = new HeaderEntry(element.getName(), element.getAttributes(), element.getDirectives());
imports.add(p);
}
return imports;
}
- public String getSymbolicName() {
- return (String) headers.get(Constants.BUNDLE_SYMBOLICNAME);
+ public SymbolicName getSymbolicName() {
+ String headerValue = (String) headers.get(Constants.BUNDLE_SYMBOLICNAME);
+ List<HeaderElement> elements = HeaderParser.parseHeader(headerValue);
+ if (elements.size() == 1) {
+ HeaderElement element = elements.get(0);
+ return new SymbolicName(element.getName(), element.getAttributes(), element.getDirectives());
+ }
+ return null;
}
public Map getHeaders() {
return headers;
}
- public static class Package {
+ private static Map<String, String> manifestToMap(Manifest manifest) {
+ Attributes attributes = manifest.getMainAttributes();
+ Map<String, String> headers = new HashMap<String, String>();
+ for (Map.Entry<Object, Object> entry : attributes.entrySet()) {
+ String key = entry.getKey().toString();
+ String value = entry.getValue().toString();
+ headers.put(key, value);
+ }
+ return headers;
+ }
+
+ public static class HeaderEntry {
private String name;
private Map<String, String> attributes;
private Map<String, String> directives;
- public Package(String name,
- Map<String, String> attributes,
- Map<String, String> directives) {
+ public HeaderEntry(String name,
+ Map<String, String> attributes,
+ Map<String, String> directives) {
this.name = name;
this.attributes = attributes;
this.directives = directives;
@@ -171,7 +195,7 @@
}
}
- public class ExportPackage extends Package {
+ public static class ExportPackage extends HeaderEntry {
private Version version;
@@ -187,7 +211,7 @@
}
}
- public class ImportPackage extends Package {
+ public static class ImportPackage extends HeaderEntry {
private boolean optional;
private VersionRange versionRange;
@@ -215,4 +239,14 @@
return versionRange;
}
}
+
+ public static class SymbolicName extends HeaderEntry {
+
+ public SymbolicName(String name,
+ Map<String, String> attributes,
+ Map<String, String> directives) {
+ super(name, attributes, directives);
+ }
+
+ }
}
Modified: geronimo/server/trunk/framework/modules/geronimo-kernel/src/test/java/org/apache/geronimo/kernel/osgi/BundleDescriptionTest.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/framework/modules/geronimo-kernel/src/test/java/org/apache/geronimo/kernel/osgi/BundleDescriptionTest.java?rev=892313&r1=892312&r2=892313&view=diff
==============================================================================
--- geronimo/server/trunk/framework/modules/geronimo-kernel/src/test/java/org/apache/geronimo/kernel/osgi/BundleDescriptionTest.java (original)
+++ geronimo/server/trunk/framework/modules/geronimo-kernel/src/test/java/org/apache/geronimo/kernel/osgi/BundleDescriptionTest.java Fri Dec 18 16:59:35 2009
@@ -58,5 +58,20 @@
assertEquals("1.3", externalImports.get(0).getAttributes().get("version"));
assertEquals("com.thoughtworks.xstream.converters", externalImports.get(1).getName());
}
+
+ public void testSymbolicName() throws Exception {
+ Map<String, String> headers = new HashMap<String, String>();
+
+ BundleDescription desc = new BundleDescription(headers);
+
+ // test simple
+ headers.put(Constants.BUNDLE_SYMBOLICNAME, "foo1");
+ assertEquals("foo1", desc.getSymbolicName().getName());
+
+ // test with a directive
+ headers.put(Constants.BUNDLE_SYMBOLICNAME, "foo2; singleton:=true");
+ assertEquals("foo2", desc.getSymbolicName().getName());
+ assertEquals("true", desc.getSymbolicName().getDirectives().get("singleton"));
+ }
}