ref #6774 Adapt to service layer changes
[taxeditor.git] / eu.etaxonomy.taxeditor.store / src / main / java / eu / etaxonomy / taxeditor / featuretree / e4 / FeatureTreeDropAdapter.java
index a3d7e788d7f8afcc9027cb3bdb53fa12e5bd8fe9..3c4257ce821f316ec3c6a399e47909cd8ff976eb 100644 (file)
@@ -20,13 +20,13 @@ import org.eclipse.jface.viewers.Viewer;
 import org.eclipse.jface.viewers.ViewerDropAdapter;
 import org.eclipse.swt.dnd.TransferData;
 
-import eu.etaxonomy.cdm.api.service.ITermService;
-import eu.etaxonomy.cdm.model.common.DefinedTermBase;
-import eu.etaxonomy.cdm.model.common.OrderedTermVocabulary;
-import eu.etaxonomy.cdm.model.common.TermVocabulary;
 import eu.etaxonomy.cdm.model.description.Feature;
-import eu.etaxonomy.cdm.model.description.FeatureNode;
-import eu.etaxonomy.cdm.model.description.FeatureTree;
+import eu.etaxonomy.cdm.model.term.FeatureNode;
+import eu.etaxonomy.cdm.model.term.FeatureTree;
+import eu.etaxonomy.cdm.model.term.IHasTermType;
+import eu.etaxonomy.cdm.model.term.OrderedTermVocabulary;
+import eu.etaxonomy.cdm.model.term.TermType;
+import eu.etaxonomy.cdm.model.term.TermVocabulary;
 import eu.etaxonomy.cdm.persistence.dto.TermDto;
 import eu.etaxonomy.taxeditor.editor.definedterm.TermTransfer;
 import eu.etaxonomy.taxeditor.editor.definedterm.e4.DefinedTermDropAdapterE4;
@@ -37,7 +37,6 @@ import eu.etaxonomy.taxeditor.featuretree.e4.operation.MoveFeatureOperation;
 import eu.etaxonomy.taxeditor.l10n.Messages;
 import eu.etaxonomy.taxeditor.model.AbstractUtility;
 import eu.etaxonomy.taxeditor.model.MessagingUtils;
-import eu.etaxonomy.taxeditor.store.CdmStore;
 import eu.etaxonomy.taxeditor.store.StoreUtil;
 import eu.etaxonomy.taxeditor.ui.dialog.selection.TermVocabularySelectionDialog;
 import eu.etaxonomy.taxeditor.view.webimport.termimport.wrapper.OntologyTermWrapper;
@@ -109,6 +108,23 @@ public class FeatureTreeDropAdapter extends ViewerDropAdapter {
                        }
                }
                for (Object droppedObject : droppedObjects) {
+                   //check term type compatibility
+                   TermType targetType = target.getTermType();
+                   TermType droppedType = null;
+                   if(droppedObject instanceof IHasTermType){
+                       droppedType = ((IHasTermType)droppedObject).getTermType();
+                       if(droppedType!=null && !droppedType.equals(targetType)){
+                           MessagingUtils.warningDialog(DefinedTermDropAdapterE4.TERM_TYPE_ERROR_TITLE, this, DefinedTermDropAdapterE4.TERM_TYPE_ERROR_MESSAGE);
+                           continue;
+                       }
+                   }
+                   else if(droppedObject instanceof TermDto){
+                       droppedType = ((TermDto)droppedObject).getTermType();
+                       if(droppedType!=null && !droppedType.equals(targetType) && !droppedType.isKindOf(targetType)){
+                    MessagingUtils.warningDialog(DefinedTermDropAdapterE4.TERM_TYPE_ERROR_TITLE, this, DefinedTermDropAdapterE4.TERM_TYPE_ERROR_MESSAGE);
+                    continue;
+                }
+                   }
                    if(droppedObject instanceof FeatureNode){
                        FeatureNode droppedNode = (FeatureNode) droppedObject;
                        int currentPosition = target.getIndex(droppedNode);
@@ -121,22 +137,21 @@ public class FeatureTreeDropAdapter extends ViewerDropAdapter {
                    else if(droppedObject instanceof Feature){
                        Feature droppedFeature = (Feature) droppedObject;
                        AddFeatureOperation operation = new AddFeatureOperation(
-                               (Feature) CdmStore.getService(ITermService.class).load(droppedFeature.getUuid()),
+                               droppedFeature.getUuid(),
                                target, position, editor, editor);
                        AbstractUtility.executeOperation(operation, sync);
                    }
                    else if(droppedObject instanceof TermDto){
-                           TermDto termDto = (TermDto) droppedObject;
-                           DefinedTermBase term = CdmStore.getService(ITermService.class).load(termDto.getUuid());
-                           if(term.isInstanceOf(Feature.class)){
-                               AddFeatureOperation operation = new AddFeatureOperation(
-                                       (Feature)term,
-                                       target, position, editor, editor);
-                               AbstractUtility.executeOperation(operation, sync);
-                           }
-                           else{
-                               MessagingUtils.warningDialog(DefinedTermDropAdapterE4.MOVE_FAILED, this, Messages.FeatureTreeDropAdapter_ONLY_MOVE_FEATURES);
-                           }
+                       TermDto termDto = (TermDto) droppedObject;
+                       // check if target feature tree has the same type as the dropped term
+                       if(!termDto.getTermType().equals(targetType)){
+                           MessagingUtils.warningDialog(DefinedTermDropAdapterE4.TERM_TYPE_ERROR_TITLE, this, DefinedTermDropAdapterE4.TERM_TYPE_ERROR_MESSAGE);
+                           continue;
+                       }
+                       AddFeatureOperation operation = new AddFeatureOperation(
+                               termDto.getUuid(),
+                               target, position, editor, editor);
+                       AbstractUtility.executeOperation(operation, sync);
                    }
                    else if(droppedObject instanceof OntologyTermWrapper){
                        OntologyTermWrapper wrapper = (OntologyTermWrapper)droppedObject;