package edu.ualberta.med.biobank.dialogs.select; import java.util.Collection; import org.eclipse.core.runtime.Assert; import org.eclipse.jface.viewers.ComboViewer; import org.eclipse.jface.viewers.ISelectionChangedListener; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.LabelProvider; import org.eclipse.jface.viewers.SelectionChangedEvent; 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.Shell; import edu.ualberta.med.biobank.common.wrappers.ContainerWrapper; import edu.ualberta.med.biobank.gui.common.dialogs.BgcBaseDialog; import edu.ualberta.med.biobank.widgets.BiobankLabelProvider; /** * Allows the user to select a parent container when more than one is available */ public class SelectParentContainerDialog extends BgcBaseDialog { private Collection<ContainerWrapper> containers; private ComboViewer comboViewer; protected ContainerWrapper selectedContainer; public SelectParentContainerDialog(Shell parent, Collection<ContainerWrapper> containers) { super(parent); Assert.isNotNull(containers); this.containers = containers; } @Override protected String getDialogShellTitle() { return "Select parent container"; } @Override protected String getTitleAreaMessage() { return "Select the appropriate parent container"; } @Override protected String getTitleAreaTitle() { return "Multiple parent containers are possible"; } @Override protected void createDialogAreaInternal(Composite parent) { Composite contents = new Composite(parent, SWT.NONE); contents.setLayout(new GridLayout(2, false)); contents.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); comboViewer = getWidgetCreator().createComboViewer(contents, "Select parent", containers, null, "A container should be selected", null, new BiobankLabelProvider()); comboViewer.setLabelProvider(new LabelProvider() { @Override public String getText(Object element) { ContainerWrapper container = (ContainerWrapper) element; StringBuffer text = new StringBuffer(); text.append(container.getFullInfoLabel()); ContainerWrapper parent = container.getParentContainer(); boolean hasParents = parent != null; if (hasParents) text.append(" (") .append( "Parents") .append(": "); while (parent != null) { text.append(parent.getFullInfoLabel()); parent = parent.getParentContainer(); if (parent != null) text.append("; "); } if (hasParents) text.append(")"); return text.toString(); } }); comboViewer .addSelectionChangedListener(new ISelectionChangedListener() { @Override public void selectionChanged(SelectionChangedEvent event) { saveSelectedContainer(); } }); } private void saveSelectedContainer() { selectedContainer = (ContainerWrapper) ((IStructuredSelection) comboViewer .getSelection()).getFirstElement(); } public ContainerWrapper getSelectedContainer() { return selectedContainer; } }