fix #8115: fix move elements to not persisted target description
authorKatja Luther <k.luther@bgbm.org>
Tue, 12 Mar 2019 10:23:08 +0000 (11:23 +0100)
committerKatja Luther <k.luther@bgbm.org>
Tue, 12 Mar 2019 10:23:08 +0000 (11:23 +0100)
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/descriptive/DescriptionElementDropAdapter.java
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/descriptive/operation/MoveDescriptionElementsOperation.java

index 6dc346fbb3c27cd34ec1923e54b3968f411b8014..3038c507f6b046b65836a7f3ce1b5e38077f554e 100644 (file)
@@ -19,7 +19,9 @@ import org.eclipse.swt.dnd.TransferData;
 
 import eu.etaxonomy.cdm.model.description.DescriptionBase;
 import eu.etaxonomy.cdm.model.description.DescriptionElementBase;
+import eu.etaxonomy.cdm.model.description.SpecimenDescription;
 import eu.etaxonomy.cdm.model.description.TaxonDescription;
+import eu.etaxonomy.cdm.model.description.TaxonNameDescription;
 import eu.etaxonomy.taxeditor.editor.EditorUtil;
 import eu.etaxonomy.taxeditor.editor.l10n.Messages;
 import eu.etaxonomy.taxeditor.editor.name.e4.TaxonNameEditorE4;
@@ -52,7 +54,7 @@ public class DescriptionElementDropAdapter extends EditViewerDropAdapter {
         */
        @Override
        public boolean performDrop(Object data) {
-               TaxonDescription target = (TaxonDescription) getCurrentTarget();
+               DescriptionBase target = (DescriptionBase) getCurrentTarget();
                Object[] droppedElements = (Object[]) data;
 
                Collection<DescriptionElementBase> descriptionElements = new ArrayList<DescriptionElementBase>();
@@ -78,8 +80,14 @@ public class DescriptionElementDropAdapter extends EditViewerDropAdapter {
                                        description.removeElement(descriptionElement);
                                        target.addElement(descriptionElement);
 
-                                       if (description.getElements().isEmpty()){
-                                           ((TaxonDescription)description).getTaxon().removeDescription((TaxonDescription)description, false);
+                                       if (description.getElements().isEmpty() ){
+                                           if (description instanceof TaxonDescription){
+                                               ((TaxonDescription)description).getTaxon().removeDescription((TaxonDescription)description, false);
+                                           }else if (description instanceof TaxonNameDescription){
+                                               ((TaxonNameDescription)description).getTaxonName().removeDescription((TaxonNameDescription)description);
+                                           } else if (description instanceof SpecimenDescription){
+                            ((SpecimenDescription)description).getDescribedSpecimenOrObservation().removeDescription(description);
+                        }
                                        }
                                        descriptionElements.add(descriptionElement);
                                }
@@ -114,7 +122,7 @@ public class DescriptionElementDropAdapter extends EditViewerDropAdapter {
                        TransferData transferData) {
                boolean transferDataIsSupported = DescriptionElementTransfer.getInstance().isSupportedType(
                                transferData);
-               return target instanceof TaxonDescription && transferDataIsSupported;
+               return target instanceof DescriptionBase && transferDataIsSupported;
        }
 
 }
index 3740d238d4a6fd03c9153a1b87d9149e45453b05..0113d75f028e90fbd72a72ce36eeee033f6c046e 100644 (file)
@@ -99,7 +99,12 @@ public class MoveDescriptionElementsOperation extends AbstractPostTaxonOperation
                } else {
                    UUID targetDescriptionUuid = targetDescription.getUuid();
                    UUID sourceDescriptionUuid = sourceDescription.getUuid();
-                   result = service.moveDescriptionElementsToDescription(descriptionElementsUuid, targetDescriptionUuid, isCopy);
+                   if (!targetDescription.isPersited()){
+                       result = service.moveDescriptionElementsToDescription(descriptionElementsUuid, targetDescription, isCopy);
+                   }else{
+                       result = service.moveDescriptionElementsToDescription(descriptionElementsUuid, targetDescriptionUuid, isCopy);
+                   }
+
 
                }
                return postExecute(null);