--- /dev/null
+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());
+ }
+
+ }
+}