1 package jalview.fts.core;
3 import jalview.fts.api.FTSDataColumnGroupI;
4 import jalview.fts.api.FTSDataColumnI;
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;
14 public abstract class FTSRestClient implements FTSRestClientI
16 protected Collection<FTSDataColumnI> dataColumns = new ArrayList<FTSDataColumnI>();
18 protected Collection<FTSDataColumnGroupI> dataColumnGroups = new ArrayList<FTSDataColumnGroupI>();
20 protected Collection<FTSDataColumnI> searchableDataColumns = new ArrayList<FTSDataColumnI>();
22 protected Collection<FTSDataColumnI> defaulDisplayedDataColumns = new ArrayList<FTSDataColumnI>();
24 protected FTSDataColumnI primaryKeyColumn;
26 protected FTSRestClient()
31 public void parseDataColumnsFile()
33 String fileName = getColumnDataConfigFile();
34 try (BufferedReader br = new BufferedReader(new FileReader(fileName)))
37 while ((line = br.readLine()) != null)
39 final String[] lineData = line.split(";");
40 if (lineData.length == 3)
42 dataColumnGroups.add(new FTSDataColumnGroupI()
51 public String getName()
57 public int getSortOrder()
59 return Integer.valueOf(lineData[2]);
63 public String toString()
71 return Objects.hash(this.getID(), this.getName(),
76 public boolean equals(Object otherObject)
78 FTSDataColumnGroupI that = (FTSDataColumnGroupI) otherObject;
79 return this.getID().equals(that.getID())
80 && this.getName().equals(that.getName())
81 && this.getSortOrder() == that.getSortOrder();
85 else if (lineData.length > 6)
87 FTSDataColumnI dataCol = new FTSDataColumnI()
90 public String toString()
96 public String getName()
102 public String getCode()
108 public FTSDataColumnGroupI getGroup()
110 FTSDataColumnGroupI group = null;
113 group = getDataColumnGroupById(lineData[2]);
114 } catch (Exception e)
122 public int getMinWidth()
124 return Integer.valueOf(lineData[3]);
128 public int getMaxWidth()
130 return Integer.valueOf(lineData[4]);
134 public int getPreferredWidth()
136 return Integer.valueOf(lineData[5]);
141 public boolean isPrimaryKeyColumn()
143 return Boolean.valueOf(lineData[6]);
147 public boolean isVisibleByDefault()
149 return Boolean.valueOf(lineData[7]);
153 public boolean isSearchable()
155 return Boolean.valueOf(lineData[8]);
159 public int hashCode()
161 return Objects.hash(this.getName(), this.getCode(),
166 public boolean equals(Object otherObject)
168 FTSDataColumnI that = (FTSDataColumnI) otherObject;
169 return this.getCode().equals(that.getCode())
170 && this.getName().equals(that.getName())
171 && this.getGroup().equals(that.getGroup());
174 dataColumns.add(dataCol);
176 if (dataCol.isSearchable())
178 searchableDataColumns.add(dataCol);
181 if (dataCol.isVisibleByDefault())
183 defaulDisplayedDataColumns.add(dataCol);
192 } catch (IOException e)
199 * Determines the column index for 'Primary key' Fields in the dynamic summary
202 * @param wantedFields
203 * the available table columns in no particular order
204 * @return the primary key column index
208 public int getPrimaryKeyColumIndex(
209 Collection<FTSDataColumnI> wantedFields,
210 boolean hasRefSeq) throws Exception
213 // If a reference sequence is attached then start counting from 1 else
215 int pdbFieldIndexCounter = hasRefSeq ? 1 : 0;
217 for (FTSDataColumnI field : wantedFields)
219 if (field.isPrimaryKeyColumn())
221 break; // Once PDB Id index is determined exit iteration
223 ++pdbFieldIndexCounter;
225 return pdbFieldIndexCounter;
229 * Takes a collection of FTSDataColumnI and converts its 'code' values into a
230 * comma delimited string.
232 * @param dataColumnFields
233 * the collection of FTSDataColumnI to process
234 * @return the generated comma delimited string from the supplied
235 * FTSDataColumnI collection
237 public static String getDataColumnsFieldsAsCommaDelimitedString(
238 Collection<FTSDataColumnI> dataColumnFields)
241 if (dataColumnFields != null && !dataColumnFields.isEmpty())
243 StringBuilder returnedFields = new StringBuilder();
244 for (FTSDataColumnI field : dataColumnFields)
246 returnedFields.append(",").append(field.getCode());
248 returnedFields.deleteCharAt(0);
249 result = returnedFields.toString();
255 public Collection<FTSDataColumnI> getAllFTSDataColumns()
257 if (dataColumns == null || dataColumns.isEmpty())
259 parseDataColumnsFile();
265 public Collection<FTSDataColumnI> getSearchableDataColumns()
267 if (searchableDataColumns == null || searchableDataColumns.isEmpty())
269 parseDataColumnsFile();
271 return searchableDataColumns;
275 public Collection<FTSDataColumnI> getAllDefaulDisplayedDataColumns()
277 if (defaulDisplayedDataColumns == null
278 || defaulDisplayedDataColumns.isEmpty())
280 parseDataColumnsFile();
282 return defaulDisplayedDataColumns;
286 public FTSDataColumnI getPrimaryKeyColumn()
288 return primaryKeyColumn;
292 public FTSDataColumnI getDataColumnByNameOrCode(
293 String nameOrCode) throws Exception
295 for (FTSDataColumnI column : dataColumns)
297 if (column.getName().equalsIgnoreCase(nameOrCode)
298 || column.getCode().equalsIgnoreCase(nameOrCode))
303 throw new Exception("Couldn't find data column with name : "
308 public FTSDataColumnGroupI getDataColumnGroupById(String id)
311 for (FTSDataColumnGroupI columnGroup : dataColumnGroups)
313 if (columnGroup.getID().equalsIgnoreCase(id))
318 throw new Exception("Couldn't find data column group with id : " + id);
321 protected String getFile(String fileName)
323 ClassLoader classLoader = getClass().getClassLoader();
324 // File file = new File(classLoader.getResource(fileName).getFile());
328 result = classLoader.getResource(fileName).getFile();
329 } catch (Exception e)