X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fgui%2Fstructurechooser%2FStructureChooserQuerySource.java;fp=src%2Fjalview%2Fgui%2Fstructurechooser%2FStructureChooserQuerySource.java;h=9861b1a5f3abfa7f5f4d37cd49aa1de019749f27;hb=55ea4d59b2f4ce51f8310047dd1f8898697dde0c;hp=0000000000000000000000000000000000000000;hpb=97a1f5a89f698f1117dbd6606c5a24089b582440;p=jalview.git diff --git a/src/jalview/gui/structurechooser/StructureChooserQuerySource.java b/src/jalview/gui/structurechooser/StructureChooserQuerySource.java new file mode 100644 index 0000000..9861b1a --- /dev/null +++ b/src/jalview/gui/structurechooser/StructureChooserQuerySource.java @@ -0,0 +1,207 @@ +package jalview.gui.structurechooser; + +import java.util.Collection; +import java.util.HashSet; +import java.util.LinkedHashSet; +import java.util.List; +import java.util.Objects; +import java.util.Set; +import java.util.Vector; + +import javax.swing.JTable; +import javax.swing.table.TableModel; + +import jalview.datamodel.DBRefEntry; +import jalview.datamodel.DBRefSource; +import jalview.datamodel.PDBEntry; +import jalview.datamodel.SequenceI; +import jalview.fts.api.FTSData; +import jalview.fts.api.FTSDataColumnI; +import jalview.fts.api.FTSRestClientI; +import jalview.fts.core.FTSDataColumnPreferences; +import jalview.fts.core.FTSDataColumnPreferences.PreferenceSource; +import jalview.fts.core.FTSRestRequest; +import jalview.fts.core.FTSRestResponse; +import jalview.fts.service.pdb.PDBFTSRestClient; +import jalview.jbgui.GStructureChooser.FilterOption; + +/** + * logic for querying sources of structural data for structures of sequences + * + * @author jprocter + * + * @param + */ +public abstract class StructureChooserQuerySource +{ + protected FTSRestRequest lastPdbRequest; + + protected FTSRestClientI pdbRestClient; + + protected FTSDataColumnPreferences docFieldPrefs; + + /** + * max length of a GET URL (probably :( ) + */ + protected static int MAX_QLENGTH = 7820; + + public StructureChooserQuerySource() + { + } + + public static StructureChooserQuerySource getPDBfts() + { + return new PDBStructureChooserQuerySource(); + } + + public static StructureChooserQuerySource getTDBfts() + { + return new ThreeDBStructureChooserQuerySource(); + } + + public FTSDataColumnPreferences getDocFieldPrefs() + { + return docFieldPrefs; + } + + public void setDocFieldPrefs(FTSDataColumnPreferences docFieldPrefs) + { + this.docFieldPrefs = docFieldPrefs; + } + + public FTSDataColumnPreferences getInitialFieldPreferences() + { + return docFieldPrefs; + } + + + /** + * Builds a query string for a given sequences using its DBRef entries + * + * @param seq + * the sequences to build a query for + * @return the built query string + */ + + public abstract String buildQuery(SequenceI seq); + + + /** + * Remove the following special characters from input string +, -, &, !, (, ), + * {, }, [, ], ^, ", ~, *, ?, :, \ + * + * @param seqName + * @return + */ + public 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 + * + * @param seqName + * @return + */ + static boolean isValidSeqName(String seqName) + { + // 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.contains(ignoredEntry)) + { + return false; + } + } + return true; + } + + static String getDBRefId(DBRefEntry dbRef) + { + String ref = dbRef.getAccessionId().replaceAll("GO:", ""); + return ref; + } + + static PDBEntry getFindEntry(String id, Vector pdbEntries) + { + Objects.requireNonNull(id); + Objects.requireNonNull(pdbEntries); + PDBEntry foundEntry = null; + for (PDBEntry entry : pdbEntries) + { + if (entry.getId().equalsIgnoreCase(id)) + { + return entry; + } + } + return foundEntry; + } + + /** + * FTSRestClient specific query builder to recover associated structure data + * records for a sequence + * + * @param seq + * - seq to generate a query for + * @param wantedFields + * - fields to retrieve + * @param selectedFilterOpt + * - criterion for ranking results (e.g. resolution) + * @param b + * - sort ascending or descending + * @return + * @throws Exception + */ + public abstract FTSRestResponse fetchStructuresMetaData(SequenceI seq, + Collection wantedFields, + FilterOption selectedFilterOpt, boolean b) throws Exception; + + /** + * FTSRestClient specific query builder to pick top ranked entry from a + * fetchStructuresMetaData query + * + * @param seq + * - seq to generate a query for + * @param wantedFields + * - fields to retrieve + * @param selectedFilterOpt + * - criterion for ranking results (e.g. resolution) + * @param b + * - sort ascending or descending + * @return + * @throws Exception + */ + public abstract FTSRestResponse selectFirstRankedQuery(SequenceI seq, + Collection wantedFields, String fieldToFilterBy, + boolean b) throws Exception; + + /** + * + * @param discoveredStructuresSet + * @return the table model for the given result set for this engine + */ + public TableModel getTableModel( + Collection discoveredStructuresSet) + { + return FTSRestResponse.getTableModel(lastPdbRequest, + discoveredStructuresSet); + } + + public abstract PDBEntry[] collectSelectedRows(JTable restable, + int[] selectedRows, List selectedSeqsToView); + +} \ No newline at end of file