ref #8146 Check term type compatibility for drag and drop
authorPatrick Plitzner <p.plitzner@bgbm.org>
Fri, 1 Mar 2019 10:08:00 +0000 (11:08 +0100)
committerPatrick Plitzner <p.plitzner@bgbm.org>
Fri, 1 Mar 2019 10:08:00 +0000 (11:08 +0100)
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/featuretree/e4/FeatureTreeDropAdapter.java

index ef4fc3765f1326ce3341da161ba136f19a52a844..891fd6b504fd35a26dd9bfc33bec825beef6a2ca 100644 (file)
@@ -20,6 +20,7 @@ import org.eclipse.jface.viewers.Viewer;
 import org.eclipse.jface.viewers.ViewerDropAdapter;
 import org.eclipse.swt.dnd.TransferData;
 
+import eu.etaxonomy.cdm.model.common.IHasTermType;
 import eu.etaxonomy.cdm.model.common.OrderedTermVocabulary;
 import eu.etaxonomy.cdm.model.common.TermType;
 import eu.etaxonomy.cdm.model.common.TermVocabulary;
@@ -107,6 +108,17 @@ public class FeatureTreeDropAdapter extends ViewerDropAdapter {
                        }
                }
                for (Object droppedObject : droppedObjects) {
+                   //check term type compatibility
+                   String title = "Term types do not match";
+                   String message = "The term type of the dropped term does not match the target term type.";
+                   TermType targetType = target.getTermType();
+                   if(droppedObject instanceof IHasTermType){
+                       TermType droppedType = ((IHasTermType)droppedObject).getTermType();
+                       if(!droppedType.equals(targetType)){
+                    MessagingUtils.warningDialog(title, this, message);
+                           continue;
+                       }
+                   }
                    if(droppedObject instanceof FeatureNode){
                        FeatureNode droppedNode = (FeatureNode) droppedObject;
                        int currentPosition = target.getIndex(droppedNode);
@@ -125,7 +137,13 @@ public class FeatureTreeDropAdapter extends ViewerDropAdapter {
                    }
                    else if(droppedObject instanceof TermDto){
                            TermDto termDto = (TermDto) droppedObject;
-                           if(termDto.getTermType().equals(TermType.Feature)){
+                           // check if a feature or sub type is dropped
+                           if(termDto.getTermType().equals(TermType.Feature) || termDto.getTermType().isKindOf(TermType.Feature)){
+                               // check if target feature tree has the same type as the dropped term
+                               if(!termDto.getTermType().equals(targetType)){
+                                   MessagingUtils.warningDialog(title, this, message);
+                                   continue;
+                               }
                                AddFeatureOperation operation = new AddFeatureOperation(
                                        termDto.getUuid(),
                                        target, position, editor, editor);