1 package jalview.fts.core;
3 import jalview.fts.api.FTSDataColumnI;
4 import jalview.fts.api.FTSDataColumnI.FTSDataColumnGroupI;
5 import jalview.fts.api.FTSRestClientI;
7 import java.io.BufferedReader;
8 import java.io.FileReader;
9 import java.io.IOException;
10 import java.util.ArrayList;
11 import java.util.Collection;
12 import java.util.Objects;
15 * Base class providing implementation for common methods defined in
20 * @note implementations MUST be accessed as a singleton.
22 public abstract class FTSRestClient implements FTSRestClientI
24 protected Collection<FTSDataColumnI> dataColumns = new ArrayList<FTSDataColumnI>();
26 protected Collection<FTSDataColumnGroupI> dataColumnGroups = new ArrayList<FTSDataColumnGroupI>();
28 protected Collection<FTSDataColumnI> searchableDataColumns = new ArrayList<FTSDataColumnI>();
30 protected Collection<FTSDataColumnI> defaulDisplayedDataColumns = new ArrayList<FTSDataColumnI>();
32 protected FTSDataColumnI primaryKeyColumn;
34 private String primaryKeyColumnCode = null;
36 private int defaultResponsePageSize = 100;
38 protected FTSRestClient()
43 public void parseDataColumnsConfigFile()
45 String fileName = getColumnDataConfigFileName();
46 try (BufferedReader br = new BufferedReader(new FileReader(fileName)))
49 while ((line = br.readLine()) != null)
51 final String[] lineData = line.split(";");
54 if (lineData.length == 2)
56 if (lineData[0].equalsIgnoreCase("_data_column.primary_key"))
58 primaryKeyColumnCode = lineData[1];
61 .equalsIgnoreCase("_data_column.default_response_page_size"))
63 defaultResponsePageSize = Integer.valueOf(lineData[1]);
66 else if (lineData.length == 3)
68 dataColumnGroups.add(new FTSDataColumnGroupI()
77 public String getName()
83 public int getSortOrder()
85 return Integer.valueOf(lineData[2]);
89 public String toString()
97 return Objects.hash(this.getID(), this.getName(),
102 public boolean equals(Object otherObject)
104 FTSDataColumnGroupI that = (FTSDataColumnGroupI) otherObject;
105 return this.getID().equals(that.getID())
106 && this.getName().equals(that.getName())
107 && this.getSortOrder() == that.getSortOrder();
111 else if (lineData.length > 6)
113 FTSDataColumnI dataCol = new FTSDataColumnI()
116 public String toString()
122 public String getName()
128 public String getCode()
134 public Class<?> getDataColumnClass()
136 String classString = lineData[2];
137 classString = classString.toUpperCase();
142 return Integer.class;
152 public FTSDataColumnGroupI getGroup()
154 FTSDataColumnGroupI group = null;
157 group = getDataColumnGroupById(lineData[3]);
158 } catch (Exception e)
166 public int getMinWidth()
168 return Integer.valueOf(lineData[4]);
172 public int getMaxWidth()
174 return Integer.valueOf(lineData[5]);
178 public int getPreferredWidth()
180 return Integer.valueOf(lineData[6]);
184 public boolean isPrimaryKeyColumn()
186 return getName().equalsIgnoreCase(primaryKeyColumnCode)
187 || getCode().equalsIgnoreCase(primaryKeyColumnCode);
191 public boolean isVisibleByDefault()
193 return Boolean.valueOf(lineData[7]);
197 public boolean isSearchable()
199 return Boolean.valueOf(lineData[8]);
203 public int hashCode()
205 return Objects.hash(this.getName(), this.getCode(),
211 public boolean equals(Object otherObject)
213 FTSDataColumnI that = (FTSDataColumnI) otherObject;
214 return this.getCode().equals(that.getCode())
215 && this.getName().equals(that.getName())
216 && this.getGroup().equals(that.getGroup());
220 dataColumns.add(dataCol);
222 if (dataCol.isSearchable())
224 searchableDataColumns.add(dataCol);
227 if (dataCol.isVisibleByDefault())
229 defaulDisplayedDataColumns.add(dataCol);
237 } catch (Exception e)
242 } catch (IOException e)
249 public int getPrimaryKeyColumIndex(
250 Collection<FTSDataColumnI> wantedFields, boolean hasRefSeq)
254 // If a reference sequence is attached then start counting from 1 else
256 int pdbFieldIndexCounter = hasRefSeq ? 1 : 0;
258 for (FTSDataColumnI field : wantedFields)
260 if (field.isPrimaryKeyColumn())
262 break; // Once PDB Id index is determined exit iteration
264 ++pdbFieldIndexCounter;
266 return pdbFieldIndexCounter;
270 public String getDataColumnsFieldsAsCommaDelimitedString(
271 Collection<FTSDataColumnI> dataColumnFields)
274 if (dataColumnFields != null && !dataColumnFields.isEmpty())
276 StringBuilder returnedFields = new StringBuilder();
277 for (FTSDataColumnI field : dataColumnFields)
279 returnedFields.append(",").append(field.getCode());
281 returnedFields.deleteCharAt(0);
282 result = returnedFields.toString();
288 * Takes a collection of FTSDataColumnI and converts its 'code' values into a
289 * tab delimited string.
291 * @param dataColumnFields
292 * the collection of FTSDataColumnI to process
293 * @return the generated comma delimited string from the supplied
294 * FTSDataColumnI collection
296 public String getDataColumnsFieldsAsTabDelimitedString(
297 Collection<FTSDataColumnI> dataColumnFields)
300 if (dataColumnFields != null && !dataColumnFields.isEmpty())
302 StringBuilder returnedFields = new StringBuilder();
303 for (FTSDataColumnI field : dataColumnFields)
305 returnedFields.append("\t").append(field.getName());
307 returnedFields.deleteCharAt(0);
308 result = returnedFields.toString();
314 public Collection<FTSDataColumnI> getAllFTSDataColumns()
316 if (dataColumns == null || dataColumns.isEmpty())
318 parseDataColumnsConfigFile();
324 public Collection<FTSDataColumnI> getSearchableDataColumns()
326 if (searchableDataColumns == null || searchableDataColumns.isEmpty())
328 parseDataColumnsConfigFile();
330 return searchableDataColumns;
334 public Collection<FTSDataColumnI> getAllDefaulDisplayedDataColumns()
336 if (defaulDisplayedDataColumns == null
337 || defaulDisplayedDataColumns.isEmpty())
339 parseDataColumnsConfigFile();
341 return defaulDisplayedDataColumns;
345 public FTSDataColumnI getPrimaryKeyColumn()
347 return primaryKeyColumn;
351 public FTSDataColumnI getDataColumnByNameOrCode(String nameOrCode)
354 if (dataColumns == null || dataColumns.isEmpty())
356 parseDataColumnsConfigFile();
358 for (FTSDataColumnI column : dataColumns)
360 if (column.getName().equalsIgnoreCase(nameOrCode)
361 || column.getCode().equalsIgnoreCase(nameOrCode))
366 throw new Exception("Couldn't find data column with name : "
371 public FTSDataColumnGroupI getDataColumnGroupById(String id)
374 if (dataColumns == null || dataColumns.isEmpty())
376 parseDataColumnsConfigFile();
378 for (FTSDataColumnGroupI columnGroup : dataColumnGroups)
380 if (columnGroup.getID().equalsIgnoreCase(id))
385 throw new Exception("Couldn't find data column group with id : " + id);
388 protected String getResourceFile(String fileName)
390 ClassLoader classLoader = getClass().getClassLoader();
394 result = classLoader.getResource(fileName).getFile();
395 } catch (Exception e)
404 public int getDefaultResponsePageSize()
406 return defaultResponsePageSize;