import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;
-import java.util.Hashtable;
import java.util.LinkedHashSet;
import java.util.List;
import javax.swing.JComboBox;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
-import javax.swing.table.DefaultTableModel;
+import javax.swing.table.AbstractTableModel;
/**
* Provides the behaviors for the Structure chooser Panel
private boolean isValidPBDEntry;
- private static Hashtable<String, PDBEntry> cachedEntryMap;
public StructureChooser(SequenceI[] selectedSeqs, SequenceI selectedSeq,
AlignmentPanel ap)
&& !resultList.getSearchSummary().isEmpty())
{
discoveredStructuresSet.addAll(resultList.getSearchSummary());
- updateSequencePDBEntries(seq, resultList.getSearchSummary());
}
}
if (errors.size() > 0)
{
StringBuilder errorMsg = new StringBuilder();
- // "Operation was unsuccessful due to the following: \n");
for (String error : errors)
{
errorMsg.append(error).append("\n");
public void loadLocalCachedPDBEntries()
{
- 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");
- tableModel.addColumn("File");
- cachedEntryMap = new Hashtable<String, PDBEntry>();
+ ArrayList<CachedPDB> entries = new ArrayList<CachedPDB>();
for (SequenceI seq : selectedSequences)
{
if (seq.getDatasetSequence() != null
- && seq.getDatasetSequence().getPDBId() != null)
+ && seq.getDatasetSequence().getAllPDBEntries() != null)
{
- for (PDBEntry pdbEntry : seq.getDatasetSequence().getPDBId())
+ for (PDBEntry pdbEntry : seq.getDatasetSequence().getAllPDBEntries())
{
-
- String chain = pdbEntry.getChainCode() == null ? "_" : pdbEntry
- .getChainCode();
- Object[] pdbEntryRowData = new Object[]
- { seq, pdbEntry.getId(), chain, pdbEntry.getType(),
- pdbEntry.getFile() };
if (pdbEntry.getFile() != null)
{
- tableModel.addRow(pdbEntryRowData);
+ entries.add(new CachedPDB(seq, pdbEntry));
}
- cachedEntryMap.put(pdbEntry.getId().toLowerCase(), pdbEntry);
}
}
}
- tbl_local_pdb.setModel(tableModel);
- }
- /**
- * Update the PDBEntry for a given sequence with values retrieved from
- * PDBResponseSummary
- *
- * @param seq
- * the Sequence to update its DBRef entry
- * @param responseSummaries
- * a collection of PDBResponseSummary
- */
- public void updateSequencePDBEntries(SequenceI seq,
- Collection<PDBResponseSummary> responseSummaries)
- {
- for (PDBResponseSummary response : responseSummaries)
- {
- 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);
- }
+ PDBEntryTableModel tableModelx = new PDBEntryTableModel(entries);
+ tbl_local_pdb.setModel(tableModelx);
}
+
/**
* Builds a query string for a given sequences using its DBRef entries
*
}
}
- if (seq.getPDBId() != null)
+ if (seq.getAllPDBEntries() != null)
{
- for (PDBEntry entry : seq.getPDBId())
+ for (PDBEntry entry : seq.getAllPDBEntries())
{
if (isValidSeqName(entry.getId()))
{
PDBEntry[] pdbEntriesToView = new PDBEntry[selectedRows.length];
int count = 0;
ArrayList<SequenceI> selectedSeqsToView = new ArrayList<SequenceI>();
- for (int summaryRow : selectedRows)
+ for (int row : selectedRows)
{
- String pdbIdStr = tbl_summary.getValueAt(summaryRow, pdbIdColIndex)
+ String pdbIdStr = tbl_summary.getValueAt(row, pdbIdColIndex)
.toString();
- SequenceI selectedSeq = (SequenceI) tbl_summary.getValueAt(
- summaryRow, refSeqColIndex);
+ SequenceI selectedSeq = (SequenceI) tbl_summary.getValueAt(row,
+ refSeqColIndex);
selectedSeqsToView.add(selectedSeq);
- PDBEntry pdbEntry = cachedEntryMap.get(pdbIdStr.toLowerCase());
+ PDBEntry pdbEntry = selectedSeq.getPDBEntry(pdbIdStr);
if (pdbEntry == null)
{
pdbEntry = new PDBEntry();
pdbEntry.setId(pdbIdStr);
pdbEntry.setType(PDBEntry.Type.PDB);
+ selectedSeq.getDatasetSequence().addPDBId(pdbEntry);
}
pdbEntriesToView[count++] = pdbEntry;
}
ArrayList<SequenceI> selectedSeqsToView = new ArrayList<SequenceI>();
for (int row : selectedRows)
{
- String entryKey = tbl_local_pdb.getValueAt(row, pdbIdColIndex)
- .toString().toLowerCase();
- pdbEntriesToView[count++] = cachedEntryMap.get(entryKey);
- SequenceI selectedSeq = (SequenceI) tbl_summary.getValueAt(row,
+ PDBEntry pdbEntry = (PDBEntry) tbl_local_pdb.getValueAt(row,
+ pdbIdColIndex);
+ pdbEntriesToView[count++] = pdbEntry;
+ SequenceI selectedSeq = (SequenceI) tbl_local_pdb.getValueAt(row,
refSeqColIndex);
selectedSeqsToView.add(selectedSeq);
}
}
String pdbIdStr = txt_search.getText();
- PDBEntry pdbEntry = cachedEntryMap.get(pdbIdStr.toLowerCase());
+ PDBEntry pdbEntry = selectedSequence.getPDBEntry(pdbIdStr);
if (pdbEntry == null)
{
pdbEntry = new PDBEntry();
- pdbEntry.setId(txt_search.getText());
+ pdbEntry.setId(pdbIdStr);
pdbEntry.setType(PDBEntry.Type.PDB);
+ selectedSequence.getDatasetSequence().addPDBId(pdbEntry);
}
- selectedSequence.getDatasetSequence().addPDBId(pdbEntry);
PDBEntry[] pdbEntriesToView = new PDBEntry[]
{ pdbEntry };
launchStructureViewer(ap.getStructureSelectionManager(),
}
SequenceI[][] collatedSeqs = seqsMap.toArray(new SequenceI[0][0]);
sViewer.viewStructures(pdbEntriesToView, collatedSeqs, alignPanel);
- // sViewer.viewStructures(pdbEntriesToView,
- // alignPanel.av.collateForPDB(pdbEntriesToView),
- // alignPanel);
}
else
{
cmb_assSeq.removeAllItems();
cmb_assSeq.addItem(new AssociateSeqOptions("-Select Associated Seq-",
null));
- // cmb_assSeq.addItem(new AssociateSeqOptions("Auto Detect", null));
lbl_associateSeq.setVisible(false);
if (selectedSequences.length > 1)
{
}
}
+ public class PDBEntryTableModel extends AbstractTableModel
+ {
+ String[] columns =
+ { "Ref Sequence", "PDB Id", "Chain", "Type", "File" };
+
+ private List<CachedPDB> pdbEntries;
+
+ public PDBEntryTableModel(List<CachedPDB> pdbEntries)
+ {
+ this.pdbEntries = new ArrayList<CachedPDB>(pdbEntries);
+ }
+
+ @Override
+ public String getColumnName(int columnIndex)
+ {
+ return columns[columnIndex];
+ }
+
+ @Override
+ public int getRowCount()
+ {
+ return pdbEntries.size();
+ }
+
+ @Override
+ public int getColumnCount()
+ {
+ return columns.length;
+ }
+
+ @Override
+ public boolean isCellEditable(int row, int column)
+ {
+ return false;
+ }
+
+ @Override
+ public Object getValueAt(int rowIndex, int columnIndex)
+ {
+ Object value = "??";
+ CachedPDB entry = pdbEntries.get(rowIndex);
+ switch (columnIndex)
+ {
+ case 0:
+ value = entry.getSequence();
+ break;
+ case 1:
+ value = entry.getPdbEntry();
+ break;
+ case 2:
+ value = entry.getPdbEntry().getChainCode() == null ? "_" : entry
+ .getPdbEntry().getChainCode();
+ break;
+ case 3:
+ value = entry.getPdbEntry().getType();
+ break;
+ case 4:
+ value = entry.getPdbEntry().getFile();
+ break;
+ }
+ return value;
+ }
+
+ @Override
+ public Class<?> getColumnClass(int columnIndex)
+ {
+ return columnIndex == 0 ? SequenceI.class : PDBEntry.class;
+ }
+
+ public CachedPDB getPDBEntryAt(int row)
+ {
+ return pdbEntries.get(row);
+ }
+
+ }
+
+ private class CachedPDB
+ {
+ private SequenceI sequence;
+
+ private PDBEntry pdbEntry;
+
+ public CachedPDB(SequenceI sequence, PDBEntry pdbEntry)
+ {
+ this.sequence = sequence;
+ this.pdbEntry = pdbEntry;
+ }
+
+ public SequenceI getSequence()
+ {
+ return sequence;
+ }
+
+ public PDBEntry getPdbEntry()
+ {
+ return pdbEntry;
+ }
+
+ }
}