1 package eu
.etaxonomy
.taxeditor
.editor
.view
.derivate
.contextMenu
;
3 import org
.eclipse
.jface
.action
.ContributionItem
;
4 import org
.eclipse
.jface
.action
.IContributionItem
;
5 import org
.eclipse
.jface
.util
.LocalSelectionTransfer
;
6 import org
.eclipse
.jface
.viewers
.ISelection
;
7 import org
.eclipse
.jface
.viewers
.TreeNode
;
8 import org
.eclipse
.swt
.SWT
;
9 import org
.eclipse
.swt
.events
.SelectionAdapter
;
10 import org
.eclipse
.swt
.events
.SelectionEvent
;
11 import org
.eclipse
.swt
.widgets
.Menu
;
12 import org
.eclipse
.swt
.widgets
.MenuItem
;
13 import org
.eclipse
.ui
.IEditorPart
;
14 import org
.eclipse
.ui
.IWorkbenchWindow
;
15 import org
.eclipse
.ui
.PlatformUI
;
16 import org
.eclipse
.ui
.actions
.CompoundContributionItem
;
18 import eu
.etaxonomy
.cdm
.api
.service
.molecular
.ISequenceService
;
19 import eu
.etaxonomy
.cdm
.model
.molecular
.Sequence
;
20 import eu
.etaxonomy
.cdm
.model
.molecular
.SingleRead
;
21 import eu
.etaxonomy
.taxeditor
.editor
.EditorUtil
;
22 import eu
.etaxonomy
.taxeditor
.editor
.Messages
;
23 import eu
.etaxonomy
.taxeditor
.editor
.view
.derivate
.DerivateView
;
24 import eu
.etaxonomy
.taxeditor
.model
.MessagingUtils
;
25 import eu
.etaxonomy
.taxeditor
.store
.CdmStore
;
28 * Context menu for the SingleReads in the derivate hierarchy.
31 public class SingleReadSequenceContextMenu
extends CompoundContributionItem
{
33 private enum CommandType
{
40 protected IContributionItem
[] getContributionItems() {
41 IContributionItem
[] contributionItems
= new IContributionItem
[] {
42 new ContributionItem() {
44 public void fill(Menu menu
, int index
) {
45 final IWorkbenchWindow window
= PlatformUI
.getWorkbench().getActiveWorkbenchWindow();
46 final IEditorPart activeEditor
= window
.getActivePage().getActiveEditor();
47 final ISelection selection
= window
.getActivePage().getSelection();
48 TreeNode selectedTreeNode
= EditorUtil
.getTreeNodeOfSelection(selection
);
49 TreeNode clipboardNode
= EditorUtil
.getTreeNodeOfSelection(LocalSelectionTransfer
.getTransfer().getSelection());
50 if(selectedTreeNode
!=null){
51 //context menu for Sequence
52 if(selectedTreeNode
.getValue() instanceof Sequence
53 && clipboardNode
!=null && clipboardNode
.getValue() instanceof SingleRead
){
54 MenuItem item
= new MenuItem(menu
, SWT
.NONE
);
55 item
.setText(Messages
.SingleReadSequenceContextMenu_REUSE_SINGLE_READ_HERE
);
56 item
.addSelectionListener(new WidgetSelectionListener(CommandType
.ADD_TO_SEQUENCE
));
58 else if(selectedTreeNode
.getValue() instanceof SingleRead
){
59 MenuItem item
= new MenuItem(menu
, SWT
.NONE
);
60 item
.setText(Messages
.SingleReadSequenceContextMenu_REUSE_FOR_SEQUENCE
);
61 item
.addSelectionListener(new WidgetSelectionListener(CommandType
.COPY_TO_CLIPBOARD
));
62 if(activeEditor
instanceof DerivateView
63 && ((DerivateView
) activeEditor
).getMultiLinkSingleReads().contains(selectedTreeNode
.getValue())){
64 MenuItem unlinkItem
= new MenuItem(menu
, SWT
.NONE
);
65 unlinkItem
.setText(Messages
.SingleReadSequenceContextMenu_REMOVE_FROM_SEQUENCE
);
66 unlinkItem
.addSelectionListener(new WidgetSelectionListener(CommandType
.REMOVE_FROM_SEQUENCE
));
73 return contributionItems
;
76 private class WidgetSelectionListener
extends SelectionAdapter
{
77 private final CommandType commandType
;
80 * @param selectedTreeNode
81 * @param clipboardNode
84 public WidgetSelectionListener(CommandType commandType
) {
85 this.commandType
= commandType
;
89 public void widgetSelected(SelectionEvent e
) {
90 IEditorPart activeEditor
= PlatformUI
.getWorkbench().getActiveWorkbenchWindow().getActivePage().getActiveEditor();
91 ISelection clipBoardSelection
= LocalSelectionTransfer
.getTransfer().getSelection();
92 final ISelection selection
= PlatformUI
.getWorkbench().getActiveWorkbenchWindow().getActivePage().getSelection();
93 TreeNode clipBoardTreeNode
= EditorUtil
.getTreeNodeOfSelection(clipBoardSelection
);
94 TreeNode selectedTreeNode
= EditorUtil
.getTreeNodeOfSelection(selection
);
95 switch (commandType
) {
96 case REMOVE_FROM_SEQUENCE
:
97 if(activeEditor
.isDirty()){
98 MessagingUtils
.warningDialog(DerivateView
.VIEW_HAS_UNSAVED_CHANGES
, this, DerivateView
.YOU_NEED_TO_SAVE_BEFORE_PERFORMING_THIS_ACTION
);
101 if(selectedTreeNode
!=null && selectedTreeNode
.getParent()!=null &&
102 selectedTreeNode
.getValue() instanceof SingleRead
&& selectedTreeNode
.getParent().getValue() instanceof Sequence
) {
103 Sequence sequence
= (Sequence
) selectedTreeNode
.getParent().getValue();
104 sequence
.removeSingleRead((SingleRead
) selectedTreeNode
.getValue());
105 CdmStore
.getService(ISequenceService
.class).saveOrUpdate(sequence
);
106 if(activeEditor
instanceof DerivateView
) {
107 DerivateView derivateView
= (DerivateView
)activeEditor
;
108 derivateView
.getConversationHolder().commit();
109 derivateView
.refreshTree();
114 case ADD_TO_SEQUENCE
:
115 if(activeEditor
.isDirty()){
116 MessagingUtils
.warningDialog(DerivateView
.VIEW_HAS_UNSAVED_CHANGES
, this, DerivateView
.YOU_NEED_TO_SAVE_BEFORE_PERFORMING_THIS_ACTION
);
119 if(clipBoardTreeNode
!=null && clipBoardTreeNode
.getValue() instanceof SingleRead
120 && selectedTreeNode
!=null && selectedTreeNode
.getValue() instanceof Sequence
){
121 SingleRead singleRead
= (SingleRead
)clipBoardTreeNode
.getValue();
122 Sequence sequence
= (Sequence
)selectedTreeNode
.getValue();
123 sequence
.addSingleRead(singleRead
);
124 CdmStore
.getService(ISequenceService
.class).saveOrUpdate(sequence
);
125 if(activeEditor
instanceof DerivateView
) {
126 DerivateView derivateView
= (DerivateView
)activeEditor
;
127 derivateView
.getConversationHolder().commit();
128 derivateView
.refreshTree();
129 LocalSelectionTransfer
.getTransfer().setSelection(null);
133 case COPY_TO_CLIPBOARD
:
134 LocalSelectionTransfer
.getTransfer().setSelection(selection
);