Project

General

Profile

Download (6.13 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.KeyAdapter;
25
import org.eclipse.swt.events.KeyEvent;
26
import org.eclipse.swt.events.SelectionAdapter;
27
import org.eclipse.swt.events.SelectionEvent;
28

    
29
import eu.etaxonomy.taxeditor.l10n.Messages;
30
import eu.etaxonomy.taxeditor.model.MessagingUtils;
31
import eu.etaxonomy.taxeditor.view.webimport.termimport.parser.SuggestParser;
32
import eu.etaxonomy.taxeditor.view.webimport.termimport.parser.TerminologyParser;
33
import eu.etaxonomy.taxeditor.view.webimport.termimport.requests.RequestSearch;
34
import eu.etaxonomy.taxeditor.view.webimport.termimport.requests.RequestSuggest;
35
import eu.etaxonomy.taxeditor.view.webimport.termimport.requests.RequestTerminologies;
36
import eu.etaxonomy.taxeditor.view.webimport.termimport.wrapper.OntologyTermWrapper;
37
import eu.etaxonomy.taxeditor.view.webimport.termimport.wrapper.TerminologyWrapper;
38

    
39
/**
40
 * @author pplitzner
41
 * @since Apr 23, 2018
42
 *
43
 */
44
public class GfBioTerminologyImportPresenter {
45

    
46
    private static final String NO_CONNECTION_TITLE = Messages.GfBioTerminologyImportPresenter_NO_CONNECTION_TITLE;
47
    private static final String NO_CONNECTION_MESSAGE = Messages.GfBioTerminologyImportPresenter_NO_CONNECTION_MESSAGE;
48

    
49
    private GfBioTerminologyImportComposite composite;
50

    
51
    public GfBioTerminologyImportPresenter(GfBioTerminologyImportComposite composite) {
52
        super();
53
        this.composite = composite;
54
        //text search
55
        composite.getBtnSearch().addSelectionListener(new SelectionAdapter() {
56
            @Override
57
            public void widgetSelected(SelectionEvent e) {
58
                if(e.widget==composite.getBtnSearch()){
59
                    search();
60
                }
61
            }
62
        });
63
        composite.getTxtSearch().addKeyListener(new KeyAdapter() {
64
            @Override
65
            public void keyPressed(KeyEvent e) {
66
                if(e.keyCode==SWT.CR){
67
                    search();
68
                }
69
            }
70
        });
71
        String response = new RequestTerminologies().request();
72
        if(response==null){
73
            MessagingUtils.informationDialog(NO_CONNECTION_TITLE, NO_CONNECTION_MESSAGE);
74
            return;
75
        }
76
        Collection<TerminologyWrapper> terminologies = TerminologyParser.parse(response);
77
        //combo
78
        ComboViewer comboOntologies = composite.getComboTerminologies();
79
        comboOntologies.setLabelProvider(new TerminologyLabelProvider());
80
        comboOntologies.setContentProvider(new ArrayContentProvider());
81
        comboOntologies.setInput(terminologies);
82
        composite.getBtnRemoveTerminology().addSelectionListener(new SelectionAdapter() {
83
            @Override
84
            public void widgetSelected(SelectionEvent e) {
85
                composite.getComboTerminologies().setSelection(null);
86
            }
87
        });
88

    
89
        composite.getTreeTermHierarchy().setContentProvider(new OntologyTermContentProvider());
90
        composite.getTreeTermHierarchy().setLabelProvider(new OntologyTermLabelProvider());
91

    
92
        //tree results
93
        composite.getTreeTermHierarchy().setContentProvider(new OntologyTermContentProvider());
94
        composite.getTreeTermHierarchy().setLabelProvider(new OntologyTermLabelProvider());
95
        Transfer[] transfers = new Transfer[] {LocalSelectionTransfer.getTransfer(),};
96
        composite.getTreeTermHierarchy().addDragSupport(DND.DROP_MOVE,
97
                transfers, new DragSourceAdapter() {
98

    
99
            @Override
100
            public void dragSetData(DragSourceEvent event) {
101
                if (LocalSelectionTransfer.getTransfer().isSupportedType(event.dataType)) {
102
                    LocalSelectionTransfer.getTransfer().setSelection(composite.getTreeTermHierarchy().getSelection());
103
                }
104
            }
105
            @Override
106
            public void dragStart(DragSourceEvent event) {
107
                event.doit = !composite.getTreeTermHierarchy().getSelection().isEmpty();
108
            }
109
        });
110
    }
111

    
112
    private void search(){
113
        String searchString = composite.getTxtSearch().getText();
114
        ISelection selection = composite.getComboTerminologies().getSelection();
115
        Collection<OntologyTermWrapper> wrapperList = new ArrayList<>();
116
        if(selection instanceof IStructuredSelection && !selection.isEmpty()){
117
            //FIXME add support for mutliple terminology selection
118
            Object next = ((IStructuredSelection) selection).iterator().next();
119
            if(next instanceof TerminologyWrapper){
120
                String response = new RequestSearch(searchString, ((TerminologyWrapper) next).getName()).request();
121
                if(response==null){
122
                    MessagingUtils.informationDialog(NO_CONNECTION_TITLE, NO_CONNECTION_MESSAGE);
123
                    return;
124
                }
125
                wrapperList = SuggestParser.parse(response);
126
            }
127
        }
128
        else{
129
            String response = new RequestSuggest(searchString).request();
130
            if(response==null){
131
                MessagingUtils.informationDialog(NO_CONNECTION_TITLE, NO_CONNECTION_MESSAGE);
132
                return;
133
            }
134
            wrapperList = SuggestParser.parse(response);
135
        }
136
        if(wrapperList.isEmpty()){
137
            MessagingUtils.informationDialog(Messages.GfBioTerminologyImportPresenter_NO_RESULTS_TITLE, Messages.GfBioTerminologyImportPresenter_NO_RESULTS_MESSAGE);
138
        }
139
        composite.getTreeTermHierarchy().setInput(wrapperList);
140
    }
141

    
142
}
(3-3/6)