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;
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
@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;
* @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;