import jalview.fts.core.FTSRestRequest;
import jalview.fts.core.FTSRestResponse;
import jalview.fts.service.pdb.PDBFTSRestClient;
+import jalview.io.DataSourceType;
import jalview.jbgui.GStructureChooser;
import jalview.structure.StructureMapping;
import jalview.structure.StructureSelectionManager;
import javax.swing.JCheckBox;
import javax.swing.JComboBox;
import javax.swing.JLabel;
-import javax.swing.JOptionPane;
import javax.swing.table.AbstractTableModel;
/**
*
*/
@SuppressWarnings("serial")
-public class StructureChooser extends GStructureChooser implements
- IProgressIndicator
+public class StructureChooser extends GStructureChooser
+ implements IProgressIndicator
{
+ private static int MAX_QLENGTH = 7820;
+
private SequenceI selectedSequence;
private SequenceI[] selectedSequences;
private boolean isValidPBDEntry;
+ private boolean cachedPDBExists;
+
public StructureChooser(SequenceI[] selectedSeqs, SequenceI selectedSeq,
AlignmentPanel ap)
{
}
// ensure a filter option is in force for search
- populateFilterComboBox(true);
+ populateFilterComboBox(true, cachedPDBExists);
Thread discoverPDBStructuresThread = new Thread(new Runnable()
{
@Override
.getString("status.loading_cached_pdb_entries"), startTime);
loadLocalCachedPDBEntries();
updateProgressIndicator(null, startTime);
- updateProgressIndicator(MessageManager
- .getString("status.searching_for_pdb_structures"),
- startTime);
+ updateProgressIndicator(MessageManager.getString(
+ "status.searching_for_pdb_structures"), startTime);
fetchStructuresMetaData();
// revise filter options if no results were found
- populateFilterComboBox(isStructuresDiscovered());
+ populateFilterComboBox(isStructuresDiscovered(), cachedPDBExists);
updateProgressIndicator(null, startTime);
mainFrame.setVisible(true);
updateCurrentView();
if (discoveredStructuresSet != null
&& !discoveredStructuresSet.isEmpty())
{
- getResultTable().setModel(
- FTSRestResponse.getTableModel(lastPdbRequest,
- discoveredStructuresSet));
+ getResultTable().setModel(FTSRestResponse
+ .getTableModel(lastPdbRequest, discoveredStructuresSet));
noOfStructuresFound = discoveredStructuresSet.size();
mainFrame.setTitle(MessageManager.formatMessage(
"label.structure_chooser_no_of_structures",
{
errorMsg.append(error).append("\n");
}
- JOptionPane.showMessageDialog(this, errorMsg.toString(),
+ JvOptionPane.showMessageDialog(this, errorMsg.toString(),
MessageManager.getString("label.pdb_web-service_error"),
- JOptionPane.ERROR_MESSAGE);
+ JvOptionPane.ERROR_MESSAGE);
}
}
}
}
}
}
-
+ cachedPDBExists = !entries.isEmpty();
PDBEntryTableModel tableModelx = new PDBEntryTableModel(entries);
tbl_local_pdb.setModel(tableModelx);
}
StringBuilder queryBuilder = new StringBuilder();
Set<String> seqRefs = new LinkedHashSet<String>();
- if (seq.getAllPDBEntries() != null)
+ if (seq.getAllPDBEntries() != null
+ && queryBuilder.length() < MAX_QLENGTH)
{
for (PDBEntry entry : seq.getAllPDBEntries())
{
if (isValidSeqName(entry.getId()))
{
- queryBuilder.append("pdb_id:")
- .append(entry.getId().toLowerCase())
+ queryBuilder.append("pdb_id:").append(entry.getId().toLowerCase())
.append(" OR ");
isPDBRefsFound = true;
- // seqRefs.add(entry.getId());
}
}
}
{
for (DBRefEntry dbRef : seq.getDBRefs())
{
- if (isValidSeqName(getDBRefId(dbRef)))
+ if (isValidSeqName(getDBRefId(dbRef))
+ && queryBuilder.length() < MAX_QLENGTH)
{
if (dbRef.getSource().equalsIgnoreCase(DBRefSource.UNIPROT))
{
queryBuilder.append("uniprot_accession:")
- .append(getDBRefId(dbRef))
- .append(" OR ");
+ .append(getDBRefId(dbRef)).append(" OR ");
queryBuilder.append("uniprot_id:").append(getDBRefId(dbRef))
.append(" OR ");
isUniProtRefsFound = true;
{
queryBuilder.append("pdb_id:")
- .append(getDBRefId(dbRef).toLowerCase())
- .append(" OR ");
+ .append(getDBRefId(dbRef).toLowerCase()).append(" OR ");
isPDBRefsFound = true;
}
else
.replaceAll("[^\\dA-Za-z|_]", "").replaceAll("\\s+", "+");
}
-
/**
* Ensures sequence ref names are not less than 3 characters and does not
* contain a database name
Collection<FTSData> reorderedStructuresSet = new LinkedHashSet<FTSData>();
reorderedStructuresSet.addAll(filteredResponse);
reorderedStructuresSet.addAll(discoveredStructuresSet);
- getResultTable().setModel(
- FTSRestResponse.getTableModel(
- lastPdbRequest, reorderedStructuresSet));
+ getResultTable().setModel(FTSRestResponse
+ .getTableModel(lastPdbRequest, reorderedStructuresSet));
FTSRestResponse.configureTableColumn(getResultTable(),
wantedFields, tempUserPrefs);
{
errorMsg.append(error).append("\n");
}
- JOptionPane.showMessageDialog(
- null,
- errorMsg.toString(),
+ JvOptionPane.showMessageDialog(null, errorMsg.toString(),
MessageManager.getString("label.pdb_web-service_error"),
- JOptionPane.ERROR_MESSAGE);
+ JvOptionPane.ERROR_MESSAGE);
}
}
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",
- selectedSequence.getDisplayId(false)));
+ chooser.setDialogTitle(
+ MessageManager.formatMessage("label.select_pdb_file_for",
+ selectedSequence.getDisplayId(false)));
chooser.setToolTipText(MessageManager.formatMessage(
"label.load_pdb_file_associate_with_sequence",
selectedSequence.getDisplayId(false)));
* Populates the filter combo-box options dynamically depending on discovered
* structures
*/
- protected void populateFilterComboBox(boolean haveData)
+ protected void populateFilterComboBox(boolean haveData,
+ boolean cachedPDBExists)
{
/*
* temporarily suspend the change listener behaviour
if (haveData)
{
cmb_filterOption.addItem(new FilterOption("Best Quality",
- "overall_quality", VIEWS_FILTER));
+ "overall_quality", VIEWS_FILTER, false));
cmb_filterOption.addItem(new FilterOption("Best Resolution",
- "resolution", VIEWS_FILTER));
+ "resolution", VIEWS_FILTER, false));
cmb_filterOption.addItem(new FilterOption("Most Protein Chain",
- "number_of_protein_chains", VIEWS_FILTER));
+ "number_of_protein_chains", VIEWS_FILTER, false));
cmb_filterOption.addItem(new FilterOption("Most Bound Molecules",
- "number_of_bound_molecules", VIEWS_FILTER));
+ "number_of_bound_molecules", VIEWS_FILTER, false));
cmb_filterOption.addItem(new FilterOption("Most Polymer Residues",
- "number_of_polymer_residues", VIEWS_FILTER));
+ "number_of_polymer_residues", VIEWS_FILTER, true));
+ }
+ cmb_filterOption.addItem(
+ new FilterOption("Enter PDB Id", "-", VIEWS_ENTER_ID, false));
+ cmb_filterOption.addItem(
+ new FilterOption("From File", "-", VIEWS_FROM_FILE, false));
+
+ if (cachedPDBExists)
+ {
+ FilterOption cachedOption = new FilterOption("Cached PDB Entries",
+ "-", VIEWS_LOCAL_PDB, false);
+ cmb_filterOption.addItem(cachedOption);
+ cmb_filterOption.setSelectedItem(cachedOption);
}
- cmb_filterOption.addItem(new FilterOption("Enter PDB Id", "-",
- VIEWS_ENTER_ID));
- cmb_filterOption.addItem(new FilterOption("From File", "-",
- VIEWS_FROM_FILE));
- cmb_filterOption.addItem(new FilterOption("Cached PDB Entries", "-",
- VIEWS_LOCAL_PDB));
cmb_filterOption.addItemListener(this);
}
lbl_pdbManualFetchStatus.setToolTipText("");
if (txt_search.getText().length() > 0)
{
- lbl_pdbManualFetchStatus
- .setToolTipText(JvSwingUtils.wrapTooltip(true, MessageManager
- .formatMessage("info.no_pdb_entry_found_for",
- txt_search.getText())));
+ lbl_pdbManualFetchStatus.setToolTipText(JvSwingUtils.wrapTooltip(true,
+ MessageManager.formatMessage("info.no_pdb_entry_found_for",
+ txt_search.getText())));
}
if (errorWarning.length() > 0)
{
lbl_pdbManualFetchStatus.setIcon(warningImage);
- lbl_pdbManualFetchStatus.setToolTipText(JvSwingUtils.wrapTooltip(
- true, errorWarning.toString()));
+ lbl_pdbManualFetchStatus.setToolTipText(
+ JvSwingUtils.wrapTooltip(true, errorWarning.toString()));
}
- if (selectedSequences.length == 1
- || !assSeqOpt.getName().equalsIgnoreCase(
- "-Select Associated Seq-"))
+ if (selectedSequences.length == 1 || !assSeqOpt.getName()
+ .equalsIgnoreCase("-Select Associated Seq-"))
{
txt_search.setEnabled(true);
if (isValidPBDEntry)
AssociateSeqOptions assSeqOpt = (AssociateSeqOptions) fileChooserAssSeqPanel
.getCmb_assSeq().getSelectedItem();
lbl_fromFileStatus.setIcon(errorImage);
- if (selectedSequences.length == 1
- || (assSeqOpt != null && !assSeqOpt.getName().equalsIgnoreCase(
- "-Select Associated Seq-")))
+ if (selectedSequences.length == 1 || (assSeqOpt != null && !assSeqOpt
+ .getName().equalsIgnoreCase("-Select Associated Seq-")))
{
btn_pdbFromFile.setEnabled(true);
if (selectedPdbFileName != null && selectedPdbFileName.length() > 0)
int[] selectedRows = getResultTable().getSelectedRows();
PDBEntry[] pdbEntriesToView = new PDBEntry[selectedRows.length];
int count = 0;
- ArrayList<SequenceI> selectedSeqsToView = new ArrayList<SequenceI>();
+ List<SequenceI> selectedSeqsToView = new ArrayList<SequenceI>();
for (int row : selectedRows)
{
- String pdbIdStr = getResultTable().getValueAt(row,
- pdbIdColIndex).toString();
+ String pdbIdStr = getResultTable()
+ .getValueAt(row, pdbIdColIndex).toString();
SequenceI selectedSeq = (SequenceI) getResultTable()
.getValueAt(row, refSeqColIndex);
selectedSeqsToView.add(selectedSeq);
.getModelIndex();
int refSeqColIndex = tbl_local_pdb.getColumn("Ref Sequence")
.getModelIndex();
- ArrayList<SequenceI> selectedSeqsToView = new ArrayList<SequenceI>();
+ List<SequenceI> selectedSeqsToView = new ArrayList<SequenceI>();
for (int row : selectedRows)
{
PDBEntry pdbEntry = (PDBEntry) tbl_local_pdb.getValueAt(row,
pdbIdColIndex);
pdbEntriesToView[count++] = pdbEntry;
- SequenceI selectedSeq = (SequenceI) tbl_local_pdb.getValueAt(
- row, refSeqColIndex);
+ SequenceI selectedSeq = (SequenceI) tbl_local_pdb
+ .getValueAt(row, refSeqColIndex);
selectedSeqsToView.add(selectedSeq);
}
SequenceI[] selectedSeqs = selectedSeqsToView
PDBEntry[] pdbEntriesToView = new PDBEntry[] { pdbEntry };
launchStructureViewer(ssm, pdbEntriesToView, ap,
- new SequenceI[] { selectedSequence });
+ new SequenceI[]
+ { selectedSequence });
}
else if (currentView == VIEWS_FROM_FILE)
{
}
PDBEntry fileEntry = new AssociatePdbFileWithSeq()
.associatePdbWithSeq(selectedPdbFileName,
- jalview.io.AppletFormatAdapter.FILE,
- selectedSequence, true, Desktop.instance);
+ DataSourceType.FILE, selectedSequence, true,
+ Desktop.instance);
launchStructureViewer(ssm, new PDBEntry[] { fileEntry }, ap,
- new SequenceI[] { selectedSequence });
+ new SequenceI[]
+ { selectedSequence });
}
closeAction(preferredHeight);
}
}
if (seq.getPrimaryDBRefs().size() == 0)
{
- seqsWithoutSourceDBRef.add(seq);
- continue;
- }
+ seqsWithoutSourceDBRef.add(seq);
+ continue;
+ }
}
if (!seqsWithoutSourceDBRef.isEmpty())
{
}
SequenceI[][] collatedSeqs = seqsMap.toArray(new SequenceI[0][0]);
ssm.setProgressBar(null);
- ssm.setProgressBar(MessageManager
- .getString("status.fetching_3d_structures_for_selected_entries"));
+ ssm.setProgressBar(MessageManager.getString(
+ "status.fetching_3d_structures_for_selected_entries"));
sViewer.viewStructures(pdbEntriesToView, collatedSeqs, alignPanel);
}
else
*/
@Override
public void populateCmbAssociateSeqOptions(
- JComboBox<AssociateSeqOptions> cmb_assSeq, JLabel lbl_associateSeq)
+ JComboBox<AssociateSeqOptions> cmb_assSeq,
+ JLabel lbl_associateSeq)
{
cmb_assSeq.removeAllItems();
- cmb_assSeq.addItem(new AssociateSeqOptions("-Select Associated Seq-",
- null));
+ cmb_assSeq.addItem(
+ new AssociateSeqOptions("-Select Associated Seq-", null));
lbl_associateSeq.setVisible(false);
if (selectedSequences.length > 1)
{
pdbRequest.setResponseSize(1);
pdbRequest.setFieldToSearchBy("(pdb_id:");
pdbRequest.setWantedFields(wantedFields);
- pdbRequest
-.setSearchTerm(searchTerm + ")");
+ pdbRequest.setSearchTerm(searchTerm + ")");
pdbRequest.setAssociatedSequence(selectedSequence);
pdbRestCleint = PDBFTSRestClient.getInstance();
wantedFields.add(pdbRestCleint.getPrimaryKeyColumn());
public void run()
{
fetchStructuresMetaData();
- filterResultSet(((FilterOption) cmb_filterOption
- .getSelectedItem()).getValue());
+ filterResultSet(
+ ((FilterOption) cmb_filterOption.getSelectedItem())
+ .getValue());
}
});
refreshThread.start();
public class PDBEntryTableModel extends AbstractTableModel
{
- String[] columns = { "Ref Sequence", "PDB Id", "Chain", "Type", "File" };
+ String[] columns = { "Ref Sequence", "PDB Id", "Chain", "Type",
+ "File" };
private List<CachedPDB> pdbEntries;
value = entry.getPdbEntry();
break;
case 2:
- value = entry.getPdbEntry().getChainCode() == null ? "_" : entry
- .getPdbEntry().getChainCode();
+ value = entry.getPdbEntry().getChainCode() == null ? "_"
+ : entry.getPdbEntry().getChainCode();
break;
case 3:
value = entry.getPdbEntry().getType();