package org.bndtools.core.templating.repobased;
import java.io.File;
import java.net.URI;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import aQute.bnd.service.RepositoryPlugin;
import aQute.lib.io.IO;
public class RepoPluginsBundleLocator implements BundleLocator {
private final List<RepositoryPlugin> plugins;
public RepoPluginsBundleLocator(List<RepositoryPlugin> plugins) {
this.plugins = plugins;
}
@Override
public File locate(String bsn, String hash, String algo, URI location) throws Exception {
Map<String,String> searchProps = new HashMap<>();
searchProps.put("version", "hash");
searchProps.put("hash", algo + ":" + hash);
for (RepositoryPlugin plugin : plugins) {
try {
File file = plugin.get(bsn, null, searchProps);
if (file != null) {
return file;
}
} catch (Exception e) {
// ignore
}
}
// Fall back to direct download
// TODO: need some kind of download/cache service to avoid repeated downloads
File tempFile = File.createTempFile("download", "jar");
tempFile.deleteOnExit();
IO.copy(location.toURL(), tempFile);
return tempFile;
}
}