X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Ffts%2Fcore%2FFTSRestClient.java;h=0bca0709c34b00663c302f8f74cad2dabcd7dc89;hb=9d2408483e451285fd555c3cd6e0273977acbaa7;hp=f611d5b43367df8ddb2e26e6dc0d1087a7b823d7;hpb=e3a91c662873d6b6e6f86b6b596f578a16e23779;p=jalview.git diff --git a/src/jalview/fts/core/FTSRestClient.java b/src/jalview/fts/core/FTSRestClient.java index f611d5b..0bca070 100644 --- a/src/jalview/fts/core/FTSRestClient.java +++ b/src/jalview/fts/core/FTSRestClient.java @@ -1,16 +1,42 @@ +/* + * 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.FTSDataColumnI; -import jalview.fts.api.FTSDataColumnI.FTSDataColumnGroupI; -import jalview.fts.api.FTSRestClientI; +import java.util.Locale; 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.HashMap; import java.util.Objects; +import jalview.fts.api.FTSDataColumnI; +import jalview.fts.api.FTSDataColumnI.FTSDataColumnGroupI; +import jalview.fts.core.FTSDataColumnPreferences.PreferenceSource; +import jalview.fts.service.threedbeacons.TDBeaconsFTSRestClient; +import jalview.fts.api.FTSRestClientI; + /** * Base class providing implementation for common methods defined in * FTSRestClientI @@ -21,13 +47,13 @@ import java.util.Objects; */ public abstract class FTSRestClient implements FTSRestClientI { - protected Collection dataColumns = new ArrayList(); + protected Collection dataColumns = new ArrayList<>(); - protected Collection dataColumnGroups = new ArrayList(); + protected Collection dataColumnGroups = new ArrayList<>(); - protected Collection searchableDataColumns = new ArrayList(); + protected Collection searchableDataColumns = new ArrayList<>(); - protected Collection defaulDisplayedDataColumns = new ArrayList(); + protected Collection defaulDisplayedDataColumns = new ArrayList<>(); protected FTSDataColumnI primaryKeyColumn; @@ -35,6 +61,8 @@ public abstract class FTSRestClient implements FTSRestClientI private int defaultResponsePageSize = 100; + protected HashMap mockQueries = null; + protected FTSRestClient() { @@ -43,7 +71,10 @@ public abstract class FTSRestClient implements FTSRestClientI public void parseDataColumnsConfigFile() { String fileName = getColumnDataConfigFileName(); - try (BufferedReader br = new BufferedReader(new FileReader(fileName))) + + InputStream in = getClass().getResourceAsStream(fileName); + + try (BufferedReader br = new BufferedReader(new InputStreamReader(in))) { String line; while ((line = br.readLine()) != null) @@ -57,8 +88,8 @@ public abstract class FTSRestClient implements FTSRestClientI { primaryKeyColumnCode = lineData[1]; } - if (lineData[0] - .equalsIgnoreCase("_data_column.default_response_page_size")) + if (lineData[0].equalsIgnoreCase( + "_data_column.default_response_page_size")) { defaultResponsePageSize = Integer.valueOf(lineData[1]); } @@ -127,25 +158,74 @@ public abstract class FTSRestClient implements FTSRestClientI @Override public String getCode() { - return lineData[1]; + return lineData[1].split("\\|")[0]; + } + + @Override + public String getAltCode() + { + return lineData[1].split("\\|").length > 1 + ? lineData[1].split("\\|")[1] + : getCode(); } @Override - public Class getDataColumnClass() + public DataTypeI getDataType() { - String classString = lineData[2]; - classString = classString.toUpperCase(); - switch (classString) + final String[] dataTypeString = lineData[2].split("\\|"); + final String classString = dataTypeString[0].toUpperCase(Locale.ROOT); + + return new DataTypeI() { - case "INT": - case "INTEGER": - return Integer.class; - case "DOUBLE": - return Double.class; - case "STRING": - default: - return String.class; - } + + @Override + public boolean isFormtted() + { + if (dataTypeString.length > 1 + && dataTypeString[1] != null) + { + switch (dataTypeString[1].toUpperCase(Locale.ROOT)) + { + 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; + } + } + }; + } @Override @@ -206,12 +286,12 @@ public abstract class FTSRestClient implements FTSRestClientI this.getGroup()); } - @Override public boolean equals(Object otherObject) { FTSDataColumnI that = (FTSDataColumnI) otherObject; - return this.getCode().equals(that.getCode()) + return otherObject == null ? false + : this.getCode().equals(that.getCode()) && this.getName().equals(that.getName()) && this.getGroup().equals(that.getGroup()); } @@ -241,7 +321,8 @@ public abstract class FTSRestClient implements FTSRestClientI } try { - this.primaryKeyColumn = getDataColumnByNameOrCode(primaryKeyColumnCode); + this.primaryKeyColumn = getDataColumnByNameOrCode( + primaryKeyColumnCode); } catch (Exception e) { e.printStackTrace(); @@ -291,32 +372,6 @@ public abstract class FTSRestClient implements FTSRestClientI return result; } - /** - * Takes a collection of FTSDataColumnI and converts its 'code' values into a - * tab delimited string. - * - * @param dataColumnFields - * the collection of FTSDataColumnI to process - * @return the generated comma delimited string from the supplied - * FTSDataColumnI collection - */ - public String getDataColumnsFieldsAsTabDelimitedString( - Collection dataColumnFields) - { - String result = ""; - if (dataColumnFields != null && !dataColumnFields.isEmpty()) - { - StringBuilder returnedFields = new StringBuilder(); - for (FTSDataColumnI field : dataColumnFields) - { - returnedFields.append("\t").append(field.getName()); - } - returnedFields.deleteCharAt(0); - result = returnedFields.toString(); - } - return result; - } - @Override public Collection getAllFTSDataColumns() { @@ -338,7 +393,7 @@ public abstract class FTSRestClient implements FTSRestClientI } @Override - public Collection getAllDefaulDisplayedDataColumns() + public Collection getAllDefaultDisplayedFTSDataColumns() { if (defaulDisplayedDataColumns == null || defaulDisplayedDataColumns.isEmpty()) @@ -375,8 +430,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); + } + + /** + * + * @param instance + * @param mocks {{working query, working response}, ...} + */ + public static void createMockFTSRestClient(FTSRestClient instance,String[][] mocks) + { + instance.setMock(mocks); } @Override @@ -397,6 +462,46 @@ public abstract class FTSRestClient implements FTSRestClientI throw new Exception("Couldn't find data column group with id : " + id); } + public static String getMessageByHTTPStatusCode(int code, String service) + { + String message = ""; + switch (code) + { + case 400: + message = "Bad request. There is a problem with your input."; + break; + + case 410: + message = service + " rest services no longer available!"; + break; + case 403: + case 404: + message = "The requested resource could not be found"; + break; + case 408: + case 409: + case 500: + case 501: + case 502: + case 504: + case 505: + message = "There seems to be an error from the " + service + + " server"; + break; + case 503: + message = "Service not available. The server is being updated, try again later."; + break; + default: + break; + } + return String.valueOf(code) + " " + message; + } + + public static void unMock(FTSRestClient instance) + { + instance.mockQueries=null; + } + protected String getResourceFile(String fileName) { String result = ""; @@ -414,7 +519,44 @@ public abstract class FTSRestClient implements FTSRestClientI @Override public int getDefaultResponsePageSize() { + if (dataColumns == null || dataColumns.isEmpty()) + { + parseDataColumnsConfigFile(); + } return defaultResponsePageSize; } + protected void setMock(String[][] mocks) + { + if (mocks==null) { + mockQueries=null; + return; + } + mockQueries=new HashMap(); + for (String[] mock:mocks) + { + mockQueries.put(mock[0],mock[1]); + } + } + + protected boolean isMocked() + { + return mockQueries!=null; + } + + @Override + public String[] getPreferencesColumnsFor(PreferenceSource source) + { + String[] columnNames = null; + switch (source) + { + case SEARCH_SUMMARY: + columnNames = new String[] { "", "Display", "Group" }; + break; + default: + // non structure sources don't return any other kind of preferences columns + break; + } + return columnNames; + } }