X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2Fjalview%2Ffts%2Fcore%2FFTSRestClient.java;h=2d79432cf2db016c5017209d308e727c891510db;hb=05688ef13325c699644487ce1c08a53927f0eeb0;hp=00a081b8d3fbf4c21a9ba29d9d55265171188f66;hpb=2051c117e19e8b7c72bf5a9f1db48f2b4687f71e;p=jalview.git diff --git a/src/jalview/fts/core/FTSRestClient.java b/src/jalview/fts/core/FTSRestClient.java index 00a081b..2d79432 100644 --- a/src/jalview/fts/core/FTSRestClient.java +++ b/src/jalview/fts/core/FTSRestClient.java @@ -1,18 +1,40 @@ +/* + * 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 jalview.util.MessageManager; - import java.io.BufferedReader; 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.Locale; import java.util.Objects; +import jalview.fts.api.FTSDataColumnI; +import jalview.fts.api.FTSDataColumnI.FTSDataColumnGroupI; +import jalview.fts.api.FTSRestClientI; +import jalview.fts.core.FTSDataColumnPreferences.PreferenceSource; + /** * Base class providing implementation for common methods defined in * FTSRestClientI @@ -23,13 +45,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; @@ -37,6 +59,8 @@ public abstract class FTSRestClient implements FTSRestClientI private int defaultResponsePageSize = 100; + protected HashMap mockQueries = null; + protected FTSRestClient() { @@ -45,9 +69,9 @@ public abstract class FTSRestClient implements FTSRestClientI public void parseDataColumnsConfigFile() { String fileName = getColumnDataConfigFileName(); - - InputStream in = getClass().getResourceAsStream(fileName); - + + InputStream in = getClass().getResourceAsStream(fileName); + try (BufferedReader br = new BufferedReader(new InputStreamReader(in))) { String line; @@ -62,8 +86,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]); } @@ -120,7 +144,8 @@ public abstract class FTSRestClient implements FTSRestClientI @Override public String toString() { - return lineData[0]; + return "ALL".equals(getName()) ? getName() + : getName() + " [" + getAltCode() + "]"; } @Override @@ -138,15 +163,17 @@ public abstract class FTSRestClient implements FTSRestClientI @Override public String getAltCode() { - return lineData[1].split("\\|").length > 1 ? lineData[1] - .split("\\|")[1] : getCode(); + return lineData[1].split("\\|").length > 1 + ? lineData[1].split("\\|")[1] + : getCode(); } @Override public DataTypeI getDataType() { final String[] dataTypeString = lineData[2].split("\\|"); - final String classString = dataTypeString[0].toUpperCase(); + final String classString = dataTypeString[0] + .toUpperCase(Locale.ROOT); return new DataTypeI() { @@ -157,7 +184,7 @@ public abstract class FTSRestClient implements FTSRestClientI if (dataTypeString.length > 1 && dataTypeString[1] != null) { - switch (dataTypeString[1].toUpperCase()) + switch (dataTypeString[1].toUpperCase(Locale.ROOT)) { case "T": case "TRUE": @@ -259,17 +286,16 @@ public abstract class FTSRestClient implements FTSRestClientI 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()); + return otherObject == null ? false + : this.getCode().equals(that.getCode()) + && this.getName().equals(that.getName()) + && this.getGroup().equals(that.getGroup()); } - }; dataColumns.add(dataCol); @@ -295,7 +321,8 @@ public abstract class FTSRestClient implements FTSRestClientI } try { - this.primaryKeyColumn = getDataColumnByNameOrCode(primaryKeyColumnCode); + this.primaryKeyColumn = getDataColumnByNameOrCode( + primaryKeyColumnCode); } catch (Exception e) { e.printStackTrace(); @@ -345,7 +372,6 @@ public abstract class FTSRestClient implements FTSRestClientI return result; } - @Override public Collection getAllFTSDataColumns() { @@ -404,8 +430,20 @@ 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 @@ -426,23 +464,21 @@ public abstract class FTSRestClient implements FTSRestClientI throw new Exception("Couldn't find data column group with id : " + id); } - public String getMessageByHTTPStatusCode(int code, String service) + public static String getMessageByHTTPStatusCode(int code, String service) { String message = ""; switch (code) { case 400: - message = MessageManager - .getString("exception.bad_request"); + message = "Bad request. There is a problem with your input."; break; - + case 410: - message = MessageManager.formatMessage( - "exception.fts_rest_service_no_longer_available", service); + message = service + " rest services no longer available!"; break; case 403: case 404: - message = MessageManager.getString("exception.resource_not_be_found"); + message = "The requested resource could not be found"; break; case 408: case 409: @@ -451,15 +487,21 @@ public abstract class FTSRestClient implements FTSRestClientI case 502: case 504: case 505: - message = MessageManager.getString("exception.fts_server_error"); + message = "There seems to be an error from the " + service + + " server"; break; case 503: - message = MessageManager.getString("exception.service_not_available"); + message = "Service not available. The server is being updated, try again later."; break; default: break; } - return message; + return String.valueOf(code) + " " + message; + } + + public static void unMock(FTSRestClient instance) + { + instance.mockQueries = null; } protected String getResourceFile(String fileName) @@ -486,4 +528,39 @@ public abstract class FTSRestClient implements FTSRestClientI 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; + } }