package edu.ualberta.med.biobank.dialogs; import java.util.List; import org.eclipse.core.runtime.Assert; import org.eclipse.jface.viewers.ComboViewer; import org.eclipse.swt.SWT; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Shell; import edu.ualberta.med.biobank.common.peer.SourceSpecimenPeer; import edu.ualberta.med.biobank.common.wrappers.ModelWrapper; import edu.ualberta.med.biobank.common.wrappers.SourceSpecimenWrapper; import edu.ualberta.med.biobank.common.wrappers.SpecimenTypeWrapper; import edu.ualberta.med.biobank.gui.common.widgets.utils.ComboSelectionUpdate; import edu.ualberta.med.biobank.model.SourceSpecimen; import edu.ualberta.med.biobank.widgets.BiobankLabelProvider; public class StudySourceSpecimenDialog extends PagedDialog { private SourceSpecimenWrapper defaultSourceSpecimen; private List<SpecimenTypeWrapper> specimenTypes; private String currentTitle; private String message; private ComboViewer typeName; private Button volume; private SourceSpecimenWrapper userSourceSpecimen; public StudySourceSpecimenDialog(Shell parent, boolean defaultNeedOrigVolume, SpecimenTypeWrapper defaultSpecimenType, List<SpecimenTypeWrapper> specimenTypes, NewListener newListener) { super(parent, newListener, defaultSpecimenType == null); Assert.isNotNull(specimenTypes); defaultSourceSpecimen = new SourceSpecimenWrapper(null); defaultSourceSpecimen.setNeedOriginalVolume(defaultNeedOrigVolume); defaultSourceSpecimen.setSpecimenType(defaultSpecimenType); userSourceSpecimen = new SourceSpecimenWrapper(null); userSourceSpecimen.setNeedOriginalVolume(defaultNeedOrigVolume); userSourceSpecimen.setSpecimenType(defaultSpecimenType); if (defaultSpecimenType == null) { currentTitle = "Add source specimen types"; message = "Add a source specimen type to this study"; } else { currentTitle = "Edit source specimen types"; message = "Edit a source specimen type of this study"; } this.specimenTypes = specimenTypes; } @Override protected String getDialogShellTitle() { return currentTitle; } @Override protected String getTitleAreaMessage() { return message; } @Override protected String getTitleAreaTitle() { return currentTitle; } public void setSpecimenTypes(List<SpecimenTypeWrapper> specimenTypes) { this.specimenTypes = specimenTypes; typeName.setInput(specimenTypes); } @Override protected void createDialogAreaInternal(Composite parent) throws Exception { Composite contents = new Composite(parent, SWT.NONE); contents.setLayout(new GridLayout(2, false)); contents.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); typeName = getWidgetCreator().createComboViewer(contents, "Specimen type", specimenTypes, userSourceSpecimen.getSpecimenType(), "A specimen type should be selected", new ComboSelectionUpdate() { @Override public void doSelection(Object selectedObject) { userSourceSpecimen .setSpecimenType((SpecimenTypeWrapper) selectedObject); } }, new BiobankLabelProvider()); volume = (Button) createBoundWidgetWithLabel(contents, Button.class, SWT.BORDER, "Need Original Volume", new String[0], userSourceSpecimen, SourceSpecimenPeer.NEED_ORIGINAL_VOLUME.getName(), null); } @Override protected ModelWrapper<SourceSpecimen> getNew() { return new SourceSpecimenWrapper(null); } @Override protected void resetFields() { userSourceSpecimen.setNeedOriginalVolume(defaultSourceSpecimen .getNeedOriginalVolume()); userSourceSpecimen.setSpecimenType(defaultSourceSpecimen .getSpecimenType()); typeName.getCombo().deselectAll(); volume.setSelection(false); } @Override protected void copy(Object newModelObject) { SourceSpecimenWrapper sourceSpecimen = (SourceSpecimenWrapper) newModelObject; sourceSpecimen.setNeedOriginalVolume(userSourceSpecimen .getNeedOriginalVolume()); sourceSpecimen.setSpecimenType(userSourceSpecimen.getSpecimenType()); } public boolean getNeedOriginalVolume() { return userSourceSpecimen.getNeedOriginalVolume(); } public SpecimenTypeWrapper getSpecimenType() { return userSourceSpecimen.getSpecimenType(); } }