1 package jalview.gui.structurechooser;
3 import java.util.Collection;
4 import java.util.HashSet;
5 import java.util.LinkedHashSet;
7 import java.util.Objects;
9 import java.util.Vector;
11 import javax.swing.JTable;
12 import javax.swing.table.TableModel;
14 import jalview.datamodel.DBRefEntry;
15 import jalview.datamodel.DBRefSource;
16 import jalview.datamodel.PDBEntry;
17 import jalview.datamodel.SequenceI;
18 import jalview.fts.api.FTSData;
19 import jalview.fts.api.FTSDataColumnI;
20 import jalview.fts.api.FTSRestClientI;
21 import jalview.fts.core.FTSDataColumnPreferences;
22 import jalview.fts.core.FTSDataColumnPreferences.PreferenceSource;
23 import jalview.fts.core.FTSRestRequest;
24 import jalview.fts.core.FTSRestResponse;
25 import jalview.fts.service.pdb.PDBFTSRestClient;
26 import jalview.jbgui.GStructureChooser.FilterOption;
29 * logic for querying sources of structural data for structures of sequences
35 public abstract class StructureChooserQuerySource
37 protected FTSRestRequest lastPdbRequest;
39 protected FTSRestClientI pdbRestClient;
41 protected FTSDataColumnPreferences docFieldPrefs;
44 * max length of a GET URL (probably :( )
46 protected static int MAX_QLENGTH = 7820;
48 public StructureChooserQuerySource()
52 public static StructureChooserQuerySource getPDBfts()
54 return new PDBStructureChooserQuerySource();
57 public static StructureChooserQuerySource getTDBfts()
59 return new ThreeDBStructureChooserQuerySource();
62 public FTSDataColumnPreferences getDocFieldPrefs()
67 public void setDocFieldPrefs(FTSDataColumnPreferences docFieldPrefs)
69 this.docFieldPrefs = docFieldPrefs;
72 public FTSDataColumnPreferences getInitialFieldPreferences()
79 * Builds a query string for a given sequences using its DBRef entries
82 * the sequences to build a query for
83 * @return the built query string
86 public abstract String buildQuery(SequenceI seq);
90 * Remove the following special characters from input string +, -, &, !, (, ),
91 * {, }, [, ], ^, ", ~, *, ?, :, \
96 public static String sanitizeSeqName(String seqName)
98 Objects.requireNonNull(seqName);
99 return seqName.replaceAll("\\[\\d*\\]", "")
100 .replaceAll("[^\\dA-Za-z|_]", "").replaceAll("\\s+", "+");
104 * Ensures sequence ref names are not less than 3 characters and does not
105 * contain a database name
110 static boolean isValidSeqName(String seqName)
112 // System.out.println("seqName : " + seqName);
113 String ignoreList = "pdb,uniprot,swiss-prot";
114 if (seqName.length() < 3)
118 if (seqName.contains(":"))
122 seqName = seqName.toLowerCase();
123 for (String ignoredEntry : ignoreList.split(","))
125 if (seqName.contains(ignoredEntry))
133 static String getDBRefId(DBRefEntry dbRef)
135 String ref = dbRef.getAccessionId().replaceAll("GO:", "");
139 static PDBEntry getFindEntry(String id, Vector<PDBEntry> pdbEntries)
141 Objects.requireNonNull(id);
142 Objects.requireNonNull(pdbEntries);
143 PDBEntry foundEntry = null;
144 for (PDBEntry entry : pdbEntries)
146 if (entry.getId().equalsIgnoreCase(id))
155 * FTSRestClient specific query builder to recover associated structure data
156 * records for a sequence
159 * - seq to generate a query for
160 * @param wantedFields
161 * - fields to retrieve
162 * @param selectedFilterOpt
163 * - criterion for ranking results (e.g. resolution)
165 * - sort ascending or descending
169 public abstract FTSRestResponse fetchStructuresMetaData(SequenceI seq,
170 Collection<FTSDataColumnI> wantedFields,
171 FilterOption selectedFilterOpt, boolean b) throws Exception;
174 * FTSRestClient specific query builder to pick top ranked entry from a
175 * fetchStructuresMetaData query
178 * - seq to generate a query for
179 * @param wantedFields
180 * - fields to retrieve
181 * @param selectedFilterOpt
182 * - criterion for ranking results (e.g. resolution)
184 * - sort ascending or descending
188 public abstract FTSRestResponse selectFirstRankedQuery(SequenceI seq,
189 Collection<FTSDataColumnI> wantedFields, String fieldToFilterBy,
190 boolean b) throws Exception;
194 * @param discoveredStructuresSet
195 * @return the table model for the given result set for this engine
197 public TableModel getTableModel(
198 Collection<FTSData> discoveredStructuresSet)
200 return FTSRestResponse.getTableModel(lastPdbRequest,
201 discoveredStructuresSet);
204 public abstract PDBEntry[] collectSelectedRows(JTable restable,
205 int[] selectedRows, List<SequenceI> selectedSeqsToView);