package biz.aQute.resolve;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import org.osgi.resource.Resource;
import org.osgi.service.repository.ContentNamespace;
import aQute.bnd.build.Project;
import aQute.bnd.build.Workspace;
import aQute.bnd.header.Attrs;
import aQute.bnd.osgi.Domain;
import aQute.bnd.osgi.repository.ResourcesRepository;
import aQute.bnd.osgi.resource.CapabilityBuilder;
import aQute.bnd.osgi.resource.ResourceBuilder;
import aQute.bnd.osgi.resource.ResourceUtils;
import aQute.libg.cryptography.SHA256;
public class WorkspaceResourcesRepository extends ResourcesRepository {
public static final String WORKSPACE_NAMESPACE = ResourceUtils.WORKSPACE_NAMESPACE;
public WorkspaceResourcesRepository(Workspace workspace) throws Exception {
List<Resource> resources = new ArrayList<>();
for (Project p : workspace.getAllProjects()) {
File[] files = p.getBuildFiles(false);
if (files != null) {
for (File file : files) {
Domain manifest = Domain.domain(file);
ResourceBuilder rb = new ResourceBuilder();
rb.addManifest(manifest);
Attrs attrs = new Attrs();
attrs.put(ContentNamespace.CAPABILITY_URL_ATTRIBUTE, file.toURI().toString());
attrs.putTyped(ContentNamespace.CAPABILITY_SIZE_ATTRIBUTE, file.length());
attrs.put(ContentNamespace.CONTENT_NAMESPACE, SHA256.digest(file).asHex());
rb.addCapability(CapabilityBuilder.createCapReqBuilder(ContentNamespace.CONTENT_NAMESPACE, attrs));
// Add a capability specific to the workspace so that we can
// identify this fact later during resource processing.
attrs = new Attrs();
attrs.put(WORKSPACE_NAMESPACE, p.getName());
rb.addCapability(CapabilityBuilder.createCapReqBuilder(WORKSPACE_NAMESPACE, attrs));
Resource resource = rb.build();
resources.add(resource);
}
}
}
addAll(resources);
}
public String toString() {
return "Workspace";
}
}