Temporarily include bndlib 1.47 for testing purposes (not yet on central)
git-svn-id: https://svn.apache.org/repos/asf/felix/trunk@1185095 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/bundleplugin/src/main/java/aQute/lib/deployer/obr/Resource.java b/bundleplugin/src/main/java/aQute/lib/deployer/obr/Resource.java
new file mode 100644
index 0000000..a355326
--- /dev/null
+++ b/bundleplugin/src/main/java/aQute/lib/deployer/obr/Resource.java
@@ -0,0 +1,240 @@
+package aQute.lib.deployer.obr;
+
+import java.util.Collections;
+import java.util.LinkedList;
+import java.util.List;
+
+/**
+ * @immutable
+ * @author Neil Bartlett
+ */
+public class Resource {
+
+ private final String id;
+ private final String presentationName;
+ private final String symbolicName;
+ private final String baseUrl;
+ private final String url;
+ private final String version;
+ private final List<Capability> capabilities;
+ private final List<Require> requires;
+
+ private Resource(String id, String presentationName, String symbolicName, String baseUrl, String url, String version, List<Capability> capabilities, List<Require> requires) {
+ this.id = id;
+ this.presentationName = presentationName;
+ this.symbolicName = symbolicName;
+ this.baseUrl = baseUrl;
+ this.url = url;
+ this.version = version;
+
+ this.capabilities = capabilities;
+ this.requires = requires;
+ }
+
+ public static class Builder {
+ private String id;
+ private String presentationName;
+ private String symbolicName;
+ private String baseUrl;
+ private String url;
+ private String version;
+ private final List<Capability> capabilities = new LinkedList<Capability>();
+ private final List<Require> requires = new LinkedList<Require>();
+
+ public Builder setId(String id) {
+ this.id = id;
+ return this;
+ }
+ public Builder setPresentationName(String presentationName) {
+ this.presentationName = presentationName;
+ return this;
+ }
+ public Builder setSymbolicName(String symbolicName) {
+ this.symbolicName = symbolicName;
+ return this;
+ }
+ public Builder setBaseUrl(String baseUrl) {
+ this.baseUrl = baseUrl;
+ return this;
+ }
+ public Builder setUrl(String url) {
+ this.url = url;
+ return this;
+ }
+ public Builder setVersion(String version) {
+ this.version = version;
+ return this;
+ }
+ public Builder addCapability(Capability capability) {
+ this.capabilities.add(capability);
+ return this;
+ }
+ public Builder addCapability(Capability.Builder capabilityBuilder) {
+ this.capabilities.add(capabilityBuilder.build());
+ return this;
+ }
+ public Builder addRequire(Require require) {
+ this.requires.add(require);
+ return this;
+ }
+
+ public Resource build() {
+ if (id == null) throw new IllegalStateException("'id' field is not initialised");
+ if (symbolicName == null) throw new IllegalStateException("'symbolicName' field is not initialised");
+ if (url == null) throw new IllegalStateException("'url' field is not initialised");
+
+ return new Resource(id, presentationName, symbolicName, baseUrl, url, version, Collections.unmodifiableList(capabilities), Collections.unmodifiableList(requires));
+ }
+ }
+
+ public String getId() {
+ return id;
+ }
+
+ public String getPresentationName() {
+ return presentationName;
+ }
+
+ public String getSymbolicName() {
+ return symbolicName;
+ }
+
+ public String getBaseUrl() {
+ return baseUrl;
+ }
+
+ public String getUrl() {
+ return url;
+ }
+
+ public String getVersion() {
+ return version;
+ }
+
+ public List<Capability> getCapabilities() {
+ return capabilities;
+ }
+
+ public Capability findPackageCapability(String pkgName) {
+ for (Capability capability : capabilities) {
+ if (CapabilityType.PACKAGE.getTypeName().equals(capability.getName())) {
+ List<Property> props = capability.getProperties();
+ for (Property prop : props) {
+ if (Property.PACKAGE.equals(prop.getName())) {
+ if (pkgName.equals(prop.getValue()))
+ return capability;
+ else
+ break;
+ }
+ }
+ }
+ }
+ return null;
+ }
+
+
+
+ public List<Require> getRequires() {
+ return requires;
+ }
+
+ public Require findRequire(String name) {
+ for (Require require : requires) {
+ if (name.equals(require.getName()))
+ return require;
+ }
+ return null;
+ }
+
+ public Require findPackageRequire(String usesPkgName) {
+ String matchString = String.format("(package=%s)", usesPkgName);
+
+ for (Require require : requires) {
+ if (CapabilityType.PACKAGE.getTypeName().equals(require.getName())) {
+ String filter = require.getFilter();
+ if (filter.indexOf(matchString) > -1)
+ return require;
+ }
+ }
+ return null;
+ }
+
+ @Override
+ public String toString() {
+ StringBuilder builder = new StringBuilder();
+ builder.append("Resource [id=").append(id)
+ .append(", presentationName=").append(presentationName)
+ .append(", symbolicName=").append(symbolicName)
+ .append(", baseUrl=").append(baseUrl)
+ .append(", url=").append(url).append(", version=")
+ .append(version).append(", capabilities=").append(capabilities)
+ .append("]");
+ return builder.toString();
+ }
+
+ @Override
+ public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + ((baseUrl == null) ? 0 : baseUrl.hashCode());
+ result = prime * result
+ + ((capabilities == null) ? 0 : capabilities.hashCode());
+ result = prime * result + ((id == null) ? 0 : id.hashCode());
+ result = prime
+ * result
+ + ((presentationName == null) ? 0 : presentationName.hashCode());
+ result = prime * result
+ + ((symbolicName == null) ? 0 : symbolicName.hashCode());
+ result = prime * result + ((url == null) ? 0 : url.hashCode());
+ result = prime * result + ((version == null) ? 0 : version.hashCode());
+ return result;
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj)
+ return true;
+ if (obj == null)
+ return false;
+ if (getClass() != obj.getClass())
+ return false;
+ Resource other = (Resource) obj;
+ if (baseUrl == null) {
+ if (other.baseUrl != null)
+ return false;
+ } else if (!baseUrl.equals(other.baseUrl))
+ return false;
+ if (capabilities == null) {
+ if (other.capabilities != null)
+ return false;
+ } else if (!capabilities.equals(other.capabilities))
+ return false;
+ if (id == null) {
+ if (other.id != null)
+ return false;
+ } else if (!id.equals(other.id))
+ return false;
+ if (presentationName == null) {
+ if (other.presentationName != null)
+ return false;
+ } else if (!presentationName.equals(other.presentationName))
+ return false;
+ if (symbolicName == null) {
+ if (other.symbolicName != null)
+ return false;
+ } else if (!symbolicName.equals(other.symbolicName))
+ return false;
+ if (url == null) {
+ if (other.url != null)
+ return false;
+ } else if (!url.equals(other.url))
+ return false;
+ if (version == null) {
+ if (other.version != null)
+ return false;
+ } else if (!version.equals(other.version))
+ return false;
+ return true;
+ }
+
+}