--- /dev/null
+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<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);
+
+ Collection<PDBSummaryListModel> searchSummaries = new HashSet<PDBSummaryListModel>();
+ // 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;
+ }
+ }
+}