From 5982fda49f3dc2d9e0aa756f172d7340d7f29cfa Mon Sep 17 00:00:00 2001 From: Katja Luther Date: Thu, 7 May 2020 11:44:39 +0200 Subject: [PATCH] ref #8785: add menu item for remove desc and remember this desc and remove while saving --- .../OSGI-INF/l10n/plugin.properties | 9 +++ .../OSGI-INF/l10n/plugin_de.properties | 9 +++ eu.etaxonomy.taxeditor.editor/fragment.e4xmi | 15 +++-- .../DeleteDescriptiveDataSetHandler.java | 56 +++++++++++++++- .../matrix/CharacterMatrix.java | 13 ++++ .../matrix/CharacterMatrixBottomToolbar.java | 7 +- .../matrix/CharacterMatrixPart.java | 1 + .../handler/DeleteDescriptionHandler.java | 66 +++++++++++++++++++ .../taxeditor/editor/l10n/Messages.java | 2 + .../taxeditor/editor/l10n/messages.properties | 4 +- .../editor/l10n/messages_de.properties | 4 +- 11 files changed, 172 insertions(+), 14 deletions(-) create mode 100755 eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiveDataSet/matrix/handler/DeleteDescriptionHandler.java diff --git a/eu.etaxonomy.taxeditor.editor/OSGI-INF/l10n/plugin.properties b/eu.etaxonomy.taxeditor.editor/OSGI-INF/l10n/plugin.properties index b7d8e4b83..92166feb6 100755 --- a/eu.etaxonomy.taxeditor.editor/OSGI-INF/l10n/plugin.properties +++ b/eu.etaxonomy.taxeditor.editor/OSGI-INF/l10n/plugin.properties @@ -260,3 +260,12 @@ command.commandname.22 = Create Invalid Designation handledmenuitem.label.22 = Invalid Designation command.commandname.23 = Change to Invalid Designation command.commandname.61 = Change to Pro Parte Synonym + +handledmenuitem.label.23 = Add Feature +handledmenuitem.label.24 = Add Child Feature +handledmenuitem.label.25 = Paste +handledmenuitem.label.26 = Copy +handledmenuitem.label.27 = Delete +handledmenuitem.label.28 = Delete Description +partdescriptor.label.6 = Distribution Editor +command.commandname.24 = Delete description diff --git a/eu.etaxonomy.taxeditor.editor/OSGI-INF/l10n/plugin_de.properties b/eu.etaxonomy.taxeditor.editor/OSGI-INF/l10n/plugin_de.properties index b3a9bde94..f9fc33767 100644 --- a/eu.etaxonomy.taxeditor.editor/OSGI-INF/l10n/plugin_de.properties +++ b/eu.etaxonomy.taxeditor.editor/OSGI-INF/l10n/plugin_de.properties @@ -260,3 +260,12 @@ command.commandname.22 = Erstelle Invalid Designation handledmenuitem.label.22 = Invalid Designation command.commandname.23 = Ändere zu Invalid Designation command.commandname.61 = Ändere zu Pro Parte Synonym + +handledmenuitem.label.23 = Feature hinzufügen +handledmenuitem.label.24 = Kind Feature hinzufügen +handledmenuitem.label.25 = Einfügen +handledmenuitem.label.26 = Kopieren +handledmenuitem.label.27 = Löschen +handledmenuitem.label.28 = Beschreibung löschen +partdescriptor.label.6 = Distribution Editor +command.commandname.24 = Beschreibung löschen diff --git a/eu.etaxonomy.taxeditor.editor/fragment.e4xmi b/eu.etaxonomy.taxeditor.editor/fragment.e4xmi index c59302c13..dae294c31 100644 --- a/eu.etaxonomy.taxeditor.editor/fragment.e4xmi +++ b/eu.etaxonomy.taxeditor.editor/fragment.e4xmi @@ -68,13 +68,13 @@ nonRestore - - + + - - + + - + @@ -300,6 +300,7 @@ + @@ -314,7 +315,7 @@ - + @@ -403,6 +404,7 @@ + @@ -438,6 +440,7 @@ + diff --git a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiveDataSet/handler/DeleteDescriptiveDataSetHandler.java b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiveDataSet/handler/DeleteDescriptiveDataSetHandler.java index 326e95bfb..56d538549 100644 --- a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiveDataSet/handler/DeleteDescriptiveDataSetHandler.java +++ b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiveDataSet/handler/DeleteDescriptiveDataSetHandler.java @@ -2,15 +2,24 @@ package eu.etaxonomy.taxeditor.editor.descriptiveDataSet.handler; import java.util.Iterator; +import java.util.List; +import java.util.UUID; +import java.util.stream.Collectors; import javax.inject.Named; +import org.eclipse.core.runtime.ICoreRunnable; +import org.eclipse.core.runtime.IProgressMonitor; +import org.eclipse.core.runtime.SubMonitor; +import org.eclipse.core.runtime.jobs.Job; import org.eclipse.e4.core.di.annotations.Execute; import org.eclipse.e4.ui.model.application.ui.basic.MPart; import org.eclipse.e4.ui.services.IServiceConstants; import org.eclipse.jface.viewers.IStructuredSelection; -import eu.etaxonomy.cdm.api.service.IDescriptiveDataSetService; +import eu.etaxonomy.cdm.api.application.CdmApplicationState; +import eu.etaxonomy.cdm.api.service.UpdateResult; +import eu.etaxonomy.cdm.common.monitor.IRemotingProgressMonitor; import eu.etaxonomy.cdm.model.description.DescriptiveDataSet; import eu.etaxonomy.taxeditor.editor.descriptiveDataSet.DescriptiveDataSetNavigator; import eu.etaxonomy.taxeditor.editor.internal.TaxeditorEditorPlugin; @@ -30,8 +39,9 @@ public class DeleteDescriptiveDataSetHandler { while(iterator.hasNext()){ Object next = iterator.next(); if(next instanceof DescriptiveDataSet){ - IDescriptiveDataSetService descriptiveDataSetService = CdmStore.getService(IDescriptiveDataSetService.class); - descriptiveDataSetService.delete(((DescriptiveDataSet) next).getUuid()); +// IDescriptiveDataSetService descriptiveDataSetService = CdmStore.getService(IDescriptiveDataSetService.class); +// descriptiveDataSetService.delete(((DescriptiveDataSet) next).getUuid()); + deleteDescriptiveDataSet(((DescriptiveDataSet) next).getUuid()); DescriptiveDataSetNavigator navigator = (DescriptiveDataSetNavigator) object; navigator.removeDescriptiveDataSet((DescriptiveDataSet) next); navigator.getConversationHolder().commit(); @@ -44,4 +54,44 @@ public class DeleteDescriptiveDataSetHandler { } } + private void deleteDescriptiveDataSet(UUID descriptiveDataSetUuid){ + UUID monitorUuid = CdmApplicationState.getLongRunningTasksService().deleteDescriptiveDataset(descriptiveDataSetUuid); + + String jobLabel = "Delete descriptive dataset"; + Job job = Job.create(jobLabel, (ICoreRunnable) monitor -> { + SubMonitor subMonitor = SubMonitor.convert(monitor); + subMonitor.beginTask(jobLabel, IProgressMonitor.UNKNOWN); + IRemotingProgressMonitor remotingMonitor; + try { + remotingMonitor = CdmStore.getProgressMonitorClientManager() + .pollMonitor(jobLabel, + monitorUuid, + 50, + null, + (List)null, + subMonitor); + Object resultObject = remotingMonitor.getResult(); + if(resultObject instanceof Exception){ + MessagingUtils.errorDialog("Deleting descriptive dataset failed", this, "Deleting descriptive dataset was not successfull", TaxeditorEditorPlugin.PLUGIN_ID, (Exception)resultObject, true, true); + } + else if(resultObject instanceof UpdateResult){ + UpdateResult result = (UpdateResult)resultObject; + if(!result.getExceptions().isEmpty() && result.isOk()){ + MessagingUtils.warningDialog(Messages.DeleteDescriptiveDatasetHandler_Warning_Message, this, + String.format(Messages.DeleteDescriptiveDatasetHandler_Warning_Message, result.getExceptions() + .stream().map(ex->ex.toString()) + .collect(Collectors.joining("\n")))); + } + + } + } catch (InterruptedException e) { + return; + } + monitor.done(); + }); + + job.schedule(); + } + + } \ No newline at end of file diff --git a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiveDataSet/matrix/CharacterMatrix.java b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiveDataSet/matrix/CharacterMatrix.java index 259eb3255..5203cac3e 100644 --- a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiveDataSet/matrix/CharacterMatrix.java +++ b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiveDataSet/matrix/CharacterMatrix.java @@ -188,6 +188,7 @@ public class CharacterMatrix extends Composite { private CharacterMatrixToolbar toolbar; private DescriptionTreeFormat treeFormat; + private List descriptionUuidsToDelete; public CharacterMatrix(Composite parent, CharacterMatrixPart part) { super(parent, SWT.NONE); @@ -722,6 +723,18 @@ public class CharacterMatrix extends Composite { part.setDirty(); } + public List getDescriptionsToDelete() { + return descriptionUuidsToDelete; + } + + public void putDescriptionToDelete(UUID descriptionToDelete) { + if (descriptionUuidsToDelete == null){ + descriptionUuidsToDelete = new ArrayList(); + } + + this.descriptionUuidsToDelete.add(descriptionToDelete); + } + public CharacterMatrixPart getPart() { return part; } diff --git a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiveDataSet/matrix/CharacterMatrixBottomToolbar.java b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiveDataSet/matrix/CharacterMatrixBottomToolbar.java index 30a0dfe49..841d1c8a2 100644 --- a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiveDataSet/matrix/CharacterMatrixBottomToolbar.java +++ b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiveDataSet/matrix/CharacterMatrixBottomToolbar.java @@ -33,7 +33,6 @@ import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import eu.etaxonomy.cdm.api.application.CdmApplicationState; -import eu.etaxonomy.cdm.api.service.IDescriptiveDataSetService; import eu.etaxonomy.cdm.api.service.ITaxonNodeService; import eu.etaxonomy.cdm.api.service.UpdateResult; import eu.etaxonomy.cdm.api.service.description.AggregationMode; @@ -125,9 +124,11 @@ public class CharacterMatrixBottomToolbar extends Composite{ } } toRemove.forEach(rowToRemove -> { + matrix.putDescriptionToDelete(rowToRemove.getDescription().getUuid()); matrix.getDescriptions().remove(rowToRemove); - CdmStore.getService(IDescriptiveDataSetService.class).removeDescription( - rowToRemove.getDescription().getUuid(), matrix.getDescriptiveDataSet().getUuid()); + +// CdmStore.getService(IDescriptiveDataSetService.class).removeDescription( +// rowToRemove.getDescription().getUuid(), matrix.getDescriptiveDataSet().getUuid()); }); } }); diff --git a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiveDataSet/matrix/CharacterMatrixPart.java b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiveDataSet/matrix/CharacterMatrixPart.java index 956c79896..a584c79cd 100644 --- a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiveDataSet/matrix/CharacterMatrixPart.java +++ b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiveDataSet/matrix/CharacterMatrixPart.java @@ -189,6 +189,7 @@ ICdmEntitySessionEnabled, IPartContentHasSupplementalData, IPartContentHasDetail List descriptions = matrix.getRowsToSave().stream() .map(row->row.getDescription()) .collect(Collectors.toList()); + CdmStore.getService(IDescriptiveDataSetService.class).removeDescriptions(matrix.getDescriptionsToDelete(), matrix.getDescriptiveDataSet().getUuid()); CdmStore.getService(IDescriptionService.class).merge(descriptions); matrix.getRowsToSave().clear(); diff --git a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiveDataSet/matrix/handler/DeleteDescriptionHandler.java b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiveDataSet/matrix/handler/DeleteDescriptionHandler.java new file mode 100755 index 000000000..a3afc111b --- /dev/null +++ b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiveDataSet/matrix/handler/DeleteDescriptionHandler.java @@ -0,0 +1,66 @@ +/** +* Copyright (C) 2018 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.editor.descriptiveDataSet.matrix.handler; + +import javax.inject.Named; + +import org.eclipse.e4.core.di.annotations.CanExecute; +import org.eclipse.e4.core.di.annotations.Execute; +import org.eclipse.e4.ui.di.UISynchronize; +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.viewers.IStructuredSelection; + +import eu.etaxonomy.cdm.api.service.dto.SpecimenRowWrapperDTO; +import eu.etaxonomy.cdm.model.description.DescriptiveDataSet; +import eu.etaxonomy.cdm.model.description.SpecimenDescription; +import eu.etaxonomy.taxeditor.editor.descriptiveDataSet.matrix.CharacterMatrixPart; +import eu.etaxonomy.taxeditor.store.StoreUtil; + +/** + * @author pplitzner + * @since Sep 7, 2018 + * + */ +public class DeleteDescriptionHandler{ + + @Execute + public void execute(@Named(IServiceConstants.ACTIVE_PART)MPart activePart, UISynchronize sync) { + CharacterMatrixPart matrixPart = (CharacterMatrixPart) activePart.getObject(); + if(StoreUtil.promptCheckIsDirty(matrixPart)){ + return; + } + DescriptiveDataSet descriptiveDataSet = matrixPart.getDescriptiveDataSet(); + SpecimenRowWrapperDTO wrapper = (SpecimenRowWrapperDTO) matrixPart.getSelection().getFirstElement(); + SpecimenDescription description = wrapper.getDescription(); + + boolean ok = matrixPart.getMatrix().getDescriptions().remove(wrapper); + matrixPart.getMatrix().putDescriptionToDelete(description.getUuid()); + matrixPart.getMatrix().update(); + if (ok){ + matrixPart.setDirty(); + } + } + + @CanExecute + public boolean canExecute(@Named(IServiceConstants.ACTIVE_PART)MPart activePart, + MHandledMenuItem menuItem){ + + CharacterMatrixPart matrixPart = (CharacterMatrixPart) activePart.getObject(); + DescriptiveDataSet descriptiveDataSet = matrixPart.getDescriptiveDataSet(); + IStructuredSelection selection = ((CharacterMatrixPart)activePart.getObject()).getSelection(); + + boolean canExecute = selection.size()==1 + && selection.getFirstElement() instanceof SpecimenRowWrapperDTO; + menuItem.setVisible(canExecute); + return canExecute; + + } +} diff --git a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/l10n/Messages.java b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/l10n/Messages.java index 4c8d4152e..ed8b348a6 100644 --- a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/l10n/Messages.java +++ b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/l10n/Messages.java @@ -317,6 +317,8 @@ public class Messages extends NLS { public static String DistributionEditor_defaultSource; public static String FactualDataView_Lable; public static String NameFactsDataView_Lable; + public static String DeleteDescriptiveDatasetHandler_Warning_Message; + public static String DeleteDescriptiveDatasetHandler_Exception_Message; static { // initialize resource bundle diff --git a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/l10n/messages.properties b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/l10n/messages.properties index 2ffd749be..9f7189970 100644 --- a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/l10n/messages.properties +++ b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/l10n/messages.properties @@ -295,4 +295,6 @@ ChecklistEditor_SEARCH_TOOLTIP=Textfilter for Taxa DistributionEditor_defaultSource=Default Source: ChecklistEditor_REMOVE_DEFAULT_SOURCE=Remove Source FactualDataView_Lable=Factual Data -NameFactsDataView_Lable=Name Facts \ No newline at end of file +NameFactsDataView_Lable=Name Facts +DeleteDescriptiveDatasetHandler_Exception_Message=Descriptive Dataset could not be deleted. +DeleteDescriptiveDatasetHandler_Warning_Message=Deletion was successful but with warnings. \ No newline at end of file diff --git a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/l10n/messages_de.properties b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/l10n/messages_de.properties index 8b86535e7..6d16cf78b 100644 --- a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/l10n/messages_de.properties +++ b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/l10n/messages_de.properties @@ -294,4 +294,6 @@ ChecklistEditor_SEARCH_TOOLTIP=Textfilter auf Taxa DistributionEditor_defaultSource= Standard Quelle: ChecklistEditor_REMOVE_DEFAULT_SOURCE=Quelle entfernen FactualDataView_Lable=Faktendaten -NameFactsDataView_Lable=Namensfaktendaten \ No newline at end of file +NameFactsDataView_Lable=Namensfaktendaten +DeleteDescriptiveDatasetHandler_Exception_Message=Das Descriptive Dataset konnte nicht gelöscht werden. +DeleteDescriptiveDatasetHandler_Warning_Message=Das Löschen war erfolgreich, es gibt aber Warnungen. \ No newline at end of file -- 2.34.1