Project

General

Profile

Download (10.1 KB) Statistics
| Branch: | Tag: | Revision:
1
/**
2
* Copyright (C) 2018 EDIT
3
* European Distributed Institute of Taxonomy
4
* http://www.e-taxonomy.eu
5
*
6
* The contents of this file are subject to the Mozilla Public License Version 1.1
7
* See LICENSE.TXT at the top of this package for the full license terms.
8
*/
9
package eu.etaxonomy.taxeditor.view.webimport.termimport;
10

    
11
import java.util.ArrayList;
12
import java.util.Collection;
13
import java.util.Iterator;
14

    
15
import org.eclipse.jface.util.LocalSelectionTransfer;
16
import org.eclipse.jface.viewers.ArrayContentProvider;
17
import org.eclipse.jface.viewers.ComboViewer;
18
import org.eclipse.jface.viewers.ISelection;
19
import org.eclipse.jface.viewers.IStructuredSelection;
20
import org.eclipse.jface.viewers.StructuredSelection;
21
import org.eclipse.swt.SWT;
22
import org.eclipse.swt.dnd.DND;
23
import org.eclipse.swt.dnd.DragSourceAdapter;
24
import org.eclipse.swt.dnd.DragSourceEvent;
25
import org.eclipse.swt.dnd.Transfer;
26
import org.eclipse.swt.events.FocusEvent;
27
import org.eclipse.swt.events.FocusListener;
28
import org.eclipse.swt.events.KeyAdapter;
29
import org.eclipse.swt.events.KeyEvent;
30
import org.eclipse.swt.events.SelectionAdapter;
31
import org.eclipse.swt.events.SelectionEvent;
32

    
33
import eu.etaxonomy.cdm.common.CdmUtils;
34
import eu.etaxonomy.taxeditor.l10n.Messages;
35
import eu.etaxonomy.taxeditor.model.ColorResources;
36
import eu.etaxonomy.taxeditor.model.MessagingUtils;
37
import eu.etaxonomy.taxeditor.preference.Resources;
38
import eu.etaxonomy.taxeditor.view.webimport.termimport.parser.ParserUtil;
39
import eu.etaxonomy.taxeditor.view.webimport.termimport.parser.TermParser;
40
import eu.etaxonomy.taxeditor.view.webimport.termimport.parser.TerminologyParser;
41
import eu.etaxonomy.taxeditor.view.webimport.termimport.requests.RequestSearch;
42
import eu.etaxonomy.taxeditor.view.webimport.termimport.requests.RequestSuggest;
43
import eu.etaxonomy.taxeditor.view.webimport.termimport.requests.RequestTerminologies;
44
import eu.etaxonomy.taxeditor.view.webimport.termimport.wrapper.OntologyTermWrapper;
45
import eu.etaxonomy.taxeditor.view.webimport.termimport.wrapper.TerminologyWrapper;
46

    
47
/**
48
 * @author pplitzner
49
 * @since Apr 23, 2018
50
 *
51
 */
