package bndtools.tasks;
import java.io.IOException;
import java.net.URI;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import org.bndtools.utils.resources.ResourceUtils;
import org.osgi.resource.Capability;
import org.osgi.resource.Requirement;
import org.osgi.resource.Resource;
import bndtools.model.resolution.RequirementWrapper;
public class ResourceCapReqLoader implements CapReqLoader {
private final Resource resource;
private final String name;
private final URI uri;
public ResourceCapReqLoader(Resource resource) {
this.resource = resource;
this.name = ResourceUtils.getIdentity(resource);
this.uri = ResourceUtils.getURI(ResourceUtils.getContentCapability(resource));
}
@Override
public String getShortLabel() {
return name;
}
@Override
public String getLongLabel() {
return name + "[" + uri + "]";
}
@Override
public Map<String,List<Capability>> loadCapabilities() throws Exception {
Map<String,List<Capability>> result = new HashMap<String,List<Capability>>();
List<Capability> caps = resource.getCapabilities(null);
for (Capability cap : caps) {
String ns = cap.getNamespace();
List<Capability> listForNamespace = result.get(ns);
if (listForNamespace == null) {
listForNamespace = new LinkedList<Capability>();
result.put(ns, listForNamespace);
}
listForNamespace.add(cap);
}
return result;
}
@Override
public Map<String,List<RequirementWrapper>> loadRequirements() throws Exception {
Map<String,List<RequirementWrapper>> result = new HashMap<String,List<RequirementWrapper>>();
List<Requirement> reqs = resource.getRequirements(null);
for (Requirement req : reqs) {
String ns = req.getNamespace();
List<RequirementWrapper> listForNamespace = result.get(ns);
if (listForNamespace == null) {
listForNamespace = new LinkedList<RequirementWrapper>();
result.put(ns, listForNamespace);
}
RequirementWrapper wrapper = new RequirementWrapper();
wrapper.requirement = req;
listForNamespace.add(wrapper);
}
return result;
}
@Override
public void close() throws IOException {
// no-op
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((resource == null) ? 0 : resource.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;
ResourceCapReqLoader other = (ResourceCapReqLoader) obj;
if (resource == null) {
if (other.resource != null)
return false;
} else if (!resource.equals(other.resource))
return false;
return true;
}
}