2 * Copyright (C) 2018 EDIT
3 * European Distributed Institute of Taxonomy
4 * http://www.e-taxonomy.eu
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.
9 package eu
.etaxonomy
.taxeditor
.view
.webimport
.termimport
;
11 import java
.util
.ArrayList
;
12 import java
.util
.Collection
;
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
.jface
.viewers
.StructuredSelection
;
20 import org
.eclipse
.swt
.SWT
;
21 import org
.eclipse
.swt
.dnd
.DND
;
22 import org
.eclipse
.swt
.dnd
.DragSourceAdapter
;
23 import org
.eclipse
.swt
.dnd
.DragSourceEvent
;
24 import org
.eclipse
.swt
.dnd
.Transfer
;
25 import org
.eclipse
.swt
.events
.FocusEvent
;
26 import org
.eclipse
.swt
.events
.FocusListener
;
27 import org
.eclipse
.swt
.events
.KeyAdapter
;
28 import org
.eclipse
.swt
.events
.KeyEvent
;
29 import org
.eclipse
.swt
.events
.SelectionAdapter
;
30 import org
.eclipse
.swt
.events
.SelectionEvent
;
32 import eu
.etaxonomy
.cdm
.common
.CdmUtils
;
33 import eu
.etaxonomy
.taxeditor
.l10n
.Messages
;
34 import eu
.etaxonomy
.taxeditor
.model
.ColorResources
;
35 import eu
.etaxonomy
.taxeditor
.model
.MessagingUtils
;
36 import eu
.etaxonomy
.taxeditor
.preference
.Resources
;
37 import eu
.etaxonomy
.taxeditor
.view
.webimport
.termimport
.parser
.SuggestParser
;
38 import eu
.etaxonomy
.taxeditor
.view
.webimport
.termimport
.parser
.TerminologyParser
;
39 import eu
.etaxonomy
.taxeditor
.view
.webimport
.termimport
.requests
.RequestSearch
;
40 import eu
.etaxonomy
.taxeditor
.view
.webimport
.termimport
.requests
.RequestSuggest
;
41 import eu
.etaxonomy
.taxeditor
.view
.webimport
.termimport
.requests
.RequestTerminologies
;
42 import eu
.etaxonomy
.taxeditor
.view
.webimport
.termimport
.wrapper
.OntologyTermWrapper
;
43 import eu
.etaxonomy
.taxeditor
.view
.webimport
.termimport
.wrapper
.TerminologyWrapper
;
50 public class GfBioTerminologyImportPresenter
{
52 private static final String NO_CONNECTION_TITLE
= Messages
.GfBioTerminologyImportPresenter_NO_CONNECTION_TITLE
;
53 private static final String NO_CONNECTION_MESSAGE
= Messages
.GfBioTerminologyImportPresenter_NO_CONNECTION_MESSAGE
;
54 private static final String TXT_SEARCH_DEFAULT
= Messages
.GfBioTerminologyImportPresenter_TEXT_SEARCH_DEFAULT
;
56 private GfBioTerminologyImportComposite composite
;
58 public GfBioTerminologyImportPresenter(GfBioTerminologyImportComposite composite
) {
60 this.composite
= composite
;
61 composite
.getBtnSearch().addSelectionListener(new SelectionAdapter() {
63 public void widgetSelected(SelectionEvent e
) {
64 if(e
.widget
==composite
.getBtnSearch()){
71 composite
.getTxtSearch().addKeyListener(new KeyAdapter() {
73 public void keyPressed(KeyEvent e
) {
74 if(e
.keyCode
==SWT
.CR
){
79 composite
.getTxtSearch().setText(TXT_SEARCH_DEFAULT
);
80 composite
.getTxtSearch().setForeground(ColorResources
.getColor(Resources
.SEARCH_VIEW_FOREGROUND
));
81 composite
.getTxtSearch().addFocusListener(new FocusListener() {
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$
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
);
101 String response
= new RequestTerminologies().request();
103 MessagingUtils
.informationDialog(NO_CONNECTION_TITLE
, NO_CONNECTION_MESSAGE
);
106 Collection
<TerminologyWrapper
> terminologies
= TerminologyParser
.parse(response
);
107 String comboDefaultText
= Messages
.GfBioTerminologyImportPresenter_COMBO_DEFAULT
;
108 ComboViewer comboOntologies
= composite
.getComboTerminologies();
109 comboOntologies
.setLabelProvider(new TerminologyLabelProvider());
110 comboOntologies
.setContentProvider(new ArrayContentProvider());
111 comboOntologies
.setInput(terminologies
);
112 comboOntologies
.getCombo().setText(comboDefaultText
);
114 composite
.getBtnRemoveTerminology().addSelectionListener(new SelectionAdapter() {
116 public void widgetSelected(SelectionEvent e
) {
117 composite
.getComboTerminologies().setSelection(null);
118 comboOntologies
.getCombo().setText(comboDefaultText
);
122 composite
.getTreeTermHierarchy().setContentProvider(new OntologyTermContentProvider());
123 composite
.getTreeTermHierarchy().setLabelProvider(new OntologyTermLabelProvider());
126 composite
.getTreeTermHierarchy().addSelectionChangedListener(e
->updateDetails(e
.getSelection()));
127 composite
.getTreeTermHierarchy().setContentProvider(new OntologyTermContentProvider());
128 composite
.getTreeTermHierarchy().setLabelProvider(new OntologyTermLabelProvider());
129 Transfer
[] transfers
= new Transfer
[] {LocalSelectionTransfer
.getTransfer(),};
130 composite
.getTreeTermHierarchy().addDragSupport(DND
.DROP_MOVE
,
131 transfers
, new DragSourceAdapter() {
134 public void dragSetData(DragSourceEvent event
) {
135 if (LocalSelectionTransfer
.getTransfer().isSupportedType(event
.dataType
)) {
136 LocalSelectionTransfer
.getTransfer().setSelection(composite
.getTreeTermHierarchy().getSelection());
140 public void dragStart(DragSourceEvent event
) {
141 event
.doit
= !composite
.getTreeTermHierarchy().getSelection().isEmpty();
146 private void clearDetails(){
147 composite
.getLblLabel().setText("");
148 composite
.getLblUri().setText("");
149 composite
.getLblDescription().setText("");
152 private void updateDetails(ISelection s
) {
153 StructuredSelection selection
= (StructuredSelection
)s
;
154 if(selection
.isEmpty()){
157 Object next
= selection
.iterator().next();
158 if(next
instanceof OntologyTermWrapper
){
159 OntologyTermWrapper wrapper
= (OntologyTermWrapper
)next
;
160 String label
= wrapper
.getLabel();
161 String uri
= wrapper
.getUri();
162 String description
= wrapper
.getDescription();
163 composite
.getLblLabel().setText(label
!=null?label
:"");
164 composite
.getLblUri().setText(uri
!=null?uri
:"");
165 composite
.getLblDescription().setText(description
!=null?description
:"");
169 private void search(){
170 String searchString
= composite
.getTxtSearch().getText();
171 if(searchString
.equals(TXT_SEARCH_DEFAULT
)){
174 ISelection selection
= composite
.getComboTerminologies().getSelection();
175 Collection
<OntologyTermWrapper
> wrapperList
= new ArrayList
<>();
176 if(selection
instanceof IStructuredSelection
&& !selection
.isEmpty()){
177 //TODO maybe add support for mutliple terminology selection
178 Object next
= ((IStructuredSelection
) selection
).iterator().next();
179 if(next
instanceof TerminologyWrapper
){
180 String response
= new RequestSearch(searchString
, ((TerminologyWrapper
) next
).getAcronym()).request();
182 MessagingUtils
.informationDialog(NO_CONNECTION_TITLE
, NO_CONNECTION_MESSAGE
);
185 wrapperList
= SuggestParser
.parse(response
);
189 String response
= new RequestSuggest(searchString
).request();
191 MessagingUtils
.informationDialog(NO_CONNECTION_TITLE
, NO_CONNECTION_MESSAGE
);
194 wrapperList
= SuggestParser
.parse(response
);
196 if(wrapperList
.isEmpty()){
197 MessagingUtils
.informationDialog(Messages
.GfBioTerminologyImportPresenter_NO_RESULTS_TITLE
, Messages
.GfBioTerminologyImportPresenter_NO_RESULTS_MESSAGE
);
199 composite
.getTreeTermHierarchy().setInput(wrapperList
);