package aQute.jpm.lib; import java.io.File; import java.util.ArrayList; import java.util.Collection; import java.util.List; import org.slf4j.Logger; import org.slf4j.LoggerFactory; class DependencyCollector { private final static Logger logger = LoggerFactory.getLogger(DependencyCollector.class); private final List<ArtifactData> list = new ArrayList<ArtifactData>(); private final JustAnotherPackageManager jpm; private boolean synced; public DependencyCollector(JustAnotherPackageManager jpm) { this.jpm = jpm; } /** * Add a revision to this collector and start the download * * @throws Exception */ public void add(String coordinate, String name) throws Exception { logger.debug("add {} = {}", coordinate, name); ArtifactData candidate = jpm.getCandidateAsync(coordinate); if (candidate == null) { jpm.reporter.error("Cannot find %s", coordinate); return; } list.add(candidate); } void sync() throws InterruptedException { if (!synced) { for (ArtifactData artifact : list) { artifact.sync(); if (artifact.error != null) jpm.reporter.error("Download error %s for %s", artifact.error, artifact.url); File file = new File(artifact.file); if (!file.isFile()) jpm.reporter.error("No file found for %s", artifact.url); } synced = true; } } public Collection< ? extends String> getPaths() throws InterruptedException { sync(); List<String> paths = new ArrayList<String>(); for (ArtifactData artifact : list) { if (artifact.error == null) { paths.add(artifact.file); } } return paths; } public List<byte[]> getDigests() throws InterruptedException { sync(); List<byte[]> digests = new ArrayList<byte[]>(); for (ArtifactData artifact : list) { if (artifact.error == null) { digests.add(artifact.sha); } } return digests; } public void add(ArtifactData artifact) { list.add(artifact); } }