1 package jalview.fts.core;
3 import jalview.fts.api.FTSDataColumnI;
4 import jalview.fts.api.FTSDataColumnI.FTSDataColumnGroupI;
5 import jalview.fts.api.FTSRestClientI;
6 import jalview.util.MessageManager;
8 import java.io.BufferedReader;
9 import java.io.IOException;
10 import java.io.InputStream;
11 import java.io.InputStreamReader;
12 import java.util.ArrayList;
13 import java.util.Collection;
14 import java.util.Objects;
17 * Base class providing implementation for common methods defined in
22 * @note implementations MUST be accessed as a singleton.
24 public abstract class FTSRestClient implements FTSRestClientI
26 protected Collection<FTSDataColumnI> dataColumns = new ArrayList<FTSDataColumnI>();
28 protected Collection<FTSDataColumnGroupI> dataColumnGroups = new ArrayList<FTSDataColumnGroupI>();
30 protected Collection<FTSDataColumnI> searchableDataColumns = new ArrayList<FTSDataColumnI>();
32 protected Collection<FTSDataColumnI> defaulDisplayedDataColumns = new ArrayList<FTSDataColumnI>();
34 protected FTSDataColumnI primaryKeyColumn;
36 private String primaryKeyColumnCode = null;
38 private int defaultResponsePageSize = 100;
40 protected FTSRestClient()
45 public void parseDataColumnsConfigFile()
47 String fileName = getColumnDataConfigFileName();
49 InputStream in = getClass().getResourceAsStream(fileName);
51 try (BufferedReader br = new BufferedReader(new InputStreamReader(in)))
54 while ((line = br.readLine()) != null)
56 final String[] lineData = line.split(";");
59 if (lineData.length == 2)
61 if (lineData[0].equalsIgnoreCase("_data_column.primary_key"))
63 primaryKeyColumnCode = lineData[1];
66 .equalsIgnoreCase("_data_column.default_response_page_size"))
68 defaultResponsePageSize = Integer.valueOf(lineData[1]);
71 else if (lineData.length == 3)
73 dataColumnGroups.add(new FTSDataColumnGroupI()
82 public String getName()
88 public int getSortOrder()
90 return Integer.valueOf(lineData[2]);
94 public String toString()
100 public int hashCode()
102 return Objects.hash(this.getID(), this.getName(),
103 this.getSortOrder());
107 public boolean equals(Object otherObject)
109 FTSDataColumnGroupI that = (FTSDataColumnGroupI) otherObject;
110 return this.getID().equals(that.getID())
111 && this.getName().equals(that.getName())
112 && this.getSortOrder() == that.getSortOrder();
116 else if (lineData.length > 6)
118 FTSDataColumnI dataCol = new FTSDataColumnI()
121 public String toString()
127 public String getName()
133 public String getCode()
135 return lineData[1].split("\\|")[0];
139 public String getAltCode()
141 return lineData[1].split("\\|").length > 1 ? lineData[1]
142 .split("\\|")[1] : getCode();
146 public Class<?> getDataColumnClass()
148 String classString = lineData[2];
149 classString = classString.toUpperCase();
154 return Integer.class;
164 public FTSDataColumnGroupI getGroup()
166 FTSDataColumnGroupI group = null;
169 group = getDataColumnGroupById(lineData[3]);
170 } catch (Exception e)
178 public int getMinWidth()
180 return Integer.valueOf(lineData[4]);
184 public int getMaxWidth()
186 return Integer.valueOf(lineData[5]);
190 public int getPreferredWidth()
192 return Integer.valueOf(lineData[6]);
196 public boolean isPrimaryKeyColumn()
198 return getName().equalsIgnoreCase(primaryKeyColumnCode)
199 || getCode().equalsIgnoreCase(primaryKeyColumnCode);
203 public boolean isVisibleByDefault()
205 return Boolean.valueOf(lineData[7]);
209 public boolean isSearchable()
211 return Boolean.valueOf(lineData[8]);
215 public int hashCode()
217 return Objects.hash(this.getName(), this.getCode(),
223 public boolean equals(Object otherObject)
225 FTSDataColumnI that = (FTSDataColumnI) otherObject;
226 return this.getCode().equals(that.getCode())
227 && this.getName().equals(that.getName())
228 && this.getGroup().equals(that.getGroup());
232 dataColumns.add(dataCol);
234 if (dataCol.isSearchable())
236 searchableDataColumns.add(dataCol);
239 if (dataCol.isVisibleByDefault())
241 defaulDisplayedDataColumns.add(dataCol);
249 } catch (Exception e)
256 this.primaryKeyColumn = getDataColumnByNameOrCode(primaryKeyColumnCode);
257 } catch (Exception e)
261 } catch (IOException e)
268 public int getPrimaryKeyColumIndex(
269 Collection<FTSDataColumnI> wantedFields, boolean hasRefSeq)
273 // If a reference sequence is attached then start counting from 1 else
275 int pdbFieldIndexCounter = hasRefSeq ? 1 : 0;
277 for (FTSDataColumnI field : wantedFields)
279 if (field.isPrimaryKeyColumn())
281 break; // Once PDB Id index is determined exit iteration
283 ++pdbFieldIndexCounter;
285 return pdbFieldIndexCounter;
289 public String getDataColumnsFieldsAsCommaDelimitedString(
290 Collection<FTSDataColumnI> dataColumnFields)
293 if (dataColumnFields != null && !dataColumnFields.isEmpty())
295 StringBuilder returnedFields = new StringBuilder();
296 for (FTSDataColumnI field : dataColumnFields)
298 returnedFields.append(",").append(field.getCode());
300 returnedFields.deleteCharAt(0);
301 result = returnedFields.toString();
308 public Collection<FTSDataColumnI> getAllFTSDataColumns()
310 if (dataColumns == null || dataColumns.isEmpty())
312 parseDataColumnsConfigFile();
318 public Collection<FTSDataColumnI> getSearchableDataColumns()
320 if (searchableDataColumns == null || searchableDataColumns.isEmpty())
322 parseDataColumnsConfigFile();
324 return searchableDataColumns;
328 public Collection<FTSDataColumnI> getAllDefaulDisplayedDataColumns()
330 if (defaulDisplayedDataColumns == null
331 || defaulDisplayedDataColumns.isEmpty())
333 parseDataColumnsConfigFile();
335 return defaulDisplayedDataColumns;
339 public FTSDataColumnI getPrimaryKeyColumn()
341 if (defaulDisplayedDataColumns == null
342 || defaulDisplayedDataColumns.isEmpty())
344 parseDataColumnsConfigFile();
346 return primaryKeyColumn;
350 public FTSDataColumnI getDataColumnByNameOrCode(String nameOrCode)
353 if (dataColumns == null || dataColumns.isEmpty())
355 parseDataColumnsConfigFile();
357 for (FTSDataColumnI column : dataColumns)
359 if (column.getName().equalsIgnoreCase(nameOrCode)
360 || column.getCode().equalsIgnoreCase(nameOrCode))
365 throw new Exception("Couldn't find data column with name : "
370 public FTSDataColumnGroupI getDataColumnGroupById(String id)
373 if (dataColumns == null || dataColumns.isEmpty())
375 parseDataColumnsConfigFile();
377 for (FTSDataColumnGroupI columnGroup : dataColumnGroups)
379 if (columnGroup.getID().equalsIgnoreCase(id))
384 throw new Exception("Couldn't find data column group with id : " + id);
387 public String getMessageByHTTPStatusCode(int code, String service)
393 message = MessageManager
394 .getString("exception.bad_request");
398 message = MessageManager.formatMessage(
399 "exception.fts_rest_service_no_longer_available", service);
403 message = MessageManager.getString("exception.resource_not_be_found");
412 message = MessageManager.getString("exception.fts_server_error");
415 message = MessageManager.getString("exception.service_not_available");
423 protected String getResourceFile(String fileName)
428 result = getClass().getResource(fileName).getFile();
429 } catch (Exception e)
438 public int getDefaultResponsePageSize()
440 if (dataColumns == null || dataColumns.isEmpty())
442 parseDataColumnsConfigFile();
444 return defaultResponsePageSize;