Merge branch 'develop' into remoting-4.0
[taxeditor.git] / eu.etaxonomy.taxeditor.store / src / main / java / eu / etaxonomy / taxeditor / newWizard / NewDerivedUnitBaseWizard.java
index 836c953c9ef7986fa2edfc4fbcb606eb2b72a380..59dee8496855c1bac5928fe4b999b16cd9d67b00 100644 (file)
@@ -1,15 +1,32 @@
 // $Id$
 /**
-* Copyright (C) 2007 EDIT
-* European Distributed Institute of Taxonomy
-* http://www.e-taxonomy.eu
-*
-* The contents of this file are subject to the Mozilla Public License Version 1.1
-* See LICENSE.TXT at the top of this package for the full license terms.
-*/
+ * Copyright (C) 2007 EDIT
+ * European Distributed Institute of Taxonomy
+ * http://www.e-taxonomy.eu
+ *
+ * The contents of this file are subject to the Mozilla Public License Version 1.1
+ * See LICENSE.TXT at the top of this package for the full license terms.
+ */
 
 package eu.etaxonomy.taxeditor.newWizard;
 
+import java.util.HashMap;
+import java.util.Map;
+import java.util.UUID;
+
+import org.eclipse.core.commands.Command;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.core.commands.NotEnabledException;
+import org.eclipse.core.commands.NotHandledException;
+import org.eclipse.core.commands.ParameterizedCommand;
+import org.eclipse.core.commands.common.NotDefinedException;
+import org.eclipse.jface.dialogs.IDialogConstants;
+import org.eclipse.jface.dialogs.MessageDialogWithToggle;
+import org.eclipse.ui.IWorkbenchWindow;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.commands.ICommandService;
+import org.eclipse.ui.handlers.IHandlerService;
+
 import eu.etaxonomy.cdm.api.facade.DerivedUnitFacade;
 import eu.etaxonomy.cdm.api.facade.DerivedUnitFacadeNotSupportedException;
 import eu.etaxonomy.cdm.api.service.IOccurrenceService;
@@ -19,7 +36,10 @@ import eu.etaxonomy.cdm.model.occurrence.FieldUnit;
 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.model.AbstractUtility;
 import eu.etaxonomy.taxeditor.model.IDerivedUnitFacadePart;
+import eu.etaxonomy.taxeditor.model.MessagingUtils;
+import eu.etaxonomy.taxeditor.preference.IPreferenceKeys;
 import eu.etaxonomy.taxeditor.preference.PreferencesUtil;
 import eu.etaxonomy.taxeditor.store.CdmStore;
 import eu.etaxonomy.taxeditor.ui.section.occurrence.DerivedUnitBaseWizardPage;
@@ -27,6 +47,7 @@ import eu.etaxonomy.taxeditor.ui.section.occurrence.DerivedUnitGeneralWizardPage
 import eu.etaxonomy.taxeditor.ui.section.occurrence.FieldUnitGeneralWizardPage;
 import eu.etaxonomy.taxeditor.ui.section.occurrence.FieldUnitWizardPage;
 import eu.etaxonomy.taxeditor.ui.section.occurrence.GatheringEventWizardPage;
