ref #7362 Add ontology selection to GfBio import
authorPatrick Plitzner <p.plitzner@bgbm.org>
Tue, 15 May 2018 15:58:47 +0000 (17:58 +0200)
committerPatrick Plitzner <p.plitzner@bgbm.org>
Tue, 15 May 2018 15:58:54 +0000 (17:58 +0200)
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/l10n/Messages.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/l10n/messages.properties
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/l10n/messages_de.properties
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/view/webimport/termimport/GfBioTerminologyImportComposite.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/view/webimport/termimport/GfBioTerminologyImportPresenter.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/view/webimport/termimport/TerminologyLabelProvider.java [new file with mode: 0644]
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/view/webimport/termimport/parser/TerminologyParser.java [new file with mode: 0644]
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/view/webimport/termimport/requests/RequestSearch.java [new file with mode: 0644]
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/view/webimport/termimport/requests/TerminologyServiceConstants.java

index 4ff8ae5b282964072f819823d8960ac20f88865a..7b551d1a4fba5a95e0a6b8d2730f881ca016ba53 100644 (file)
@@ -392,6 +392,18 @@ public class Messages extends NLS {
     public static String ChecklistEditorGeneralPreference_show_symbol;
     public static String ChecklistEditorGeneralPreference_sort_areas;
 
+    public static String GfBioTerminologyImportPresenter_NO_CONNECTION_MESSAGE;
+
+
+    public static String GfBioTerminologyImportPresenter_NO_CONNECTION_TITLE;
+
+
+    public static String GfBioTerminologyImportPresenter_NO_RESULTS_MESSAGE;
+
+
+    public static String GfBioTerminologyImportPresenter_NO_RESULTS_TITLE;
+
+
     public static String PublishFlagPreference_description;
     public static String PublishFlagPreference_do_not_set;
     public static String PublishFlagPreference_inherit;
index ff8f2a9edfd3e77023d83f9f687c9d787c03e858..60b45dafff536b3c6cc7ebdc5dc81b875a0b8f3f 100644 (file)
@@ -301,6 +301,10 @@ ChecklistEditorGeneralPreference_show_id_in_voc=Show Id in Vocabulary instead of
 ChecklistEditorGeneralPreference_show_rank=Show Rank in Distribution Editor
 ChecklistEditorGeneralPreference_show_symbol=Show Symbol of the Status, if existing
 ChecklistEditorGeneralPreference_sort_areas=Sort Areas by Order in Vocabulary
+GfBioTerminologyImportPresenter_NO_CONNECTION_MESSAGE=Could not retrieve data from web service
+GfBioTerminologyImportPresenter_NO_CONNECTION_TITLE=Web service unavailable
+GfBioTerminologyImportPresenter_NO_RESULTS_MESSAGE=No results found for the query.
+GfBioTerminologyImportPresenter_NO_RESULTS_TITLE=No results found
 
 PublishFlagPreference_description=Configure the default settings for the publish flag in new created taxa
 PublishFlagPreference_do_not_set=Set no publish flag
index 3a877a1053336f5551d30864281071905471ae69..78360241589209dc8276659cfc1fb3793f714002 100644 (file)
@@ -301,6 +301,10 @@ ChecklistEditorGeneralPreference_show_id_in_voc=F
 ChecklistEditorGeneralPreference_show_rank=Rank anzeigen
 ChecklistEditorGeneralPreference_show_symbol=Symbol des Status anzeigen, wenn es existiert
 ChecklistEditorGeneralPreference_sort_areas=Areas nach der Sortierung im Vokabular anzeigen
+GfBioTerminologyImportPresenter_NO_CONNECTION_MESSAGE=Konnte keine Verbindung zum Webservice herstellen.
+GfBioTerminologyImportPresenter_NO_CONNECTION_TITLE=Webservice nicht erreichbar
+GfBioTerminologyImportPresenter_NO_RESULTS_MESSAGE=Keine Ergebnisse für die Anfrage gefunden.
+GfBioTerminologyImportPresenter_NO_RESULTS_TITLE=Keine Ergebnisse
 
 PublishFlagPreference_description=Konfiguration des Default Verhaltens beim Setzen des Publish Flags in einem neu erzeugten Taxon.
 PublishFlagPreference_do_not_set=Kein Publish Flag
index e857fcc0c18694f7a30f6b203fc8f00fad393fce..24828ff989e430507a8afd7fe868c9674267bcf0 100644 (file)
@@ -1,22 +1,26 @@
 /**
-* Copyright (C) 2018 EDIT
-* European Distributed Institute of Taxonomy
-* http://www.e-taxonomy.eu
-*
-* The contents of this file are subject to the Mozilla Public License Version 1.1
-* See LICENSE.TXT at the top of this package for the full license terms.
-*/
+ * Copyright (C) 2018 EDIT
+ * European Distributed Institute of Taxonomy
+ * http://www.e-taxonomy.eu
+ *
+ * The contents of this file are subject to the Mozilla Public License Version 1.1
+ * See LICENSE.TXT at the top of this package for the full license terms.
+ */
 package eu.etaxonomy.taxeditor.view.webimport.termimport;
 
+import org.eclipse.jface.viewers.ComboViewer;
 import org.eclipse.jface.viewers.TreeViewer;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.layout.GridData;
 import org.eclipse.swt.layout.GridLayout;
 import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Combo;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Text;
 import org.eclipse.swt.widgets.Tree;
 
+import eu.etaxonomy.taxeditor.model.ImageResources;
+
 /**
  * @author pplitzner
  * @since Apr 23, 2018
@@ -26,22 +30,36 @@ public class GfBioTerminologyImportComposite extends Composite{
     private TreeViewer treeTermHierarchy;
     private Text txtSearch;
     private Button btnSearch;
+    private Composite composite;
+    private Button btnRemoveTerminology;
+    private ComboViewer comboTerminologies;
 
     public GfBioTerminologyImportComposite(Composite parent, int style) {
         super(parent, style);
-        setLayout(new GridLayout(2, false));
+        setLayout(new GridLayout(1, false));
+
+        composite = new Composite(this, SWT.NONE);
+        composite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false, 1, 1));
+        composite.setLayout(new GridLayout(4, false));
 
-        txtSearch = new Text(this, SWT.BORDER);
+        txtSearch = new Text(composite, SWT.BORDER);
         txtSearch.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
 
-        btnSearch = new Button(this, SWT.NONE);
+        comboTerminologies = new ComboViewer(composite, SWT.NONE);
+        Combo combo = comboTerminologies.getCombo();
+        combo.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
+
+        btnRemoveTerminology = new Button(composite, SWT.NONE);
+        btnRemoveTerminology.setImage(ImageResources.getImage(ImageResources.TRASH_ICON));
+
+        btnSearch = new Button(composite, SWT.NONE);
         btnSearch.setText("Search");
 
-                treeTermHierarchy = new TreeViewer(this, SWT.BORDER);
-                Tree tree = treeTermHierarchy.getTree();
-                GridData gd_tree = new GridData(SWT.FILL, SWT.FILL, true, true, 2, 1);
-                gd_tree.widthHint = 423;
-                tree.setLayoutData(gd_tree);
+        treeTermHierarchy = new TreeViewer(this, SWT.BORDER);
+        Tree tree = treeTermHierarchy.getTree();
+        GridData gd_tree = new GridData(SWT.FILL, SWT.FILL, true, true, 3, 1);
+        gd_tree.widthHint = 423;
+        tree.setLayoutData(gd_tree);
     }
     public TreeViewer getTreeTermHierarchy() {
         return treeTermHierarchy;
@@ -52,4 +70,10 @@ public class GfBioTerminologyImportComposite extends Composite{
     public Text getTxtSearch() {
         return txtSearch;
     }
+    public Button getBtnRemoveTerminology() {
+        return btnRemoveTerminology;
+    }
+    public ComboViewer getComboTerminologies() {
+        return comboTerminologies;
+    }
 }
index a6bbe43f929e2ec31300eed1b59ad9d2687b8513..d30a8ddfa06d40f7a4715e6419538ee1f9b13dce 100644 (file)
@@ -8,9 +8,14 @@
 */
 package eu.etaxonomy.taxeditor.view.webimport.termimport;
 
+import java.util.ArrayList;
 import java.util.Collection;
 
 import org.eclipse.jface.util.LocalSelectionTransfer;
+import org.eclipse.jface.viewers.ArrayContentProvider;
+import org.eclipse.jface.viewers.ComboViewer;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.IStructuredSelection;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.dnd.DND;
 import org.eclipse.swt.dnd.DragSourceAdapter;
@@ -21,10 +26,15 @@ import org.eclipse.swt.events.KeyEvent;
 import org.eclipse.swt.events.SelectionAdapter;
 import org.eclipse.swt.events.SelectionEvent;
 
+import eu.etaxonomy.taxeditor.l10n.Messages;
 import eu.etaxonomy.taxeditor.model.MessagingUtils;
 import eu.etaxonomy.taxeditor.view.webimport.termimport.parser.SuggestParser;
+import eu.etaxonomy.taxeditor.view.webimport.termimport.parser.TerminologyParser;
+import eu.etaxonomy.taxeditor.view.webimport.termimport.requests.RequestSearch;
 import eu.etaxonomy.taxeditor.view.webimport.termimport.requests.RequestSuggest;
+import eu.etaxonomy.taxeditor.view.webimport.termimport.requests.RequestTerminologies;
 import eu.etaxonomy.taxeditor.view.webimport.termimport.wrapper.OntologyTermWrapper;
+import eu.etaxonomy.taxeditor.view.webimport.termimport.wrapper.TerminologyWrapper;
 
 /**
  * @author pplitzner
@@ -33,6 +43,9 @@ import eu.etaxonomy.taxeditor.view.webimport.termimport.wrapper.OntologyTermWrap
  */
 public class GfBioTerminologyImportPresenter {
 
+    private static final String NO_CONNECTION_TITLE = Messages.GfBioTerminologyImportPresenter_NO_CONNECTION_TITLE;
+    private static final String NO_CONNECTION_MESSAGE = Messages.GfBioTerminologyImportPresenter_NO_CONNECTION_MESSAGE;
+
     private GfBioTerminologyImportComposite composite;
 
     public GfBioTerminologyImportPresenter(GfBioTerminologyImportComposite composite) {
@@ -55,6 +68,27 @@ public class GfBioTerminologyImportPresenter {
                 }
             }
         });
