Project

General

Profile

« Previous | Next » 

Revision 7f7b4382

Added by Patrick Plitzner over 8 years ago

Add dynamic context menu entry for FieldUnit creation

View differences:

eu.etaxonomy.taxeditor.editor/plugin.xml
810 810
               label="%command.label.52"
811 811
               style="push">
812 812
         </command>
813
         <command
814
               commandId="eu.etaxonomy.taxeditor.editor.derivate.createFieldUnit"
815
               label="%command.label.53"
816
               style="push">
817
         </command>
818 813
         <command
819 814
               commandId="eu.etaxonomy.taxeditor.editor.derivate.deepDelete"
820 815
               icon="icons/deep-delete-16x16-32.png"
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/derivate/DerivateView.java
38 38
import eu.etaxonomy.cdm.api.conversation.ConversationHolder;
39 39
import eu.etaxonomy.cdm.api.service.IOccurrenceService;
40 40
import eu.etaxonomy.cdm.api.service.molecular.ISequenceService;
41
import eu.etaxonomy.cdm.hibernate.HibernateProxyHelper;
41 42
import eu.etaxonomy.cdm.model.common.CdmBase;
42 43
import eu.etaxonomy.cdm.model.molecular.Sequence;
43 44
import eu.etaxonomy.cdm.model.molecular.SingleRead;
......
99 100

  
100 101
    private Set<SingleRead> multiLinkSingleReads;
101 102

  
102
    private ISelection selection = null;
103

  
104

  
105 103
    private DerivateContentProvider contentProvider;
106 104

  
107 105
    private DerivateSearchCompositeController derivateSearchCompositeController;
......
124 122
     */
125 123
    private boolean listenToSelectionChange;
126 124

  
125
    private Taxon selectedTaxon;
126

  
127 127
    /**
128 128
     * Default constructor
129 129
     */
......
403 403
        return this.multiLinkSingleReads;
404 404
    }