+import eu.etaxonomy.taxeditor.view.derivateSearch.DerivateSearchCompositeController;
 
 /**
  * @author n.hoffmann
@@ -34,39 +55,39 @@ import eu.etaxonomy.taxeditor.ui.section.occurrence.GatheringEventWizardPage;
  * @version 1.0
  */
 public class NewDerivedUnitBaseWizard extends AbstractNewEntityWizard<SpecimenOrObservationBase> implements IDerivedUnitFacadePart{
-       private SpecimenOrObservationType specOrObsType = null;
+    private SpecimenOrObservationType specOrObsType = null;
 
-       public NewDerivedUnitBaseWizard() {
-               super();
-       }
+    public NewDerivedUnitBaseWizard() {
+        super();
+    }
 
-       public NewDerivedUnitBaseWizard(SpecimenOrObservationType specOrObsType) {
-               super();
-               this.specOrObsType = specOrObsType;
-       }
-       /** {@inheritDoc} */
-       @Override
-       public void addPages() {
-           DerivedUnitFacade facade = null;
-           try {
-               if(getEntity() instanceof DerivedUnit) {
-                   facade = DerivedUnitFacade.NewInstance((DerivedUnit)getEntity(), PreferencesUtil.getDerivedUnitConfigurator());
-                   addPage(new DerivedUnitGeneralWizardPage(formFactory, getConversationHolder(), facade));
-                   addPage(new GatheringEventWizardPage(formFactory, getConversationHolder(), facade));
-                   addPage(new FieldUnitWizardPage(formFactory, getConversationHolder(), facade));
-                   addPage(new DerivedUnitBaseWizardPage(formFactory, getConversationHolder(), facade));
-               }
-               else if(getEntity() instanceof FieldUnit){
-                   facade = DerivedUnitFacade.NewInstance(SpecimenOrObservationType.FieldUnit, (FieldUnit)getEntity(), PreferencesUtil.getDerivedUnitConfigurator());
-                   addPage(new FieldUnitGeneralWizardPage(formFactory, getConversationHolder(), facade));
-                   addPage(new GatheringEventWizardPage(formFactory, getConversationHolder(), facade));
-                   addPage(new FieldUnitWizardPage(formFactory, getConversationHolder(), facade));
-               }
-           } catch (DerivedUnitFacadeNotSupportedException e) {
-               // we should never get here
-               throw new IllegalStateException();
-           }
-       }
+    public NewDerivedUnitBaseWizard(SpecimenOrObservationType specOrObsType) {
+        super();
+        this.specOrObsType = specOrObsType;
+    }
+    /** {@inheritDoc} */
+    @Override
+    public void addPages() {
+        DerivedUnitFacade facade = null;
+        try {
+            if(getEntity() instanceof DerivedUnit) {
+                facade = DerivedUnitFacade.NewInstance((DerivedUnit)getEntity(), PreferencesUtil.getDerivedUnitConfigurator());
+                addPage(new DerivedUnitGeneralWizardPage(formFactory, getConversationHolder(), facade));
+                addPage(new GatheringEventWizardPage(formFactory, getConversationHolder(), facade));
+                addPage(new FieldUnitWizardPage(formFactory, getConversationHolder(), facade));
+                addPage(new DerivedUnitBaseWizardPage(formFactory, getConversationHolder(), facade));
+            }
+            else if(getEntity() instanceof FieldUnit){
+                facade = DerivedUnitFacade.NewInstance(SpecimenOrObservationType.FieldUnit, (FieldUnit)getEntity(), PreferencesUtil.getDerivedUnitConfigurator());
+                addPage(new FieldUnitGeneralWizardPage(formFactory, getConversationHolder(), facade));
+                addPage(new GatheringEventWizardPage(formFactory, getConversationHolder(), facade));
+                addPage(new FieldUnitWizardPage(formFactory, getConversationHolder(), facade));
+            }
+        } catch (DerivedUnitFacadeNotSupportedException e) {
+            // we should never get here
+            throw new IllegalStateException();
+        }
+    }
 
     /** {@inheritDoc} */
     @Override
@@ -76,8 +97,8 @@ public class NewDerivedUnitBaseWizard extends AbstractNewEntityWizard<SpecimenOr
         } else {
             if (SpecimenOrObservationType.Media.equals(specOrObsType)
                     || ((specOrObsType.getKindOf() != null) && specOrObsType.getKindOf().equals(SpecimenOrObservationType.Media))) {
-                   MediaSpecimen mediaSpecimen = MediaSpecimen.NewInstance(specOrObsType);
-                   //a MediaSpecimen with no media attached does not make sense. Hence, we add one
+                MediaSpecimen mediaSpecimen = MediaSpecimen.NewInstance(specOrObsType);
+                //a MediaSpecimen with no media attached does not make sense. Hence, we add one
                 mediaSpecimen.setMediaSpecimen(Media.NewInstance());
                 return mediaSpecimen;
             } else if (specOrObsType.equals(SpecimenOrObservationType.FieldUnit)) {
@@ -88,16 +109,66 @@ public class NewDerivedUnitBaseWizard extends AbstractNewEntityWizard<SpecimenOr
         }
     }
 
+
        /** {@inheritDoc} */
        @Override
        protected void saveEntity() {
                CdmStore.getService(IOccurrenceService.class).merge(getEntity());
        }
 
-       @Override
-       protected String getEntityName() {
-               return "Specimen";
-       }
+
+    @Override
+    protected String getEntityName() {
+        return "Specimen";
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public boolean performFinish() {
+        boolean performFinish = super.performFinish();
+        int returnCode = IDialogConstants.NO_ID;
+        if (!PreferencesUtil.getPreferenceStore().getBoolean(IPreferenceKeys.PROMPT_FOR_OPEN_SPECIMEN_IN_EDITOR)){
+            MessageDialogWithToggle messageDialog = MessageDialogWithToggle.openYesNoQuestion(getShell(),
+                    "Choose opening option", "Do you want to open the specimen in the specimen editor?",
+                    "Remember my decision?", false, PreferencesUtil.getPreferenceStore(),
+                    IPreferenceKeys.ALWAYS_OPEN_SPECIMEN_IN_EDITOR);
+            returnCode = messageDialog.getReturnCode();
+            PreferencesUtil.getPreferenceStore().setValue(IPreferenceKeys.PROMPT_FOR_OPEN_SPECIMEN_IN_EDITOR, messageDialog.getToggleState());
+            if (returnCode != IDialogConstants.YES_ID) {
+                return performFinish;
+            }
+        }
+        if (returnCode==IDialogConstants.YES_ID ||
+                PreferencesUtil.getPreferenceStore().getString(IPreferenceKeys.ALWAYS_OPEN_SPECIMEN_IN_EDITOR)
+                .equals(MessageDialogWithToggle.ALWAYS)) {
+            IHandlerService handlerService = (IHandlerService) AbstractUtility.getService(IHandlerService.class);
+
+            // get the command from plugin.xml
+            IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
+            ICommandService cmdService = (ICommandService) window.getService(ICommandService.class);
+            Command command = cmdService.getCommand("eu.etaxonomy.taxeditor.editor.openSpecimenEditor");
+            Map<String, UUID> parameters = new HashMap<String, UUID>();
+            parameters.put("eu.etaxonomy.taxeditor.specimenUuidParameter", getEntity().getUuid());
+            ParameterizedCommand parameterizedCommand = ParameterizedCommand.generateCommand(command, parameters);
+
+
+            // execute the command
+            try {
+                handlerService.executeCommand(parameterizedCommand, null);
+            } catch (ExecutionException e) {
+                MessagingUtils.error(DerivateSearchCompositeController.class, e);
+            } catch (NotDefinedException e) {
+                MessagingUtils.error(DerivateSearchCompositeController.class, e);
+            } catch (NotEnabledException e) {
+                MessagingUtils.error(DerivateSearchCompositeController.class, e);
+            } catch (NotHandledException e) {
+                MessagingUtils.error(DerivateSearchCompositeController.class, e);
+            }
+        }
+        return performFinish;
+    }
 
 
 }