import jalview.jbgui.GStructureChooser;
import jalview.util.MessageManager;
import jalview.ws.dbsources.PDBRestClient;
+import jalview.ws.dbsources.PDBRestClient.PDBDocField;
import jalview.ws.uimodel.PDBSearchRequest;
import jalview.ws.uimodel.PDBSearchResponse;
-import jalview.ws.uimodel.PDBSummaryListModel;
-import jalview.ws.uimodel.PDBSummaryListModel.PDBDocField;
+import jalview.ws.uimodel.PDBSearchResponse.PDBResponseSummary;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import javax.swing.JOptionPane;
-import javax.swing.SwingUtilities;
@SuppressWarnings("serial")
public class StructureChooser extends GStructureChooser
{
+ private boolean structuresWereFound = false;
- private SequenceI sequence;
+ private SequenceI selectedSequence;
+ private SequenceI[] selectedSequences;
public StructureChooser(AlignmentPanel ap, final SequenceI sequence)
{
this.ap = ap;
- this.sequence = sequence;
+ this.selectedSequence = sequence;
+ selectedSequences = ((ap.av.getSelectionGroup() == null) ? new SequenceI[]
+ { sequence } : ap.av.getSequenceSelection());
fetchStructures();
+ populateFilterOptions();
+ updateCurrentView();
}
@Override
public void ok_ActionPerformed()
{
- jListFoundStructures.setSelectedValue("op1x", true);
+ // TODO code to load selected structures to jmol or chimera
}
- public void pdbFromFile_actionPerformed()
- {
- jalview.io.JalviewFileChooser chooser = new jalview.io.JalviewFileChooser(
- jalview.bin.Cache.getProperty("LAST_DIRECTORY"));
- chooser.setFileView(new jalview.io.JalviewFileView());
- chooser.setDialogTitle(MessageManager.formatMessage(
- "label.select_pdb_file_for", new String[]
- { sequence.getDisplayId(false) }));
- chooser.setToolTipText(MessageManager.formatMessage(
- "label.load_pdb_file_associate_with_sequence", new String[]
- { sequence.getDisplayId(false) }));
-
- int value = chooser.showOpenDialog(null);
-
- if (value == jalview.io.JalviewFileChooser.APPROVE_OPTION)
- {
- String choice = chooser.getSelectedFile().getPath();
- jalview.bin.Cache.setProperty("LAST_DIRECTORY", choice);
- new AssociatePdbFileWithSeq().associatePdbWithSeq(choice,
- jalview.io.AppletFormatAdapter.FILE, sequence, true,
- Desktop.instance);
- }
-
- }
-
- public void discoverPDB_actionPerformed()
- {
-
- final SequenceI[] sequences = ((ap.av.getSelectionGroup() == null) ? new SequenceI[]
- { sequence }
- : ap.av.getSequenceSelection());
- Thread discpdb = new Thread(new Runnable()
- {
- @Override
- public void run()
- {
-
- new jalview.ws.DBRefFetcher(sequences, ap.alignFrame)
- .fetchDBRefs(false);
- }
-
- });
- discpdb.start();
- }
-
- // rpdbview.addActionListener(new ActionListener()
- // {
- //
- // @Override
- // public void actionPerformed(ActionEvent e)
- // {
- // new StructureViewer(ap.getStructureSelectionManager())
- // .viewStructures(ap, pr, ap.av.collateForPDB(pr));
- // }
- // });
-
- public void enterPDB_actionPerformed()
+ protected void populateFilterOptions()
{
- String id = JOptionPane.showInternalInputDialog(Desktop.desktop,
- MessageManager.getString("label.enter_pdb_id"),
- MessageManager.getString("label.enter_pdb_id"),
- JOptionPane.QUESTION_MESSAGE);
- if (id != null && id.length() > 0)
+ if (structuresWereFound)
{
- PDBEntry entry = new PDBEntry();
- entry.setId(id.toUpperCase());
- sequence.getDatasetSequence().addPDBId(entry);
+ filterOptionsComboBox.addItem(new FilterOptions(
+ "- Filter Criteria -", "",
+ VIEWS_FILTER));
+ filterOptionsComboBox.addItem(new FilterOptions("All", "all",
+ VIEWS_FILTER));
+ filterOptionsComboBox.addItem(new FilterOptions("Best Coverage",
+ "coverage",
+ VIEWS_FILTER));
+ filterOptionsComboBox.addItem(new FilterOptions("Best Resolution",
+ PDBDocField.RESOLUTION.getCode(),
+ VIEWS_FILTER));
+ filterOptionsComboBox.addItem(new FilterOptions("Best Quality",
+ PDBDocField.OVERALL_QUALITY.getCode(),
+ VIEWS_FILTER));
+
+ // "number_of_polymers"), PROTEIN_CHAIN_COUNT(
+ // "Protein Chain Count", "number_of_protein_chains"),
+ // BOUND_MOLECULE_COUNT(
+ // "Bound Molecule Count", "number_of_bound_molecules"),
+ // POLYMER_RESIDUE_COUNT(
+ // "Polymer Residue Count", "number_of_polymer_residues"),
+ // UNIPROT_COVERAGE(
}
- }
-
- public static void main(String[] args)
- {
- SwingUtilities.invokeLater(new Runnable()
- {
- public void run()
- {
- new StructureChooser(null, null);
- }
- });
- }
-
- @SuppressWarnings("unchecked")
- protected void populateFilterOptions()
- {
- filterOptions.addItem(new FilterOptions("- Filter Criteria -", "",
- VIEWS_AUTO));
- filterOptions.addItem(new FilterOptions("All", "all", VIEWS_AUTO));
- filterOptions
- .addItem(new FilterOptions("Best Coverage", "", VIEWS_AUTO));
- filterOptions.addItem(new FilterOptions("Best Resolution", "",
- VIEWS_AUTO));
- filterOptions
- .addItem(new FilterOptions("Best Quality", "", VIEWS_AUTO));
- filterOptions.addItem(new FilterOptions("Enter PDB Id", "", VIEWS_ID));
- filterOptions.addItem(new FilterOptions("From File", "", VIEWS_FILE));
- }
-
- protected void updateCurrentView()
- {
- String currentView = ((FilterOptions) filterOptions.getSelectedItem())
- .getView();
- switchableViewsLayout.show(switchableViewsPanel, currentView);
+ filterOptionsComboBox.addItem(new FilterOptions("Enter PDB Id", "-",
+ VIEWS_ENTER_ID));
+ filterOptionsComboBox.addItem(new FilterOptions("From File", "-",
+ VIEWS_FROM_FILE));
}
private void fetchStructures()
{
long startTime = System.currentTimeMillis();
- final SequenceI[] sequences = ((ap.av.getSelectionGroup() == null) ? new SequenceI[]
- { sequence }
- : ap.av.getSequenceSelection());
+ // final SequenceI[] sequences = ((ap.av.getSelectionGroup() == null) ? new
+ // SequenceI[]
+ // { sequence }
+ // : ap.av.getSequenceSelection());
+
int foundStructures = 0;
- PDBSearchRequest request = new PDBSearchRequest();
- request.setAllowEmptySeq(false);
- request.setResponseSize(500);
- request.setSearchTarget("(text:");
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);
+
+ PDBSearchRequest request = new PDBSearchRequest();
+ request.setAllowEmptySeq(false);
+ request.setResponseSize(500);
+ request.setSearchTarget("(text:");
request.setWantedFields(wantedFields);
- Collection<PDBSummaryListModel> searchSummaries = new HashSet<PDBSummaryListModel>();
- // searchSummaries.
- for (SequenceI seq : sequences)
+ Collection<PDBResponseSummary> searchSummaries = new HashSet<PDBResponseSummary>();
+ for (SequenceI seq : selectedSequences)
{
- // System.out.println("Selected : " + seq.getName());
request.setSearchTerm(buildQuery(seq) + ")");
-
PDBRestClient pdbRestCleint = new PDBRestClient();
-
PDBSearchResponse resultList = pdbRestCleint
.executeRequest(request);
if (resultList.getSearchSummary() != null
{
jListFoundStructures.setModel(PDBSearchResponse
.getListModel(searchSummaries));
+ structuresWereFound = true;
}
-
String totalTime = (System.currentTimeMillis() - startTime)
+ " milli secs";
mainFrame.setTitle("Structure Chooser - " + foundStructures
{
for (DBRefEntry dbRef : seq.getDBRef())
{
- System.out.println("dbref : " + dbRef.getAccessionId());
queryBuilder.append("text:").append(dbRef.getAccessionId())
.append(" OR ");
++count;
break;
}
}
- // int beginIndex = queryBuilder. firstIndexOf("text");
int endIndex = queryBuilder.lastIndexOf(" OR ");
query = queryBuilder.toString().substring(5, endIndex);
}
- System.out.println("------------> " + query);
return query;
}
- public class FilterOptions
+ @Override
+ protected void stateChanged()
{
- private String name;
-
- private String value;
-
- private String view;
+ updateCurrentView();
+ }
- public FilterOptions(String name, String value, String view)
+ int debounceCount = 0;
+ protected void updateCurrentView()
+ {
+ FilterOptions currentOption = ((FilterOptions) filterOptionsComboBox
+ .getSelectedItem());
+ switchableViewsLayout.show(switchableViewsPanel,
+ currentOption.getView());
+ ++debounceCount;
+ if (currentOption.getView() == VIEWS_FILTER && debounceCount % 2 == 0)
{
- this.name = name;
- this.value = value;
- this.view = view;
+ filterResultSet(currentOption.getValue());
}
+ }
- public String getName()
- {
- return name;
- }
+ public void filterResultSet(String filterTarget)
+ {
+ System.out.println("-----------------> Filter by : " + filterTarget);
- public void setName(String name)
- {
- this.name = name;
- }
+ 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);
- public String getValue()
- {
- return value;
- }
+ PDBSearchRequest request = new PDBSearchRequest();
+ request.setAllowEmptySeq(false);
+ request.setResponseSize(1);
+ request.setSearchTarget("(text:");
+ request.setSortTarget(filterTarget, true);
- public void setValue(String value)
+ request.setWantedFields(wantedFields);
+
+ Collection<PDBResponseSummary> searchSummaries = new HashSet<PDBResponseSummary>();
+ for (SequenceI seq : selectedSequences)
{
- this.value = value;
+ request.setSearchTerm(buildQuery(seq) + ")");
+ PDBRestClient pdbRestCleint = new PDBRestClient();
+ PDBSearchResponse resultList = pdbRestCleint.executeRequest(request);
+ if (resultList.getSearchSummary() != null
+ && !resultList.getSearchSummary().isEmpty())
+ {
+ searchSummaries.addAll(resultList.getSearchSummary());
+
+ }
}
- public String getView()
+ for (PDBResponseSummary summary : searchSummaries)
{
- return view;
+ jListFoundStructures.setSelectedValue(summary, true);
+ // jListFoundStructures.
+ break;
}
+ System.out.println("Found item count : " + searchSummaries.size());
+ }
+
+ public void pdbFromFile_actionPerformed()
+ {
+ jalview.io.JalviewFileChooser chooser = new jalview.io.JalviewFileChooser(
+ jalview.bin.Cache.getProperty("LAST_DIRECTORY"));
+ chooser.setFileView(new jalview.io.JalviewFileView());
+ chooser.setDialogTitle(MessageManager.formatMessage(
+ "label.select_pdb_file_for", new String[]
+ { selectedSequence.getDisplayId(false) }));
+ chooser.setToolTipText(MessageManager.formatMessage(
+ "label.load_pdb_file_associate_with_sequence", new String[]
+ { selectedSequence.getDisplayId(false) }));
+
+ int value = chooser.showOpenDialog(null);
- public void setView(String view)
+ if (value == jalview.io.JalviewFileChooser.APPROVE_OPTION)
{
- this.view = view;
+ String choice = chooser.getSelectedFile().getPath();
+ jalview.bin.Cache.setProperty("LAST_DIRECTORY", choice);
+ new AssociatePdbFileWithSeq().associatePdbWithSeq(choice,
+ jalview.io.AppletFormatAdapter.FILE, selectedSequence, true,
+ Desktop.instance);
}
- public String toString()
+ }
+
+
+ // rpdbview.addActionListener(new ActionListener()
+ // {
+ //
+ // @Override
+ // public void actionPerformed(ActionEvent e)
+ // {
+ // new StructureViewer(ap.getStructureSelectionManager())
+ // .viewStructures(ap, pr, ap.av.collateForPDB(pr));
+ // }
+ // });
+
+ public void enterPDB_actionPerformed()
+ {
+ String id = JOptionPane.showInternalInputDialog(Desktop.desktop,
+ MessageManager.getString("label.enter_pdb_id"),
+ MessageManager.getString("label.enter_pdb_id"),
+ JOptionPane.QUESTION_MESSAGE);
+ if (id != null && id.length() > 0)
{
- return this.name;
+ PDBEntry entry = new PDBEntry();
+ entry.setId(id.toUpperCase());
+ selectedSequence.getDatasetSequence().addPDBId(entry);
}
}
+
+ // public static void main(String[] args)
+ // {
+ // SwingUtilities.invokeLater(new Runnable()
+ // {
+ // public void run()
+ // {
+ // new StructureChooser(null, null);
+ // }
+ // });
+ // }
+
+
}