use of aQute.p2.api.Artifact in project bnd by bndtools.
the class ArtifactRepository method parse.
void parse() throws Exception {
final Map<String, String> properties = getProperties("repository/properties/property");
properties.put("repoUrl", base.resolve("").toString());
final Domain parent = new Domain() {
@Override
public Map<String, String> getMap() {
return properties;
}
@Override
public Domain getParent() {
return null;
}
};
rules = getRules();
NodeList artifactNodes = getNodes("repository/artifacts/artifact");
for (int i = 0; i < artifactNodes.getLength(); i++) {
final Node artifactNode = artifactNodes.item(i).cloneNode(true);
final XMLArtifact xmlArtifact = getFromType(artifactNode, XMLArtifact.class);
final Map<String, String> map = Converter.cnv(new TypeReference<Map<String, String>>() {
}, xmlArtifact);
if ("osgi.bundle".equals(xmlArtifact.classifier)) {
Domain domain = new Domain() {
@Override
public Map<String, String> getMap() {
return map;
}
@Override
public Domain getParent() {
return parent;
}
};
ReplacerAdapter ra = new ReplacerAdapter(domain);
for (Rule r : rules) {
if (r.matches(map)) {
String s = ra.process(r.output);
URI uri = new URI(s).normalize();
Artifact artifact = new Artifact();
artifact.uri = uri;
artifact.id = xmlArtifact.id;
artifact.version = new Version(xmlArtifact.version);
artifact.md5 = getProperties(artifactNode, "properties/property").get("download.md5");
artifacts.add(artifact);
break;
}
}
}
}
}
use of aQute.p2.api.Artifact in project bnd by bndtools.
the class P2Impl method parseIndexArtifacts.
private Promise<List<Artifact>> parseIndexArtifacts(Set<URI> cycles, URI uri, File file) throws Exception {
P2Index index;
if (file == null) {
index = getDefaultIndex(uri);
} else {
index = parseIndex(file, uri);
}
canonicalize(index.artifacts);
canonicalize(index.content);
return getArtifacts(cycles, index.artifacts);
}
use of aQute.p2.api.Artifact in project bnd by bndtools.
the class P2Indexer method readRepository.
private Repository readRepository() throws Exception {
P2Impl p2 = new P2Impl(client, this.url, Processor.getExecutor());
List<Artifact> artifacts = p2.getArtifacts();
List<Promise<Resource>> fetched = new ArrayList<>(artifacts.size());
Set<URI> visitedURIs = new HashSet<>(artifacts.size());
Set<ArtifactID> visitedArtifacts = new HashSet<>(artifacts.size());
Map<ArtifactID, Resource> knownResources = new HashMap<>();
if (getBridge() != null) {
for (Capability capability : getBridge().getRepository().findProviders(singleton(MD5_REQUIREMENT)).get(MD5_REQUIREMENT)) {
Resource resource = capability.getResource();
IdentityCapability identity = ResourceUtils.getIdentityCapability(resource);
ArtifactID artifact = new ArtifactID(identity.osgi_identity(), identity.version(), (String) capability.getAttributes().get(MD5_ATTRIBUTE));
knownResources.put(artifact, resource);
}
}
for (final Artifact a : artifacts) {
if (!visitedURIs.add(a.uri))
continue;
if (a.md5 != null) {
ArtifactID id = new ArtifactID(a.id, toVersion(a.version), a.md5);
if (!visitedArtifacts.add(id))
continue;
if (knownResources.containsKey(id)) {
fetched.add(Promises.resolved(knownResources.get(id)));
continue;
}
}
Promise<Resource> promise = client.build().useCache(MAX_STALE).async(a.uri.toURL()).map(new Function<File, Resource>() {
@Override
public Resource apply(File file) {
try {
ResourceBuilder rb = new ResourceBuilder();
rb.addFile(file, a.uri);
if (a.md5 != null)
rb.addCapability(new CapabilityBuilder(P2_CAPABILITY_NAMESPACE).addAttribute(MD5_ATTRIBUTE, a.md5));
return rb.build();
} catch (Exception e) {
logger.debug("{}: Failed to create resource for %s from {}", name, a, file, e);
return RECOVERY;
}
}
}).recover(new Function<Promise<?>, Resource>() {
@Override
public Resource apply(Promise<?> failed) {
try {
logger.debug("{}: Failed to create resource for {}", name, a, failed.getFailure());
} catch (InterruptedException e) {
// impossible
}
return RECOVERY;
}
});
fetched.add(promise);
}
Promise<List<Resource>> all = Promises.all(fetched);
return all.map(new Function<List<Resource>, ResourcesRepository>() {
@Override
public ResourcesRepository apply(List<Resource> resources) {
ResourcesRepository rr = new ResourcesRepository();
for (Resource resource : resources) {
if (resource != RECOVERY) {
rr.add(resource);
}
}
return rr;
}
}).getValue();
}
Aggregations