+        String response = new RequestTerminologies().request();
+        if(response==null){
+            MessagingUtils.informationDialog(NO_CONNECTION_TITLE, NO_CONNECTION_MESSAGE);
+            return;
+        }
+        Collection<TerminologyWrapper> terminologies = TerminologyParser.parse(response);
+        //combo
+        ComboViewer comboOntologies = composite.getComboTerminologies();
+        comboOntologies.setLabelProvider(new TerminologyLabelProvider());
+        comboOntologies.setContentProvider(new ArrayContentProvider());
+        comboOntologies.setInput(terminologies);
+        composite.getBtnRemoveTerminology().addSelectionListener(new SelectionAdapter() {
+            @Override
+            public void widgetSelected(SelectionEvent e) {
+                composite.getComboTerminologies().setSelection(null);
+            }
+        });
+
+        composite.getTreeTermHierarchy().setContentProvider(new OntologyTermContentProvider());
+        composite.getTreeTermHierarchy().setLabelProvider(new OntologyTermLabelProvider());
+
         //tree results
         composite.getTreeTermHierarchy().setContentProvider(new OntologyTermContentProvider());
         composite.getTreeTermHierarchy().setLabelProvider(new OntologyTermLabelProvider());
@@ -77,12 +111,31 @@ public class GfBioTerminologyImportPresenter {
 
     private void search(){
         String searchString = composite.getTxtSearch().getText();
-        String response = new RequestSuggest(searchString).request();
-        if(response==null){
-            MessagingUtils.informationDialog("Web service unavailable", "Could not retrieve data from web service");
-            return;
+        ISelection selection = composite.getComboTerminologies().getSelection();
+        Collection<OntologyTermWrapper> wrapperList = new ArrayList<>();
+        if(selection instanceof IStructuredSelection && !selection.isEmpty()){
+            //FIXME add support for mutliple terminology selection
+            Object next = ((IStructuredSelection) selection).iterator().next();
+            if(next instanceof TerminologyWrapper){
+                String response = new RequestSearch(searchString, ((TerminologyWrapper) next).getName()).request();
+                if(response==null){
+                    MessagingUtils.informationDialog(NO_CONNECTION_TITLE, NO_CONNECTION_MESSAGE);
+                    return;
+                }
+                wrapperList = SuggestParser.parse(response);
+            }
+        }
+        else{
+            String response = new RequestSuggest(searchString).request();
+            if(response==null){
+                MessagingUtils.informationDialog(NO_CONNECTION_TITLE, NO_CONNECTION_MESSAGE);
+                return;
+            }
+            wrapperList = SuggestParser.parse(response);
+        }
+        if(wrapperList.isEmpty()){
+            MessagingUtils.informationDialog(Messages.GfBioTerminologyImportPresenter_NO_RESULTS_TITLE, Messages.GfBioTerminologyImportPresenter_NO_RESULTS_MESSAGE);
         }
-        Collection<OntologyTermWrapper> wrapperList = SuggestParser.parse(response);
         composite.getTreeTermHierarchy().setInput(wrapperList);
     }
 
diff --git a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/view/webimport/termimport/TerminologyLabelProvider.java b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/view/webimport/termimport/TerminologyLabelProvider.java
new file mode 100644 (file)
index 0000000..69b3d7e
--- /dev/null
@@ -0,0 +1,32 @@
+// $Id$
+/**
+* Copyright (C) 2018 EDIT
+* European Distributed Institute of Taxonomy
+* http://www.e-taxonomy.eu
+*
+* The contents of this file are subject to the Mozilla Public License Version 1.1
+* See LICENSE.TXT at the top of this package for the full license terms.
+*/
+package eu.etaxonomy.taxeditor.view.webimport.termimport;
+
+import org.eclipse.jface.viewers.LabelProvider;
+
+import eu.etaxonomy.taxeditor.view.webimport.termimport.wrapper.TerminologyWrapper;
+
+/**
+ * @author pplitzner
+ * @date 15.05.2018
+ *
+ */
+public class TerminologyLabelProvider extends LabelProvider {
+
+
+    @Override
+    public String getText(Object element) {
+        if(element instanceof TerminologyWrapper){
+            return ((TerminologyWrapper) element).getName();
+       }
+        return super.getText(element);
+    }
+
+}
diff --git a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/view/webimport/termimport/parser/TerminologyParser.java b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/view/webimport/termimport/parser/TerminologyParser.java
new file mode 100644 (file)
index 0000000..fefb6fd
--- /dev/null
@@ -0,0 +1,46 @@
+/**
+* Copyright (C) 2018 EDIT
+* European Distributed Institute of Taxonomy
+* http://www.e-taxonomy.eu
+*
+* The contents of this file are subject to the Mozilla Public License Version 1.1
+* See LICENSE.TXT at the top of this package for the full license terms.
+*/
+package eu.etaxonomy.taxeditor.view.webimport.termimport.parser;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+
+import org.json.JSONArray;
+import org.json.JSONException;
+import org.json.JSONObject;
+
+import eu.etaxonomy.taxeditor.view.webimport.termimport.wrapper.TerminologyWrapper;
+
+/**
+ * @author pplitzner
+ * @since May 9, 2018
+ *
+ */
+public class TerminologyParser {
+    public static Collection<TerminologyWrapper> parse(String response){
+        List<TerminologyWrapper> wrapperList = new ArrayList<>();
+        try {
+            JSONObject jsonResponse = new JSONObject(response);
+            JSONArray responseArray = jsonResponse.getJSONArray("results");
+            for(int i=0;i<responseArray.length();i++){
+                JSONObject terminology = responseArray.getJSONObject(i);
+                String name = terminology.getString("name");
+                String acronym = terminology.getString("acronym");
+                String description = terminology.getString("description");
+                String uriString = terminology.getString("uri");
+                wrapperList.add(new TerminologyWrapper(name, acronym, description, uriString));
+            }
+        } catch (JSONException e) {
+            e.printStackTrace();
+        }
+        return wrapperList;
+    }
+
+}
diff --git a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/view/webimport/termimport/requests/RequestSearch.java b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/view/webimport/termimport/requests/RequestSearch.java
new file mode 100644 (file)
index 0000000..233c8d3
--- /dev/null
@@ -0,0 +1,51 @@
+/**
+* Copyright (C) 2018 EDIT
+* European Distributed Institute of Taxonomy
+* http://www.e-taxonomy.eu
+*
+* The contents of this file are subject to the Mozilla Public License Version 1.1
+* See LICENSE.TXT at the top of this package for the full license terms.
+*/
+package eu.etaxonomy.taxeditor.view.webimport.termimport.requests;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author pplitzner
+ * @since Apr 23, 2018
+ *
+ */
+public class RequestSearch extends AbstractTerminologyServiceRequest{
+
+    private String searchString;
+    private String terminology;
+
+    public RequestSearch(String searchString, String terminology) {
+        super();
+        this.searchString = searchString;
+        this.terminology = terminology;
+    }
+
+    @Override
+    protected String getServiceUri() {
+        return TerminologyServiceConstants.SEARCH_SERVICE_URL;
+    }
+
+    @Override
+    protected String getTerminologyId() {
+        return null;
+    }
+
+    @Override
+    protected List<RequestParameter> getServiceParameters() {
+        List<RequestParameter> params = new ArrayList<>();
+        params.add(new RequestParameter(TerminologyServiceConstants.ATTR_QUERY, ".*"+searchString+".*"));
+        params.add(new RequestParameter(TerminologyServiceConstants.ATTR_LIMIT, "20"));
+        params.add(new RequestParameter("match_type", "regex"));
+        params.add(new RequestParameter("internal_only", "true"));
+        params.add(new RequestParameter("terminologies", terminology));
+        return params;
+    }
+
+}
index 46baf81eca00999347ea47607dc21bd4c047ea63..9a598ea7c850b26c227bfdaee11f0502c4b45826 100644 (file)
@@ -18,6 +18,7 @@ public interface TerminologyServiceConstants {
     public static final String NARROWER_SERVICE_URL = "narrower";
     public static final String BROADER_SERVICE_URL = "broader";
     public static final String SUGGEST_SERVICE_URL = "suggest";
+    public static final String SEARCH_SERVICE_URL = "search";
     public static final String HIERARCHY_SERVICE_URL = "hierarchy";
     public static final String TERM_SERVICE_URL = "term";