package edu.ualberta.med.biobank.wizards; import java.util.List; import org.eclipse.jface.wizard.IWizardPage; import edu.ualberta.med.biobank.SessionManager; import edu.ualberta.med.biobank.common.action.collectionEvent.CollectionEventGetSourceSpecimenListInfoAction; import edu.ualberta.med.biobank.common.action.specimen.SpecimenInfo; import edu.ualberta.med.biobank.common.wrappers.CollectionEventWrapper; import edu.ualberta.med.biobank.common.wrappers.PatientWrapper; import edu.ualberta.med.biobank.gui.common.BgcPlugin; import edu.ualberta.med.biobank.gui.common.dialogs.BgcWizard; import edu.ualberta.med.biobank.model.Specimen; import edu.ualberta.med.biobank.wizards.pages.EnterCommentPage; import edu.ualberta.med.biobank.wizards.pages.EnterPnumberPage; import edu.ualberta.med.biobank.wizards.pages.SelectCollectionEventPage; import edu.ualberta.med.biobank.wizards.pages.SelectParentPage; import gov.nih.nci.system.applicationservice.ApplicationException; import gov.nih.nci.system.applicationservice.WritableApplicationService; public class ReparentingWizard extends BgcWizard { private final WritableApplicationService appService; private EnterPnumberPage pnumberPage; private SelectCollectionEventPage cePage; private SelectParentPage parentPage; private EnterCommentPage commentPage; private CollectionEventWrapper cevent; private String comment; private SpecimenInfo specimenInfo; private Specimen original; public ReparentingWizard(WritableApplicationService appService, Specimen original) { this.appService = appService; this.original = original; } public CollectionEventWrapper getCollectionEvent() { return cevent; } @Override public void addPages() { pnumberPage = new EnterPnumberPage(); cePage = new SelectCollectionEventPage(); parentPage = new SelectParentPage(); commentPage = new EnterCommentPage(); addPage(pnumberPage); addPage(cePage); addPage(parentPage); addPage(commentPage); } @Override public boolean canFinish() { return getContainer().getCurrentPage() == commentPage && commentPage.getComment() != null && !commentPage.getComment().trim().isEmpty(); } @Override public boolean performFinish() { cevent = cePage.getCollectionEvent(); specimenInfo = parentPage.getSpecimen(); comment = commentPage.getComment(); return cevent != null && comment != null; } @Override public boolean performNext(IWizardPage page) { if (page == pnumberPage) { PatientWrapper patient = null; if (pnumberPage.getPnumber() != null) { try { patient = PatientWrapper.getPatient(appService, pnumberPage.getPnumber()); } catch (ApplicationException e) { } } if (patient != null) { cePage.setCollectionEventList(patient .getCollectionEventCollection(true)); } else { pnumberPage .setErrorMessage(Messages.SelectCollectionEventWizard_notexists_error_msg); return false; } } else if (page == cePage) { CollectionEventGetSourceSpecimenListInfoAction action = new CollectionEventGetSourceSpecimenListInfoAction(cePage .getCollectionEvent().getId()); try { List<SpecimenInfo> specs = SessionManager.getAppService() .doAction(action).getList(); for (SpecimenInfo spec : specs) if (spec.specimen.equals(original)) { specs.remove(spec); break; } parentPage.setParentSpecimenList(specs); } catch (ApplicationException e) { BgcPlugin.openAsyncError("Error", "Unable to retrieve specimens"); return false; } } return true; } public String getComment() { return comment; } public SpecimenInfo getSpecimen() { return specimenInfo; } }