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();
307 public Collection<FTSDataColumnI> getAllFTSDataColumns()
309 if (dataColumns == null || dataColumns.isEmpty())
311 parseDataColumnsConfigFile();
317 public Collection<FTSDataColumnI> getSearchableDataColumns()
319 if (searchableDataColumns == null || searchableDataColumns.isEmpty())
321 parseDataColumnsConfigFile();
323 return searchableDataColumns;
327 public Collection<FTSDataColumnI> getAllDefaulDisplayedDataColumns()
329 if (defaulDisplayedDataColumns == null
330 || defaulDisplayedDataColumns.isEmpty())
332 parseDataColumnsConfigFile();
334 return defaulDisplayedDataColumns;
338 public FTSDataColumnI getPrimaryKeyColumn()
340 if (defaulDisplayedDataColumns == null
341 || defaulDisplayedDataColumns.isEmpty())
343 parseDataColumnsConfigFile();
345 return primaryKeyColumn;
349 public FTSDataColumnI getDataColumnByNameOrCode(String nameOrCode)
352 if (dataColumns == null || dataColumns.isEmpty())
354 parseDataColumnsConfigFile();
356 for (FTSDataColumnI column : dataColumns)
358 if (column.getName().equalsIgnoreCase(nameOrCode)
359 || column.getCode().equalsIgnoreCase(nameOrCode))
364 throw new Exception("Couldn't find data column with name : "
369 public FTSDataColumnGroupI getDataColumnGroupById(String id)
372 if (dataColumns == null || dataColumns.isEmpty())
374 parseDataColumnsConfigFile();
376 for (FTSDataColumnGroupI columnGroup : dataColumnGroups)
378 if (columnGroup.getID().equalsIgnoreCase(id))
383 throw new Exception("Couldn't find data column group with id : " + id);
386 protected String getResourceFile(String fileName)
391 result = getClass().getResource(fileName).getFile();
392 } catch (Exception e)
401 public int getDefaultResponsePageSize()
403 return defaultResponsePageSize;