X-Git-Url: https://dev.e-taxonomy.eu/gitweb/taxeditor.git/blobdiff_plain/f1b8fe0799a92bb73a2d090191609dc1f81af82d..4ac90d615da900439ee877996d1c7528215211ba:/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/derivate/contextMenu/CreateDerivateContextMenu.java diff --git a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/derivate/contextMenu/CreateDerivateContextMenu.java b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/derivate/contextMenu/CreateDerivateContextMenu.java index b2d6da8bc..a491a7abf 100644 --- a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/derivate/contextMenu/CreateDerivateContextMenu.java +++ b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/derivate/contextMenu/CreateDerivateContextMenu.java @@ -9,12 +9,13 @@ import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.widgets.Menu; import org.eclipse.swt.widgets.MenuItem; -import org.eclipse.ui.IWorkbenchPart; import org.eclipse.ui.IWorkbenchWindow; import org.eclipse.ui.PlatformUI; import org.eclipse.ui.actions.CompoundContributionItem; +import eu.etaxonomy.cdm.api.application.CdmApplicationState; import eu.etaxonomy.cdm.api.facade.DerivedUnitFacadeCacheStrategy; +import eu.etaxonomy.cdm.api.service.IOccurrenceService; import eu.etaxonomy.cdm.model.media.Media; import eu.etaxonomy.cdm.model.molecular.DnaSample; import eu.etaxonomy.cdm.model.molecular.Sequence; @@ -27,8 +28,12 @@ import eu.etaxonomy.cdm.model.occurrence.MediaSpecimen; import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase; import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationType; import eu.etaxonomy.taxeditor.editor.EditorUtil; +import eu.etaxonomy.taxeditor.editor.Messages; import eu.etaxonomy.taxeditor.editor.view.derivate.DerivateView; import eu.etaxonomy.taxeditor.model.AbstractUtility; +import eu.etaxonomy.taxeditor.model.MessagingUtils; +import eu.etaxonomy.taxeditor.store.CdmStore; +import eu.etaxonomy.taxeditor.ui.dialog.selection.MediaSelectionDialog; /** * Context menu for the creation of derivates in the derivate hierarchy. @@ -36,9 +41,13 @@ import eu.etaxonomy.taxeditor.model.AbstractUtility; */ public class CreateDerivateContextMenu extends CompoundContributionItem { - /* (non-Javadoc) - * @see org.eclipse.ui.actions.CompoundContributionItem#getContributionItems() - */ + private static final String SINGLE_READ = Messages.CreateDerivateContextMenu_SINGLE_READ; + private static final String CONSENSUS_SEQUENCE = Messages.CreateDerivateContextMenu_SEQUENCE; + private static final String MEDIA_SPECIMEN = Messages.CreateDerivateContextMenu_MEDIA_SPECIMEN; + private static final String DNA_SAMPLE = Messages.CreateDerivateContextMenu_DNA_SAMPLE; + private static final String TISSUE_SAMPLE = Messages.CreateDerivateContextMenu_TISSUE_SAMPLE; + private static final String SPECIMEN = Messages.CreateDerivateContextMenu_SPECIMEN; + @Override protected IContributionItem[] getContributionItems() { IContributionItem[] contributionItems = new IContributionItem[] { @@ -46,7 +55,7 @@ public class CreateDerivateContextMenu extends CompoundContributionItem { @Override public void fill(Menu menu, int index) { MenuItem addItem = new MenuItem(menu, SWT.CASCADE); - addItem.setText("Add..."); + addItem.setText(Messages.CreateDerivateContextMenu_ADD); Menu addMenu = new Menu(menu); addItem.setMenu(addMenu); final IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow(); @@ -55,37 +64,37 @@ public class CreateDerivateContextMenu extends CompoundContributionItem { if(selectedTreeNode!=null){ //context menu for FieldUnit if(selectedTreeNode.getValue() instanceof FieldUnit){ - createMenuItem(addMenu, "Specimen", selectedTreeNode, DerivedUnit.class, SpecimenOrObservationType.PreservedSpecimen); + createMenuItem(addMenu, SPECIMEN, selectedTreeNode, DerivedUnit.class, SpecimenOrObservationType.PreservedSpecimen, DerivationEventType.GATHERING_IN_SITU()); new MenuItem(addMenu, SWT.SEPARATOR); - createMenuItem(addMenu, "Tissue Sample", selectedTreeNode, DerivedUnit.class, SpecimenOrObservationType.TissueSample); - createMenuItem(addMenu, "DNA Sample", selectedTreeNode, DnaSample.class, SpecimenOrObservationType.DnaSample); - createMenuItem(addMenu, "Media Specimen", selectedTreeNode, MediaSpecimen.class, SpecimenOrObservationType.Media); + createMenuItem(addMenu, TISSUE_SAMPLE, selectedTreeNode, DnaSample.class, SpecimenOrObservationType.TissueSample, DerivationEventType.PREPARATION()); + createMenuItem(addMenu, DNA_SAMPLE, selectedTreeNode, DnaSample.class, SpecimenOrObservationType.DnaSample, DerivationEventType.DNA_EXTRACTION()); + createMenuItem(addMenu, MEDIA_SPECIMEN, selectedTreeNode, MediaSpecimen.class, SpecimenOrObservationType.Media, DerivationEventType.ACCESSIONING()); } //context menu for Specimen else if(selectedTreeNode.getValue() instanceof DerivedUnit && ((DerivedUnit)selectedTreeNode.getValue()).getRecordBasis()==SpecimenOrObservationType.PreservedSpecimen){ - createMenuItem(addMenu, "Tissue Sample", selectedTreeNode, DerivedUnit.class, SpecimenOrObservationType.TissueSample); - createMenuItem(addMenu, "DNA Sample", selectedTreeNode, DnaSample.class, SpecimenOrObservationType.DnaSample); - createMenuItem(addMenu, "Media Specimen", selectedTreeNode, MediaSpecimen.class, SpecimenOrObservationType.Media); + createMenuItem(addMenu, TISSUE_SAMPLE, selectedTreeNode, DnaSample.class, SpecimenOrObservationType.TissueSample, DerivationEventType.PREPARATION()); + createMenuItem(addMenu, DNA_SAMPLE, selectedTreeNode, DnaSample.class, SpecimenOrObservationType.DnaSample, DerivationEventType.DNA_EXTRACTION()); + createMenuItem(addMenu, MEDIA_SPECIMEN, selectedTreeNode, MediaSpecimen.class, SpecimenOrObservationType.Media, DerivationEventType.ACCESSIONING()); } //context menu for TissueSample - else if(selectedTreeNode.getValue() instanceof DerivedUnit && ((DerivedUnit)selectedTreeNode.getValue()).getRecordBasis()==SpecimenOrObservationType.TissueSample){ - createMenuItem(addMenu, "DnaSample", selectedTreeNode, DnaSample.class, null); - createMenuItem(addMenu, "Media Specimen", selectedTreeNode, MediaSpecimen.class, SpecimenOrObservationType.Media); + else if(selectedTreeNode.getValue() instanceof DnaSample && ((DnaSample)selectedTreeNode.getValue()).getRecordBasis()==SpecimenOrObservationType.TissueSample){ + createMenuItem(addMenu, DNA_SAMPLE, selectedTreeNode, DnaSample.class, SpecimenOrObservationType.DnaSample, DerivationEventType.DNA_EXTRACTION()); + createMenuItem(addMenu, MEDIA_SPECIMEN, selectedTreeNode, MediaSpecimen.class, SpecimenOrObservationType.Media, DerivationEventType.ACCESSIONING()); } //context menu for DnaSample - else if(selectedTreeNode.getValue() instanceof DnaSample){ - createMenuItem(addMenu, "Consensus Sequence", selectedTreeNode, Sequence.class, null); - createMenuItem(addMenu, "Media Specimen", selectedTreeNode, MediaSpecimen.class, SpecimenOrObservationType.Media); + else if(selectedTreeNode.getValue() instanceof DnaSample && ((DnaSample)selectedTreeNode.getValue()).getRecordBasis()==SpecimenOrObservationType.DnaSample){ + createMenuItem(addMenu, CONSENSUS_SEQUENCE, selectedTreeNode, Sequence.class, null, null); + createMenuItem(addMenu, MEDIA_SPECIMEN, selectedTreeNode, MediaSpecimen.class, SpecimenOrObservationType.Media, DerivationEventType.ACCESSIONING()); } //context menu for Sequence else if(selectedTreeNode.getValue() instanceof Sequence){ - createMenuItem(addMenu, "Single Read", selectedTreeNode, SingleRead.class, null); + createMenuItem(addMenu, SINGLE_READ, selectedTreeNode, SingleRead.class, null, null); } //default else{ MenuItem menuItem = new MenuItem(addMenu, SWT.NONE); - menuItem.setText("No child derivates"); + menuItem.setText(Messages.CreateDerivateContextMenu_NO_CHILD_DERIVATE); menuItem.setEnabled(false); } } @@ -97,10 +106,59 @@ public class CreateDerivateContextMenu extends CompoundContributionItem { return contributionItems; } - private void createMenuItem(Menu menu, String menuLabel, TreeNode selectedNode, Class childClass, SpecimenOrObservationType specimenType) { - MenuItem menuItem = new MenuItem(menu, SWT.NONE); - menuItem.setText(menuLabel); - menuItem.addSelectionListener(new WidgetSelectionListener(selectedNode, childClass, specimenType)); + private void createMenuItem(Menu menu, String menuLabel, final TreeNode selectedNode, Class childClass, final SpecimenOrObservationType specimenType, final DerivationEventType derivationEventType) { + if(specimenType!=null && specimenType.equals(SpecimenOrObservationType.Media)){ + //media submenu + MenuItem mediaItem = new MenuItem(menu, SWT.CASCADE); + mediaItem.setText(Messages.CreateDerivateContextMenu_MEDIA); + Menu mediaMenu = new Menu(menu); + mediaItem.setMenu(mediaMenu); + + //media specimen menu + MenuItem menuItem = new MenuItem(mediaMenu, SWT.NONE); + menuItem.setText(menuLabel); + menuItem.addSelectionListener(new WidgetSelectionListener(selectedNode, childClass, specimenType, derivationEventType)); + + //existing media menu + MenuItem existingMediaItem = new MenuItem(mediaMenu, SWT.NONE); + existingMediaItem.setText(Messages.CreateDerivateContextMenu_MEDIA_EXISTING); + existingMediaItem.addSelectionListener(new SelectionAdapter() { + @Override + public void widgetSelected(SelectionEvent e) { + //select media + Media media = MediaSelectionDialog.select(AbstractUtility.getShell(), null, null); + //create MediaSpecimen + MediaSpecimen mediaSpecimen = MediaSpecimen.NewInstance(specimenType); + mediaSpecimen.setMediaSpecimen(media); + + //attach to parent + if(selectedNode.getValue() instanceof SpecimenOrObservationBase){ + SpecimenOrObservationBase specimenOrObservationBase = (SpecimenOrObservationBase)selectedNode.getValue(); + + specimenOrObservationBase.addDerivationEvent(DerivationEvent.NewSimpleInstance(specimenOrObservationBase, mediaSpecimen, derivationEventType)); + mediaSpecimen.setCacheStrategy(new DerivedUnitFacadeCacheStrategy()); + mediaSpecimen.getTitleCache(); //update title cache + CdmStore.getService(IOccurrenceService.class).merge(specimenOrObservationBase); + } + + //refresh view + DerivateView derivateView = null; + if(AbstractUtility.getActivePart() instanceof DerivateView){ + derivateView = (DerivateView) AbstractUtility.getActivePart(); + } + if(derivateView!=null){ + + derivateView.getConversationHolder().commit(); + derivateView.refreshTree(mediaSpecimen); + } + } + }); + } + else{ + MenuItem menuItem = new MenuItem(menu, SWT.NONE); + menuItem.setText(menuLabel); + menuItem.addSelectionListener(new WidgetSelectionListener(selectedNode, childClass, specimenType, derivationEventType)); + } } private class WidgetSelectionListener extends SelectionAdapter{ @@ -109,42 +167,60 @@ public class CreateDerivateContextMenu extends CompoundContributionItem { //TODO: we need a common interface for the generic like e.g. "IDerivateHierarchyNode" private final Class childClass; private final SpecimenOrObservationType specimenType; + private final DerivationEventType derivationEventType; /** * @param selectedNode * @param specimenType */ - public WidgetSelectionListener(TreeNode selectedNode, Class childClass, SpecimenOrObservationType specimenType) { + public WidgetSelectionListener(TreeNode selectedNode, Class childClass, SpecimenOrObservationType specimenType, DerivationEventType derivationEventType) { this.selectedNode = selectedNode; this.childClass = childClass; this.specimenType = specimenType; + this.derivationEventType = derivationEventType; } - /* (non-Javadoc) - * @see org.eclipse.swt.events.SelectionListener#widgetSelected(org.eclipse.swt.events.SelectionEvent) - */ @Override public void widgetSelected(SelectionEvent e) { + DerivateView derivateView = null; + if(AbstractUtility.getActivePart() instanceof DerivateView){ + derivateView = (DerivateView) AbstractUtility.getActivePart(); + } + if(derivateView!=null){ + if(derivateView.isDirty()){ + e.doit = false; + MessagingUtils.warningDialog(DerivateView.VIEW_HAS_UNSAVED_CHANGES, this, DerivateView.YOU_NEED_TO_SAVE_BEFORE_PERFORMING_THIS_ACTION); + return; + } + } + Object createdElement = null; Object selectedDerivate = selectedNode.getValue(); - if(selectedDerivate instanceof DnaSample){ + if(selectedDerivate instanceof DnaSample && ((DnaSample) selectedDerivate).getRecordBasis()==SpecimenOrObservationType.DnaSample){ DnaSample dnaSample = (DnaSample)selectedDerivate; if(childClass.equals(Sequence.class)){ - Sequence newInstance = Sequence.NewInstance(""); - dnaSample.addSequence(newInstance);//why does this not have DnaSample as constructor parameter? + Sequence newInstance = Sequence.NewInstance(dnaSample, "", 0); //$NON-NLS-1$ createdElement = newInstance; } + CdmStore.getService(IOccurrenceService.class).merge((SpecimenOrObservationBase) selectedDerivate); } else if(selectedDerivate instanceof Sequence){ SingleRead newInstance = SingleRead.NewInstance(); ((Sequence) selectedDerivate).addSingleRead(newInstance); createdElement = newInstance; + CdmApplicationState.getCurrentAppConfig().getSequenceService().merge((Sequence)selectedDerivate); } else if(selectedDerivate instanceof SpecimenOrObservationBase && DerivedUnit.class.isAssignableFrom(childClass)){ SpecimenOrObservationBase specimenOrObservationBase = (SpecimenOrObservationBase)selectedDerivate; DerivedUnit derivedUnit; if(childClass.equals(DnaSample.class)){ derivedUnit = DnaSample.NewInstance(); + if(specimenType==SpecimenOrObservationType.DnaSample){ + derivedUnit.setRecordBasis(SpecimenOrObservationType.DnaSample); + } + else if(specimenType==SpecimenOrObservationType.TissueSample){ + derivedUnit.setRecordBasis(SpecimenOrObservationType.TissueSample); + } } else if(childClass.equals(MediaSpecimen.class)){ derivedUnit = MediaSpecimen.NewInstance(specimenType); @@ -154,17 +230,17 @@ public class CreateDerivateContextMenu extends CompoundContributionItem { else{ derivedUnit = DerivedUnit.NewInstance(specimenType); } - specimenOrObservationBase.addDerivationEvent(DerivationEvent.NewSimpleInstance(specimenOrObservationBase, derivedUnit, DerivationEventType.GATHERING_IN_SITU())); + specimenOrObservationBase.addDerivationEvent(DerivationEvent.NewSimpleInstance(specimenOrObservationBase, derivedUnit, derivationEventType)); derivedUnit.setCacheStrategy(new DerivedUnitFacadeCacheStrategy()); derivedUnit.getTitleCache(); //update title cache createdElement = derivedUnit; + CdmStore.getService(IOccurrenceService.class).merge((SpecimenOrObservationBase) selectedDerivate); } //refresh view - IWorkbenchPart activePart = AbstractUtility.getActivePart(); - if(activePart instanceof DerivateView){ - DerivateView derivateView = (DerivateView)activePart; - derivateView.changed(null); + if(derivateView!=null){ + //CdmStore.getService(IOccurrenceService.class).merge((SpecimenOrObservationBase) selectedDerivate); + derivateView.getConversationHolder().commit(); derivateView.refreshTree(createdElement); } }