Sync bnd code
git-svn-id: https://svn.apache.org/repos/asf/felix/trunk@1412393 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/bundleplugin/src/main/java/aQute/bnd/osgi/Analyzer.java b/bundleplugin/src/main/java/aQute/bnd/osgi/Analyzer.java
index fbbf4fa..7548f51 100755
--- a/bundleplugin/src/main/java/aQute/bnd/osgi/Analyzer.java
+++ b/bundleplugin/src/main/java/aQute/bnd/osgi/Analyzer.java
@@ -2008,7 +2008,7 @@
private static String removeLeadingZeroes(String group) {
if (group == null)
- return null;
+ return "0";
int n = 0;
while (n < group.length() - 1 && group.charAt(n) == '0')
diff --git a/bundleplugin/src/main/java/aQute/bnd/osgi/Domain.java b/bundleplugin/src/main/java/aQute/bnd/osgi/Domain.java
index 1b17aaf..e904aa8 100644
--- a/bundleplugin/src/main/java/aQute/bnd/osgi/Domain.java
+++ b/bundleplugin/src/main/java/aQute/bnd/osgi/Domain.java
@@ -2,6 +2,7 @@
import static aQute.bnd.osgi.Constants.*;
+import java.io.*;
import java.util.*;
import java.util.Map.Entry;
import java.util.jar.*;
@@ -17,6 +18,7 @@
* provides convenient methods to access these properties via semantic methods.
*/
public abstract class Domain implements Iterable<String> {
+ final Properties translation = new Properties();
public abstract String get(String key);
@@ -27,6 +29,23 @@
return deflt;
}
+ public String translate(String key) {
+ return translate(key, null);
+ }
+
+
+ public String translate(String key, String deflt) {
+ String value = get(key);
+ if ( value == null)
+ return deflt;
+
+ if ( value.indexOf('%')>=0) {
+ value = value.trim().substring(1);
+ return translation.getProperty(value,value);
+ }
+ return null;
+ }
+
public abstract void set(String key, String value);
public abstract Iterator<String> iterator();
@@ -147,6 +166,13 @@
public Parameters getParameters(String key, String deflt, Reporter reporter) {
return new Parameters(get(key, deflt), reporter);
}
+
+
+ public Parameters getRequireBundle() {
+ return getParameters(Constants.REQUIRE_BUNDLE);
+ }
+
+
public Parameters getImportPackage() {
return getParameters(IMPORT_PACKAGE);
@@ -244,6 +270,13 @@
return p.entrySet().iterator().next();
}
+ public Map.Entry<String,Attrs> getFragmentHost() {
+ Parameters p = getParameters(FRAGMENT_HOST);
+ if (p.isEmpty())
+ return null;
+ return p.entrySet().iterator().next();
+ }
+
public void setBundleSymbolicName(String s) {
set(BUNDLE_SYMBOLICNAME, s);
}
@@ -307,4 +340,37 @@
set(CONDITIONAL_PACKAGE, string);
}
+
+ public void setTranslation(Jar jar) throws Exception {
+
+ Manifest m = jar.getManifest();
+ if (m == null)
+ return;
+
+ String path = m.getMainAttributes().getValue(Constants.BUNDLE_LOCALIZATION);
+ if (path == null)
+ path = org.osgi.framework.Constants.BUNDLE_LOCALIZATION_DEFAULT_BASENAME;
+
+ path += ".properties";
+
+ Resource propsResource = jar.getResource(path);
+ if (propsResource != null) {
+ InputStream in = propsResource.openInputStream();
+ try {
+ translation.load(in);
+ }
+ finally {
+ in.close();
+ }
+ }
+ }
+
+ public Parameters getRequireCapability() {
+ return getParameters(Constants.REQUIRE_CAPABILITY);
+ }
+
+ public Parameters getProvideCapability() {
+ return getParameters(Constants.PROVIDE_CAPABILITY);
+ }
+
}
diff --git a/bundleplugin/src/main/java/aQute/bnd/osgi/Macro.java b/bundleplugin/src/main/java/aQute/bnd/osgi/Macro.java
index be1a4c8..6146a00 100755
--- a/bundleplugin/src/main/java/aQute/bnd/osgi/Macro.java
+++ b/bundleplugin/src/main/java/aQute/bnd/osgi/Macro.java
@@ -220,9 +220,10 @@
Method m = target.getClass().getMethod(cname, new Class[] {
String[].class
});
- return (String) m.invoke(target, new Object[] {
+ Object result = m.invoke(target, new Object[] {
args
});
+ return result == null ? null : result.toString();
}
catch (NoSuchMethodException e) {
// Ignore
diff --git a/bundleplugin/src/main/java/aQute/bnd/osgi/Verifier.java b/bundleplugin/src/main/java/aQute/bnd/osgi/Verifier.java
index b5bd72c..77b324d 100755
--- a/bundleplugin/src/main/java/aQute/bnd/osgi/Verifier.java
+++ b/bundleplugin/src/main/java/aQute/bnd/osgi/Verifier.java
@@ -78,7 +78,7 @@
public final static String SYMBOLICNAME_STRING = "[a-zA-Z0-9_-]+(\\.[a-zA-Z0-9_-]+)*";
public final static Pattern SYMBOLICNAME = Pattern.compile(SYMBOLICNAME_STRING);
- public final static String VERSION_STRING = "[0-9]+(\\.[0-9]+(\\.[0-9]+(\\.[0-9A-Za-z_-]+)?)?)?";
+ public final static String VERSION_STRING = "[0-9]{1,9}(\\.[0-9]{1,9}(\\.[0-9]{1,9}(\\.[0-9A-Za-z_-]+)?)?)?";
public final static Pattern VERSION = Pattern.compile(VERSION_STRING);
final static Pattern FILTEROP = Pattern.compile("=|<=|>=|~=");
public final static Pattern VERSIONRANGE = Pattern.compile("((\\(|\\[)"
diff --git a/bundleplugin/src/main/java/aQute/bnd/osgi/packageinfo b/bundleplugin/src/main/java/aQute/bnd/osgi/packageinfo
index 084a0d4..a2afe57 100644
--- a/bundleplugin/src/main/java/aQute/bnd/osgi/packageinfo
+++ b/bundleplugin/src/main/java/aQute/bnd/osgi/packageinfo
@@ -1 +1 @@
-version 2.0.0
+version 2.1.0
diff --git a/bundleplugin/src/main/java/aQute/bnd/osgi/resource/CapReqBuilder.java b/bundleplugin/src/main/java/aQute/bnd/osgi/resource/CapReqBuilder.java
index b06f37a..593dd39 100644
--- a/bundleplugin/src/main/java/aQute/bnd/osgi/resource/CapReqBuilder.java
+++ b/bundleplugin/src/main/java/aQute/bnd/osgi/resource/CapReqBuilder.java
@@ -18,74 +18,80 @@
public CapReqBuilder(String namespace) {
this.namespace = namespace;
}
-
+
public static CapReqBuilder clone(Capability capability) {
CapReqBuilder builder = new CapReqBuilder(capability.getNamespace());
builder.addAttributes(capability.getAttributes());
builder.addDirectives(capability.getDirectives());
return builder;
}
-
+
public static CapReqBuilder clone(Requirement requirement) {
CapReqBuilder builder = new CapReqBuilder(requirement.getNamespace());
builder.addAttributes(requirement.getAttributes());
builder.addDirectives(requirement.getDirectives());
return builder;
}
-
+
public String getNamespace() {
return namespace;
}
-
+
public CapReqBuilder setResource(Resource resource) {
this.resource = resource;
return this;
}
public CapReqBuilder addAttribute(String name, Object value) {
- attributes.put(name, value);
+ if (value != null)
+ attributes.put(name, value);
return this;
}
-
- public CapReqBuilder addAttributes(Map<? extends String, ? extends Object> attributes) {
+
+ public CapReqBuilder addAttributes(Map< ? extends String, ? extends Object> attributes) {
this.attributes.putAll(attributes);
return this;
}
public CapReqBuilder addDirective(String name, String value) {
- directives.put(name, value);
+ if (value != null)
+ directives.put(name, value);
return this;
}
-
- public CapReqBuilder addDirectives(Map<? extends String, ? extends String> directives) {
+
+ public CapReqBuilder addDirectives(Map< ? extends String, ? extends String> directives) {
this.directives.putAll(directives);
return this;
}
-
+
public Capability buildCapability() {
// TODO check the thrown exception
- if (resource == null) throw new IllegalStateException("Cannot build Capability with null Resource.");
+ if (resource == null)
+ throw new IllegalStateException("Cannot build Capability with null Resource.");
return new CapReq(MODE.Capability, namespace, resource, directives, attributes);
}
-
+
public Requirement buildRequirement() {
// TODO check the thrown exception
- if (resource == null) throw new IllegalStateException("Cannot build Requirement with null Resource.");
+ if (resource == null)
+ throw new IllegalStateException("Cannot build Requirement with null Resource.");
return new CapReq(MODE.Requirement, namespace, resource, directives, attributes);
}
public Requirement buildSyntheticRequirement() {
return new CapReq(MODE.Requirement, namespace, null, directives, attributes);
}
-
+
public static final CapReqBuilder createPackageRequirement(String pkgName, String range) {
Filter filter;
SimpleFilter pkgNameFilter = new SimpleFilter(PackageNamespace.PACKAGE_NAMESPACE, pkgName);
if (range != null)
- filter = new AndFilter().addChild(pkgNameFilter).addChild(new LiteralFilter(Filters.fromVersionRange(range)));
+ filter = new AndFilter().addChild(pkgNameFilter).addChild(
+ new LiteralFilter(Filters.fromVersionRange(range)));
else
filter = pkgNameFilter;
-
- return new CapReqBuilder(PackageNamespace.PACKAGE_NAMESPACE).addDirective(Namespace.REQUIREMENT_FILTER_DIRECTIVE, filter.toString());
+
+ return new CapReqBuilder(PackageNamespace.PACKAGE_NAMESPACE).addDirective(
+ Namespace.REQUIREMENT_FILTER_DIRECTIVE, filter.toString());
}
}
diff --git a/bundleplugin/src/main/java/aQute/bnd/osgi/resource/packageinfo b/bundleplugin/src/main/java/aQute/bnd/osgi/resource/packageinfo
index a4f1546..b1793a2 100644
--- a/bundleplugin/src/main/java/aQute/bnd/osgi/resource/packageinfo
+++ b/bundleplugin/src/main/java/aQute/bnd/osgi/resource/packageinfo
@@ -1 +1 @@
-version 1.0
\ No newline at end of file
+version 1.1.0
\ No newline at end of file