Project

General

Profile

Download (7.68 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

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

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

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

    
51
    private static final String NO_CONNECTION_TITLE = Messages.GfBioTerminologyImportPresenter_NO_CONNECTION_TITLE;
52
    private static final String NO_CONNECTION_MESSAGE = Messages.GfBioTerminologyImportPresenter_NO_CONNECTION_MESSAGE;
53
    private static final String TXT_SEARCH_DEFAULT = "Enter search term...";
54

    
55
    private GfBioTerminologyImportComposite composite;
56

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

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

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

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

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

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

    
121
        composite.getTreeTermHierarchy().setContentProvider(new OntologyTermContentProvider());
122
        composite.getTreeTermHierarchy().setLabelProvider(new OntologyTermLabelProvider());
123

    
124
        //tree results
125
        composite.getTreeTermHierarchy().setContentProvider(new OntologyTermContentProvider());
126
        composite.getTreeTermHierarchy().setLabelProvider(new OntologyTermLabelProvider());
127
        Transfer[] transfers = new Transfer[] {LocalSelectionTransfer.getTransfer(),};
128
        composite.getTreeTermHierarchy().addDragSupport(DND.DROP_MOVE,
129
                transfers, new DragSourceAdapter() {
130

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

    
144
    private void search(){
145
        String searchString = composite.getTxtSearch().getText();
146
        if(searchString.equals(TXT_SEARCH_DEFAULT)){
147
            return;
148
        }
149
        ISelection selection = composite.getComboTerminologies().getSelection();
150
        Collection<OntologyTermWrapper> wrapperList = new ArrayList<>();
151
        if(selection instanceof IStructuredSelection && !selection.isEmpty()){
152
            //FIXME add support for mutliple terminology selection
153
            Object next = ((IStructuredSelection) selection).iterator().next();
154
            if(next instanceof TerminologyWrapper){
155
                String response = new RequestSearch(searchString, ((TerminologyWrapper) next).getAcronym()).request();
156
                if(response==null){
157
                    MessagingUtils.informationDialog(NO_CONNECTION_TITLE, NO_CONNECTION_MESSAGE);
158
                    return;
159
                }
160
                wrapperList = SuggestParser.parse(response);
161
            }
162
        }
163
        else{
164
            String response = new RequestSuggest(searchString).request();
165
            if(response==null){
166
                MessagingUtils.informationDialog(NO_CONNECTION_TITLE, NO_CONNECTION_MESSAGE);
167
                return;
168
            }
169
            wrapperList = SuggestParser.parse(response);
170
        }
171
        if(wrapperList.isEmpty()){
172
            MessagingUtils.informationDialog(Messages.GfBioTerminologyImportPresenter_NO_RESULTS_TITLE, Messages.GfBioTerminologyImportPresenter_NO_RESULTS_MESSAGE);
173
        }
174
        composite.getTreeTermHierarchy().setInput(wrapperList);
175
    }
176

    
177
}
(3-3/6)