Project

General

Profile

Download (8.98 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.TermParser;
39
import eu.etaxonomy.taxeditor.view.webimport.termimport.parser.TerminologyParser;
40
import eu.etaxonomy.taxeditor.view.webimport.termimport.requests.RequestSearch;
41
import eu.etaxonomy.taxeditor.view.webimport.termimport.requests.RequestSuggest;
42
import eu.etaxonomy.taxeditor.view.webimport.termimport.requests.RequestTerminologies;
43
import eu.etaxonomy.taxeditor.view.webimport.termimport.wrapper.OntologyTermWrapper;
44
import eu.etaxonomy.taxeditor.view.webimport.termimport.wrapper.TerminologyWrapper;
45

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

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

    
57
    private GfBioTerminologyImportComposite composite;
58

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

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

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

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

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

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

    
123
        composite.getTreeTermHierarchy().setContentProvider(new OntologyTermContentProvider());
124
        composite.getTreeTermHierarchy().setLabelProvider(new OntologyTermLabelProvider());
125

    
126
        //tree results
127
        composite.getTreeTermHierarchy().addSelectionChangedListener(e->updateDetails(e.getSelection()));
128
        composite.getTreeTermHierarchy().setContentProvider(new OntologyTermContentProvider());
129
        composite.getTreeTermHierarchy().setLabelProvider(new OntologyTermLabelProvider());
130
        Transfer[] transfers = new Transfer[] {LocalSelectionTransfer.getTransfer(),};
131
        composite.getTreeTermHierarchy().addDragSupport(DND.DROP_MOVE,
132
                transfers, new DragSourceAdapter() {
133

    
134
            @Override
135
            public void dragSetData(DragSourceEvent event) {
136
                if (LocalSelectionTransfer.getTransfer().isSupportedType(event.dataType)) {
137
                    LocalSelectionTransfer.getTransfer().setSelection(composite.getTreeTermHierarchy().getSelection());
138
                }
139
            }
140
            @Override
141
            public void dragStart(DragSourceEvent event) {
142
                event.doit = !composite.getTreeTermHierarchy().getSelection().isEmpty();
143
            }
144
        });
145
    }
146

    
147
    private void clearDetails(){
148
        composite.getLblLabel().setText("");
149
        composite.getLblUri().setText("");
150
        composite.getLblDescription().setText("");
151
    }
152

    
153
    private void updateDetails(ISelection s) {
154
        StructuredSelection selection = (StructuredSelection)s;
155
        if(selection.isEmpty()){
156
            clearDetails();
157
        }
158
        Iterator iterator = selection.iterator();
159
        if(iterator.hasNext()){
160
            Object next = iterator.next();
161
            if(next instanceof OntologyTermWrapper){
162
                OntologyTermWrapper wrapper = (OntologyTermWrapper)next;
163
                String label = wrapper.getLabel();
164
                String uri = wrapper.getUri();
165
                String description = wrapper.getDescription();
166
                composite.getLblLabel().setText(label!=null?label:"");
167
                composite.getLblUri().setText(uri!=null?uri:"");
168
                composite.getLblDescription().setText(description!=null?description:"");
169
            }
170
        }
171
    }
172

    
173
    private void search(){
174
        String searchString = composite.getTxtSearch().getText();
175
        if(searchString.equals(TXT_SEARCH_DEFAULT)){
176
            return;
177
        }
178
        String terminology = "";
179
        ISelection selection = composite.getComboTerminologies().getSelection();
180
        Collection<OntologyTermWrapper> wrapperList = new ArrayList<>();
181
        if(selection instanceof IStructuredSelection && !selection.isEmpty()){
182
            //TODO maybe add support for multiple terminology selection
183
            Object next = ((IStructuredSelection) selection).iterator().next();
184
            if(next instanceof TerminologyWrapper){
185
                terminology =((TerminologyWrapper) next).getAcronym();
186
            }
187
            String response = new RequestSearch(searchString, terminology).request();
188
            if(response==null){
189
                MessagingUtils.informationDialog(NO_CONNECTION_TITLE, NO_CONNECTION_MESSAGE);
190
                return;
191
            }
192
            wrapperList = TermParser.parse(response);
193
        }
194
        else{
195
            String response = new RequestSuggest(searchString).request();
196
            if(response==null){
197
                MessagingUtils.informationDialog(NO_CONNECTION_TITLE, NO_CONNECTION_MESSAGE);
198
                return;
199
            }
200
            wrapperList = TermParser.parse(response);
201
        }
202
        if(wrapperList.isEmpty()){
203
            MessagingUtils.informationDialog(Messages.GfBioTerminologyImportPresenter_NO_RESULTS_TITLE, Messages.GfBioTerminologyImportPresenter_NO_RESULTS_MESSAGE);
204
        }
205
        composite.getTreeTermHierarchy().setInput(wrapperList);
206
    }
207

    
208
}
(3-3/6)