JAL-1667 updated test and internationalization messages
[jalview.git] / src / jalview / gui / PDBSearchPanel.java
diff --git a/src/jalview/gui/PDBSearchPanel.java b/src/jalview/gui/PDBSearchPanel.java
new file mode 100644 (file)
index 0000000..1441e08
--- /dev/null
@@ -0,0 +1,171 @@
+/*
+ * Jalview - A Sequence Alignment Editor and Viewer (Version 2.8.2)
+ * Copyright (C) 2014 The Jalview Authors
+ * 
+ * This file is part of Jalview.
+ * 
+ * Jalview is free software: you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License 
+ * as published by the Free Software Foundation, either version 3
+ * of the License, or (at your option) any later version.
+ *  
+ * Jalview is distributed in the hope that it will be useful, but 
+ * WITHOUT ANY WARRANTY; without even the implied warranty 
+ * of MERCHANTABILITY or FITNESS FOR A PARTICULAR 
+ * PURPOSE.  See the GNU General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License
+ * along with Jalview.  If not, see <http://www.gnu.org/licenses/>.
+ * The Jalview Authors are detailed in the 'AUTHORS' file.
+ */
+
+package jalview.gui;
+
+import jalview.jbgui.GPDBSearchPanel;
+import jalview.util.MessageManager;
+import jalview.ws.dbsources.PDBRestClient;
+import jalview.ws.dbsources.PDBRestClient.PDBDocField;
+import jalview.ws.uimodel.PDBRestRequest;
+import jalview.ws.uimodel.PDBRestResponse;
+import jalview.ws.uimodel.PDBRestResponse.PDBResponseSummary;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.List;
+
+import javax.swing.DefaultListModel;
+import javax.swing.SwingUtilities;
+
+@SuppressWarnings("serial")
+public class PDBSearchPanel extends GPDBSearchPanel
+{
+  private SequenceFetcher seqFetcher;
+
+  private IProgressIndicator progressIdicator;
+
+  public PDBSearchPanel(SequenceFetcher seqFetcher)
+  {
+    this.seqFetcher = seqFetcher;
+    this.progressIdicator = (seqFetcher == null) ? null : seqFetcher
+            .getProgressIndicator();
+  }
+
+  public static void main(String[] args)
+  {
+    SwingUtilities.invokeLater(new Runnable()
+    {
+      public void run()
+      {
+        new PDBSearchPanel(null);
+      }
+    });
+  }
+
+  @Override
+  public void txt_search_ActionPerformed()
+  {
+    boolean allowEmptySequence = false;
+    lst_searchResult.setModel(new DefaultListModel<PDBResponseSummary>());
+    mainFrame.setTitle(MessageManager
+            .getString("label.pdb_sequence_getcher"));
+    if (txt_search.getText().trim().length() > 0)
+    {
+      long startTime = System.currentTimeMillis();
+      PDBRestClient pdbRestCleint = new PDBRestClient();
+      String searchTarget = ((PDBDocField) cmb_searchTarget
+              .getSelectedItem()).getCode();
+
+      PDBRestRequest request = new PDBRestRequest();
+      request.setAllowEmptySeq(allowEmptySequence);
+      request.setResponseSize(100);
+      request.setFieldToSearchBy(searchTarget + ":");
+      request.setSearchTerm(txt_search.getText());
+      List<PDBDocField> wantedFields = new ArrayList<PDBDocField>();
+      wantedFields.add(PDBDocField.MOLECULE_TYPE);
+      wantedFields.add(PDBDocField.PDB_ID);
+      // wantedFields.add(PDBDocField.GENUS);
+      wantedFields.add(PDBDocField.GENE_NAME);
+      wantedFields.add(PDBDocField.TITLE);
+      // wantedFields.add(PDBDocField.RESOLUTION);
+      // wantedFields.add(PDBDocField.EXPERIMENTAL_METHOD);
+      request.setWantedFields(wantedFields);
+      PDBRestResponse resultList = pdbRestCleint.executeRequest(request);
+      if (resultList.getSearchSummary() != null)
+      {
+        lst_searchResult.setModel(PDBRestResponse
+                .getListModel(resultList.getSearchSummary()));
+      }
+
+      long endTime = System.currentTimeMillis();
+      int resultSetCount = resultList.getNumberOfItemsFound();
+      String result = (resultSetCount > 1) ? MessageManager
+              .getString("label.results") : MessageManager
+              .getString("label.result");
+      mainFrame.setTitle(frameTitle + " - " + resultSetCount + " " + result
+              + " (" + (endTime - startTime) + " milli secs)");
+    }
+  }
+
+  @Override
+  public void btn_ok_ActionPerformed()
+  {
+    loadSelectedPDBSequencesToAlignment();
+  }
+
+  @Override
+  public void btn_back_ActionPerformed()
+  {
+    mainFrame.dispose();
+    new SequenceFetcher(progressIdicator);
+  }
+
+  @Override
+  public void btn_cancel_ActionPerformed()
+  {
+    mainFrame.dispose();
+  }
+
+  public void loadSelectedPDBSequencesToAlignment()
+  {
+    mainFrame.dispose();
+    StringBuilder selectedIds = new StringBuilder();
+    for (PDBResponseSummary dataSelected : lst_searchResult
+            .getSelectedValuesList())
+    {
+      selectedIds.append(";").append(dataSelected.getPdbId());
+    }
+    String ids = selectedIds.deleteCharAt(0).toString();
+    seqFetcher.textArea.setText(ids);
+    Thread worker = new Thread(seqFetcher);
+    worker.start();
+  }
+
+  public void populateCmbSearchTargetOptions()
+  {
+    List<PDBDocField> searchableTargets = new ArrayList<PDBDocField>();
+    searchableTargets.add(PDBDocField.PDB_ID);
+    searchableTargets.add(PDBDocField.PFAM_ACCESSION);
+    searchableTargets.add(PDBDocField.MOLECULE_TYPE);
+    searchableTargets.add(PDBDocField.MOLECULE_NAME);
+    searchableTargets.add(PDBDocField.UNIPROT_ACCESSION);
+    searchableTargets.add(PDBDocField.GENE_NAME);
+    searchableTargets.add(PDBDocField.GENUS);
+    searchableTargets.add(PDBDocField.ALL);
+
+    Collections.sort(searchableTargets, new Comparator<PDBDocField>()
+    {
+      @Override
+      public int compare(PDBDocField o1, PDBDocField o2)
+      {
+        return o1.getName().compareTo(o2.getName());
+      }
+    });
+
+    for (PDBDocField searchTarget : searchableTargets)
+    {
+      cmb_searchTarget.addItem(searchTarget);
+    }
+  }
+
+}