Refactor SingleReadContextMenu #5406
[taxeditor.git] / eu.etaxonomy.taxeditor.editor / src / main / java / eu / etaxonomy / taxeditor / editor / view / derivate / handler / SingleReadHandler.java
1 package eu.etaxonomy.taxeditor.editor.view.derivate.handler;
2
3 import org.eclipse.core.commands.AbstractHandler;
4 import org.eclipse.core.commands.ExecutionEvent;
5 import org.eclipse.core.commands.ExecutionException;
6 import org.eclipse.jface.util.LocalSelectionTransfer;
7 import org.eclipse.jface.viewers.ISelection;
8 import org.eclipse.jface.viewers.TreeNode;
9 import org.eclipse.ui.IEditorPart;
10 import org.eclipse.ui.PlatformUI;
11
12 import eu.etaxonomy.cdm.api.service.molecular.ISequenceService;
13 import eu.etaxonomy.cdm.model.molecular.Sequence;
14 import eu.etaxonomy.cdm.model.molecular.SingleRead;
15 import eu.etaxonomy.taxeditor.editor.EditorUtil;
16 import eu.etaxonomy.taxeditor.editor.view.derivate.DerivateView;
17 import eu.etaxonomy.taxeditor.model.MessagingUtils;
18 import eu.etaxonomy.taxeditor.store.CdmStore;
19
20 public class SingleReadHandler extends AbstractHandler {
21
22 @Override
23 public Object execute(ExecutionEvent event) throws ExecutionException {
24 IEditorPart activeEditor = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().getActiveEditor();
25 ISelection clipBoardSelection = LocalSelectionTransfer.getTransfer().getSelection();
26 final ISelection selection = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().getSelection();
27 TreeNode clipBoardTreeNode = EditorUtil.getTreeNodeOfSelection(clipBoardSelection);
28 TreeNode selectedTreeNode = EditorUtil.getTreeNodeOfSelection(selection);
29 if(activeEditor instanceof DerivateView) {
30 DerivateView derivateView = (DerivateView)activeEditor;
31 if(event.getCommand().getId().equals("eu.etaxonomy.taxeditor.editor.derivative.copySingleReadToClipBoard")){
32 LocalSelectionTransfer.getTransfer().setSelection(selection);
33 }
34 else if(event.getCommand().getId().equals("eu.etaxonomy.taxeditor.editor.derivative.reuseSingleRead")){
35 if(activeEditor.isDirty()){
36 MessagingUtils.warningDialog(DerivateView.VIEW_HAS_UNSAVED_CHANGES, this, DerivateView.YOU_NEED_TO_SAVE_BEFORE_PERFORMING_THIS_ACTION);
37 return null;
38 }
39 if(clipBoardTreeNode!=null && clipBoardTreeNode.getValue() instanceof SingleRead
40 && selectedTreeNode!=null && selectedTreeNode.getValue() instanceof Sequence){
41 SingleRead singleRead = (SingleRead)clipBoardTreeNode.getValue();
42 Sequence sequence = (Sequence)selectedTreeNode.getValue();
43 sequence.addSingleRead(singleRead);
44 if(CdmStore.getCurrentSessionManager().isRemoting()){
45 CdmStore.getService(ISequenceService.class).merge(sequence);
46 }
47 else{
48 CdmStore.getService(ISequenceService.class).saveOrUpdate(sequence);
49 }
50 if(activeEditor instanceof DerivateView) {
51 derivateView.getConversationHolder().commit();
52 derivateView.refreshTree();
53 LocalSelectionTransfer.getTransfer().setSelection(null);
54 }
55 }
56 }
57 else if(event.getCommand().getId().equals("eu.etaxonomy.taxeditor.editor.derivative.removeSingleReadFromSequence")){
58 if(activeEditor.isDirty()){
59 MessagingUtils.warningDialog(DerivateView.VIEW_HAS_UNSAVED_CHANGES, this, DerivateView.YOU_NEED_TO_SAVE_BEFORE_PERFORMING_THIS_ACTION);
60 return null;
61 }
62 if(selectedTreeNode!=null && selectedTreeNode.getParent()!=null &&
63 selectedTreeNode.getValue() instanceof SingleRead && selectedTreeNode.getParent().getValue() instanceof Sequence) {
64 Sequence sequence = (Sequence) selectedTreeNode.getParent().getValue();
65 sequence.removeSingleRead((SingleRead) selectedTreeNode.getValue());
66 if(CdmStore.getCurrentSessionManager().isRemoting()){
67 CdmStore.getService(ISequenceService.class).merge(sequence);
68 }
69 else{
70 CdmStore.getService(ISequenceService.class).saveOrUpdate(sequence);
71 }
72 if(activeEditor instanceof DerivateView) {
73 derivateView.getConversationHolder().commit();
74 derivateView.refreshTree();
75 }
76 }
77 }
78 derivateView.updateLabelCache();
79 derivateView.refreshTree();
80 }
81 return null;
82 }
83
84 }