package bndtools.wizards.bndfile; import java.util.HashMap; import java.util.Map; import org.bndtools.core.ui.ConfigElementLabelProvider; import org.eclipse.core.runtime.IConfigurationElement; import org.eclipse.jface.viewers.ArrayContentProvider; import org.eclipse.jface.viewers.IOpenListener; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.ISelectionChangedListener; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.OpenEvent; import org.eclipse.jface.viewers.SelectionChangedEvent; import org.eclipse.jface.viewers.TableViewer; import org.eclipse.jface.wizard.IWizardNode; import org.eclipse.jface.wizard.IWizardPage; import org.eclipse.jface.wizard.WizardSelectionPage; import org.eclipse.swt.SWT; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Table; import aQute.bnd.build.Project; import aQute.bnd.build.model.BndEditModel; public class RunExportSelectionPage extends WizardSelectionPage { private final IConfigurationElement[] elements; private final BndEditModel model; private final Project bndProject; private final Map<IConfigurationElement,IWizardNode> nodeCache = new HashMap<IConfigurationElement,IWizardNode>(); private Table table; private TableViewer viewer; protected RunExportSelectionPage(String pageName, IConfigurationElement[] elements, BndEditModel model, Project bndProject) { super(pageName); setDescription("Select a wizard for exporting this Run Descriptor"); setTitle("Export Wizard Selection"); this.elements = elements; this.model = model; this.bndProject = bndProject; } public void createControl(Composite parent) { Composite container = new Composite(parent, SWT.NONE); setControl(container); container.setLayout(new GridLayout(1, false)); table = new Table(container, SWT.BORDER | SWT.FULL_SELECTION | SWT.SINGLE); table.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1)); viewer = new TableViewer(table); viewer.setContentProvider(ArrayContentProvider.getInstance()); viewer.setLabelProvider(new ConfigElementLabelProvider(table.getDisplay(), null)); viewer.addSelectionChangedListener(new ISelectionChangedListener() { public void selectionChanged(SelectionChangedEvent event) { ISelection sel = viewer.getSelection(); if (sel.isEmpty()) setSelectedNode(null); else { IConfigurationElement elem = (IConfigurationElement) ((IStructuredSelection) sel).getFirstElement(); IWizardNode node = nodeCache.get(elem); if (node == null) { node = new RunExportWizardNode(getShell(), elem, model, bndProject); nodeCache.put(elem, node); } setSelectedNode(node); } } }); viewer.addOpenListener(new IOpenListener() { public void open(OpenEvent event) { IWizardPage nextPage = getNextPage(); if (nextPage != null) getContainer().showPage(nextPage); } }); viewer.setInput(elements); } }