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 jalview.util.MessageManager;
import java.io.BufferedReader;
-import java.io.FileReader;
import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
import java.util.ArrayList;
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();
- try (BufferedReader br = new BufferedReader(new FileReader(fileName)))
+ String fileName = getColumnDataConfigFileName();
+
+ InputStream in = getClass().getResourceAsStream(fileName);
+
+ try (BufferedReader br = new BufferedReader(new InputStreamReader(in)))
{
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].split("\\|")[0];
+ }
- @Override
- public FTSDataColumnGroupI getGroup()
- {
- FTSDataColumnGroupI group = null;
- try
+ @Override
+ public String getAltCode()
{
- group = getDataColumnGroupById(lineData[2]);
- } catch (Exception e)
+ return lineData[1].split("\\|").length > 1 ? lineData[1]
+ .split("\\|")[1] : getCode();
+ }
+
+ @Override
+ public Class<?> getDataColumnClass()
{
- e.printStackTrace();
+ 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;
+ }
}
- return group;
- }
- @Override
- public int getMinWidth()
- {
- return Integer.valueOf(lineData[3]);
- }
+ @Override
+ public FTSDataColumnGroupI getGroup()
+ {
+ FTSDataColumnGroupI group = null;
+ try
+ {
+ group = getDataColumnGroupById(lineData[3]);
+ } catch (Exception e)
+ {
+ e.printStackTrace();
+ }
+ return group;
+ }
- @Override
- public int getMaxWidth()
- {
- return Integer.valueOf(lineData[4]);
- }
+ @Override
+ public int getMinWidth()
+ {
+ return Integer.valueOf(lineData[4]);
+ }
- @Override
- public int getPreferredWidth()
- {
- return Integer.valueOf(lineData[5]);
- }
+ @Override
+ public int getMaxWidth()
+ {
+ return Integer.valueOf(lineData[5]);
+ }
+ @Override
+ public int getPreferredWidth()
+ {
+ return Integer.valueOf(lineData[6]);
+ }
- @Override
- public boolean isPrimaryKeyColumn()
- {
- return Boolean.valueOf(lineData[6]);
- }
+ @Override
+ public boolean isPrimaryKeyColumn()
+ {
+ return getName().equalsIgnoreCase(primaryKeyColumnCode)
+ || getCode().equalsIgnoreCase(primaryKeyColumnCode);
+ }
- @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 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);
- @Override
- public int hashCode()
+ 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();
}
}
+ try
+ {
+ this.primaryKeyColumn = getDataColumnByNameOrCode(primaryKeyColumnCode);
+ } catch (Exception e)
+ {
+ e.printStackTrace();
+ }
} catch (IOException e)
{
e.printStackTrace();
}
}
- /**
- * 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;
}
- /**
- * Takes a collection of FTSDataColumnI and converts its 'code' values into a
- * comma 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(
+ @Override
+ public String getDataColumnsFieldsAsCommaDelimitedString(
Collection<FTSDataColumnI> dataColumnFields)
{
String result = "";
return result;
}
+
@Override
public Collection<FTSDataColumnI> getAllFTSDataColumns()
{
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 getPrimaryKeyColumn()
{
+ if (defaulDisplayedDataColumns == null
+ || defaulDisplayedDataColumns.isEmpty())
+ {
+ parseDataColumnsConfigFile();
+ }
return primaryKeyColumn;
}
@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)
+ public String getMessageByHTTPStatusCode(int code, String service)
+ {
+ String message = "";
+ switch (code)
+ {
+ case 400:
+ message = MessageManager
+ .getString("exception.bad_request");
+ break;
+
+ case 410:
+ message = MessageManager.formatMessage(
+ "exception.fts_rest_service_no_longer_available", service);
+ break;
+ case 403:
+ case 404:
+ message = MessageManager.getString("exception.resource_not_be_found");
+ break;
+ case 408:
+ case 409:
+ case 500:
+ case 501:
+ case 502:
+ case 504:
+ case 505:
+ message = MessageManager.getString("exception.fts_server_error");
+ break;
+ case 503:
+ message = MessageManager.getString("exception.service_not_available");
+ break;
+ default:
+ break;
+ }
+ return message;
+ }
+
+ protected String getResourceFile(String fileName)
{
- ClassLoader classLoader = getClass().getClassLoader();
- // File file = new File(classLoader.getResource(fileName).getFile());
String result = "";
try
{
- result = classLoader.getResource(fileName).getFile();
+ result = getClass().getResource(fileName).getFile();
} catch (Exception e)
{
e.printStackTrace();
}
+ @Override
+ public int getDefaultResponsePageSize()
+ {
+ if (dataColumns == null || dataColumns.isEmpty())
+ {
+ parseDataColumnsConfigFile();
+ }
+ return defaultResponsePageSize;
+ }
+
}