Add remoting checks for merge, Move to merge call which returns updated transient...
[taxeditor.git] / eu.etaxonomy.taxeditor.editor / src / main / java / eu / etaxonomy / taxeditor / editor / view / derivate / contextMenu / CreateDerivateContextMenu.java
index 4ffb412a2760c5f00e7573b2faeaa147ea512555..b3c0bd85cf6b933bbc9e33c791ddc6e0f016fe88 100644 (file)
@@ -13,6 +13,7 @@ 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;
@@ -27,6 +28,7 @@ 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;
@@ -39,9 +41,13 @@ import eu.etaxonomy.taxeditor.ui.dialog.selection.MediaSelectionDialog;
  */
 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[] {
@@ -49,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();
@@ -58,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, DerivationEventType.GATHERING_IN_SITU());
+                                createMenuItem(addMenu, SPECIMEN, selectedTreeNode, DerivedUnit.class, SpecimenOrObservationType.PreservedSpecimen, DerivationEventType.GATHERING_IN_SITU());
                                 new MenuItem(addMenu, SWT.SEPARATOR);
-                                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());
+                                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, 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());
+                                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 DnaSample && ((DnaSample)selectedTreeNode.getValue()).getRecordBasis()==SpecimenOrObservationType.TissueSample){
-                               createMenuItem(addMenu, "DnaSample", selectedTreeNode, DnaSample.class, SpecimenOrObservationType.DnaSample, DerivationEventType.DNA_EXTRACTION());
-                               createMenuItem(addMenu, "Media Specimen", selectedTreeNode, MediaSpecimen.class, SpecimenOrObservationType.Media, DerivationEventType.ACCESSIONING());
+                               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 && ((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());
+                                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, 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);
                             }
                         }
@@ -104,7 +110,7 @@ public class CreateDerivateContextMenu extends CompoundContributionItem {
         if(specimenType!=null && specimenType.equals(SpecimenOrObservationType.Media)){
             //media submenu
             MenuItem mediaItem = new MenuItem(menu, SWT.CASCADE);
-            mediaItem.setText("Media...");
+            mediaItem.setText(Messages.CreateDerivateContextMenu_MEDIA);
             Menu mediaMenu = new Menu(menu);
             mediaItem.setMenu(mediaMenu);
 
@@ -115,11 +121,8 @@ public class CreateDerivateContextMenu extends CompoundContributionItem {
 
             //existing media menu
             MenuItem existingMediaItem = new MenuItem(mediaMenu, SWT.NONE);
-            existingMediaItem.setText("Media Specimen with existing media");
+            existingMediaItem.setText(Messages.CreateDerivateContextMenu_MEDIA_EXISTING);
             existingMediaItem.addSelectionListener(new SelectionAdapter() {
-                /* (non-Javadoc)
-                 * @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse.swt.events.SelectionEvent)
-                 */
                 @Override
                 public void widgetSelected(SelectionEvent e) {
                     //select media
@@ -135,7 +138,9 @@ public class CreateDerivateContextMenu extends CompoundContributionItem {
                         specimenOrObservationBase.addDerivationEvent(DerivationEvent.NewSimpleInstance(specimenOrObservationBase, mediaSpecimen, derivationEventType));
                         mediaSpecimen.setCacheStrategy(new DerivedUnitFacadeCacheStrategy());
                         mediaSpecimen.getTitleCache(); //update title cache
-                        CdmStore.getService(IOccurrenceService.class).merge(specimenOrObservationBase);
+                        if(CdmStore.getCurrentSessionManager().isRemoting()) {
+                            CdmStore.getService(IOccurrenceService.class).merge(specimenOrObservationBase, true);
+                        }
                     }
 
                     //refresh view
@@ -177,9 +182,6 @@ public class CreateDerivateContextMenu extends CompoundContributionItem {
             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;
@@ -189,7 +191,7 @@ public class CreateDerivateContextMenu extends CompoundContributionItem {
             if(derivateView!=null){
                 if(derivateView.isDirty()){
                     e.doit = false;
-                    MessagingUtils.warningDialog("View has unsaved changes", this, "You need to save before performing this action");
+                    MessagingUtils.warningDialog(DerivateView.VIEW_HAS_UNSAVED_CHANGES, this, DerivateView.YOU_NEED_TO_SAVE_BEFORE_PERFORMING_THIS_ACTION);
                     return;
                 }
             }
@@ -199,14 +201,20 @@ public class CreateDerivateContextMenu extends CompoundContributionItem {
             if(selectedDerivate instanceof DnaSample && ((DnaSample) selectedDerivate).getRecordBasis()==SpecimenOrObservationType.DnaSample){
                 DnaSample dnaSample = (DnaSample)selectedDerivate;
                 if(childClass.equals(Sequence.class)){
-                    Sequence newInstance = Sequence.NewInstance(dnaSample, "", 0);
+                    Sequence newInstance = Sequence.NewInstance(dnaSample, "", 0); //$NON-NLS-1$
                     createdElement = newInstance;
                 }
+                if(CdmStore.getCurrentSessionManager().isRemoting()) {
+                    CdmStore.getService(IOccurrenceService.class).merge((SpecimenOrObservationBase) selectedDerivate, true);
+                }
             }
             else if(selectedDerivate instanceof Sequence){
                 SingleRead newInstance = SingleRead.NewInstance();
                 ((Sequence) selectedDerivate).addSingleRead(newInstance);
                 createdElement = newInstance;
+                if(CdmStore.getCurrentSessionManager().isRemoting()) {
+                    CdmApplicationState.getCurrentAppConfig().getSequenceService().merge((Sequence)selectedDerivate, true);
+                }
             }
             else if(selectedDerivate instanceof SpecimenOrObservationBase && DerivedUnit.class.isAssignableFrom(childClass)){
                 SpecimenOrObservationBase<?> specimenOrObservationBase = (SpecimenOrObservationBase<?>)selectedDerivate;
@@ -232,11 +240,13 @@ public class CreateDerivateContextMenu extends CompoundContributionItem {
                 derivedUnit.setCacheStrategy(new DerivedUnitFacadeCacheStrategy());
                 derivedUnit.getTitleCache(); //update title cache
                 createdElement = derivedUnit;
+                if(CdmStore.getCurrentSessionManager().isRemoting()) {
+                    CdmStore.getService(IOccurrenceService.class).merge((SpecimenOrObservationBase) selectedDerivate, true);
+                }
             }
 
             //refresh view
             if(derivateView!=null){
-                CdmStore.getService(IOccurrenceService.class).merge((SpecimenOrObservationBase) selectedDerivate);
                 derivateView.getConversationHolder().commit();
                 derivateView.refreshTree(createdElement);
             }