*/
package eu.etaxonomy.taxeditor.editor.view.derivate;
+import org.eclipse.core.runtime.Status;
import org.eclipse.jface.util.LocalSelectionTransfer;
import org.eclipse.jface.viewers.TreeNode;
import org.eclipse.jface.viewers.ViewerDropAdapter;
import org.eclipse.swt.dnd.TransferData;
-import eu.etaxonomy.cdm.api.service.IOccurrenceService;
-import eu.etaxonomy.cdm.api.service.molecular.ISequenceService;
-import eu.etaxonomy.cdm.model.molecular.DnaSample;
-import eu.etaxonomy.cdm.model.molecular.Sequence;
-import eu.etaxonomy.cdm.model.molecular.SingleRead;
-import eu.etaxonomy.cdm.model.occurrence.DerivedUnit;
-import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase;
-import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationType;
import eu.etaxonomy.taxeditor.editor.EditorUtil;
+import eu.etaxonomy.taxeditor.editor.view.derivate.operation.MoveDerivateOperation;
+import eu.etaxonomy.taxeditor.model.AbstractUtility;
import eu.etaxonomy.taxeditor.model.MessagingUtils;
-import eu.etaxonomy.taxeditor.store.CdmStore;
-import eu.etaxonomy.taxeditor.view.derivateSearch.DerivateLabelProvider;
/**
* @author pplitzner
private final DerivateView derivateView;
- /**
- * @param derivateView
- */
protected DerivateDropListener(DerivateView derivateView) {
super(derivateView.getViewer());
this.derivateView = derivateView;
if(target instanceof TreeNode && data instanceof DerivateViewSelection){
DerivateViewSelection derivateViewSelection = (DerivateViewSelection)data;
TreeNode targetNode = (TreeNode) target;
- TreeNode draggednode = EditorUtil.getTreeNodeOfSelection(derivateViewSelection.getSelection());
- if(draggednode!=null){
- if(moveTreeNode(draggednode, targetNode)){
- //update DerivateView
- derivateView.getConversationHolder().commit();
- derivateView.refreshTree();
-
- // update source DerivateView if dragging between different views occurred
- DerivateView sourceDerivateView = derivateViewSelection.getDerivateView();
- if(sourceDerivateView!=derivateView){
- sourceDerivateView.getConversationHolder().commit();
- sourceDerivateView.refreshTree();
- }
-
- //FIXME: way too much overhead for just refreshing the other DerivateView
-// CdmStore.getContextManager().notifyContextRefresh();
- LocalSelectionTransfer.getTransfer().setSelection(null);
- return true;
- }
- else{
- DerivateLabelProvider derivateLabelProvider = new DerivateLabelProvider();
- derivateLabelProvider.setConversation(derivateView.getConversationHolder());
- MessagingUtils.warningDialog("Moving derivate not possible!", derivateView, "Moving \""+derivateLabelProvider.getDerivateText(draggednode)+"\" to \""+derivateLabelProvider.getDerivateText(targetNode)+"\" is not possible!");
- }
+ TreeNode draggedNode = EditorUtil.getTreeNodeOfSelection(derivateViewSelection.getSelection());
+ if(draggedNode!=null){
+ MoveDerivateOperation moveDerivateOperation = new MoveDerivateOperation("Moving \""+derivateView.getLabelProvider().getDerivateText(draggedNode)+"\" to \""+derivateView.getLabelProvider().getDerivateText(targetNode)+"\"", EditorUtil.getUndoContext(), derivateView, draggedNode, targetNode);
+ return AbstractUtility.executeOperation(moveDerivateOperation).equals(Status.OK_STATUS)?true:false;
}
}
return false;
return LocalSelectionTransfer.getTransfer().isSupportedType(transferType) && target instanceof TreeNode;
}
- /**
- * @param value
- * @return
- */
- private boolean moveTreeNode(TreeNode draggedNode, TreeNode targetNode) {
- Object draggedNodeValue = draggedNode.getValue();
- Object targetNodeValue = targetNode.getValue();
- TreeNode fromParentNode = draggedNode.getParent();
- Object fromParentSpecimen = null;
- if(fromParentNode!=null){
- fromParentSpecimen = fromParentNode.getValue();
- }
-
- // drag'n'drop for SpecimenOrObservationBase
- IOccurrenceService occurrenceService = CdmStore.getService(IOccurrenceService.class);
- if(draggedNodeValue instanceof DerivedUnit && targetNodeValue instanceof SpecimenOrObservationBase<?>){
- DerivedUnit draggedSpecimen = (DerivedUnit) draggedNodeValue;
- SpecimenOrObservationBase<?> targetSpecimen = (SpecimenOrObservationBase<?>) targetNodeValue;
- //check if type is a sub derivate type
- if(fromParentSpecimen instanceof SpecimenOrObservationBase<?>
- && fromParentNode!=null
- && !fromParentNode.equals(targetNode)){//don't drag on direct parent node)
- return occurrenceService.moveDerivate((SpecimenOrObservationBase<?>)fromParentSpecimen, targetSpecimen, draggedSpecimen);
- }
- }
-
- // drag'n'drop for SingleRead
- else if(draggedNodeValue instanceof SingleRead && targetNodeValue instanceof Sequence){
- SingleRead singleRead = (SingleRead) draggedNodeValue;
- if(fromParentSpecimen instanceof Sequence){
- return CdmStore.getService(ISequenceService.class).moveSingleRead((Sequence)fromParentSpecimen, (Sequence)targetNodeValue, singleRead);
- }
- }
-
- // drag'n'drop for Sequence
- else if(draggedNodeValue instanceof Sequence && targetNodeValue instanceof DnaSample && ((SpecimenOrObservationBase<?>) targetNodeValue).getRecordBasis()==SpecimenOrObservationType.DnaSample){
- Sequence sequence = (Sequence)draggedNodeValue;
- if(fromParentSpecimen instanceof DnaSample && ((SpecimenOrObservationBase<?>) targetNodeValue).getRecordBasis()==SpecimenOrObservationType.DnaSample){
- return occurrenceService.moveSequence((DnaSample)fromParentSpecimen, (DnaSample)targetNodeValue, sequence);
- }
- }
- return false;
- }
-
}