ref #9116: add single source element to taxon node details and restructure the wizard
[taxeditor.git] / eu.etaxonomy.taxeditor.store / src / main / java / eu / etaxonomy / taxeditor / handler / defaultHandler / e4 / DefaultOpenTaxonNodeWizardHandlerE4.java
index afabd55b4e6565ff194985a51d72bfe6ec07f970..aa93223b91f915c01b12538783b63b57d3335632 100644 (file)
@@ -8,16 +8,20 @@
 */
 package eu.etaxonomy.taxeditor.handler.defaultHandler.e4;
 
-import java.util.UUID;
+import java.util.Collection;
 
 import org.eclipse.e4.core.contexts.ContextInjectionFactory;
+import org.eclipse.e4.ui.model.application.ui.basic.MPart;
 import org.eclipse.e4.ui.workbench.modeling.EPartService;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.viewers.IStructuredSelection;
 import org.eclipse.jface.wizard.WizardDialog;
 import org.eclipse.swt.widgets.Shell;
 
 import eu.etaxonomy.cdm.api.service.ITaxonNodeService;
 import eu.etaxonomy.cdm.model.metadata.PreferencePredicate;
-import eu.etaxonomy.cdm.model.taxon.TaxonNode;
+import eu.etaxonomy.cdm.persistence.dto.TaxonNodeDto;
+import eu.etaxonomy.taxeditor.editor.ITaxonEditor;
 import eu.etaxonomy.taxeditor.event.EventUtility;
 import eu.etaxonomy.taxeditor.event.WorkbenchEventConstants;
 import eu.etaxonomy.taxeditor.preference.PreferencesUtil;
@@ -29,27 +33,51 @@ import eu.etaxonomy.taxeditor.ui.section.classification.EditTaxonNodeWizard;
  * @date 22.03.2016
  *
  */
-public class DefaultOpenTaxonNodeWizardHandlerE4 extends DefaultOpenHandlerBaseE4<TaxonNode> {
+public class DefaultOpenTaxonNodeWizardHandlerE4 extends DefaultOpenHandlerBaseE4<TaxonNodeDto> {
 
-    @Override
-    protected TaxonNode getEntity(UUID uuid) {
-        return CdmStore.getService(ITaxonNodeService.class).load(uuid);
-    }
+//    @Override
+//    protected TaxonNode getEntity(UUID uuid) {
+//        return CdmStore.getService(ITaxonNodeService.class).load(uuid);
+//    }
 
     @Override
-    protected void open(TaxonNode entity, Shell shell, EPartService partService) {
+    protected void open(TaxonNodeDto entity, Shell shell, EPartService partService) {
+        Collection<MPart> dirtyParts = partService.getDirtyParts();
+        if (!dirtyParts.isEmpty()){
+
+            for (MPart dirtyPart: dirtyParts){
+                if (dirtyPart.getElementId().equals("eu.etaxonomy.taxeditor.editor.name.e4.TaxonNameEditorE4")  && ((ITaxonEditor)dirtyPart.getObject()).getTaxonNode().getUuid().equals(entity.getUuid())){
+                    boolean doSave = MessageDialog
+                            .openConfirm(shell, "The taxonnode is in an unsaved mode",
+                                    "Do you want to save?");
+
+                    if (!doSave) {
+                        return ;
+                    }
+
+                    partService.savePart(dirtyPart, false);
+                }
+
+            }
+        }
         EditTaxonNodeWizard taxonNodeWizard = ContextInjectionFactory.make(EditTaxonNodeWizard.class, context);
         taxonNodeWizard.init(null, null);
-        taxonNodeWizard.setEntity(entity);
+        taxonNodeWizard.setEntity(CdmStore.getService(ITaxonNodeService.class).load(entity.getUuid()));
         WizardDialog dialog = new WizardDialog(shell, taxonNodeWizard);
         dialog.open();
-        EventUtility.postEvent(WorkbenchEventConstants.REFRESH_NAVIGATOR, true);
+        EventUtility.postEvent(WorkbenchEventConstants.REFRESH_NAVIGATOR, entity);
+        EventUtility.postEvent(WorkbenchEventConstants.REFRESH_NAME_EDITOR, entity.getTaxonUuid());
 
     }
 
     @Override
-    public boolean canExecute(TaxonNode entity) {
-        return entity.getTaxon()!=null && PreferencesUtil.getBooleanValue(PreferencePredicate.ShowTaxonNodeWizard.getKey());
+    public boolean canExecute(Object selection) {
+        if (((IStructuredSelection)selection).getFirstElement() instanceof TaxonNodeDto && ((IStructuredSelection)selection).size() == 1){
+            return ((TaxonNodeDto)((IStructuredSelection)selection).getFirstElement()).getTaxonUuid()!=null && PreferencesUtil.getBooleanValue(PreferencePredicate.ShowTaxonNodeWizard.getKey());
+        }
+        return false;
     }
 
+
+
 }
\ No newline at end of file