fix #7428: ask for saving and update open views for subtree operations
authorKatja Luther <k.luther@bgbm.org>
Wed, 13 Mar 2019 08:56:41 +0000 (09:56 +0100)
committerKatja Luther <k.luther@bgbm.org>
Wed, 13 Mar 2019 08:56:41 +0000 (09:56 +0100)
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/EditorUtil.java
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/e4/TaxonEditorInputE4.java
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/descriptive/e4/handler/MoveDescriptionElementsHandlerE4.java
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/descriptive/e4/handler/MoveDescriptionToOtherTaxonHandlerE4.java
eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/navigator/e4/handler/SetPublishFlagForSubtreeHandlerE4.java
eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/navigator/operation/SetPublishForSubtreeOperation.java
eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/navigator/operation/SetSecundumForSubtreeOperation.java
eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/navigator/operation/UpdateSubtreeOperation.java

index 93a7446158f19a6794bd99b075b7960b72567a2d..6156c2b832c3e6a7cb79e388912cb0bc61161c9b 100644 (file)
@@ -10,6 +10,7 @@
 package eu.etaxonomy.taxeditor.editor;
 
 import java.util.Collection;
+import java.util.HashSet;
 import java.util.UUID;
 
 import org.eclipse.core.commands.ExecutionEvent;
@@ -211,8 +212,9 @@ public class EditorUtil extends AbstractUtility {
         editor.setFocus();
     }
 
