JAL-1668 First version JAL-1668
[jalview.git] / src / jalview / gui / PDBFetchPanel.java
diff --git a/src/jalview/gui/PDBFetchPanel.java b/src/jalview/gui/PDBFetchPanel.java
new file mode 100644 (file)
index 0000000..c7e5362
--- /dev/null
@@ -0,0 +1,243 @@
+package jalview.gui;
+
+import jalview.jbgui.GPDBFetchPanel;
+import jalview.ws.dbsources.PDBRestClient;
+import jalview.ws.uimodel.PDBSearchRequest;
+import jalview.ws.uimodel.PDBSearchResponse;
+import jalview.ws.uimodel.PDBSummaryListModel;
+import jalview.ws.uimodel.PDBSummaryListModel.PDBDocField;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.swing.DefaultListModel;
+import javax.swing.SwingUtilities;
+
+@SuppressWarnings("serial")
+public class PDBFetchPanel extends GPDBFetchPanel
+{
+  private SequenceFetcher seqFetcher;
+
+  public enum FieldType
+  {
+    INT, STRING, BOOLEAN;
+  }
+
+  public PDBFetchPanel()
+  {
+  }
+
+  public PDBFetchPanel(SequenceFetcher seqFetcher)
+  {
+    this();
+    this.seqFetcher = seqFetcher;
+  }
+
+  public static void main(String[] args)
+  {
+    SwingUtilities.invokeLater(new Runnable()
+    {
+      public void run()
+      {
+        new PDBFetchPanel();
+      }
+    });
+  }
+
+  @Override
+  public void searchStringAction()
+  {
+    boolean allowEmptySequence = false;
+    jListSearchResult.setModel(new DefaultListModel<PDBSummaryListModel>());
+    mainFrame.setTitle("PDB Sequence Fetcher");
+    if (search.getText().trim().length() > 0)
+    {
+      long startTime = System.currentTimeMillis();
+      PDBRestClient pdbRestCleint = new PDBRestClient();
+      String searchTarget = ((PDBSearchOptionList) searchTargetOptions
+              .getSelectedItem()).getCode();
+
+      PDBSearchRequest request = new PDBSearchRequest();
+      request.setAllowEmptySeq(allowEmptySequence);
+      request.setResponseSize(100);
+      request.setSearchTarget(searchTarget + ":");
+      request.setSearchTerm(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);
+      request.setWantedFields(wantedFields);
+
+      PDBSearchResponse resultList = pdbRestCleint.executeRequest(request);
+
+      if (resultList.getSearchSummary() != null)
+      {
+        jListSearchResult.setModel(PDBSearchResponse
+                .getListModel(resultList.getSearchSummary()));
+      }
+      long endTime = System.currentTimeMillis();
+      mainFrame.setTitle("PDB Sequence Fetcher - "
+              + resultList.getItemsFound() + " results ("
+              + (endTime - startTime) + " milli secs)");
+    }
+
+  }
+
+  @Override
+  public void okActionPerformed()
+  {
+    processPDBResponseData();
+  }
+
+
+  @Override
+  public void backActionPerformed()
+  {
+    System.out.println("back! pressed!");
+  }
+
+  @Override
+  public void cancelActionPerformed()
+  {
+    mainFrame.dispose();
+  }
+
+  private void processPDBResponseData()
+  {
+    mainFrame.dispose();
+    StringBuilder selectedIds = new StringBuilder();
+    for (PDBSummaryListModel dataSelected : jListSearchResult
+            .getSelectedValuesList())
+    {
+      selectedIds.append(";").append(dataSelected.getPdbId());
+    }
+    String ids = selectedIds.deleteCharAt(0).toString();
+    seqFetcher.textArea.setText(ids);
+    Thread worker = new Thread(seqFetcher);
+    worker.start();
+  }
+
+  @SuppressWarnings("unchecked")
+  public void populateSearchOptionCombo()
+
+  {
+    List<PDBSearchOptionList> searchOptions = new ArrayList<PDBSearchOptionList>();
+    searchOptions.add(new PDBSearchOptionList("PDB ID", "pdb_id",
+            FieldType.STRING));
+    searchOptions.add(new PDBSearchOptionList("PFAM Name", "pfam_name",
+            FieldType.STRING));
+    searchOptions.add(new PDBSearchOptionList("ALL", "text",
+            FieldType.STRING));
+    searchOptions.add(new PDBSearchOptionList("Molecule Type",
+            "molecule_type", FieldType.STRING));
+    searchOptions.add(new PDBSearchOptionList("Title", "title",
+            FieldType.STRING));
+    searchOptions.add(new PDBSearchOptionList("Molecule Name",
+            "molecule_name", FieldType.STRING));
+    searchOptions.add(new PDBSearchOptionList("Tax ID", "tax_id",
+            FieldType.STRING));
+    searchOptions.add(new PDBSearchOptionList("UniProt Accession",
+            "uniprot_accession", FieldType.STRING));
+    searchOptions.add(new PDBSearchOptionList("Gene Name", "gene_name",
+            FieldType.STRING));
+    searchOptions.add(new PDBSearchOptionList("Genus", "genus",
+            FieldType.STRING));
+
+    java.util.Collections.sort(searchOptions);
+
+    for (PDBSearchOptionList pdbSO : searchOptions)
+    {
+      searchTargetOptions.addItem(pdbSO);
+    }
+  }
+
+  @SuppressWarnings("rawtypes")
+  public class PDBSearchOptionList implements Comparable
+  {
+    private String name;
+
+    private String code;
+
+    private boolean showInSummary;
+
+    private boolean searchFilter;
+
+    private FieldType type;
+
+    public PDBSearchOptionList(String name, String code, FieldType type)
+    {
+      this.name = name;
+      this.code = code;
+      this.type = type;
+    }
+
+    public String getName()
+    {
+      return name;
+    }
+
+    public void setName(String name)
+    {
+      this.name = name;
+    }
+
+    public String getCode()
+    {
+      return code;
+    }
+
+    public void setCode(String code)
+    {
+      this.code = code;
+    }
+
+    public boolean isShowInSummary()
+    {
+      return showInSummary;
+    }
+
+    public void setShowInSummary(boolean showInSummary)
+    {
+      this.showInSummary = showInSummary;
+    }
+
+    public boolean isSearchFilter()
+    {
+      return searchFilter;
+    }
+
+    public void setSearchFilter(boolean searchFilter)
+    {
+      this.searchFilter = searchFilter;
+    }
+
+    public FieldType getFieldType()
+    {
+      return type;
+    }
+
+    public void setFieldType(FieldType type)
+    {
+      this.type = type;
+    }
+
+    public String toString()
+    {
+      return name;
+    }
+
+    public PDBSearchOptionList()
+    {
+
+    }
+
+    @Override
+    public int compareTo(Object o)
+    {
+      return this.name.compareTo(((PDBSearchOptionList) o).getName());
+    }
+
+  }
+}