package jalview.gui;
+import jalview.bin.Jalview;
import jalview.datamodel.DBRefEntry;
import jalview.datamodel.DBRefSource;
import jalview.datamodel.PDBEntry;
import jalview.util.MessageManager;
import jalview.ws.dbsources.PDBRestClient;
import jalview.ws.dbsources.PDBRestClient.PDBDocField;
+import jalview.ws.sifts.SiftsSettings;
import jalview.ws.uimodel.PDBRestRequest;
import jalview.ws.uimodel.PDBRestResponse;
import jalview.ws.uimodel.PDBRestResponse.PDBResponseSummary;
import java.util.HashSet;
import java.util.LinkedHashSet;
import java.util.List;
+import java.util.Objects;
import javax.swing.JCheckBox;
import javax.swing.JComboBox;
*
*/
@SuppressWarnings("serial")
-public class StructureChooser extends GStructureChooser
+public class StructureChooser extends GStructureChooser implements
+ IProgressIndicator
{
private boolean structuresDiscovered = false;
*/
public void init()
{
+ if (!Jalview.isHeadlessMode())
+ {
+ progressBar = new ProgressBar(this.statusPanel, this.statusBar);
+ }
+
Thread discoverPDBStructuresThread = new Thread(new Runnable()
{
@Override
if (!isPDBRefsFound && !isUniProtRefsFound)
{
String seqName = seq.getName();
+ seqName = sanitizeSeqName(seqName);
String[] names = seqName.toLowerCase().split("\\|");
for (String name : names)
{
}
/**
+ * Remove the following special characters from input string +, -, &, |, !, (,
+ * ), {, }, [, ], ^, ", ~, *, ?, :, \
+ *
+ * @param seqName
+ * @return
+ */
+ private static String sanitizeSeqName(String seqName)
+ {
+ Objects.requireNonNull(seqName);
+ return seqName.replaceAll("\\[\\d*\\]", "")
+ .replaceAll("[^\\dA-Za-z ]", "").replaceAll("\\s+", "+");
+ }
+
+
+ /**
* Ensures sequence ref names are not less than 3 characters and does not
* contain a database name
*
.getStructureSummaryFields();
Collection<PDBResponseSummary> filteredResponse = new HashSet<PDBResponseSummary>();
HashSet<String> errors = new HashSet<String>();
+ // try
+ // {
+ // PDBDocField fiterField = PDBRestClient
+ // .getPDBDocFieldByCode(fieldToFilterBy);
+ // if (!wantedFields.contains(fiterField))
+ // {
+ // wantedFields.add(fiterField);
+ // }
+ // } catch (Exception e)
+ // {
+ // e.printStackTrace();
+ // }
+
for (SequenceI seq : selectedSequences)
{
PDBRestRequest pdbRequest = new PDBRestRequest();
- pdbRequest.setAllowEmptySeq(false);
- pdbRequest.setResponseSize(1);
- pdbRequest.setFieldToSearchBy("(");
- pdbRequest.setFieldToSortBy(fieldToFilterBy,
- !chk_invertFilter.isSelected());
- pdbRequest.setSearchTerm(buildQuery(seq) + ")");
- pdbRequest.setWantedFields(wantedFields);
- pdbRequest.setAssociatedSequence(seq);
+ if (fieldToFilterBy.equalsIgnoreCase("uniprot_coverage"))
+ {
+ System.out.println(">>>>>> Filtering with uniprot coverate");
+ pdbRequest.setAllowEmptySeq(false);
+ pdbRequest.setResponseSize(1);
+ pdbRequest.setFieldToSearchBy("(");
+ pdbRequest.setSearchTerm(buildQuery(seq) + ")");
+ pdbRequest.setWantedFields(wantedFields);
+ pdbRequest.setAssociatedSequence(seq);
+ pdbRequest.setFacet(true);
+ pdbRequest.setFacetPivot(fieldToFilterBy + ",entry_entity");
+ pdbRequest.setFacetPivotMinCount(1);
+ }
+ else
+ {
+ pdbRequest.setAllowEmptySeq(false);
+ pdbRequest.setResponseSize(1);
+ pdbRequest.setFieldToSearchBy("(");
+ pdbRequest.setFieldToSortBy(fieldToFilterBy,
+ !chk_invertFilter.isSelected());
+ pdbRequest.setSearchTerm(buildQuery(seq) + ")");
+ pdbRequest.setWantedFields(wantedFields);
+ pdbRequest.setAssociatedSequence(seq);
+ }
pdbRestCleint = new PDBRestClient();
PDBRestResponse resultList;
try
{
cmb_filterOption.addItem(new FilterOption("Best Quality",
PDBDocField.OVERALL_QUALITY.getCode(), VIEWS_FILTER));
- cmb_filterOption.addItem(new FilterOption("Best UniProt Coverage",
+ cmb_filterOption.addItem(new FilterOption("Most UniProt Coverage",
PDBDocField.UNIPROT_COVERAGE.getCode(), VIEWS_FILTER));
- cmb_filterOption.addItem(new FilterOption("Highest Resolution",
+ cmb_filterOption.addItem(new FilterOption("Best Resolution",
PDBDocField.RESOLUTION.getCode(), VIEWS_FILTER));
- cmb_filterOption.addItem(new FilterOption("Highest Protein Chain",
+ cmb_filterOption.addItem(new FilterOption("Most Protein Chain",
PDBDocField.PROTEIN_CHAIN_COUNT.getCode(), VIEWS_FILTER));
- cmb_filterOption.addItem(new FilterOption("Highest Bound Molecules",
+ cmb_filterOption.addItem(new FilterOption("Most Bound Molecules",
PDBDocField.BOUND_MOLECULE_COUNT.getCode(), VIEWS_FILTER));
- cmb_filterOption.addItem(new FilterOption("Highest Polymer Residues",
+ cmb_filterOption.addItem(new FilterOption("Most Polymer Residues",
PDBDocField.POLYMER_RESIDUE_COUNT.getCode(), VIEWS_FILTER));
}
cmb_filterOption.addItem(new FilterOption("Enter PDB Id", "-",
@Override
public void ok_ActionPerformed()
{
+ final long progressSessionId = System.currentTimeMillis();
+ final StructureSelectionManager ssm = ap.getStructureSelectionManager();
+ ssm.setProgressIndicator(this);
+ ssm.setProgressSessionId(progressSessionId);
+ new Thread(new Runnable()
+ {
+ @Override
+ public void run()
+ {
FilterOption selectedFilterOpt = ((FilterOption) cmb_filterOption
.getSelectedItem());
String currentView = selectedFilterOpt.getView();
}
SequenceI[] selectedSeqs = selectedSeqsToView
.toArray(new SequenceI[selectedSeqsToView.size()]);
- launchStructureViewer(ap.getStructureSelectionManager(),
- pdbEntriesToView, ap, selectedSeqs);
+ launchStructureViewer(ssm, pdbEntriesToView, ap, selectedSeqs);
}
else if (currentView == VIEWS_LOCAL_PDB)
{
}
SequenceI[] selectedSeqs = selectedSeqsToView
.toArray(new SequenceI[selectedSeqsToView.size()]);
- launchStructureViewer(ap.getStructureSelectionManager(),
- pdbEntriesToView, ap, selectedSeqs);
+ launchStructureViewer(ssm, pdbEntriesToView, ap, selectedSeqs);
}
else if (currentView == VIEWS_ENTER_ID)
{
}
PDBEntry[] pdbEntriesToView = new PDBEntry[] { pdbEntry };
- launchStructureViewer(ap.getStructureSelectionManager(),
- pdbEntriesToView, ap, new SequenceI[] { selectedSequence });
+ launchStructureViewer(ssm, pdbEntriesToView, ap,
+ new SequenceI[] { selectedSequence });
}
else if (currentView == VIEWS_FROM_FILE)
{
jalview.io.AppletFormatAdapter.FILE,
selectedSequence, true, Desktop.instance);
- launchStructureViewer(ap.getStructureSelectionManager(),
- new PDBEntry[] { fileEntry }, ap,
- new SequenceI[] { selectedSequence });
+ launchStructureViewer(ssm, new PDBEntry[] { fileEntry }, ap,
+ new SequenceI[] { selectedSequence });
}
mainFrame.dispose();
+ }
+ }).start();
}
- private void launchStructureViewer(final StructureSelectionManager ssm,
+ private void launchStructureViewer(StructureSelectionManager ssm,
final PDBEntry[] pdbEntriesToView,
- final AlignmentPanel alignPanel, final SequenceI[] sequences)
+ final AlignmentPanel alignPanel, SequenceI[] sequences)
{
+ ssm.setProgressBar("Launching PDB structure viewer..");
final StructureViewer sViewer = new StructureViewer(ssm);
- new jalview.ws.DBRefFetcher(sequences, null, null, null, false)
- .fetchDBRefs(true);
- new Thread(new Runnable()
+ if (SiftsSettings.isMapWithSifts())
{
- @Override
- public void run()
+ for (SequenceI seq : sequences)
{
+ if (seq.getSourceDBRef() == null)
+ {
+ ssm.setProgressBar(null);
+ ssm.setProgressBar("Fetching Database refs..");
+ new jalview.ws.DBRefFetcher(sequences, null, null, null, false)
+ .fetchDBRefs(true);
+ break;
+ }
+ }
+ }
if (pdbEntriesToView.length > 1)
{
ArrayList<SequenceI[]> seqsMap = new ArrayList<SequenceI[]>();
seqsMap.add(new SequenceI[] { seq });
}
SequenceI[][] collatedSeqs = seqsMap.toArray(new SequenceI[0][0]);
+ ssm.setProgressBar(null);
+ ssm.setProgressBar("Fetching PDB Structures for selected entries..");
sViewer.viewStructures(pdbEntriesToView, collatedSeqs, alignPanel);
}
else
{
+ ssm.setProgressBar(null);
+ ssm.setProgressBar("Fetching PDB Structure for "
+ + pdbEntriesToView[0].getId());
sViewer.viewStructures(pdbEntriesToView[0], sequences, alignPanel);
}
- }
- }).start();
}
/**
pdbRequest.setResponseSize(1);
pdbRequest.setFieldToSearchBy("(pdb_id:");
pdbRequest.setWantedFields(wantedFields);
- pdbRequest.setSearchTerm(txt_search.getText() + ")");
+ pdbRequest
+ .setSearchTerm(txt_search.getText().toLowerCase() + ")");
pdbRequest.setAssociatedSequence(selectedSequence);
pdbRestCleint = new PDBRestClient();
PDBRestResponse resultList;
}
}
+
+ private IProgressIndicator progressBar;
+
+ @Override
+ public void setProgressBar(String message, long id)
+ {
+ progressBar.setProgressBar(message, id);
+ }
+
+ @Override
+ public void registerHandler(long id, IProgressIndicatorHandler handler)
+ {
+ progressBar.registerHandler(id, handler);
+ }
+
+ @Override
+ public boolean operationInProgress()
+ {
+ return progressBar.operationInProgress();
+ }
}