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()
134 return lineData[1].split("\\|")[0];
138 public String getAltCode()
140 return lineData[1].split("\\|").length > 1 ? lineData[1]
141 .split("\\|")[1] : getCode();
145 public Class<?> getDataColumnClass()
147 String classString = lineData[2];
148 classString = classString.toUpperCase();
153 return Integer.class;
163 public FTSDataColumnGroupI getGroup()
165 FTSDataColumnGroupI group = null;
168 group = getDataColumnGroupById(lineData[3]);
169 } catch (Exception e)
177 public int getMinWidth()
179 return Integer.valueOf(lineData[4]);
183 public int getMaxWidth()
185 return Integer.valueOf(lineData[5]);
189 public int getPreferredWidth()
191 return Integer.valueOf(lineData[6]);
195 public boolean isPrimaryKeyColumn()
197 return getName().equalsIgnoreCase(primaryKeyColumnCode)
198 || getCode().equalsIgnoreCase(primaryKeyColumnCode);
202 public boolean isVisibleByDefault()
204 return Boolean.valueOf(lineData[7]);
208 public boolean isSearchable()
210 return Boolean.valueOf(lineData[8]);
214 public int hashCode()
216 return Objects.hash(this.getName(), this.getCode(),
222 public boolean equals(Object otherObject)
224 FTSDataColumnI that = (FTSDataColumnI) otherObject;
225 return this.getCode().equals(that.getCode())
226 && this.getName().equals(that.getName())
227 && this.getGroup().equals(that.getGroup());
231 dataColumns.add(dataCol);
233 if (dataCol.isSearchable())
235 searchableDataColumns.add(dataCol);
238 if (dataCol.isVisibleByDefault())
240 defaulDisplayedDataColumns.add(dataCol);
248 } catch (Exception e)
255 this.primaryKeyColumn = getDataColumnByNameOrCode(primaryKeyColumnCode);
256 } catch (Exception e)
260 } catch (IOException e)
267 public int getPrimaryKeyColumIndex(
268 Collection<FTSDataColumnI> wantedFields, boolean hasRefSeq)
272 // If a reference sequence is attached then start counting from 1 else
274 int pdbFieldIndexCounter = hasRefSeq ? 1 : 0;
276 for (FTSDataColumnI field : wantedFields)
278 if (field.isPrimaryKeyColumn())
280 break; // Once PDB Id index is determined exit iteration
282 ++pdbFieldIndexCounter;
284 return pdbFieldIndexCounter;
288 public String getDataColumnsFieldsAsCommaDelimitedString(
289 Collection<FTSDataColumnI> dataColumnFields)
292 if (dataColumnFields != null && !dataColumnFields.isEmpty())
294 StringBuilder returnedFields = new StringBuilder();
295 for (FTSDataColumnI field : dataColumnFields)
297 returnedFields.append(",").append(field.getCode());
299 returnedFields.deleteCharAt(0);
300 result = returnedFields.toString();
306 * Takes a collection of FTSDataColumnI and converts its 'code' values into a
307 * tab delimited string.
309 * @param dataColumnFields
310 * the collection of FTSDataColumnI to process
311 * @return the generated comma delimited string from the supplied
312 * FTSDataColumnI collection
314 public String getDataColumnsFieldsAsTabDelimitedString(
315 Collection<FTSDataColumnI> dataColumnFields)
318 if (dataColumnFields != null && !dataColumnFields.isEmpty())
320 StringBuilder returnedFields = new StringBuilder();
321 for (FTSDataColumnI field : dataColumnFields)
323 returnedFields.append("\t").append(field.getName());
325 returnedFields.deleteCharAt(0);
326 result = returnedFields.toString();
332 public Collection<FTSDataColumnI> getAllFTSDataColumns()
334 if (dataColumns == null || dataColumns.isEmpty())
336 parseDataColumnsConfigFile();
342 public Collection<FTSDataColumnI> getSearchableDataColumns()
344 if (searchableDataColumns == null || searchableDataColumns.isEmpty())
346 parseDataColumnsConfigFile();
348 return searchableDataColumns;
352 public Collection<FTSDataColumnI> getAllDefaulDisplayedDataColumns()
354 if (defaulDisplayedDataColumns == null
355 || defaulDisplayedDataColumns.isEmpty())
357 parseDataColumnsConfigFile();
359 return defaulDisplayedDataColumns;
363 public FTSDataColumnI getPrimaryKeyColumn()
365 if (defaulDisplayedDataColumns == null
366 || defaulDisplayedDataColumns.isEmpty())
368 parseDataColumnsConfigFile();
370 return primaryKeyColumn;
374 public FTSDataColumnI getDataColumnByNameOrCode(String nameOrCode)
377 if (dataColumns == null || dataColumns.isEmpty())
379 parseDataColumnsConfigFile();
381 for (FTSDataColumnI column : dataColumns)
383 if (column.getName().equalsIgnoreCase(nameOrCode)
384 || column.getCode().equalsIgnoreCase(nameOrCode))
389 throw new Exception("Couldn't find data column with name : "
394 public FTSDataColumnGroupI getDataColumnGroupById(String id)
397 if (dataColumns == null || dataColumns.isEmpty())
399 parseDataColumnsConfigFile();
401 for (FTSDataColumnGroupI columnGroup : dataColumnGroups)
403 if (columnGroup.getID().equalsIgnoreCase(id))
408 throw new Exception("Couldn't find data column group with id : " + id);
411 protected String getResourceFile(String fileName)
416 result = getClass().getResource(fileName).getFile();
417 } catch (Exception e)
426 public int getDefaultResponsePageSize()
428 return defaultResponsePageSize;