Project

General

Profile

Download (9.3 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
import java.util.stream.Collectors;
15

    
16
import org.eclipse.jface.util.LocalSelectionTransfer;
17
import org.eclipse.jface.viewers.ISelection;
18
import org.eclipse.jface.viewers.IStructuredSelection;
19
import org.eclipse.jface.viewers.StructuredSelection;
20
import org.eclipse.jface.window.Window;
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.requests.RequestSearch;
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
    public static final String NO_CONNECTION_TITLE = Messages.GfBioTerminologyImportPresenter_NO_CONNECTION_TITLE;
52
    public static final String NO_CONNECTION_MESSAGE = Messages.GfBioTerminologyImportPresenter_NO_CONNECTION_MESSAGE;
53
    private static final String TXT_SEARCH_DEFAULT = Messages.GfBioTerminologyImportPresenter_TEXT_SEARCH_DEFAULT;
54

    
55
    private GfBioTerminologyImportComposite composite;
56
    private Collection<TerminologyWrapper> selectedOntologies = new ArrayList<>();
57

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

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

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

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

    
100
        composite.getBtnChooseOntology().addSelectionListener(new SelectionAdapter() {
101
            @Override
102
            public void widgetSelected(SelectionEvent e) {
103
                OntologySelectionDialog dialog = new OntologySelectionDialog(composite.getShell(), selectedOntologies);
104
                if(dialog.open()==Window.OK){
105
                    selectedOntologies = dialog.getOntologies();
106
                    composite.getTextOntologies().setText(selectedOntologies.stream()
107
                            .map(wrapper->wrapper.getAcronym())
108
                            .collect(Collectors.joining(", ")));
109
                }
110
            }
111
        });
112

    
113
        //vocabulary combo
114
        composite.getBtnRemoveVocabulary().addSelectionListener(new SelectionAdapter() {
115
            @Override
116
            public void widgetSelected(SelectionEvent e) {
117
                composite.getTermVocabularyComboViewer().setElement(null);
118
            }
119
        });
120

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

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

    
132
            @Override
133
            public void dragSetData(DragSourceEvent event) {
134
                if (LocalSelectionTransfer.getTransfer().isSupportedType(event.dataType)) {
135
                    IStructuredSelection selection = (IStructuredSelection) composite.getTreeTermHierarchy().getSelection();
136
                    selection.toList().stream()
137
                    .filter(item->item instanceof OntologyTermWrapper)
138
                    .forEach(wrapper->((OntologyTermWrapper)wrapper).setTermVocabulary(composite.getTermVocabularyComboViewer().getSelection()));
139
                    LocalSelectionTransfer.getTransfer().setSelection(selection);
140
                }
141
            }
142
            @Override
143
            public void dragStart(DragSourceEvent event) {
144
                event.doit = !composite.getTreeTermHierarchy().getSelection().isEmpty();
145
            }
146
        });
147
    }
148

    
149
    private OntologyTermWrapper getSelectedTerm(IStructuredSelection selection){
150
        Iterator iterator = selection.iterator();
151
        if(iterator.hasNext()){
152
            Object next = iterator.next();
153
            if(next instanceof OntologyTermWrapper){
154
                return (OntologyTermWrapper) next;
155
            }
156
        }
157
        return null;
158
    }
159

    
160
    private void clearDetails(){
161
        composite.getLblLabel().setText(""); //$NON-NLS-1$
162
        composite.getLblUri().setText(""); //$NON-NLS-1$
163
        composite.getLblDescription().setText(""); //$NON-NLS-1$
164
        composite.getListSynonyms().getList().removeAll();
165
    }
166

    
167
    private void updateDetails(ISelection s) {
168
        StructuredSelection selection = (StructuredSelection)s;
169
        if(selection.isEmpty()){
170
            clearDetails();
171
        }
172
        OntologyTermWrapper wrapper = getSelectedTerm(selection);
173
        if(wrapper!=null){
174
            String label = wrapper.getLabel();
175
            String uri = wrapper.getUri();
176
            String description = wrapper.getDescription();
177
            composite.getLblLabel().setText(label!=null?label:""); //$NON-NLS-1$
178
            composite.getLblUri().setText(uri!=null?uri:""); //$NON-NLS-1$
179
            composite.getLblDescription().setText(description!=null?description:""); //$NON-NLS-1$
180
            composite.getListSynonyms().getList().removeAll();
181
            if(wrapper.getSynonyms()!=null){
182
                wrapper.getSynonyms().forEach(syn->composite.getListSynonyms().add(syn));
183
            }
184
        }
185
    }
186

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

    
195
    private void search(){
196
        //clear result count
197
        composite.getLblResultCount().setText("");
198

    
199
        String searchString = composite.getTxtSearch().getText();
200
        if(searchString.equals(TXT_SEARCH_DEFAULT)){
201
            return;
202
        }
203
        String response = new RequestSearch(searchString, selectedOntologies).request();
204
        if(response==null){
205
            MessagingUtils.informationDialog(NO_CONNECTION_TITLE, NO_CONNECTION_MESSAGE);
206
            return;
207
        }
208
        Collection<OntologyTermWrapper> wrapperList = new ArrayList<>();
209
        wrapperList = TermParser.parse(response);
210
        if(wrapperList.isEmpty()){
211
            MessagingUtils.informationDialog(Messages.GfBioTerminologyImportPresenter_NO_RESULTS_TITLE, Messages.GfBioTerminologyImportPresenter_NO_RESULTS_MESSAGE);
212
        }
213
        composite.getTreeTermHierarchy().setInput(wrapperList);
214

    
215
        composite.getLblResultCount().setText(Integer.toString(wrapperList.size()));
216
    }
217

    
218
}
(3-3/7)