1
|
package eu.etaxonomy.taxeditor.editor.view.derivate.contextMenu;
|
2
|
|
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;
|
17
|
|
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.view.derivate.DerivateView;
|
23
|
import eu.etaxonomy.taxeditor.model.MessagingUtils;
|
24
|
import eu.etaxonomy.taxeditor.store.CdmStore;
|
25
|
|
26
|
/**
|
27
|
* Context menu for the SingleReads in the derivate hierarchy.
|
28
|
*
|
29
|
*/
|
30
|
public class SingleReadSequenceContextMenu extends CompoundContributionItem {
|
31
|
|
32
|
private enum CommandType{
|
33
|
COPY_TO_CLIPBOARD,
|
34
|
REMOVE_FROM_SEQUENCE,
|
35
|
ADD_TO_SEQUENCE
|
36
|
}
|
37
|
|
38
|
/* (non-Javadoc)
|
39
|
* @see org.eclipse.ui.actions.CompoundContributionItem#getContributionItems()
|
40
|
*/
|
41
|
@Override
|
42
|
protected IContributionItem[] getContributionItems() {
|
43
|
IContributionItem[] contributionItems = new IContributionItem[] {
|
44
|
new ContributionItem() {
|
45
|
@Override
|
46
|
public void fill(Menu menu, int index) {
|
47
|
final IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
|
48
|
final IEditorPart activeEditor = window.getActivePage().getActiveEditor();
|
49
|
final ISelection selection = window.getActivePage().getSelection();
|
50
|
TreeNode selectedTreeNode = EditorUtil.getTreeNodeOfSelection(selection);
|
51
|
TreeNode clipboardNode = EditorUtil.getTreeNodeOfSelection(LocalSelectionTransfer.getTransfer().getSelection());
|
52
|
if(selectedTreeNode!=null){
|
53
|
//context menu for Sequence
|
54
|
if(selectedTreeNode.getValue() instanceof Sequence
|
55
|
&& clipboardNode!=null && clipboardNode.getValue() instanceof SingleRead){
|
56
|
MenuItem item = new MenuItem(menu, SWT.NONE);
|
57
|
item.setText("Reuse SingleRead here");
|
58
|
item.addSelectionListener(new WidgetSelectionListener(CommandType.ADD_TO_SEQUENCE));
|
59
|
}
|
60
|
else if(selectedTreeNode.getValue() instanceof SingleRead){
|
61
|
MenuItem item = new MenuItem(menu, SWT.NONE);
|
62
|
item.setText("Reuse for other Sequence");
|
63
|
item.addSelectionListener(new WidgetSelectionListener(CommandType.COPY_TO_CLIPBOARD));
|
64
|
if(activeEditor instanceof DerivateView
|
65
|
&& ((DerivateView) activeEditor).getMultiLinkSingleReads().contains(selectedTreeNode.getValue())){
|
66
|
MenuItem unlinkItem = new MenuItem(menu, SWT.NONE);
|
67
|
unlinkItem.setText("Remove from this Sequence");
|
68
|
unlinkItem.addSelectionListener(new WidgetSelectionListener(CommandType.REMOVE_FROM_SEQUENCE));
|
69
|
}
|
70
|
}
|
71
|
}
|
72
|
}
|
73
|
}
|
74
|
};
|
75
|
return contributionItems;
|
76
|
}
|
77
|
|
78
|
private class WidgetSelectionListener extends SelectionAdapter{
|
79
|
private final CommandType commandType;
|
80
|
|
81
|
/**
|
82
|
* @param selectedTreeNode
|
83
|
* @param clipboardNode
|
84
|
* @param commandType
|
85
|
*/
|
86
|
public WidgetSelectionListener(CommandType commandType) {
|
87
|
this.commandType = commandType;
|
88
|
}
|
89
|
|
90
|
/* (non-Javadoc)
|
91
|
* @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse.swt.events.SelectionEvent)
|
92
|
*/
|
93
|
@Override
|
94
|
public void widgetSelected(SelectionEvent e) {
|
95
|
IEditorPart activeEditor = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().getActiveEditor();
|
96
|
ISelection clipBoardSelection = LocalSelectionTransfer.getTransfer().getSelection();
|
97
|
final ISelection selection = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().getSelection();
|
98
|
TreeNode clipBoardTreeNode = EditorUtil.getTreeNodeOfSelection(clipBoardSelection);
|
99
|
TreeNode selectedTreeNode = EditorUtil.getTreeNodeOfSelection(selection);
|
100
|
switch (commandType) {
|
101
|
case REMOVE_FROM_SEQUENCE:
|
102
|
if(activeEditor.isDirty()){
|
103
|
MessagingUtils.warningDialog("View has unsaved changes", this, "You need to save before performing this action");
|
104
|
return;
|
105
|
}
|
106
|
if(selectedTreeNode!=null && selectedTreeNode.getParent()!=null &&
|
107
|
selectedTreeNode.getValue() instanceof SingleRead && selectedTreeNode.getParent().getValue() instanceof Sequence) {
|
108
|
Sequence sequence = (Sequence) selectedTreeNode.getParent().getValue();
|
109
|
sequence.removeSingleRead((SingleRead) selectedTreeNode.getValue());
|
110
|
CdmStore.getService(ISequenceService.class).saveOrUpdate(sequence);
|
111
|
if(activeEditor instanceof DerivateView) {
|
112
|
DerivateView derivateView = (DerivateView)activeEditor;
|
113
|
derivateView.getConversationHolder().commit();
|
114
|
derivateView.refreshTree();
|
115
|
}
|
116
|
}
|
117
|
|
118
|
break;
|
119
|
case ADD_TO_SEQUENCE:
|
120
|
if(activeEditor.isDirty()){
|
121
|
MessagingUtils.warningDialog("View has unsaved changes", this, "You need to save before performing this action");
|
122
|
return;
|
123
|
}
|
124
|
if(clipBoardTreeNode!=null && clipBoardTreeNode.getValue() instanceof SingleRead
|
125
|
&& selectedTreeNode!=null && selectedTreeNode.getValue() instanceof Sequence){
|
126
|
SingleRead singleRead = (SingleRead)clipBoardTreeNode.getValue();
|
127
|
Sequence sequence = (Sequence)selectedTreeNode.getValue();
|
128
|
sequence.addSingleRead(singleRead);
|
129
|
CdmStore.getService(ISequenceService.class).saveOrUpdate(sequence);
|
130
|
if(activeEditor instanceof DerivateView) {
|
131
|
DerivateView derivateView = (DerivateView)activeEditor;
|
132
|
derivateView.getConversationHolder().commit();
|
133
|
derivateView.refreshTree();
|
134
|
LocalSelectionTransfer.getTransfer().setSelection(null);
|
135
|
}
|
136
|
}
|
137
|
break;
|
138
|
case COPY_TO_CLIPBOARD:
|
139
|
LocalSelectionTransfer.getTransfer().setSelection(selection);
|
140
|
break;
|
141
|
}
|
142
|
}
|
143
|
}
|
144
|
}
|