-    public static MPart checkForChanges(UUID taxonUUID, EPartService partService ){
+    public static Collection<MPart> checkForChanges(UUID taxonUUID, EPartService partService ){
         Collection<MPart> parts = partService.getParts();
+        Collection<MPart> dirtyParts = new HashSet();
         //check if part is already opened
         boolean isDirty = false;
         for (MPart part : parts) {
@@ -220,13 +222,17 @@ public class EditorUtil extends AbstractUtility {
                     && ((TaxonNameEditorE4) part.getObject()).getTaxon()!=null
                     && ((TaxonNameEditorE4) part.getObject()).getTaxon().getUuid().equals(taxonUUID)){
                 if (part.isDirty()){
-                    return part;
+                    dirtyParts.add(part);
                 }
 
                 break;
+            }else if (taxonUUID == null){
+                if (part.isDirty()){
+                    dirtyParts.add(part);
+                }
             }
         }
-        return null;
+        return dirtyParts;
     }
 
        /**
index cd992804dd6c831be29060ea89deec28c7b81a60..e97b1ae8e5753269bad81b0426d9317ec3ec10fc 100644 (file)
@@ -20,7 +20,13 @@ import java.util.Map.Entry;
 import java.util.Set;
 import java.util.UUID;
 
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.core.commands.operations.IOperationHistory;
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
 import org.eclipse.e4.ui.di.UISynchronize;
+import org.eclipse.ui.ide.undo.WorkspaceUndoUtil;
 
 import eu.etaxonomy.cdm.api.conversation.ConversationHolder;
 import eu.etaxonomy.cdm.api.conversation.IConversationEnabled;
@@ -44,14 +50,16 @@ import eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeMap;
 import eu.etaxonomy.taxeditor.editor.CdmEntitySessionInput;
 import eu.etaxonomy.taxeditor.editor.ChooseFromMultipleAcceptedTaxaDialog;
 import eu.etaxonomy.taxeditor.editor.ChooseFromMultipleTaxonNodesDialog;
-import eu.etaxonomy.taxeditor.editor.EditorUtil;
 import eu.etaxonomy.taxeditor.editor.l10n.Messages;
+import eu.etaxonomy.taxeditor.model.AbstractUtility;
 import eu.etaxonomy.taxeditor.model.DataChangeBridge;
 import eu.etaxonomy.taxeditor.model.MessagingUtils;
 import eu.etaxonomy.taxeditor.operation.AbstractPostOperation;
 import eu.etaxonomy.taxeditor.operation.AbstractPostTaxonOperation;
+import eu.etaxonomy.taxeditor.operation.IPostOperationEnabled;
 import eu.etaxonomy.taxeditor.preference.PreferencesUtil;
 import eu.etaxonomy.taxeditor.store.CdmStore;
+import eu.etaxonomy.taxeditor.store.internal.TaxeditorStorePlugin;
 
 
 /**
@@ -369,10 +377,33 @@ public class TaxonEditorInputE4  extends CdmEntitySessionInput implements IConve
         }
         toDeletes.clear();
         for(AbstractPostOperation entry:operations){
-            EditorUtil.executeOperation(entry,sync);
+            IStatus status = Status.CANCEL_STATUS;
+            final IAdaptable uiInfoAdapter = WorkspaceUndoUtil
+                    .getUIInfoAdapter(AbstractUtility.getShell());
+            String operationlabel = entry.getLabel();
+            try {
+                entry.addContext(IOperationHistory.GLOBAL_UNDO_CONTEXT);
+                status = entry.execute(null, uiInfoAdapter);
+            } catch (ExecutionException e) {
+
+                MessagingUtils.operationDialog(AbstractUtility.class, e, TaxeditorStorePlugin.PLUGIN_ID, operationlabel, null);
+
+            }
+
+            String statusString = status.equals(Status.OK_STATUS) ? "completed"
+                    : "cancelled";
+
+            IPostOperationEnabled postOperationEnabled = entry
+                    .getPostOperationEnabled();
+            if (postOperationEnabled != null) {
+                postOperationEnabled.onComplete();
+            }
+
+
+            //AbstractUtility.executeOperation(entry,sync);
         }
-        operations.clear();
 
+        operations.clear();
         for (Synonym syn: toSaveNewSynonyms){
             for (HybridRelationship rel : syn.getName().getHybridChildRelations()){
 //                if (!rel.getParentName().isPersited()) {
@@ -404,6 +435,7 @@ public class TaxonEditorInputE4  extends CdmEntitySessionInput implements IConve
 
         CdmStore.getService(ITaxonNodeService.class).merge(taxonNode, true);
 
+
     }
 
     /**
index b9ea1f4f6c4781131ab470e5abdaba1c73f1295f..c71528cec860f8d55fb9ffcc0a61156f75a50e78 100644 (file)
@@ -10,6 +10,7 @@
 package eu.etaxonomy.taxeditor.editor.view.descriptive.e4.handler;
 
 import java.util.ArrayList;
+import java.util.Collection;
 import java.util.HashSet;
 import java.util.Iterator;
 import java.util.List;
@@ -156,24 +157,46 @@ public class MoveDescriptionElementsHandlerE4 implements IPostOperationEnabled{
             }
             newAcceptedTaxonNodeUuid = newAcceptedTaxonNode.getUuid();
 
-            MPart targetEditor = EditorUtil.checkForChanges(targetTaxon.getUuid(), partService);
+            Collection<MPart> targetEditors = EditorUtil.checkForChanges(targetTaxon.getUuid(), partService);
 
-            if ((targetEditor != null && targetEditor.getElementId().equals("eu.etaxonomy.taxeditor.editor.name.e4.TaxonNameEditorE4")) || this.editor.isDirty()){
+            if (targetEditors != null || this.editor.isDirty()){
                 boolean proceed = MessageDialog.openQuestion(null,
                         Messages.MoveDescriptionToOtherTaxonHandler_SAVE_CHANGES, Messages.MoveDescriptionToOtherTaxonHandler_SAVE_CHANGES_MESSAGE);
-                if (proceed) {
-                    if (targetEditor != null){
-                        e4WrappedPart = WorkbenchUtility.getE4WrappedPart(targetEditor);
-                        ((TaxonNameEditorE4)e4WrappedPart).save(AbstractUtility.getMonitor());
+                if( targetEditors.iterator().hasNext() ){
+                    MPart part = targetEditors.iterator().next();
+                    if (proceed) {
+                        if (part != null){
+                            if (part.getElementId().equals("eu.etaxonomy.taxeditor.editor.name.e4.TaxonNameEditorE4")){
+                                TaxonNameEditorE4 targetEditor = (TaxonNameEditorE4) WorkbenchUtility.getE4WrappedPart(part);
+
+                                targetEditor.save(AbstractUtility.getMonitor());
+                            }
+                            if (editor.isDirty()){
+                                editor.save(AbstractUtility.getMonitor());
+                            }
+                        } else {
+                            return;
+                        }
                     }
-                    if (editor.isDirty()){
-                        editor.save(AbstractUtility.getMonitor());
-                    }
-                } else {
-                    return;
                 }
             }
 
+//            if ((targetEditor != null && targetEditor.getElementId().equals("eu.etaxonomy.taxeditor.editor.name.e4.TaxonNameEditorE4")) || this.editor.isDirty()){
+//                boolean proceed = MessageDialog.openQuestion(null,
+//                        Messages.MoveDescriptionToOtherTaxonHandler_SAVE_CHANGES, Messages.MoveDescriptionToOtherTaxonHandler_SAVE_CHANGES_MESSAGE);
+//                if (proceed) {
+//                    if (targetEditor != null){
+//                        e4WrappedPart = WorkbenchUtility.getE4WrappedPart(targetEditor);
+//                        ((TaxonNameEditorE4)e4WrappedPart).save(AbstractUtility.getMonitor());
+//                    }
+//                    if (editor.isDirty()){
+//                        editor.save(AbstractUtility.getMonitor());
+//                    }
+//                } else {
+//                    return;
+//                }
+//            }
+
             String moveMessage = String.format(Messages.MoveDescriptionElementsHandler_ELEMENTS_MOVED, editor.getTaxon());
 
             AbstractPostOperation operation = new MoveDescriptionElementsOperation(
index 3bca4e67d549ab001c26ba1d24e7e224cc4c93c6..b355e6a318b4f71b25d66d3c2d9d530ee1a41205 100644 (file)
@@ -4,6 +4,7 @@
 package eu.etaxonomy.taxeditor.editor.view.descriptive.e4.handler;
 
 import java.util.ArrayList;
+import java.util.Collection;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
@@ -120,20 +121,26 @@ public class MoveDescriptionToOtherTaxonHandlerE4 implements IPostOperationEnabl
         newAcceptedTaxonNodeUuid = newAcceptedTaxonNode.getUuid();
         newAcceptedTaxonUuid = newAcceptedTaxonNode.getTaxon().getUuid();
 
-        MPart targetEditor = EditorUtil.checkForChanges(newAcceptedTaxonUuid, partService);
-        if ((targetEditor != null && targetEditor.getElementId().equals("eu.etaxonomy.taxeditor.editor.name.e4.TaxonNameEditorE4")) || this.editor.isDirty()){
+        Collection<MPart> targetEditors = EditorUtil.checkForChanges(newAcceptedTaxonUuid, partService);
+
+        if (targetEditors != null || this.editor.isDirty()){
             boolean proceed = MessageDialog.openQuestion(null,
                     Messages.MoveDescriptionToOtherTaxonHandler_SAVE_CHANGES, Messages.MoveDescriptionToOtherTaxonHandler_SAVE_CHANGES_MESSAGE);
-            if (proceed) {
-                if (targetEditor != null){
-                    e4WrappedPart = WorkbenchUtility.getE4WrappedPart(targetEditor);
-                    ((TaxonNameEditorE4)e4WrappedPart).save(AbstractUtility.getMonitor());
-                }
-                if (editor.isDirty()){
-                    editor.save(AbstractUtility.getMonitor());
+            if( targetEditors.iterator().hasNext() ){
+                MPart part = targetEditors.iterator().next();
+                if (proceed) {
+                    if (part != null){
+                        if (part.getElementId().equals("eu.etaxonomy.taxeditor.editor.name.e4.TaxonNameEditorE4")){
+                            TaxonNameEditorE4 targetEditor = (TaxonNameEditorE4) WorkbenchUtility.getE4WrappedPart(part);
+                            targetEditor.save(AbstractUtility.getMonitor());
+                        }
+                        if (editor.isDirty()){
+                            editor.save(AbstractUtility.getMonitor());
+                        }
+                    } else {
+                        return;
+                    }
                 }
-            } else {
-                return;
             }
         }
 
index edcb60a69dd8bcb0c74c360cb202cd78b7315131..e566638119f1141e369bfeb5fc1ba0085cd05653 100755 (executable)
@@ -9,15 +9,20 @@
 */
 package eu.etaxonomy.taxeditor.navigation.navigator.e4.handler;
 
+import java.util.Collection;
+import java.util.Iterator;
+
 import javax.inject.Named;
 
 import org.eclipse.core.commands.operations.AbstractOperation;
 import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.NullProgressMonitor;
 import org.eclipse.core.runtime.Status;
 import org.eclipse.e4.core.di.annotations.CanExecute;
 import org.eclipse.e4.ui.model.application.ui.basic.MPart;
 import org.eclipse.e4.ui.model.application.ui.menu.MHandledMenuItem;
 import org.eclipse.e4.ui.services.IServiceConstants;
+import org.eclipse.jface.dialogs.MessageDialog;
 import org.eclipse.jface.viewers.IStructuredSelection;
 import org.eclipse.jface.viewers.TreeSelection;
 import org.eclipse.jface.window.Window;
@@ -27,10 +32,14 @@ import org.eclipse.swt.widgets.Shell;
 import eu.etaxonomy.cdm.api.service.config.PublishForSubtreeConfigurator;
 import eu.etaxonomy.cdm.model.taxon.Classification;
 import eu.etaxonomy.cdm.persistence.dto.TaxonNodeDto;
+import eu.etaxonomy.taxeditor.bulkeditor.e4.BulkEditorE4;
+import eu.etaxonomy.taxeditor.editor.EditorUtil;
+import eu.etaxonomy.taxeditor.editor.name.e4.TaxonNameEditorE4;
 import eu.etaxonomy.taxeditor.navigation.navigator.TaxonNavigatorLabels;
 import eu.etaxonomy.taxeditor.navigation.navigator.operation.SetPublishForSubtreeOperation;
 import eu.etaxonomy.taxeditor.operation.e4.RemotingCdmHandlerE4;
 import eu.etaxonomy.taxeditor.ui.dialog.configurator.SetPublishForSubtreeWizard;
+import eu.etaxonomy.taxeditor.workbench.WorkbenchUtility;
 
 /**
  * @author k.luther
@@ -77,6 +86,31 @@ public class SetPublishFlagForSubtreeHandlerE4 extends RemotingCdmHandlerE4 {
                     "unknown", //$NON-NLS-1$
                     TaxonNavigatorLabels.SELECTED_OBJECT_NOT_TREE_NODE_MESSAGE);
         }
+        Collection<MPart> dirtyParts = EditorUtil.checkForChanges(null, partService);
+
+        if (dirtyParts != null && !dirtyParts.isEmpty()){
+            boolean proceed = MessageDialog.openQuestion(null,
+                    "There are unsaved changes", "Do you want to save the changes?");
+            Iterator<MPart> partIterator = dirtyParts.iterator();
+            while( partIterator.hasNext() ){
+                MPart part = partIterator.next();
+                if (proceed) {
+                    if (part != null){
+                        if (part.getElementId().equals("eu.etaxonomy.taxeditor.editor.name.e4.TaxonNameEditorE4")){
+                            TaxonNameEditorE4 targetEditor = (TaxonNameEditorE4) WorkbenchUtility.getE4WrappedPart(part);
+                            targetEditor.save(new NullProgressMonitor());
+                        }else if (part.getElementId().equals("bulkeditor.editor")){
+                            BulkEditorE4 targetEditor = (BulkEditorE4) WorkbenchUtility.getE4WrappedPart(part);
+                            targetEditor.save(new NullProgressMonitor());
+                        }
+
+                    }
+
+                }
+            }
+        }
+
+
         configurator = new PublishForSubtreeConfigurator(taxonNode.getUuid());
         SetPublishForSubtreeWizard wizard = new SetPublishForSubtreeWizard(configurator);
 
index ac205d6b1cc912e45c2161ce64a2aa86c016d5f1..e6349699e8627e62cc6eb1303a983784560bfd0d 100755 (executable)
@@ -104,7 +104,7 @@ public class SetPublishForSubtreeOperation extends UpdateSubtreeOperation implem
     }
 
     public void runMoniteredOperation() {
-        ITaxonNodeService nodeService;
+
         final UUID uuid = longRunningTaskService.monitLongRunningTask(config);
         Display.getDefault().asyncExec(new Runnable() {
             @Override
index 057278db59e70db37e4faeb3c4d5d179b6d56acd..2a044999003b9b94f690f1b8e726028ed40ec483 100755 (executable)
@@ -30,6 +30,7 @@ import eu.etaxonomy.cdm.api.service.ITaxonNodeService;
 import eu.etaxonomy.cdm.api.service.UpdateResult;
 import eu.etaxonomy.cdm.api.service.config.SecundumForSubtreeConfigurator;
 import eu.etaxonomy.cdm.common.monitor.IRemotingProgressMonitor;
+import eu.etaxonomy.taxeditor.editor.EditorUtil;
 import eu.etaxonomy.taxeditor.model.AbstractUtility;
 import eu.etaxonomy.taxeditor.navigation.l10n.Messages;
 import eu.etaxonomy.taxeditor.operation.IPostMoniteredOperationEnabled;
@@ -60,6 +61,8 @@ public class SetSecundumForSubtreeOperation extends UpdateSubtreeOperation imple
      */
     @Override
     protected UpdateResult doUpdateExecute(IProgressMonitor monitor, IAdaptable info) throws Exception {
+        EditorUtil.checkForChanges(null, partService);
+
 //        runMoniteredOperation();
         runMoniteredOperation();
 //        updateNameEditors();
index 8d431f1a0b3fdc6c4d383ec863c0354bfcbea12a..ba9fed2dd167c4ae3aca754f06c8dc1e2a2d7f9d 100644 (file)
@@ -21,6 +21,7 @@ import eu.etaxonomy.cdm.model.common.CdmBase;
 import eu.etaxonomy.cdm.model.taxon.Synonym;
 import eu.etaxonomy.cdm.model.taxon.Taxon;
 import eu.etaxonomy.cdm.model.taxon.TaxonNode;
+import eu.etaxonomy.taxeditor.bulkeditor.e4.BulkEditorE4;
 import eu.etaxonomy.taxeditor.editor.EditorUtil;
 import eu.etaxonomy.taxeditor.editor.name.e4.TaxonNameEditorE4;
 import eu.etaxonomy.taxeditor.operation.RemotingCdmUpdateOperation;
@@ -86,14 +87,9 @@ public abstract class UpdateSubtreeOperation extends RemotingCdmUpdateOperation
                                            if (object != null){
                                                EditorUtil.openTaxonBaseE4(((TaxonNameEditorE4)object).getTaxon().getUuid(), modelService, partService, application);
                                            }
-//                                             Set<TaxonNode> nodes = ((TaxonNameEditorE4)object).getTaxon().getTaxonNodes();
-//                                             for (TaxonNode node: nodes){
-//                                                 if (nodesToUpdate.contains(node)){
-////                                                           EditorUtil.closeObsoleteEditor(node, partService);
-//                                                     EditorUtil.openTaxonNodeE4(node.getUuid(), modelService, partService, application);
-//                                                 }
-//
-//                                             }
+                                       }
+                                       if (object instanceof BulkEditorE4){
+                                           ((BulkEditorE4)object).getEditorInput().performSearch( ((BulkEditorE4)object).getLastQuery(), ((BulkEditorE4)object).getSelection());
                                        }
                        }
                    }