405 405

  
406
    public ISelection getSelection() {
407
        return selection;
406
    public Object getSelectionInput() {
407
        return selectedTaxon;
408 408
    }
409 409

  
410 410
    public DerivateLabelProvider getLabelProvider() {
......
431 431
        return true;
432 432
    }
433 433

  
434
    public void removeHierarchy(SpecimenOrObservationBase<?> specimenOrObservationBase) {
435
        SpecimenOrObservationBase<?> rootElement = derivateToRootEntityMap.remove(specimenOrObservationBase);
436
        rootElements.remove(rootElement);
437
    }
438

  
439 434
    public void addHierarchy(FieldUnit fieldUnit) {
440 435
        rootElements.add(fieldUnit);
441 436
        derivateToRootEntityMap.put(fieldUnit, fieldUnit);
......
461 456
    public void selectionChanged(IWorkbenchPart part, ISelection selection) {
462 457
        if(listenToSelectionChange && selection instanceof IStructuredSelection){
463 458
            Object selectedElement = ((IStructuredSelection) selection).getFirstElement();
464
            if(selectedElement instanceof Taxon){
465
                Collection<SpecimenOrObservationBase> fieldUnits = CdmStore.getService(IOccurrenceService.class).listFieldUnitsByAssociatedTaxon((Taxon) selectedElement, null, null);
459
            if(selectedElement instanceof CdmBase && ((CdmBase) selectedElement).isInstanceOf(Taxon.class)){
460
                selectedTaxon = HibernateProxyHelper.deproxy(selectedElement, Taxon.class);
461
                Collection<SpecimenOrObservationBase> fieldUnits = CdmStore.getService(IOccurrenceService.class).listFieldUnitsByAssociatedTaxon(selectedTaxon, null, null);
466 462
                Collection<UUID> uuids = new HashSet<UUID>();
467 463
                for (SpecimenOrObservationBase specimenOrObservationBase : fieldUnits) {
468 464
                    uuids.add(specimenOrObservationBase.getUuid());
......
504 500
        listenToSelectionChange = !listenToSelectionChange;
505 501
        derivateSearchCompositeController.setEnabled(!listenToSelectionChange);
506 502
        derivateSearchCompositeController.setTaxon(null);
503
        if(!listenToSelectionChange){
504
            selectedTaxon = null;
505
        }
506
    }
507

  
508
    public boolean isListenToSelectionChange(){
509
        return listenToSelectionChange;
507 510
    }
508 511

  
509 512
    /**
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/derivate/contextMenu/CreateFieldUnitContextMenu.java
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.IWorkbenchPart;
15
import org.eclipse.ui.IWorkbenchWindow;
16
import org.eclipse.ui.PlatformUI;
17
import org.eclipse.ui.actions.CompoundContributionItem;
18

  
19
import eu.etaxonomy.cdm.api.service.molecular.ISequenceService;
20
import eu.etaxonomy.cdm.hibernate.HibernateProxyHelper;
21
import eu.etaxonomy.cdm.model.common.CdmBase;
22
import eu.etaxonomy.cdm.model.molecular.Sequence;
23
import eu.etaxonomy.cdm.model.molecular.SingleRead;
24
import eu.etaxonomy.cdm.model.taxon.Taxon;
25
import eu.etaxonomy.taxeditor.editor.EditorUtil;
26
import eu.etaxonomy.taxeditor.editor.Messages;
27
import eu.etaxonomy.taxeditor.editor.view.derivate.DerivateView;
28
import eu.etaxonomy.taxeditor.model.MessagingUtils;
29
import eu.etaxonomy.taxeditor.store.CdmStore;
30

  
31
/**
32
 * Context menu for the SingleReads in the derivate hierarchy.
33
 *
34
 */
35
public class CreateFieldUnitContextMenu extends CompoundContributionItem {
36

  
37
    private enum CommandType{
38
        COPY_TO_CLIPBOARD,
39
        REMOVE_FROM_SEQUENCE,
40
        ADD_TO_SEQUENCE
41
    }
42

  
43
    @Override
44
    protected IContributionItem[] getContributionItems() {
45
        IContributionItem[] contributionItems = new IContributionItem[] {
46
                new ContributionItem() {
47
                    @Override
48
                    public void fill(Menu menu, int index) {
49
                        final IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
50
                        IWorkbenchPart activePart = window.getActivePage().getActivePart();
51
                        if(activePart instanceof DerivateView){
52
                            MenuItem item = new MenuItem(menu, SWT.NONE);
53
                            item.setText("Create FieldUnit");
54
                            if(((DerivateView) activePart).isListenToSelectionChange()){
55
                                Object selectionInput = ((DerivateView) activePart).getSelectionInput();
56
                                if(selectionInput instanceof CdmBase && ((CdmBase) selectionInput).isInstanceOf(Taxon.class)){
57
                                    Taxon taxon = HibernateProxyHelper.deproxy(selectionInput, Taxon.class);
58
                                    item.setText("Create FieldUnit (attach to "+taxon.getTitleCache()+")");
59
                                }
60
                            }
61
                            item.addSelectionListener(new WidgetSelectionListener(CommandType.ADD_TO_SEQUENCE));
62
                        }
63

  
64

  
65
                        final ISelection selection = window.getActivePage().getSelection();
66
                        TreeNode selectedTreeNode = EditorUtil.getTreeNodeOfSelection(selection);
67
                        TreeNode clipboardNode = EditorUtil.getTreeNodeOfSelection(LocalSelectionTransfer.getTransfer().getSelection());
68
                        if(selectedTreeNode!=null){
69
                            //context menu for Sequence
70
                            if(selectedTreeNode.getValue() instanceof Sequence
71
                                    && clipboardNode!=null && clipboardNode.getValue() instanceof SingleRead){
72
                                MenuItem item = new MenuItem(menu, SWT.NONE);
73
                                item.setText(Messages.SingleReadSequenceContextMenu_REUSE_SINGLE_READ_HERE);
74
                                item.addSelectionListener(new WidgetSelectionListener(CommandType.ADD_TO_SEQUENCE));
75
                            }
76
                            else if(selectedTreeNode.getValue() instanceof SingleRead){
77
                                MenuItem item = new MenuItem(menu, SWT.NONE);
78
                                item.setText(Messages.SingleReadSequenceContextMenu_REUSE_FOR_SEQUENCE);
79
                                item.addSelectionListener(new WidgetSelectionListener(CommandType.COPY_TO_CLIPBOARD));
80
                                if(activePart instanceof DerivateView
81
                                        && ((DerivateView) activePart).getMultiLinkSingleReads().contains(selectedTreeNode.getValue())){
82
                                    MenuItem unlinkItem = new MenuItem(menu, SWT.NONE);
83
                                    unlinkItem.setText(Messages.SingleReadSequenceContextMenu_REMOVE_FROM_SEQUENCE);
84
                                    unlinkItem.addSelectionListener(new WidgetSelectionListener(CommandType.REMOVE_FROM_SEQUENCE));
85
                                }
86
                            }
87
                        }
88
                    }
89
                }
90
        };
91
        return contributionItems;
92
    }
93

  
94
    private class WidgetSelectionListener extends SelectionAdapter{
95
        private final CommandType commandType;
96

  
97
        /**
98
         * @param selectedTreeNode
99
         * @param clipboardNode
100
         * @param commandType
101
         */
102
        public WidgetSelectionListener(CommandType commandType) {
103
            this.commandType = commandType;
104
        }
105

  
106
        @Override
107
        public void widgetSelected(SelectionEvent e) {
108
            IEditorPart activeEditor = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().getActiveEditor();
109
            ISelection clipBoardSelection = LocalSelectionTransfer.getTransfer().getSelection();
110
            final ISelection selection = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().getSelection();
111
            TreeNode clipBoardTreeNode = EditorUtil.getTreeNodeOfSelection(clipBoardSelection);
112
            TreeNode selectedTreeNode = EditorUtil.getTreeNodeOfSelection(selection);
113
            switch (commandType) {
114
            case REMOVE_FROM_SEQUENCE:
115
                if(activeEditor.isDirty()){
116
                    MessagingUtils.warningDialog(DerivateView.VIEW_HAS_UNSAVED_CHANGES, this, DerivateView.YOU_NEED_TO_SAVE_BEFORE_PERFORMING_THIS_ACTION);
117
                    return;
118
                }
119
                if(selectedTreeNode!=null && selectedTreeNode.getParent()!=null &&
120
                        selectedTreeNode.getValue() instanceof SingleRead && selectedTreeNode.getParent().getValue() instanceof Sequence) {
121
                    Sequence sequence = (Sequence) selectedTreeNode.getParent().getValue();
122
                    sequence.removeSingleRead((SingleRead) selectedTreeNode.getValue());
123
                    CdmStore.getService(ISequenceService.class).saveOrUpdate(sequence);
124
                    if(activeEditor instanceof DerivateView) {
125
                        DerivateView derivateView = (DerivateView)activeEditor;
126
                        derivateView.getConversationHolder().commit();
127
                        derivateView.refreshTree();
128
                    }
129
                }
130

  
131
                break;
132
            case ADD_TO_SEQUENCE:
133
                if(activeEditor.isDirty()){
134
                    MessagingUtils.warningDialog(DerivateView.VIEW_HAS_UNSAVED_CHANGES, this, DerivateView.YOU_NEED_TO_SAVE_BEFORE_PERFORMING_THIS_ACTION);
135
                    return;
136
                }
137
                if(clipBoardTreeNode!=null && clipBoardTreeNode.getValue() instanceof SingleRead
138
                        && selectedTreeNode!=null && selectedTreeNode.getValue() instanceof Sequence){
139
                    SingleRead singleRead = (SingleRead)clipBoardTreeNode.getValue();
140
                    Sequence sequence = (Sequence)selectedTreeNode.getValue();
141
                    sequence.addSingleRead(singleRead);
142
                    CdmStore.getService(ISequenceService.class).saveOrUpdate(sequence);
143
                    if(activeEditor instanceof DerivateView) {
144
                        DerivateView derivateView = (DerivateView)activeEditor;
145
                        derivateView.getConversationHolder().commit();
146
                        derivateView.refreshTree();
147
                        LocalSelectionTransfer.getTransfer().setSelection(null);
148
                    }
149
                }
150
                break;
151
            case COPY_TO_CLIPBOARD:
152
                LocalSelectionTransfer.getTransfer().setSelection(selection);
153
                break;
154
            }
155
        }
156
    }
157
}
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/derivate/contextMenu/DerivateViewContextMenu.java
8 8
    @Override
9 9
    protected IContributionItem[] getContributionItems() {
10 10
        IContributionItem[] contributionItems = new IContributionItem[] {
11
                new CreateFieldUnitContextMenu(),
11 12
                new CreateDerivateContextMenu(),
12 13
                new SingleReadSequenceContextMenu()
13 14
        };

Also available in: Unified diff