package jalview.gui; import jalview.datamodel.DBRefEntry; import jalview.datamodel.PDBEntry; import jalview.datamodel.SequenceI; import jalview.jbgui.GStructureChooser; import jalview.util.MessageManager; 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.Collection; import java.util.HashSet; import java.util.List; import javax.swing.JOptionPane; import javax.swing.SwingUtilities; @SuppressWarnings("serial") public class StructureChooser extends GStructureChooser { private SequenceI sequence; public StructureChooser(AlignmentPanel ap, final SequenceI sequence) { this.ap = ap; this.sequence = sequence; fetchStructures(); } @Override public void ok_ActionPerformed() { jListFoundStructures.setSelectedValue("op1x", true); } 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() { 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) { PDBEntry entry = new PDBEntry(); entry.setId(id.toUpperCase()); sequence.getDatasetSequence().addPDBId(entry); } } 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); } private void fetchStructures() { long startTime = System.currentTimeMillis(); 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 wantedFields = new ArrayList(); 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); Collection searchSummaries = new HashSet(); // searchSummaries. for (SequenceI seq : sequences) { // System.out.println("Selected : " + seq.getName()); request.setSearchTerm(buildQuery(seq) + ")"); PDBRestClient pdbRestCleint = new PDBRestClient(); PDBSearchResponse resultList = pdbRestCleint .executeRequest(request); if (resultList.getSearchSummary() != null && !resultList.getSearchSummary().isEmpty()) { searchSummaries.addAll(resultList.getSearchSummary()); } } foundStructures = searchSummaries.size(); if (searchSummaries != null) { jListFoundStructures.setModel(PDBSearchResponse .getListModel(searchSummaries)); } String totalTime = (System.currentTimeMillis() - startTime) + " milli secs"; mainFrame.setTitle("Structure Chooser - " + foundStructures + " Found (" + totalTime + ")"); } private String buildQuery(SequenceI seq) { String query = seq.getName(); StringBuilder queryBuilder = new StringBuilder(); int count = 0; if (seq.getDBRef() != null && seq.getDBRef().length != 0) { for (DBRefEntry dbRef : seq.getDBRef()) { System.out.println("dbref : " + dbRef.getAccessionId()); queryBuilder.append("text:").append(dbRef.getAccessionId()) .append(" OR "); ++count; if (count > 10) { 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 { private String name; private String value; private String view; public FilterOptions(String name, String value, String view) { this.name = name; this.value = value; this.view = view; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getValue() { return value; } public void setValue(String value) { this.value = value; } public String getView() { return view; } public void setView(String view) { this.view = view; } public String toString() { return this.name; } } }