3 import jalview.datamodel.DBRefEntry;
4 import jalview.datamodel.PDBEntry;
5 import jalview.datamodel.SequenceI;
6 import jalview.jbgui.GStructureChooser;
7 import jalview.util.MessageManager;
8 import jalview.ws.dbsources.PDBRestClient;
9 import jalview.ws.uimodel.PDBSearchRequest;
10 import jalview.ws.uimodel.PDBSearchResponse;
11 import jalview.ws.uimodel.PDBSummaryListModel;
12 import jalview.ws.uimodel.PDBSummaryListModel.PDBDocField;
14 import java.util.ArrayList;
15 import java.util.Collection;
16 import java.util.HashSet;
17 import java.util.List;
19 import javax.swing.JOptionPane;
20 import javax.swing.SwingUtilities;
22 @SuppressWarnings("serial")
23 public class StructureChooser extends GStructureChooser
27 private SequenceI sequence;
30 public StructureChooser(AlignmentPanel ap, final SequenceI sequence)
33 this.sequence = sequence;
38 public void ok_ActionPerformed()
40 jListFoundStructures.setSelectedValue("op1x", true);
43 public void pdbFromFile_actionPerformed()
45 jalview.io.JalviewFileChooser chooser = new jalview.io.JalviewFileChooser(
46 jalview.bin.Cache.getProperty("LAST_DIRECTORY"));
47 chooser.setFileView(new jalview.io.JalviewFileView());
48 chooser.setDialogTitle(MessageManager.formatMessage(
49 "label.select_pdb_file_for", new String[]
50 { sequence.getDisplayId(false) }));
51 chooser.setToolTipText(MessageManager.formatMessage(
52 "label.load_pdb_file_associate_with_sequence", new String[]
53 { sequence.getDisplayId(false) }));
55 int value = chooser.showOpenDialog(null);
57 if (value == jalview.io.JalviewFileChooser.APPROVE_OPTION)
59 String choice = chooser.getSelectedFile().getPath();
60 jalview.bin.Cache.setProperty("LAST_DIRECTORY", choice);
61 new AssociatePdbFileWithSeq().associatePdbWithSeq(choice,
62 jalview.io.AppletFormatAdapter.FILE, sequence, true,
68 public void discoverPDB_actionPerformed()
71 final SequenceI[] sequences = ((ap.av.getSelectionGroup() == null) ? new SequenceI[]
73 : ap.av.getSequenceSelection());
74 Thread discpdb = new Thread(new Runnable()
80 new jalview.ws.DBRefFetcher(sequences, ap.alignFrame)
88 // rpdbview.addActionListener(new ActionListener()
92 // public void actionPerformed(ActionEvent e)
94 // new StructureViewer(ap.getStructureSelectionManager())
95 // .viewStructures(ap, pr, ap.av.collateForPDB(pr));
99 public void enterPDB_actionPerformed()
101 String id = JOptionPane.showInternalInputDialog(Desktop.desktop,
102 MessageManager.getString("label.enter_pdb_id"),
103 MessageManager.getString("label.enter_pdb_id"),
104 JOptionPane.QUESTION_MESSAGE);
105 if (id != null && id.length() > 0)
107 PDBEntry entry = new PDBEntry();
108 entry.setId(id.toUpperCase());
109 sequence.getDatasetSequence().addPDBId(entry);
113 public static void main(String[] args)
115 SwingUtilities.invokeLater(new Runnable()
119 new StructureChooser(null, null);
124 @SuppressWarnings("unchecked")
125 protected void populateFilterOptions()
127 filterOptions.addItem(new FilterOptions("- Filter Criteria -", "",
129 filterOptions.addItem(new FilterOptions("All", "all", VIEWS_AUTO));
131 .addItem(new FilterOptions("Best Coverage", "", VIEWS_AUTO));
132 filterOptions.addItem(new FilterOptions("Best Resolution", "",
135 .addItem(new FilterOptions("Best Quality", "", VIEWS_AUTO));
136 filterOptions.addItem(new FilterOptions("Enter PDB Id", "", VIEWS_ID));
137 filterOptions.addItem(new FilterOptions("From File", "", VIEWS_FILE));
140 protected void updateCurrentView()
142 String currentView = ((FilterOptions) filterOptions.getSelectedItem())
144 switchableViewsLayout.show(switchableViewsPanel, currentView);
147 private void fetchStructures()
149 long startTime = System.currentTimeMillis();
150 final SequenceI[] sequences = ((ap.av.getSelectionGroup() == null) ? new SequenceI[]
152 : ap.av.getSequenceSelection());
153 int foundStructures = 0;
154 PDBSearchRequest request = new PDBSearchRequest();
155 request.setAllowEmptySeq(false);
156 request.setResponseSize(500);
157 request.setSearchTarget("(text:");
158 List<PDBDocField> wantedFields = new ArrayList<PDBDocField>();
159 wantedFields.add(PDBDocField.MOLECULE_TYPE);
160 wantedFields.add(PDBDocField.PDB_ID);
161 wantedFields.add(PDBDocField.GENUS);
162 wantedFields.add(PDBDocField.GENE_NAME);
163 wantedFields.add(PDBDocField.TITLE);
164 request.setWantedFields(wantedFields);
166 Collection<PDBSummaryListModel> searchSummaries = new HashSet<PDBSummaryListModel>();
168 for (SequenceI seq : sequences)
170 // System.out.println("Selected : " + seq.getName());
171 request.setSearchTerm(buildQuery(seq) + ")");
173 PDBRestClient pdbRestCleint = new PDBRestClient();
175 PDBSearchResponse resultList = pdbRestCleint
176 .executeRequest(request);
177 if (resultList.getSearchSummary() != null
178 && !resultList.getSearchSummary().isEmpty())
180 searchSummaries.addAll(resultList.getSearchSummary());
184 foundStructures = searchSummaries.size();
185 if (searchSummaries != null)
187 jListFoundStructures.setModel(PDBSearchResponse
188 .getListModel(searchSummaries));
191 String totalTime = (System.currentTimeMillis() - startTime)
193 mainFrame.setTitle("Structure Chooser - " + foundStructures
194 + " Found (" + totalTime + ")");
197 private String buildQuery(SequenceI seq)
199 String query = seq.getName();
200 StringBuilder queryBuilder = new StringBuilder();
202 if (seq.getDBRef() != null && seq.getDBRef().length != 0)
204 for (DBRefEntry dbRef : seq.getDBRef())
206 System.out.println("dbref : " + dbRef.getAccessionId());
207 queryBuilder.append("text:").append(dbRef.getAccessionId())
215 // int beginIndex = queryBuilder. firstIndexOf("text");
216 int endIndex = queryBuilder.lastIndexOf(" OR ");
217 query = queryBuilder.toString().substring(5, endIndex);
219 System.out.println("------------> " + query);
223 public class FilterOptions
227 private String value;
231 public FilterOptions(String name, String value, String view)
238 public String getName()
243 public void setName(String name)
248 public String getValue()
253 public void setValue(String value)
258 public String getView()
263 public void setView(String view)
268 public String toString()