Project

General

Profile

« Previous | Next » 

Revision f65c57fa

Added by Patrick Plitzner over 8 years ago

Implement handler for creating (non-)taxon associated FieldUnits

View differences:

eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/derivate/DerivateView.java
431 431
        return true;
432 432
    }
433 433

  
434
    public void addHierarchy(FieldUnit fieldUnit) {
434
    public void addFieldUnit(FieldUnit fieldUnit) {
435 435
        rootElements.add(fieldUnit);
436 436
        derivateToRootEntityMap.put(fieldUnit, fieldUnit);
437 437
    }
......
465 465
                }
466 466
                updateRootEntities(uuids);
467 467
            }
468
        }
469
        if(part instanceof MultiPageTaxonEditor){
470
            Taxon taxon = ((MultiPageTaxonEditor) part).getTaxon();
471
            derivateSearchCompositeController.setTaxon(taxon);
468
            if(part instanceof MultiPageTaxonEditor){
469
                Taxon taxon = ((MultiPageTaxonEditor) part).getTaxon();
470
                derivateSearchCompositeController.setTaxon(taxon);
471
            }
472 472
        }
473 473
    }
474 474

  
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/derivate/contextMenu/CreateFieldUnitContextMenu.java
2 2

  
3 3
import org.eclipse.jface.action.ContributionItem;
4 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 5
import org.eclipse.swt.SWT;
9 6
import org.eclipse.swt.events.SelectionAdapter;
10 7
import org.eclipse.swt.events.SelectionEvent;
11 8
import org.eclipse.swt.widgets.Menu;
12 9
import org.eclipse.swt.widgets.MenuItem;
13
import org.eclipse.ui.IEditorPart;
14 10
import org.eclipse.ui.IWorkbenchPart;
15 11
import org.eclipse.ui.IWorkbenchWindow;
16 12
import org.eclipse.ui.PlatformUI;
17 13
import org.eclipse.ui.actions.CompoundContributionItem;
18 14

  
19
import eu.etaxonomy.cdm.api.service.molecular.ISequenceService;
15
import eu.etaxonomy.cdm.api.service.IOccurrenceService;
20 16
import eu.etaxonomy.cdm.hibernate.HibernateProxyHelper;
21 17
import eu.etaxonomy.cdm.model.common.CdmBase;
22
import eu.etaxonomy.cdm.model.molecular.Sequence;
23
import eu.etaxonomy.cdm.model.molecular.SingleRead;
18
import eu.etaxonomy.cdm.model.description.Feature;
19
import eu.etaxonomy.cdm.model.description.IndividualsAssociation;
20
import eu.etaxonomy.cdm.model.description.TaxonDescription;
21
import eu.etaxonomy.cdm.model.occurrence.FieldUnit;
24 22
import eu.etaxonomy.cdm.model.taxon.Taxon;
25
import eu.etaxonomy.taxeditor.editor.EditorUtil;
26
import eu.etaxonomy.taxeditor.editor.Messages;
27 23
import eu.etaxonomy.taxeditor.editor.view.derivate.DerivateView;
28 24
import eu.etaxonomy.taxeditor.model.MessagingUtils;
29 25
import eu.etaxonomy.taxeditor.store.CdmStore;
......
34 30
 */
