package org.bndtools.core.resolve.ui;
import java.util.List;
import java.util.Set;
import java.util.concurrent.atomic.AtomicInteger;
import org.bndtools.core.resolve.ResolveCancelledException;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.ui.PlatformUI;
import org.osgi.resource.Capability;
import org.osgi.resource.Requirement;
import biz.aQute.resolve.ResolutionCallback;
public class ResolutionChoiceInteractCallback implements ResolutionCallback {
public void processCandidates(final Requirement requirement, Set<Capability> wired, final List<Capability> candidates) {
if (wired.size() > 0 || candidates.size() < 2)
return;
final Display display = PlatformUI.getWorkbench().getDisplay();
final AtomicInteger resultRef = new AtomicInteger();
Runnable runnable = new Runnable() {
public void run() {
Shell shell = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell();
if (!shell.isDisposed()) {
ResolutionChoiceSelectionDialog dialog = new ResolutionChoiceSelectionDialog(shell, requirement, candidates);
resultRef.set(dialog.open());
} else {
resultRef.set(IDialogConstants.CANCEL_ID);
}
}
};
display.syncExec(runnable);
int result = resultRef.get();
if (result == IDialogConstants.CANCEL_ID)
throw new ResolveCancelledException();
}
}