blob: a355326a0082d7c5269db0254f37cbe61aef4937 [file] [log] [blame]
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;
}
}