Project

General

Profile

Download (9.78 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
        //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
        composite.getBtnLoadDetails().addSelectionListener(new SelectionAdapter() {
125
            @Override
126
            public void widgetSelected(SelectionEvent e) {
127
                loadTermDetails();
128
            }
129
        });
130

    
131
        composite.getTreeTermHierarchy().setContentProvider(new OntologyTermContentProvider());
132
        composite.getTreeTermHierarchy().setLabelProvider(new OntologyTermLabelProvider());
133

    
134
        //tree results
135
        composite.getTreeTermHierarchy().addSelectionChangedListener(e->updateDetails(e.getSelection()));
136
        composite.getTreeTermHierarchy().setContentProvider(new OntologyTermContentProvider());
137
        composite.getTreeTermHierarchy().setLabelProvider(new OntologyTermLabelProvider());
138
        Transfer[] transfers = new Transfer[] {LocalSelectionTransfer.getTransfer(),};
139
        composite.getTreeTermHierarchy().addDragSupport(DND.DROP_MOVE,
140
                transfers, new DragSourceAdapter() {
141

    
142
            @Override
143
            public void dragSetData(DragSourceEvent event) {
144
                if (LocalSelectionTransfer.getTransfer().isSupportedType(event.dataType)) {
145
                    LocalSelectionTransfer.getTransfer().setSelection(composite.getTreeTermHierarchy().getSelection());
146
                }
147
            }
148
            @Override
149
            public void dragStart(DragSourceEvent event) {
150
                event.doit = !composite.getTreeTermHierarchy().getSelection().isEmpty();
151
            }
152
        });
153
    }
154

    
155
    private OntologyTermWrapper getSelectedTerm(IStructuredSelection selection){
156
        Iterator iterator = selection.iterator();
157
        if(iterator.hasNext()){
158
            Object next = iterator.next();
159
            if(next instanceof OntologyTermWrapper){
160
                return (OntologyTermWrapper) next;
161
            }
162
        }
163
        return null;
164
    }
165

    
166
    private void clearDetails(){
167
        composite.getLblLabel().setText("");
168
        composite.getLblUri().setText("");
169
        composite.getLblDescription().setText("");
170
    }
171

    
172
    private void updateDetails(ISelection s) {
173
        StructuredSelection selection = (StructuredSelection)s;
174
        if(selection.isEmpty()){
175
            clearDetails();
176
        }
177
        OntologyTermWrapper wrapper = getSelectedTerm(selection);
178
        if(wrapper!=null){
179
            String label = wrapper.getLabel();
180
            String uri = wrapper.getUri();
181
            String description = wrapper.getDescription();
182
            composite.getLblLabel().setText(label!=null?label:"");
183
            composite.getLblUri().setText(uri!=null?uri:"");
184
            composite.getLblDescription().setText(description!=null?description:"");
185
        }
186
    }
187

    
188
    private void loadTermDetails(){
189
        OntologyTermWrapper selectedWrapper = getSelectedTerm((IStructuredSelection) composite.getTreeTermHierarchy().getSelection());
190
        if(selectedWrapper!=null){
191
            ParserUtil.loadDetails(selectedWrapper);
192
            updateDetails(new StructuredSelection(selectedWrapper));
193
        }
194
    }
195

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

    
231
}
(3-3/6)