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.IOException;
9 import java.io.InputStream;
10 import java.io.InputStreamReader;
11 import java.util.ArrayList;
12 import java.util.Collection;
13 import java.util.Objects;
16 * Base class providing implementation for common methods defined in
21 * @note implementations MUST be accessed as a singleton.
23 public abstract class FTSRestClient implements FTSRestClientI
25 protected Collection<FTSDataColumnI> dataColumns = new ArrayList<FTSDataColumnI>();
27 protected Collection<FTSDataColumnGroupI> dataColumnGroups = new ArrayList<FTSDataColumnGroupI>();
29 protected Collection<FTSDataColumnI> searchableDataColumns = new ArrayList<FTSDataColumnI>();
31 protected Collection<FTSDataColumnI> defaulDisplayedDataColumns = new ArrayList<FTSDataColumnI>();
33 protected FTSDataColumnI primaryKeyColumn;
35 private String primaryKeyColumnCode = null;
37 private int defaultResponsePageSize = 100;
39 protected FTSRestClient()
44 public void parseDataColumnsConfigFile()
46 String fileName = getColumnDataConfigFileName();
48 InputStream in = getClass().getResourceAsStream(fileName);
50 try (BufferedReader br = new BufferedReader(new InputStreamReader(in)))
53 while ((line = br.readLine()) != null)
55 final String[] lineData = line.split(";");
58 if (lineData.length == 2)
60 if (lineData[0].equalsIgnoreCase("_data_column.primary_key"))
62 primaryKeyColumnCode = lineData[1];
65 .equalsIgnoreCase("_data_column.default_response_page_size"))
67 defaultResponsePageSize = Integer.valueOf(lineData[1]);
70 else if (lineData.length == 3)
72 dataColumnGroups.add(new FTSDataColumnGroupI()
81 public String getName()
87 public int getSortOrder()
89 return Integer.valueOf(lineData[2]);
93 public String toString()
101 return Objects.hash(this.getID(), this.getName(),
102 this.getSortOrder());
106 public boolean equals(Object otherObject)
108 FTSDataColumnGroupI that = (FTSDataColumnGroupI) otherObject;
109 return this.getID().equals(that.getID())
110 && this.getName().equals(that.getName())
111 && this.getSortOrder() == that.getSortOrder();
115 else if (lineData.length > 6)
117 FTSDataColumnI dataCol = new FTSDataColumnI()
120 public String toString()
126 public String getName()
132 public String getCode()
138 public Class<?> getDataColumnClass()
140 String classString = lineData[2];
141 classString = classString.toUpperCase();
146 return Integer.class;
156 public FTSDataColumnGroupI getGroup()
158 FTSDataColumnGroupI group = null;
161 group = getDataColumnGroupById(lineData[3]);
162 } catch (Exception e)
170 public int getMinWidth()
172 return Integer.valueOf(lineData[4]);
176 public int getMaxWidth()
178 return Integer.valueOf(lineData[5]);
182 public int getPreferredWidth()
184 return Integer.valueOf(lineData[6]);
188 public boolean isPrimaryKeyColumn()
190 return getName().equalsIgnoreCase(primaryKeyColumnCode)
191 || getCode().equalsIgnoreCase(primaryKeyColumnCode);
195 public boolean isVisibleByDefault()
197 return Boolean.valueOf(lineData[7]);
201 public boolean isSearchable()
203 return Boolean.valueOf(lineData[8]);
207 public int hashCode()
209 return Objects.hash(this.getName(), this.getCode(),
215 public boolean equals(Object otherObject)
217 FTSDataColumnI that = (FTSDataColumnI) otherObject;
218 return this.getCode().equals(that.getCode())
219 && this.getName().equals(that.getName())
220 && this.getGroup().equals(that.getGroup());
224 dataColumns.add(dataCol);
226 if (dataCol.isSearchable())
228 searchableDataColumns.add(dataCol);
231 if (dataCol.isVisibleByDefault())
233 defaulDisplayedDataColumns.add(dataCol);
241 } catch (Exception e)
248 this.primaryKeyColumn = getDataColumnByNameOrCode(primaryKeyColumnCode);
249 } catch (Exception e)
253 } catch (IOException e)
260 public int getPrimaryKeyColumIndex(
261 Collection<FTSDataColumnI> wantedFields, boolean hasRefSeq)
265 // If a reference sequence is attached then start counting from 1 else
267 int pdbFieldIndexCounter = hasRefSeq ? 1 : 0;
269 for (FTSDataColumnI field : wantedFields)
271 if (field.isPrimaryKeyColumn())
273 break; // Once PDB Id index is determined exit iteration
275 ++pdbFieldIndexCounter;
277 return pdbFieldIndexCounter;
281 public String getDataColumnsFieldsAsCommaDelimitedString(
282 Collection<FTSDataColumnI> dataColumnFields)
285 if (dataColumnFields != null && !dataColumnFields.isEmpty())
287 StringBuilder returnedFields = new StringBuilder();
288 for (FTSDataColumnI field : dataColumnFields)
290 returnedFields.append(",").append(field.getCode());
292 returnedFields.deleteCharAt(0);
293 result = returnedFields.toString();
299 * Takes a collection of FTSDataColumnI and converts its 'code' values into a
300 * tab delimited string.
302 * @param dataColumnFields
303 * the collection of FTSDataColumnI to process
304 * @return the generated comma delimited string from the supplied
305 * FTSDataColumnI collection
307 public String getDataColumnsFieldsAsTabDelimitedString(
308 Collection<FTSDataColumnI> dataColumnFields)
311 if (dataColumnFields != null && !dataColumnFields.isEmpty())
313 StringBuilder returnedFields = new StringBuilder();
314 for (FTSDataColumnI field : dataColumnFields)
316 returnedFields.append("\t").append(field.getName());
318 returnedFields.deleteCharAt(0);
319 result = returnedFields.toString();
325 public Collection<FTSDataColumnI> getAllFTSDataColumns()
327 if (dataColumns == null || dataColumns.isEmpty())
329 parseDataColumnsConfigFile();
335 public Collection<FTSDataColumnI> getSearchableDataColumns()
337 if (searchableDataColumns == null || searchableDataColumns.isEmpty())
339 parseDataColumnsConfigFile();
341 return searchableDataColumns;
345 public Collection<FTSDataColumnI> getAllDefaulDisplayedDataColumns()
347 if (defaulDisplayedDataColumns == null
348 || defaulDisplayedDataColumns.isEmpty())
350 parseDataColumnsConfigFile();
352 return defaulDisplayedDataColumns;
356 public FTSDataColumnI getPrimaryKeyColumn()
358 if (defaulDisplayedDataColumns == null
359 || defaulDisplayedDataColumns.isEmpty())
361 parseDataColumnsConfigFile();
363 return primaryKeyColumn;
367 public FTSDataColumnI getDataColumnByNameOrCode(String nameOrCode)
370 if (dataColumns == null || dataColumns.isEmpty())
372 parseDataColumnsConfigFile();
374 for (FTSDataColumnI column : dataColumns)
376 if (column.getName().equalsIgnoreCase(nameOrCode)
377 || column.getCode().equalsIgnoreCase(nameOrCode))
382 throw new Exception("Couldn't find data column with name : "
387 public FTSDataColumnGroupI getDataColumnGroupById(String id)
390 if (dataColumns == null || dataColumns.isEmpty())
392 parseDataColumnsConfigFile();
394 for (FTSDataColumnGroupI columnGroup : dataColumnGroups)
396 if (columnGroup.getID().equalsIgnoreCase(id))
401 throw new Exception("Couldn't find data column group with id : " + id);
404 protected String getResourceFile(String fileName)
409 result = getClass().getResource(fileName).getFile();
410 } catch (Exception e)
419 public int getDefaultResponsePageSize()
421 return defaultResponsePageSize;