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)
244 this.primaryKeyColumn = getDataColumnByNameOrCode(primaryKeyColumnCode);
245 } catch (Exception e)
249 } catch (IOException e)
256 public int getPrimaryKeyColumIndex(
257 Collection<FTSDataColumnI> wantedFields, boolean hasRefSeq)
261 // If a reference sequence is attached then start counting from 1 else
263 int pdbFieldIndexCounter = hasRefSeq ? 1 : 0;
265 for (FTSDataColumnI field : wantedFields)
267 if (field.isPrimaryKeyColumn())
269 break; // Once PDB Id index is determined exit iteration
271 ++pdbFieldIndexCounter;
273 return pdbFieldIndexCounter;
277 public String getDataColumnsFieldsAsCommaDelimitedString(
278 Collection<FTSDataColumnI> dataColumnFields)
281 if (dataColumnFields != null && !dataColumnFields.isEmpty())
283 StringBuilder returnedFields = new StringBuilder();
284 for (FTSDataColumnI field : dataColumnFields)
286 returnedFields.append(",").append(field.getCode());
288 returnedFields.deleteCharAt(0);
289 result = returnedFields.toString();
295 * Takes a collection of FTSDataColumnI and converts its 'code' values into a
296 * tab delimited string.
298 * @param dataColumnFields
299 * the collection of FTSDataColumnI to process
300 * @return the generated comma delimited string from the supplied
301 * FTSDataColumnI collection
303 public String getDataColumnsFieldsAsTabDelimitedString(
304 Collection<FTSDataColumnI> dataColumnFields)
307 if (dataColumnFields != null && !dataColumnFields.isEmpty())
309 StringBuilder returnedFields = new StringBuilder();
310 for (FTSDataColumnI field : dataColumnFields)
312 returnedFields.append("\t").append(field.getName());
314 returnedFields.deleteCharAt(0);
315 result = returnedFields.toString();
321 public Collection<FTSDataColumnI> getAllFTSDataColumns()
323 if (dataColumns == null || dataColumns.isEmpty())
325 parseDataColumnsConfigFile();
331 public Collection<FTSDataColumnI> getSearchableDataColumns()
333 if (searchableDataColumns == null || searchableDataColumns.isEmpty())
335 parseDataColumnsConfigFile();
337 return searchableDataColumns;
341 public Collection<FTSDataColumnI> getAllDefaulDisplayedDataColumns()
343 if (defaulDisplayedDataColumns == null
344 || defaulDisplayedDataColumns.isEmpty())
346 parseDataColumnsConfigFile();
348 return defaulDisplayedDataColumns;
352 public FTSDataColumnI getPrimaryKeyColumn()
354 if (defaulDisplayedDataColumns == null
355 || defaulDisplayedDataColumns.isEmpty())
357 parseDataColumnsConfigFile();
359 return primaryKeyColumn;
363 public FTSDataColumnI getDataColumnByNameOrCode(String nameOrCode)
366 if (dataColumns == null || dataColumns.isEmpty())
368 parseDataColumnsConfigFile();
370 for (FTSDataColumnI column : dataColumns)
372 if (column.getName().equalsIgnoreCase(nameOrCode)
373 || column.getCode().equalsIgnoreCase(nameOrCode))
378 throw new Exception("Couldn't find data column with name : "
383 public FTSDataColumnGroupI getDataColumnGroupById(String id)
386 if (dataColumns == null || dataColumns.isEmpty())
388 parseDataColumnsConfigFile();
390 for (FTSDataColumnGroupI columnGroup : dataColumnGroups)
392 if (columnGroup.getID().equalsIgnoreCase(id))
397 throw new Exception("Couldn't find data column group with id : " + id);
400 protected String getResourceFile(String fileName)
402 ClassLoader classLoader = getClass().getClassLoader();
406 result = classLoader.getResource(fileName).getFile();
407 } catch (Exception e)
416 public int getDefaultResponsePageSize()
418 return defaultResponsePageSize;