X-Git-Url: https://dev.e-taxonomy.eu/gitweb/taxeditor.git/blobdiff_plain/35a12f14063bcee2ecad992608868ab11d62e21d..543ccf33387bd9c1058faa0fc6b28565cde7824e:/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/derivate/DerivateDropListener.java diff --git a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/derivate/DerivateDropListener.java b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/derivate/DerivateDropListener.java index 6bc403d1b..69f175743 100644 --- a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/derivate/DerivateDropListener.java +++ b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/derivate/DerivateDropListener.java @@ -10,7 +10,6 @@ package eu.etaxonomy.taxeditor.editor.view.derivate; import org.eclipse.jface.util.LocalSelectionTransfer; -import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.TreeNode; import org.eclipse.jface.viewers.ViewerDropAdapter; import org.eclipse.swt.dnd.TransferData; @@ -23,8 +22,9 @@ import eu.etaxonomy.cdm.model.molecular.SingleRead; import eu.etaxonomy.cdm.model.occurrence.DerivedUnit; import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase; import eu.etaxonomy.taxeditor.editor.EditorUtil; -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 @@ -49,19 +49,37 @@ public class DerivateDropListener extends ViewerDropAdapter { @Override public boolean performDrop(Object data) { if(derivateView.isDirty()){ - AbstractUtility.warningDialog("View has unsaved changes", this, "You need to save before performing this action"); + MessagingUtils.warningDialog("View has unsaved changes", this, "You need to save before performing this action"); return false; } Object target = getCurrentTarget(); - if(target instanceof TreeNode && data instanceof IStructuredSelection){ + if(target instanceof TreeNode && data instanceof DerivateViewSelection){ + DerivateViewSelection derivateViewSelection = (DerivateViewSelection)data; TreeNode targetNode = (TreeNode) target; - TreeNode draggednode = EditorUtil.getTreeNodeValueOfSelection((IStructuredSelection) data); + TreeNode draggednode = EditorUtil.getTreeNodeOfSelection(derivateViewSelection.getSelection()); if(draggednode!=null){ if(moveTreeNode(draggednode, targetNode)){ - derivateView.update(); + //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!"); + } } } return false; @@ -79,39 +97,40 @@ public class DerivateDropListener extends ViewerDropAdapter { * @param value * @return */ - private boolean moveTreeNode(TreeNode from, TreeNode to) { - Object fromValue = from.getValue(); - Object toValue = to.getValue(); - TreeNode fromParentNode = from.getParent(); - Object fromParentSpecimen = fromParentNode.getValue(); + 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){ + fromParentNode.getValue(); + } // drag'n'drop for SpecimenOrObservationBase - if(fromValue instanceof DerivedUnit && toValue instanceof SpecimenOrObservationBase){ - DerivedUnit draggedSpecimen = (DerivedUnit) fromValue; - SpecimenOrObservationBase targetSpecimen = (SpecimenOrObservationBase) toValue; + 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(!fromParentNode.equals(to)//don't drag on direct parent node + if(!fromParentNode.equals(targetNode)//don't drag on direct parent node && fromParentSpecimen instanceof SpecimenOrObservationBase){ - CdmStore.getService(IOccurrenceService.class).moveDerivate((SpecimenOrObservationBase)fromParentSpecimen, targetSpecimen, draggedSpecimen); - return true; + return occurrenceService.moveDerivate((SpecimenOrObservationBase)fromParentSpecimen, targetSpecimen, draggedSpecimen); } } // drag'n'drop for SingleRead - else if(fromValue instanceof SingleRead && toValue instanceof Sequence){ - SingleRead singleRead = (SingleRead) fromValue; + else if(draggedNodeValue instanceof SingleRead && targetNodeValue instanceof Sequence){ + SingleRead singleRead = (SingleRead) draggedNodeValue; if(fromParentSpecimen instanceof Sequence){ - CdmStore.getService(ISequenceService.class).moveSingleRead((Sequence)fromParentSpecimen, (Sequence)toValue, singleRead); + return CdmStore.getService(ISequenceService.class).moveSingleRead((Sequence)fromParentSpecimen, (Sequence)targetNodeValue, singleRead); } - return true; } // drag'n'drop for Sequence - else if(fromValue instanceof Sequence && toValue instanceof DnaSample ){ - Sequence sequence = (Sequence)fromValue; + else if(draggedNodeValue instanceof Sequence && targetNodeValue instanceof DnaSample ){ + Sequence sequence = (Sequence)draggedNodeValue; if(fromParentSpecimen instanceof DnaSample){ - CdmStore.getService(IOccurrenceService.class).moveSequence((DnaSample)fromParentSpecimen, (DnaSample)toValue, sequence); - return true; + return occurrenceService.moveSequence((DnaSample)fromParentSpecimen, (DnaSample)targetNodeValue, sequence); } } return false;