package org.bndtools.core.ui.wizards.jpm;
import java.lang.reflect.InvocationTargetException;
import java.net.URI;
import java.util.HashSet;
import java.util.Set;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.SubMonitor;
import org.eclipse.jface.operation.IRunnableWithProgress;
import aQute.bnd.service.repository.SearchableRepository;
import aQute.bnd.service.repository.SearchableRepository.ResourceDescriptor;
public class QueryJpmDependenciesRunnable implements IRunnableWithProgress {
private final URI origin;
private final SearchableRepository repository;
private String error = null;
private Set<ResourceDescriptor> directResources;
private Set<ResourceDescriptor> indirectResources;
public QueryJpmDependenciesRunnable(URI origin, SearchableRepository repository) {
this.origin = origin;
this.repository = repository;
}
public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException {
SubMonitor progress = SubMonitor.convert(monitor, 5);
progress.setTaskName("Querying dependencies...");
try {
Set<ResourceDescriptor> resources = repository.getResources(origin, true);
directResources = new HashSet<ResourceDescriptor>();
indirectResources = new HashSet<ResourceDescriptor>();
for (ResourceDescriptor resource : resources) {
if (resource.dependency)
indirectResources.add(resource);
else
directResources.add(resource);
}
progress.worked(5);
} catch (Exception e) {
error = "Error searching repository: " + e.getMessage();
}
}
public String getError() {
return error;
}
public Set<ResourceDescriptor> getDirectResources() {
return directResources;
}
public Set<ResourceDescriptor> getIndirectResources() {
return indirectResources;
}
}