X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Ffts%2Fcore%2FFTSRestClient.java;h=f94d4550dcc6fdff86a5d218a6860c7524f488c1;hb=92c2fd083f7f5844693878f946441d75241f13bb;hp=77b94c4bed9c2f19ee36da9328ca61e68b835bd8;hpb=64dd25185d2caf389946bb7e70053183d5aa31a6;p=jalview.git diff --git a/src/jalview/fts/core/FTSRestClient.java b/src/jalview/fts/core/FTSRestClient.java index 77b94c4..f94d455 100644 --- a/src/jalview/fts/core/FTSRestClient.java +++ b/src/jalview/fts/core/FTSRestClient.java @@ -1,16 +1,46 @@ +/* + * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$) + * Copyright (C) $$Year-Rel$$ The Jalview Authors + * + * This file is part of Jalview. + * + * Jalview is free software: you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation, either version 3 + * of the License, or (at your option) any later version. + * + * Jalview is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty + * of MERCHANTABILITY or FITNESS FOR A PARTICULAR + * PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Jalview. If not, see . + * The Jalview Authors are detailed in the 'AUTHORS' file. + */ 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 dataColumns = new ArrayList(); @@ -23,191 +53,284 @@ public abstract class FTSRestClient implements FTSRestClientI 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 DataTypeI getDataType() { - e.printStackTrace(); + final String[] dataTypeString = lineData[2].split("\\|"); + final String classString = dataTypeString[0].toUpperCase(); + + return new DataTypeI() + { + + @Override + public boolean isFormtted() + { + if (dataTypeString.length > 1 + && dataTypeString[1] != null) + { + switch (dataTypeString[1].toUpperCase()) + { + case "T": + case "TRUE": + return true; + case "F": + case "False": + default: + return false; + } + } + return false; + } + + @Override + public int getSignificantFigures() + { + if (dataTypeString.length > 2 + && dataTypeString[2] != null) + { + return Integer.valueOf(dataTypeString[2]); + } + return 0; + } + + @Override + public Class getDataTypeClass() + { + 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 otherObject == null ? false + : this.getCode().equals(that.getCode()) + && this.getName().equals(that.getName()) + && this.getGroup().equals(that.getGroup()); + } - @Override - public int hashCode() + }; + 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(); } } + 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 wantedFields, - boolean hasRefSeq) throws Exception + Collection wantedFields, boolean hasRefSeq) + throws Exception { // If a reference sequence is attached then start counting from 1 else @@ -225,16 +348,8 @@ public abstract class FTSRestClient implements FTSRestClientI 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 dataColumnFields) { String result = ""; @@ -256,7 +371,7 @@ public abstract class FTSRestClient implements FTSRestClientI { if (dataColumns == null || dataColumns.isEmpty()) { - parseDataColumnsFile(); + parseDataColumnsConfigFile(); } return dataColumns; } @@ -266,18 +381,18 @@ public abstract class FTSRestClient implements FTSRestClientI { if (searchableDataColumns == null || searchableDataColumns.isEmpty()) { - parseDataColumnsFile(); + parseDataColumnsConfigFile(); } return searchableDataColumns; } @Override - public Collection getAllDefaulDisplayedDataColumns() + public Collection getAllDefaultDisplayedFTSDataColumns() { if (defaulDisplayedDataColumns == null || defaulDisplayedDataColumns.isEmpty()) { - parseDataColumnsFile(); + parseDataColumnsConfigFile(); } return defaulDisplayedDataColumns; } @@ -285,13 +400,22 @@ public abstract class FTSRestClient implements FTSRestClientI @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) @@ -300,14 +424,18 @@ public abstract class FTSRestClient implements FTSRestClientI return column; } } - throw new Exception("Couldn't find data column with name : " - + nameOrCode); + throw new Exception( + "Couldn't find data column with name : " + nameOrCode); } @Override public FTSDataColumnGroupI getDataColumnGroupById(String id) throws Exception { + if (dataColumns == null || dataColumns.isEmpty()) + { + parseDataColumnsConfigFile(); + } for (FTSDataColumnGroupI columnGroup : dataColumnGroups) { if (columnGroup.getID().equalsIgnoreCase(id)) @@ -318,14 +446,48 @@ public abstract class FTSRestClient implements FTSRestClientI 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.formatMessage("exception.fts_server_error", + service); + 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(); @@ -334,4 +496,14 @@ public abstract class FTSRestClient implements FTSRestClientI } + @Override + public int getDefaultResponsePageSize() + { + if (dataColumns == null || dataColumns.isEmpty()) + { + parseDataColumnsConfigFile(); + } + return defaultResponsePageSize; + } + }