package jalview.fts.core;
-import jalview.fts.api.FTSDataColumnGroupI;
import jalview.fts.api.FTSDataColumnI;
+import jalview.fts.api.FTSDataColumnI.FTSDataColumnGroupI;
import jalview.fts.api.FTSRestClientI;
import java.io.BufferedReader;
import java.util.Collection;
import java.util.Objects;
+/**
+ * Base class providing implementation for common methods defined in
+ * FTSRestClientI
+ *
+ * @author tcnofoegbu
+ *
+ * @note implementations MUST be accessed as a singleton.
+ */
public abstract class FTSRestClient implements FTSRestClientI
{
protected Collection<FTSDataColumnI> dataColumns = new ArrayList<FTSDataColumnI>();
protected FTSDataColumnI primaryKeyColumn;
+ private String primaryKeyColumnCode = null;
+
+ private int defaultResponsePageSize = 100;
+
protected FTSRestClient()
{
}
- public void parseDataColumnsFile()
+ public void parseDataColumnsConfigFile()
{
- String fileName = getColumnDataConfigFile();
+ String fileName = getColumnDataConfigFileName();
try (BufferedReader br = new BufferedReader(new FileReader(fileName)))
{
String line;
while ((line = br.readLine()) != null)
{
final String[] lineData = line.split(";");
- if (lineData.length == 3)
+ try
{
- dataColumnGroups.add(new FTSDataColumnGroupI()
+ if (lineData.length == 2)
{
- @Override
- public String getID()
+ if (lineData[0].equalsIgnoreCase("_data_column.primary_key"))
{
- return lineData[0];
+ primaryKeyColumnCode = lineData[1];
}
-
- @Override
- public String getName()
+ if (lineData[0]
+ .equalsIgnoreCase("_data_column.default_response_page_size"))
{
- return lineData[1];
+ defaultResponsePageSize = Integer.valueOf(lineData[1]);
}
-
- @Override
- public int getSortOrder()
+ }
+ else if (lineData.length == 3)
+ {
+ dataColumnGroups.add(new FTSDataColumnGroupI()
{
- return Integer.valueOf(lineData[2]);
- }
+ @Override
+ public String getID()
+ {
+ return lineData[0];
+ }
- @Override
- public String toString()
- {
- return lineData[1];
- }
+ @Override
+ public String getName()
+ {
+ return lineData[1];
+ }
- @Override
- public int hashCode()
- {
- return Objects.hash(this.getID(), this.getName(),
- this.getSortOrder());
- }
+ @Override
+ public int getSortOrder()
+ {
+ return Integer.valueOf(lineData[2]);
+ }
- @Override
- public boolean equals(Object otherObject)
- {
- FTSDataColumnGroupI that = (FTSDataColumnGroupI) otherObject;
- return this.getID().equals(that.getID())
- && this.getName().equals(that.getName())
- && this.getSortOrder() == that.getSortOrder();
- }
- });
- }
- else if (lineData.length > 6)
- {
- FTSDataColumnI dataCol = new FTSDataColumnI()
+ @Override
+ public String toString()
+ {
+ return lineData[1];
+ }
+
+ @Override
+ public int hashCode()
+ {
+ return Objects.hash(this.getID(), this.getName(),
+ this.getSortOrder());
+ }
+
+ @Override
+ public boolean equals(Object otherObject)
+ {
+ FTSDataColumnGroupI that = (FTSDataColumnGroupI) otherObject;
+ return this.getID().equals(that.getID())
+ && this.getName().equals(that.getName())
+ && this.getSortOrder() == that.getSortOrder();
+ }
+ });
+ }
+ else if (lineData.length > 6)
{
- @Override
- public String toString()
+ FTSDataColumnI dataCol = new FTSDataColumnI()
{
- return lineData[0];
- }
+ @Override
+ public String toString()
+ {
+ return lineData[0];
+ }
- @Override
- public String getName()
- {
- return lineData[0];
- }
+ @Override
+ public String getName()
+ {
+ return lineData[0];
+ }
- @Override
- public String getCode()
- {
- return lineData[1];
- }
+ @Override
+ public String getCode()
+ {
+ return lineData[1];
+ }
- @Override
- public FTSDataColumnGroupI getGroup()
- {
- FTSDataColumnGroupI group = null;
- try
+ @Override
+ public Class<?> getDataColumnClass()
{
- group = getDataColumnGroupById(lineData[2]);
- } catch (Exception e)
+ String classString = lineData[2];
+ classString = classString.toUpperCase();
+ switch (classString)
+ {
+ case "INT":
+ case "INTEGER":
+ return Integer.class;
+ case "DOUBLE":
+ return Double.class;
+ case "STRING":
+ default:
+ return String.class;
+ }
+ }
+
+ @Override
+ public FTSDataColumnGroupI getGroup()
{
- e.printStackTrace();
+ FTSDataColumnGroupI group = null;
+ try
+ {
+ group = getDataColumnGroupById(lineData[3]);
+ } catch (Exception e)
+ {
+ e.printStackTrace();
+ }
+ return group;
}
- return group;
- }
- @Override
- public int getMinWidth()
- {
- return Integer.valueOf(lineData[3]);
- }
+ @Override
+ public int getMinWidth()
+ {
+ return Integer.valueOf(lineData[4]);
+ }
- @Override
- public int getMaxWidth()
- {
- return Integer.valueOf(lineData[4]);
- }
+ @Override
+ public int getMaxWidth()
+ {
+ return Integer.valueOf(lineData[5]);
+ }
- @Override
- public int getPreferredWidth()
- {
- return Integer.valueOf(lineData[5]);
- }
+ @Override
+ public int getPreferredWidth()
+ {
+ return Integer.valueOf(lineData[6]);
+ }
+ @Override
+ public boolean isPrimaryKeyColumn()
+ {
+ return getName().equalsIgnoreCase(primaryKeyColumnCode)
+ || getCode().equalsIgnoreCase(primaryKeyColumnCode);
+ }
- @Override
- public boolean isPrimaryKeyColumn()
- {
- return Boolean.valueOf(lineData[6]);
- }
+ @Override
+ public boolean isVisibleByDefault()
+ {
+ return Boolean.valueOf(lineData[7]);
+ }
- @Override
- public boolean isVisibleByDefault()
- {
- return Boolean.valueOf(lineData[7]);
- }
+ @Override
+ public boolean isSearchable()
+ {
+ return Boolean.valueOf(lineData[8]);
+ }
- @Override
- public boolean isSearchable()
- {
- return Boolean.valueOf(lineData[8]);
- }
+ @Override
+ public int hashCode()
+ {
+ return Objects.hash(this.getName(), this.getCode(),
+ this.getGroup());
+ }
- @Override
- public int hashCode()
+
+ @Override
+ public boolean equals(Object otherObject)
+ {
+ FTSDataColumnI that = (FTSDataColumnI) otherObject;
+ return this.getCode().equals(that.getCode())
+ && this.getName().equals(that.getName())
+ && this.getGroup().equals(that.getGroup());
+ }
+
+ };
+ dataColumns.add(dataCol);
+
+ if (dataCol.isSearchable())
{
- return Objects.hash(this.getName(), this.getCode(),
- this.getGroup());
+ searchableDataColumns.add(dataCol);
}
- @Override
- public boolean equals(Object otherObject)
+ if (dataCol.isVisibleByDefault())
{
- FTSDataColumnI that = (FTSDataColumnI) otherObject;
- return this.getCode().equals(that.getCode())
- && this.getName().equals(that.getName())
- && this.getGroup().equals(that.getGroup());
+ defaulDisplayedDataColumns.add(dataCol);
}
- };
- dataColumns.add(dataCol);
- if (dataCol.isSearchable())
- {
- searchableDataColumns.add(dataCol);
}
-
- if (dataCol.isVisibleByDefault())
+ else
{
- defaulDisplayedDataColumns.add(dataCol);
+ continue;
}
-
- }
- else
+ } catch (Exception e)
{
- continue;
+ e.printStackTrace();
}
}
} catch (IOException e)
}
}
- /**
- * Determines the column index for 'Primary key' Fields in the dynamic summary
- * table.
- *
- * @param wantedFields
- * the available table columns in no particular order
- * @return the primary key column index
- * @throws Exception
- */
@Override
public int getPrimaryKeyColumIndex(
- Collection<FTSDataColumnI> wantedFields,
- boolean hasRefSeq) throws Exception
+ Collection<FTSDataColumnI> wantedFields, boolean hasRefSeq)
+ throws Exception
{
// If a reference sequence is attached then start counting from 1 else
return pdbFieldIndexCounter;
}
+ @Override
+ public String getDataColumnsFieldsAsCommaDelimitedString(
+ Collection<FTSDataColumnI> dataColumnFields)
+ {
+ String result = "";
+ if (dataColumnFields != null && !dataColumnFields.isEmpty())
+ {
+ StringBuilder returnedFields = new StringBuilder();
+ for (FTSDataColumnI field : dataColumnFields)
+ {
+ returnedFields.append(",").append(field.getCode());
+ }
+ returnedFields.deleteCharAt(0);
+ result = returnedFields.toString();
+ }
+ return result;
+ }
+
/**
* Takes a collection of FTSDataColumnI and converts its 'code' values into a
- * comma delimited string.
+ * tab delimited string.
*
* @param dataColumnFields
* the collection of FTSDataColumnI to process
* @return the generated comma delimited string from the supplied
* FTSDataColumnI collection
*/
- public static String getDataColumnsFieldsAsCommaDelimitedString(
+ public String getDataColumnsFieldsAsTabDelimitedString(
Collection<FTSDataColumnI> dataColumnFields)
{
String result = "";
StringBuilder returnedFields = new StringBuilder();
for (FTSDataColumnI field : dataColumnFields)
{
- returnedFields.append(",").append(field.getCode());
+ returnedFields.append("\t").append(field.getName());
}
returnedFields.deleteCharAt(0);
result = returnedFields.toString();
{
if (dataColumns == null || dataColumns.isEmpty())
{
- parseDataColumnsFile();
+ parseDataColumnsConfigFile();
}
return dataColumns;
}
{
if (searchableDataColumns == null || searchableDataColumns.isEmpty())
{
- parseDataColumnsFile();
+ parseDataColumnsConfigFile();
}
return searchableDataColumns;
}
if (defaulDisplayedDataColumns == null
|| defaulDisplayedDataColumns.isEmpty())
{
- parseDataColumnsFile();
+ parseDataColumnsConfigFile();
}
return defaulDisplayedDataColumns;
}
}
@Override
- public FTSDataColumnI getDataColumnByNameOrCode(
- String nameOrCode) throws Exception
+ public FTSDataColumnI getDataColumnByNameOrCode(String nameOrCode)
+ throws Exception
{
+ if (dataColumns == null || dataColumns.isEmpty())
+ {
+ parseDataColumnsConfigFile();
+ }
for (FTSDataColumnI column : dataColumns)
{
if (column.getName().equalsIgnoreCase(nameOrCode)
public FTSDataColumnGroupI getDataColumnGroupById(String id)
throws Exception
{
+ if (dataColumns == null || dataColumns.isEmpty())
+ {
+ parseDataColumnsConfigFile();
+ }
for (FTSDataColumnGroupI columnGroup : dataColumnGroups)
{
if (columnGroup.getID().equalsIgnoreCase(id))
throw new Exception("Couldn't find data column group with id : " + id);
}
- protected String getFile(String fileName)
+ protected String getResourceFile(String fileName)
{
ClassLoader classLoader = getClass().getClassLoader();
- // File file = new File(classLoader.getResource(fileName).getFile());
String result = "";
try
{
}
+ @Override
+ public int getDefaultResponsePageSize()
+ {
+ return defaultResponsePageSize;
+ }
+
}