52
public class GfBioTerminologyImportPresenter {
53

    
54
    private static final String NO_CONNECTION_TITLE = Messages.GfBioTerminologyImportPresenter_NO_CONNECTION_TITLE;
55
    private static final String NO_CONNECTION_MESSAGE = Messages.GfBioTerminologyImportPresenter_NO_CONNECTION_MESSAGE;
56
    private static final String TXT_SEARCH_DEFAULT = Messages.GfBioTerminologyImportPresenter_TEXT_SEARCH_DEFAULT;
57

    
58
    private GfBioTerminologyImportComposite composite;
59

    
60
    public GfBioTerminologyImportPresenter(GfBioTerminologyImportComposite composite) {
61
        super();
62
        this.composite = composite;
63
        composite.getBtnSearch().addSelectionListener(new SelectionAdapter() {
64
            @Override
65
            public void widgetSelected(SelectionEvent e) {
66
                if(e.widget==composite.getBtnSearch()){
67
                    search();
68
                }
69
            }
70
        });
71

    
72
        //text search
73
        composite.getTxtSearch().addKeyListener(new KeyAdapter() {
74
            @Override
75
            public void keyPressed(KeyEvent e) {
76
                if(e.keyCode==SWT.CR){
77
                    search();
78
                }
79
            }
80
        });
81
        composite.getTxtSearch().setText(TXT_SEARCH_DEFAULT);
82
        composite.getTxtSearch().setForeground(ColorResources.getColor(Resources.SEARCH_VIEW_FOREGROUND));
83
        composite.getTxtSearch().addFocusListener(new FocusListener() {
84

    
85
            @Override
86
            public void focusGained(FocusEvent e) {
87
                composite.getTxtSearch().setForeground(ColorResources.getColor(Resources.SEARCH_VIEW_FOCUS));
88
                if (TXT_SEARCH_DEFAULT.equals(composite.getTxtSearch().getText())) {
89
                    composite.getTxtSearch().setText(""); //$NON-NLS-1$
90
                }
91
            }
92

    
93
            @Override
94
            public void focusLost(FocusEvent e) {
95
                if (CdmUtils.isBlank(composite.getTxtSearch().getText())) {
96
                    composite.getTxtSearch().setForeground(ColorResources.getColor(Resources.SEARCH_VIEW_FOREGROUND));
97
                    composite.getTxtSearch().setText(TXT_SEARCH_DEFAULT);
98
                }
99
            }
100
        });
101

    
102
        //terminology combo
103
        String response = new RequestTerminologies().request();
104
        if(response==null){
105
            MessagingUtils.informationDialog(NO_CONNECTION_TITLE, NO_CONNECTION_MESSAGE);
106
            return;
107
        }
108
        Collection<TerminologyWrapper> terminologies = TerminologyParser.parse(response);
109
        String comboDefaultText = Messages.GfBioTerminologyImportPresenter_COMBO_DEFAULT;
110
        ComboViewer comboOntologies = composite.getComboTerminologies();
111
        comboOntologies.setLabelProvider(new TerminologyLabelProvider());
112
        comboOntologies.setContentProvider(new ArrayContentProvider());
113
        comboOntologies.setInput(terminologies);
114
        comboOntologies.getCombo().setText(comboDefaultText);
115

    
116
        composite.getBtnRemoveTerminology().addSelectionListener(new SelectionAdapter() {
117
            @Override
118
            public void widgetSelected(SelectionEvent e) {
119
                composite.getComboTerminologies().setSelection(null);
120
                comboOntologies.getCombo().setText(comboDefaultText);
121
            }
122
        });
123

    
124
        //vocabulary combo
125
        composite.getBtnRemoveVocabulary().addSelectionListener(new SelectionAdapter() {
126
            @Override
127
            public void widgetSelected(SelectionEvent e) {
128
                composite.getTermVocabularyComboViewer().setElement(null);
129
            }
130
        });
131

    
132
        composite.getBtnLoadDetails().addSelectionListener(new SelectionAdapter() {
133
            @Override
134
            public void widgetSelected(SelectionEvent e) {
135
                loadTermDetails();
136
            }
137
        });
138

    
139
        composite.getTreeTermHierarchy().setContentProvider(new OntologyTermContentProvider());
140
        composite.getTreeTermHierarchy().setLabelProvider(new OntologyTermLabelProvider());
141

    
142
        //tree results
143
        composite.getTreeTermHierarchy().addSelectionChangedListener(e->updateDetails(e.getSelection()));
144
        composite.getTreeTermHierarchy().setContentProvider(new OntologyTermContentProvider());
145
        composite.getTreeTermHierarchy().setLabelProvider(new OntologyTermLabelProvider());
146
        Transfer[] transfers = new Transfer[] {LocalSelectionTransfer.getTransfer(),};
147
        composite.getTreeTermHierarchy().addDragSupport(DND.DROP_MOVE,
148
                transfers, new DragSourceAdapter() {
149

    
150
            @Override
151
            public void dragSetData(DragSourceEvent event) {
152
                if (LocalSelectionTransfer.getTransfer().isSupportedType(event.dataType)) {
153
                    LocalSelectionTransfer.getTransfer().setSelection(composite.getTreeTermHierarchy().getSelection());
154
                }
155
            }
156
            @Override
157
            public void dragStart(DragSourceEvent event) {
158
                event.doit = !composite.getTreeTermHierarchy().getSelection().isEmpty();
159
            }
160
        });
161
    }
162

    
163
    private OntologyTermWrapper getSelectedTerm(IStructuredSelection selection){
164
        Iterator iterator = selection.iterator();
165
        if(iterator.hasNext()){
166
            Object next = iterator.next();
167
            if(next instanceof OntologyTermWrapper){
168
                return (OntologyTermWrapper) next;
169
            }
170
        }
171
        return null;
172
    }
173

    
174
    private void clearDetails(){
175
        composite.getLblLabel().setText("");
176
        composite.getLblUri().setText("");
177
        composite.getLblDescription().setText("");
178
        composite.getListSynonyms().removeAll();
179
    }
180

    
181
    private void updateDetails(ISelection s) {
182
        StructuredSelection selection = (StructuredSelection)s;
183
        if(selection.isEmpty()){
184
            clearDetails();
185
        }
186
        OntologyTermWrapper wrapper = getSelectedTerm(selection);
187
        if(wrapper!=null){
188
            String label = wrapper.getLabel();
189
            String uri = wrapper.getUri();
190
            String description = wrapper.getDescription();
191
            composite.getLblLabel().setText(label!=null?label:"");
192
            composite.getLblUri().setText(uri!=null?uri:"");
193
            composite.getLblDescription().setText(description!=null?description:"");
194
        }
195
    }
196

    
197
    private void loadTermDetails(){
198
        OntologyTermWrapper selectedWrapper = getSelectedTerm((IStructuredSelection) composite.getTreeTermHierarchy().getSelection());
199
        if(selectedWrapper!=null){
200
            ParserUtil.loadDetails(selectedWrapper);
201
            updateDetails(new StructuredSelection(selectedWrapper));
202
        }
203
    }
204

    
205
    private void search(){
206
        String searchString = composite.getTxtSearch().getText();
207
        if(searchString.equals(TXT_SEARCH_DEFAULT)){
208
            return;
209
        }
210
        String terminology = "";
211
        ISelection selection = composite.getComboTerminologies().getSelection();
212
        Collection<OntologyTermWrapper> wrapperList = new ArrayList<>();
213
        if(selection instanceof IStructuredSelection && !selection.isEmpty()){
214
            //TODO maybe add support for multiple terminology selection
215
            Object next = ((IStructuredSelection) selection).iterator().next();
216
            if(next instanceof TerminologyWrapper){
217
                terminology =((TerminologyWrapper) next).getAcronym();
218
            }
219
            String response = new RequestSearch(searchString, terminology).request();
220
            if(response==null){
221
                MessagingUtils.informationDialog(NO_CONNECTION_TITLE, NO_CONNECTION_MESSAGE);
222
                return;
223
            }
224
            wrapperList = TermParser.parse(response);
225
        }
226
        else{
227
            String response = new RequestSuggest(searchString).request();
228
            if(response==null){
229
                MessagingUtils.informationDialog(NO_CONNECTION_TITLE, NO_CONNECTION_MESSAGE);
230
                return;
231
            }
232
            wrapperList = TermParser.parse(response);
233
        }
234
        if(wrapperList.isEmpty()){
235
            MessagingUtils.informationDialog(Messages.GfBioTerminologyImportPresenter_NO_RESULTS_TITLE, Messages.GfBioTerminologyImportPresenter_NO_RESULTS_MESSAGE);
236
        }
237
        composite.getTreeTermHierarchy().setInput(wrapperList);
238
    }
239

    
240
}
(3-3/6)