X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fgui%2FStructureChooser.java;h=976b77b9c89227e3995c2a4cd095e2802729cfef;hb=7a1a7eea9501cd9e3841e996f4926cf1686be76a;hp=ff7cdcbad268252d8a60de858c57822ed92db626;hpb=420f8c90293d60c925ec564aa28fcb3ef0136d28;p=jalview.git diff --git a/src/jalview/gui/StructureChooser.java b/src/jalview/gui/StructureChooser.java index ff7cdcb..976b77b 100644 --- a/src/jalview/gui/StructureChooser.java +++ b/src/jalview/gui/StructureChooser.java @@ -100,9 +100,13 @@ public class StructureChooser extends GStructureChooser public void run() { long startTime = System.currentTimeMillis(); - String msg = MessageManager.getString("status.fetching_db_refs"); - updateProgressIndicator(msg, startTime); + updateProgressIndicator(MessageManager + .getString("status.loading_cached_pdb_entries"), startTime); loadLocalCachedPDBEntries(); + updateProgressIndicator(null, startTime); + updateProgressIndicator(MessageManager + .getString("status.searching_for_pdb_structures"), + startTime); fetchStructuresMetaData(); populateFilterComboBox(); updateProgressIndicator(null, startTime); @@ -149,7 +153,7 @@ public class StructureChooser extends GStructureChooser pdbRequest.setFieldToSearchBy("(text:"); pdbRequest.setWantedFields(wantedFields); pdbRequest.setSearchTerm(buildQuery(seq) + ")"); - pdbRequest.setAssociatedSequence(seq.getName()); + pdbRequest.setAssociatedSequence(seq); pdbRestCleint = new PDBRestClient(); PDBRestResponse resultList; try @@ -157,6 +161,7 @@ public class StructureChooser extends GStructureChooser resultList = pdbRestCleint.executeRequest(pdbRequest); } catch (Exception e) { + e.printStackTrace(); errors.add(e.getMessage()); continue; } @@ -165,7 +170,7 @@ public class StructureChooser extends GStructureChooser && !resultList.getSearchSummary().isEmpty()) { discoveredStructuresSet.addAll(resultList.getSearchSummary()); - updateSequenceDbRef(seq, resultList.getSearchSummary()); + updateSequencePDBEntries(seq, resultList.getSearchSummary()); } } @@ -188,8 +193,8 @@ public class StructureChooser extends GStructureChooser .setTitle("Structure Chooser - Manual association"); if (errors.size() > 0) { - StringBuilder errorMsg = new StringBuilder( - "Operation was unsucessful due to the following: \n"); + StringBuilder errorMsg = new StringBuilder(); + // "Operation was unsuccessful due to the following: \n"); for (String error : errors) { errorMsg.append(error).append("\n"); @@ -202,8 +207,15 @@ public class StructureChooser extends GStructureChooser public void loadLocalCachedPDBEntries() { - DefaultTableModel tableModel = new DefaultTableModel(); - tableModel.addColumn("Sequence"); + DefaultTableModel tableModel = new DefaultTableModel() + { + @Override + public boolean isCellEditable(int row, int column) + { + return false; + } + }; + tableModel.addColumn("Ref Sequence"); tableModel.addColumn("PDB Id"); tableModel.addColumn("Chain"); tableModel.addColumn("Type"); @@ -216,14 +228,18 @@ public class StructureChooser extends GStructureChooser { for (PDBEntry pdbEntry : seq.getDatasetSequence().getPDBId()) { + String chain = pdbEntry.getChainCode() == null ? "_" : pdbEntry .getChainCode(); - String[] pdbEntryRowData = new String[] - { seq.getDisplayId(false), pdbEntry.getId(), + Object[] pdbEntryRowData = new Object[] + { seq, pdbEntry.getId(), chain, pdbEntry.getType(), pdbEntry.getFile() }; - tableModel.addRow(pdbEntryRowData); + if (pdbEntry.getFile() != null) + { + tableModel.addRow(pdbEntryRowData); + } cachedEntryMap.put(pdbEntry.getId().toLowerCase(), pdbEntry); } @@ -233,7 +249,7 @@ public class StructureChooser extends GStructureChooser } /** - * Update the DBRef entry for a given sequence with values retrieved from + * Update the PDBEntry for a given sequence with values retrieved from * PDBResponseSummary * * @param seq @@ -241,15 +257,20 @@ public class StructureChooser extends GStructureChooser * @param responseSummaries * a collection of PDBResponseSummary */ - public void updateSequenceDbRef(SequenceI seq, + public void updateSequencePDBEntries(SequenceI seq, Collection responseSummaries) { for (PDBResponseSummary response : responseSummaries) { - PDBEntry newEntry = new PDBEntry(); - newEntry.setId(response.getPdbId()); - newEntry.setType(PDBEntry.Type.PDB); - seq.getDatasetSequence().addPDBId(newEntry); + String pdbIdStr = response.getPdbId(); + PDBEntry pdbEntry = cachedEntryMap.get(pdbIdStr.toLowerCase()); + if (pdbEntry == null) + { + pdbEntry = new PDBEntry(); + pdbEntry.setId(pdbIdStr); + pdbEntry.setType(PDBEntry.Type.PDB); + } + seq.getDatasetSequence().addPDBId(pdbEntry); } } @@ -280,7 +301,10 @@ public class StructureChooser extends GStructureChooser { for (PDBEntry entry : seq.getPDBId()) { - seqRefs.add(entry.getId()); + if (isValidSeqName(entry.getId())) + { + seqRefs.add(entry.getId()); + } } } @@ -289,7 +313,10 @@ public class StructureChooser extends GStructureChooser int count = 0; for (DBRefEntry dbRef : seq.getDBRef()) { - seqRefs.add(getDBRefId(dbRef)); + if (isValidSeqName(getDBRefId(dbRef))) + { + seqRefs.add(getDBRefId(dbRef)); + } ++count; if (count > 10) { @@ -317,14 +344,20 @@ public class StructureChooser extends GStructureChooser */ public static boolean isValidSeqName(String seqName) { - String ignoreList = "pdb,uniprot"; + // System.out.println("seqName : " + seqName); + String ignoreList = "pdb,uniprot,swiss-prot"; if (seqName.length() < 3) { return false; } + if (seqName.contains(":")) + { + return false; + } + seqName = seqName.toLowerCase(); for (String ignoredEntry : ignoreList.split(",")) { - if (seqName.equalsIgnoreCase(ignoredEntry)) + if (seqName.contains(ignoredEntry)) { return false; } @@ -367,7 +400,7 @@ public class StructureChooser extends GStructureChooser !chk_invertFilter.isSelected()); pdbRequest.setSearchTerm(buildQuery(seq) + ")"); pdbRequest.setWantedFields(wantedFields); - pdbRequest.setAssociatedSequence(seq.getName()); + pdbRequest.setAssociatedSequence(seq); pdbRestCleint = new PDBRestClient(); PDBRestResponse resultList; try @@ -375,6 +408,7 @@ public class StructureChooser extends GStructureChooser resultList = pdbRestCleint.executeRequest(pdbRequest); } catch (Exception e) { + e.printStackTrace(); errors.add(e.getMessage()); continue; } @@ -409,8 +443,7 @@ public class StructureChooser extends GStructureChooser + totalTime + ")"); if (errors.size() > 0) { - StringBuilder errorMsg = new StringBuilder( - "Operation unsucessful due to the following: \n"); + StringBuilder errorMsg = new StringBuilder(); for (String error : errors) { errorMsg.append(error).append("\n"); @@ -552,6 +585,21 @@ public class StructureChooser extends GStructureChooser AssociateSeqOptions assSeqOpt = (AssociateSeqOptions) idInputAssSeqPanel .getCmb_assSeq().getSelectedItem(); lbl_pdbManualFetchStatus.setIcon(errorImage); + lbl_pdbManualFetchStatus.setToolTipText(""); + if (txt_search.getText().length() > 0) + { + lbl_pdbManualFetchStatus.setToolTipText(JvSwingUtils.wrapTooltip( + true, "No PDB entry found for \'" + txt_search.getText() + + "\'")); + } + + if (errorWarning.length() > 0) + { + lbl_pdbManualFetchStatus.setIcon(warningImage); + lbl_pdbManualFetchStatus.setToolTipText(JvSwingUtils.wrapTooltip( + true, errorWarning.toString())); + } + if (selectedSequences.length == 1 || !assSeqOpt.getName().equalsIgnoreCase( "-Select Associated Seq-")) @@ -560,6 +608,7 @@ public class StructureChooser extends GStructureChooser if (isValidPBDEntry) { btn_view.setEnabled(true); + lbl_pdbManualFetchStatus.setToolTipText(""); lbl_pdbManualFetchStatus.setIcon(goodImage); } } @@ -635,16 +684,21 @@ public class StructureChooser extends GStructureChooser String currentView = selectedFilterOpt.getView(); if (currentView == VIEWS_FILTER) { - int pdbIdCol = PDBRestClient.getPDBIdColumIndex( - lastPdbRequest.getWantedFields(), true); + int pdbIdColIndex = tbl_summary.getColumn( + PDBRestClient.PDBDocField.PDB_ID.getName()).getModelIndex(); + int refSeqColIndex = tbl_summary.getColumn("Ref Sequence") + .getModelIndex(); int[] selectedRows = tbl_summary.getSelectedRows(); PDBEntry[] pdbEntriesToView = new PDBEntry[selectedRows.length]; int count = 0; + ArrayList selectedSeqsToView = new ArrayList(); for (int summaryRow : selectedRows) { - String pdbIdStr = tbl_summary.getValueAt(summaryRow, pdbIdCol) + String pdbIdStr = tbl_summary.getValueAt(summaryRow, pdbIdColIndex) .toString(); - + SequenceI selectedSeq = (SequenceI) tbl_summary.getValueAt( + summaryRow, refSeqColIndex); + selectedSeqsToView.add(selectedSeq); PDBEntry pdbEntry = cachedEntryMap.get(pdbIdStr.toLowerCase()); if (pdbEntry == null) { @@ -654,21 +708,35 @@ public class StructureChooser extends GStructureChooser } pdbEntriesToView[count++] = pdbEntry; } + SequenceI[] selectedSeqs = selectedSeqsToView + .toArray(new SequenceI[selectedSeqsToView.size()]); launchStructureViewer(ap.getStructureSelectionManager(), - pdbEntriesToView, ap, selectedSequences); + pdbEntriesToView, ap, selectedSeqs); } else if(currentView == VIEWS_LOCAL_PDB){ int[] selectedRows = tbl_local_pdb.getSelectedRows(); PDBEntry[] pdbEntriesToView = new PDBEntry[selectedRows.length]; int count = 0; + int pdbIdColIndex = tbl_local_pdb.getColumn( + PDBRestClient.PDBDocField.PDB_ID.getName()).getModelIndex(); + int refSeqColIndex = tbl_local_pdb.getColumn("Ref Sequence") + .getModelIndex(); + ArrayList selectedSeqsToView = new ArrayList(); for (int row : selectedRows) { - String entryKey = tbl_local_pdb.getValueAt(row, 1).toString() + String entryKey = tbl_local_pdb.getValueAt(row, pdbIdColIndex) + .toString() .toLowerCase(); pdbEntriesToView[count++] = cachedEntryMap.get(entryKey); + SequenceI selectedSeq = (SequenceI) tbl_local_pdb.getValueAt(row, + refSeqColIndex); + selectedSeqsToView.add(selectedSeq); + } + SequenceI[] selectedSeqs = selectedSeqsToView + .toArray(new SequenceI[selectedSeqsToView.size()]); launchStructureViewer(ap.getStructureSelectionManager(), - pdbEntriesToView, ap, selectedSequences); + pdbEntriesToView, ap, selectedSeqs); } else if (currentView == VIEWS_ENTER_ID) { @@ -718,17 +786,27 @@ public class StructureChooser extends GStructureChooser private void launchStructureViewer(StructureSelectionManager ssm, PDBEntry[] pdbEntriesToView, AlignmentPanel alignPanel, - SequenceI[] selectedSequences) + SequenceI[] sequences) { StructureViewer sViewer = new StructureViewer(ssm); if (pdbEntriesToView.length > 1) { - sViewer.viewStructures(alignPanel, pdbEntriesToView, - alignPanel.av.collateForPDB(pdbEntriesToView)); + ArrayList seqsMap = new ArrayList(); + for (SequenceI seq : sequences) + { + seqsMap.add(new SequenceI[] + { seq }); + } + SequenceI[][] collatedSeqs = seqsMap.toArray(new SequenceI[0][0]); + sViewer.viewStructures(pdbEntriesToView, collatedSeqs, + alignPanel); + // sViewer.viewStructures(pdbEntriesToView, + // alignPanel.av.collateForPDB(pdbEntriesToView), + // alignPanel); } else { - sViewer.viewStructures(pdbEntriesToView[0], selectedSequences, null, + sViewer.viewStructures(pdbEntriesToView[0], sequences, alignPanel); } } @@ -780,6 +858,7 @@ public class StructureChooser extends GStructureChooser @Override protected void txt_search_ActionPerformed() { + errorWarning.setLength(0); isValidPBDEntry = false; if (txt_search.getText().length() > 0) { @@ -791,7 +870,7 @@ public class StructureChooser extends GStructureChooser pdbRequest.setFieldToSearchBy("(pdb_id:"); pdbRequest.setWantedFields(wantedFields); pdbRequest.setSearchTerm(txt_search.getText() + ")"); - pdbRequest.setAssociatedSequence(selectedSequence.getName()); + pdbRequest.setAssociatedSequence(selectedSequence); pdbRestCleint = new PDBRestClient(); PDBRestResponse resultList; try @@ -799,12 +878,10 @@ public class StructureChooser extends GStructureChooser resultList = pdbRestCleint.executeRequest(pdbRequest); } catch (Exception e) { - JOptionPane.showMessageDialog(this, e.getMessage(), - "PDB Web-service Error", JOptionPane.ERROR_MESSAGE); + errorWarning.append(e.getMessage()); return; } finally { - System.out.println(">>>>> executing finally block"); validateSelections(); } if (resultList.getSearchSummary() != null @@ -835,5 +912,4 @@ public class StructureChooser extends GStructureChooser } } - }