35 31
public class CreateFieldUnitContextMenu extends CompoundContributionItem {
36 32

  
37
    private enum CommandType{
38
        COPY_TO_CLIPBOARD,
39
        REMOVE_FROM_SEQUENCE,
40
        ADD_TO_SEQUENCE
33
    private enum CommandType {
34
        COPY_TO_CLIPBOARD, REMOVE_FROM_SEQUENCE, ADD_TO_SEQUENCE
41 35
    }
42 36

  
43 37
    @Override
......
49 43
                        final IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
50 44
                        IWorkbenchPart activePart = window.getActivePage().getActivePart();
51 45
                        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();
46
                            final DerivateView derivateView = (DerivateView) activePart;
47
                            if(derivateView.isListenToSelectionChange()){
48
                                Object selectionInput = derivateView.getSelectionInput();
56 49
                                if(selectionInput instanceof CdmBase && ((CdmBase) selectionInput).isInstanceOf(Taxon.class)){
57
                                    Taxon taxon = HibernateProxyHelper.deproxy(selectionInput, Taxon.class);
50
                                    final Taxon taxon = HibernateProxyHelper.deproxy(selectionInput, Taxon.class);
51
                                    MenuItem item = new MenuItem(menu, SWT.NONE);
58 52
                                    item.setText("Create FieldUnit (attach to "+taxon.getTitleCache()+")");
59
                                }
60
                            }
61
                            item.addSelectionListener(new WidgetSelectionListener(CommandType.ADD_TO_SEQUENCE));
62
                        }
53
                                    item.addSelectionListener(new SelectionAdapter() {
54
                                        @Override
55
                                        public void widgetSelected(SelectionEvent e) {
56
                                            if(derivateView.isDirty()){
57
                                                MessagingUtils.warningDialog(DerivateView.VIEW_HAS_UNSAVED_CHANGES, this, DerivateView.YOU_NEED_TO_SAVE_BEFORE_PERFORMING_THIS_ACTION);
58
                                                return;
59
                                            }
60
                                            FieldUnit fieldUnit = FieldUnit.NewInstance();
61
                                            fieldUnit = CdmBase.deproxy(CdmStore.getService(IOccurrenceService.class).save(fieldUnit), FieldUnit.class);
62
                                            IndividualsAssociation association = IndividualsAssociation.NewInstance(fieldUnit);
63
                                            association.setFeature(Feature.SPECIMEN());
64
                                            TaxonDescription description;
65
                                            if(!taxon.getDescriptions().isEmpty()){
66
                                                description = taxon.getDescriptions().iterator().next();
67
                                            }
68
                                            else{
69
                                                description = TaxonDescription.NewInstance(taxon);
70
                                            }
71
                                            description.addElement(IndividualsAssociation.NewInstance(fieldUnit));
63 72

  
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));
73
                                            derivateView.getConversationHolder().commit();
74
                                            derivateView.addFieldUnit(fieldUnit);
75
                                            derivateView.refreshTree();
76
                                        }
77
                                    });
78
                                }
75 79
                            }
76
                            else if(selectedTreeNode.getValue() instanceof SingleRead){
80
                            else{
77 81
                                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
                                }
82
                                item.setText("Create FieldUnit");
83
                                item.addSelectionListener(new SelectionAdapter() {
84
                                    @Override
85
                                    public void widgetSelected(SelectionEvent e) {
86
                                        if(derivateView.isDirty()){
87
                                            MessagingUtils.warningDialog(DerivateView.VIEW_HAS_UNSAVED_CHANGES, this, DerivateView.YOU_NEED_TO_SAVE_BEFORE_PERFORMING_THIS_ACTION);
88
                                            return;
89
                                        }
90
                                        FieldUnit fieldUnit = FieldUnit.NewInstance();
91
                                        fieldUnit = CdmBase.deproxy(CdmStore.getService(IOccurrenceService.class).save(fieldUnit), FieldUnit.class);
92
                                        derivateView.getConversationHolder().commit();
93
                                        derivateView.addFieldUnit(fieldUnit);
94
                                        derivateView.refreshTree();
95
                                    }
96
                                });
86 97
                            }
87 98
                        }
88 99
                    }
......
90 101
        };
91 102
        return contributionItems;
92 103
    }
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 104
}
105

  
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/derivate/handler/CreateFieldUnitHandler.java
25 25
            FieldUnit fieldUnit = FieldUnit.NewInstance();
26 26
            fieldUnit = CdmBase.deproxy(CdmStore.getService(IOccurrenceService.class).save(fieldUnit), FieldUnit.class);
27 27
            derivateView.getConversationHolder().commit();
28
            derivateView.addHierarchy(fieldUnit);
28
            derivateView.addFieldUnit(fieldUnit);
29 29
            derivateView.refreshTree();
30 30
        }
31 31
        return null;

Also available in: Unified diff