Structure derivative editor context menu (#5406)
[taxeditor.git] / eu.etaxonomy.taxeditor.editor / src / main / java / eu / etaxonomy / taxeditor / editor / view / derivate / contextMenu / SingleReadSequenceContextMenu.java
index 7e79e45b37f7c4d1256fd81f0f5aa701a0340691..9f431f49d1ddb40b2ec4592adf0c49f1c7194881 100644 (file)
@@ -2,6 +2,7 @@ package eu.etaxonomy.taxeditor.editor.view.derivate.contextMenu;
 
 import org.eclipse.jface.action.ContributionItem;
 import org.eclipse.jface.action.IContributionItem;
+import org.eclipse.jface.action.Separator;
 import org.eclipse.jface.util.LocalSelectionTransfer;
 import org.eclipse.jface.viewers.ISelection;
 import org.eclipse.jface.viewers.TreeNode;
@@ -19,12 +20,13 @@ import eu.etaxonomy.cdm.api.service.molecular.ISequenceService;
 import eu.etaxonomy.cdm.model.molecular.Sequence;
 import eu.etaxonomy.cdm.model.molecular.SingleRead;
 import eu.etaxonomy.taxeditor.editor.EditorUtil;
+import eu.etaxonomy.taxeditor.editor.Messages;
 import eu.etaxonomy.taxeditor.editor.view.derivate.DerivateView;
-import eu.etaxonomy.taxeditor.model.AbstractUtility;
+import eu.etaxonomy.taxeditor.model.MessagingUtils;
 import eu.etaxonomy.taxeditor.store.CdmStore;
 
 /**
- * Context menu for the creation of derivates in the derivate hierarchy.
+ * Context menu for the SingleReads in the derivate hierarchy.
  *
  */
 public class SingleReadSequenceContextMenu extends CompoundContributionItem {
@@ -35,43 +37,54 @@ public class SingleReadSequenceContextMenu extends CompoundContributionItem {
         ADD_TO_SEQUENCE
     }
 
-    /* (non-Javadoc)
-     * @see org.eclipse.ui.actions.CompoundContributionItem#getContributionItems()
-     */
     @Override
     protected IContributionItem[] getContributionItems() {
-        IContributionItem[] contributionItems = new IContributionItem[] {
-                new ContributionItem() {
-                    @Override
-                    public void fill(Menu menu, int index) {
-                        final IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
-                        final IEditorPart activeEditor = window.getActivePage().getActiveEditor();
-                        final ISelection selection = window.getActivePage().getSelection();
-                        TreeNode selectedTreeNode = EditorUtil.getTreeNodeValueOfSelection(selection);
-                        TreeNode clipboardNode = EditorUtil.getTreeNodeValueOfSelection(LocalSelectionTransfer.getTransfer().getSelection());
-                        if(selectedTreeNode!=null){
-                            //context menu for Sequence
-                            if(selectedTreeNode.getValue() instanceof Sequence
-                                    && clipboardNode!=null && clipboardNode.getValue() instanceof SingleRead){
-                                MenuItem item = new MenuItem(menu, SWT.NONE);
-                                item.setText("Reuse SingleRead here");
-                                item.addSelectionListener(new WidgetSelectionListener(CommandType.ADD_TO_SEQUENCE));
-                            }
-                            else if(selectedTreeNode.getValue() instanceof SingleRead){
-                                MenuItem item = new MenuItem(menu, SWT.NONE);
-                                item.setText("Reuse for other Sequence");
-                                item.addSelectionListener(new WidgetSelectionListener(CommandType.COPY_TO_CLIPBOARD));
-                                if(activeEditor instanceof DerivateView
-                                        && ((DerivateView) activeEditor).getMultiLinkSingleReads().contains(selectedTreeNode.getValue())){
-                                    MenuItem unlinkItem = new MenuItem(menu, SWT.NONE);
-                                    unlinkItem.setText("Remove from this Sequence");
-                                    unlinkItem.addSelectionListener(new WidgetSelectionListener(CommandType.REMOVE_FROM_SEQUENCE));
+        boolean menuVisible = false;
+        final IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
+        final ISelection selection = window.getActivePage().getSelection();
+        TreeNode selectedTreeNode = EditorUtil.getTreeNodeOfSelection(selection);
+        TreeNode clipboardNode = EditorUtil.getTreeNodeOfSelection(LocalSelectionTransfer.getTransfer().getSelection());
+        if(selectedTreeNode!=null &&
+                (selectedTreeNode.getValue() instanceof Sequence && clipboardNode!=null && clipboardNode.getValue() instanceof SingleRead)
+                || (selectedTreeNode.getValue() instanceof SingleRead)){
+            menuVisible = true;
+        }
+        IContributionItem[] contributionItems = new IContributionItem[0];
+        if(menuVisible){
+            contributionItems = new IContributionItem[] {
+                    new Separator(),
+                    new ContributionItem() {
+                        @Override
+                        public void fill(Menu menu, int index) {
+                            final IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
+                            final IEditorPart activeEditor = window.getActivePage().getActiveEditor();
+                            final ISelection selection = window.getActivePage().getSelection();
+                            TreeNode selectedTreeNode = EditorUtil.getTreeNodeOfSelection(selection);
+                            TreeNode clipboardNode = EditorUtil.getTreeNodeOfSelection(LocalSelectionTransfer.getTransfer().getSelection());
+                            if(selectedTreeNode!=null){
+                                //context menu for Sequence
+                                if(selectedTreeNode.getValue() instanceof Sequence
+                                        && clipboardNode!=null && clipboardNode.getValue() instanceof SingleRead){
+                                    MenuItem item = new MenuItem(menu, SWT.NONE);
+                                    item.setText(Messages.SingleReadSequenceContextMenu_REUSE_SINGLE_READ_HERE);
+                                    item.addSelectionListener(new WidgetSelectionListener(CommandType.ADD_TO_SEQUENCE));
+                                }
+                                else if(selectedTreeNode.getValue() instanceof SingleRead){
+                                    MenuItem item = new MenuItem(menu, SWT.NONE);
+                                    item.setText(Messages.SingleReadSequenceContextMenu_REUSE_FOR_SEQUENCE);
+                                    item.addSelectionListener(new WidgetSelectionListener(CommandType.COPY_TO_CLIPBOARD));
+                                    if(activeEditor instanceof DerivateView
+                                            && ((DerivateView) activeEditor).getMultiLinkSingleReads().contains(selectedTreeNode.getValue())){
+                                        MenuItem unlinkItem = new MenuItem(menu, SWT.NONE);
+                                        unlinkItem.setText(Messages.SingleReadSequenceContextMenu_REMOVE_FROM_SEQUENCE);
+                                        unlinkItem.addSelectionListener(new WidgetSelectionListener(CommandType.REMOVE_FROM_SEQUENCE));
+                                    }
                                 }
                             }
                         }
                     }
-                }
-        };
+            };
+        }
         return contributionItems;
     }
 
@@ -87,20 +100,17 @@ public class SingleReadSequenceContextMenu extends CompoundContributionItem {
             this.commandType = commandType;
         }
 
-        /* (non-Javadoc)
-         * @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse.swt.events.SelectionEvent)
-         */
         @Override
         public void widgetSelected(SelectionEvent e) {
             IEditorPart activeEditor = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().getActiveEditor();
             ISelection clipBoardSelection = LocalSelectionTransfer.getTransfer().getSelection();
             final ISelection selection = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().getSelection();
-            TreeNode clipBoardTreeNode = EditorUtil.getTreeNodeValueOfSelection(clipBoardSelection);
-            TreeNode selectedTreeNode = EditorUtil.getTreeNodeValueOfSelection(selection);
+            TreeNode clipBoardTreeNode = EditorUtil.getTreeNodeOfSelection(clipBoardSelection);
+            TreeNode selectedTreeNode = EditorUtil.getTreeNodeOfSelection(selection);
             switch (commandType) {
             case REMOVE_FROM_SEQUENCE:
                 if(activeEditor.isDirty()){
-                    AbstractUtility.warningDialog("View has unsaved changes", this, "You need to save before performing this action");
+                    MessagingUtils.warningDialog(DerivateView.VIEW_HAS_UNSAVED_CHANGES, this, DerivateView.YOU_NEED_TO_SAVE_BEFORE_PERFORMING_THIS_ACTION);
                     return;
                 }
                 if(selectedTreeNode!=null && selectedTreeNode.getParent()!=null &&
@@ -118,7 +128,7 @@ public class SingleReadSequenceContextMenu extends CompoundContributionItem {
                 break;
             case ADD_TO_SEQUENCE:
                 if(activeEditor.isDirty()){
-                    AbstractUtility.warningDialog("View has unsaved changes", this, "You need to save before performing this action");
+                    MessagingUtils.warningDialog(DerivateView.VIEW_HAS_UNSAVED_CHANGES, this, DerivateView.YOU_NEED_TO_SAVE_BEFORE_PERFORMING_THIS_ACTION);
                     return;
                 }
                 if(clipBoardTreeNode!=null && clipBoardTreeNode.getValue() instanceof SingleRead
@@ -126,7 +136,7 @@ public class SingleReadSequenceContextMenu extends CompoundContributionItem {
                     SingleRead singleRead = (SingleRead)clipBoardTreeNode.getValue();
                     Sequence sequence = (Sequence)selectedTreeNode.getValue();
                     sequence.addSingleRead(singleRead);
-                    CdmStore.getService(ISequenceService.class).saveOrUpdate(sequence);
+                    CdmStore.getService(ISequenceService.class).merge(sequence);
                     if(activeEditor instanceof DerivateView) {
                         DerivateView derivateView = (DerivateView)activeEditor;
                         derivateView.getConversationHolder().commit();