From 940d306aecea7dfca8c55cc4beee938a95de43df Mon Sep 17 00:00:00 2001 From: gmungoc Date: Tue, 4 Jun 2019 16:50:05 +0100 Subject: [PATCH] JAL-2386 avoid duplicate pdbids in free text query --- resources/lang/Messages.properties | 5 ----- resources/lang/Messages_es.properties | 5 ----- src/jalview/fts/core/FTSRestClient.java | 24 ++++++++++----------- src/jalview/fts/service/pdb/PDBFTSRestClient.java | 7 +++--- src/jalview/gui/StructureChooser.java | 20 ++++++++++++----- 5 files changed, 31 insertions(+), 30 deletions(-) diff --git a/resources/lang/Messages.properties b/resources/lang/Messages.properties index f095290..d2d8e88 100644 --- a/resources/lang/Messages.properties +++ b/resources/lang/Messages.properties @@ -1226,9 +1226,6 @@ label.structure_chooser_filter_time = Structure Chooser - Filter time ({0}) label.structure_chooser_no_of_structures = Structure Chooser - {0} Found ({1}) info.no_pdb_entry_found_for = No PDB entry found for {0} exception.unable_to_detect_internet_connection = Jalview is unable to detect an internet connection -exception.fts_rest_service_no_longer_available = {0} rest services no longer available! -exception.resource_not_be_found = The requested resource could not be found -exception.fts_server_error = There seems to be an error from the {0} server exception.fts_server_unreachable = Jalview is unable to reach the {0} server. \nPlease ensure that you are connected to the internet and try again. label.nw_mapping = Needleman & Wunsch Alignment label.sifts_mapping = SIFTs Mapping @@ -1245,8 +1242,6 @@ action.next_page= >> action.prev_page= << label.next_page_tooltip=Next Page label.prev_page_tooltip=Previous Page -exception.bad_request=Bad request. There is a problem with your input. -exception.service_not_available=Service not available. The server is being updated, try again later. status.launching_3d_structure_viewer = Launching 3D Structure viewer... status.fetching_3d_structures_for_selected_entries = Fetching 3D Structures for selected entries... status.fetching_dbrefs_for_sequences_without_valid_refs = Fetching db refs for {0} sequence(s) without valid db ref required for SIFTS mapping diff --git a/resources/lang/Messages_es.properties b/resources/lang/Messages_es.properties index ec7eb5d..e9e18ce 100644 --- a/resources/lang/Messages_es.properties +++ b/resources/lang/Messages_es.properties @@ -1200,7 +1200,6 @@ tooltip.rnalifold_settings=Modificar la configuraci label.show_selected_annotations=Mostrar anotaciones seleccionadas status.colouring_chimera=Coloreando Chimera label.configure_displayed_columns=Configurar Columnas Mostradas -exception.resource_not_be_found=El recurso solicitado no se ha encontrado label.aacon_calculations=cálculos AACon label.pdb_web-service_error=Error de servicio web PDB exception.unable_to_detect_internet_connection=Jalview no puede detectar una conexión a Internet @@ -1225,13 +1224,10 @@ exception.fts_server_unreachable=Jalview no puede conectar con el servidor {0}. exception.outofmemory_loading_mmcif_file=Sin memoria al cargar el fichero mmCIF label.hide_columns_not_containing=Ocultar las columnas que no contengan label.pdb_sequence_fetcher=Recuperador de secuencias PDB -exception.fts_server_error=Parece que hay un error desde el servidor {0} -exception.service_not_available=Servicio no disponible. El servidor se está actualizando, vuelva a intentarlo más tarde. status.waiting_for_user_to_select_output_file=Esperando que el usuario seleccione el fichero {0} action.prev_page=<< status.cancelled_image_export_operation=Operación de exportación {0} cancelada label.couldnt_run_groovy_script=No se ha podido ejecutar el script Groovy -exception.bad_request=Solicitud incorrecta. Hay un problema con su entrada. label.run_groovy=Ejecutar script Groovy desde la consola action.next_page=>> label.uniprot_sequence_fetcher=Recuperador de secuencias UniProt @@ -1247,7 +1243,6 @@ label.next_page_tooltip=P label.sifts_mapping=Mapeado SIFTs label.mapping_method=Método de mapeo de secuencia \u27F7 estructura info.error_creating_file=Error al crear fichero {0} -exception.fts_rest_service_no_longer_available= Servicios Rest {0} ya no están disponibles! status.launching_3d_structure_viewer=Lanzando visualizador de estructura 3D... status.obtaining_mapping_with_sifts=Obteniendo mapeo por SIFTS status.fetching_3d_structures_for=Buscando la estructura 3D para {0} diff --git a/src/jalview/fts/core/FTSRestClient.java b/src/jalview/fts/core/FTSRestClient.java index f94d455..8b1c785 100644 --- a/src/jalview/fts/core/FTSRestClient.java +++ b/src/jalview/fts/core/FTSRestClient.java @@ -43,13 +43,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; @@ -446,22 +446,22 @@ 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); + 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: @@ -470,16 +470,16 @@ public abstract class FTSRestClient implements FTSRestClientI case 502: case 504: case 505: - message = MessageManager.formatMessage("exception.fts_server_error", - service); + 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; } protected String getResourceFile(String fileName) diff --git a/src/jalview/fts/service/pdb/PDBFTSRestClient.java b/src/jalview/fts/service/pdb/PDBFTSRestClient.java index cbeaff1..5293c32 100644 --- a/src/jalview/fts/service/pdb/PDBFTSRestClient.java +++ b/src/jalview/fts/service/pdb/PDBFTSRestClient.java @@ -152,10 +152,11 @@ public class PDBFTSRestClient extends FTSRestClient // System.out.println("query >>>>>>> " + pdbRestRequest.toString()); // Check the response status and report exception if one occurs - if (clientResponse.getStatus() != 200) + int responseStatus = clientResponse.getStatus(); + if (responseStatus != 200) { String errorMessage = ""; - if (clientResponse.getStatus() == 400) + if (responseStatus == 400) { errorMessage = parseJsonExceptionString(responseString); throw new Exception(errorMessage); @@ -163,7 +164,7 @@ public class PDBFTSRestClient extends FTSRestClient else { errorMessage = getMessageByHTTPStatusCode( - clientResponse.getStatus(), "PDB"); + responseStatus, "PDB"); throw new Exception(errorMessage); } } diff --git a/src/jalview/gui/StructureChooser.java b/src/jalview/gui/StructureChooser.java index e18d6af..ec2ebe3 100644 --- a/src/jalview/gui/StructureChooser.java +++ b/src/jalview/gui/StructureChooser.java @@ -322,6 +322,11 @@ public class StructureChooser extends GStructureChooser boolean isUniProtRefsFound = false; StringBuilder queryBuilder = new StringBuilder(); Set seqRefs = new LinkedHashSet<>(); + + /* + * note PDBs as DBRefEntry so they are not duplicated in query + */ + Set pdbids = new HashSet<>(); if (seq.getAllPDBEntries() != null && queryBuilder.length() < MAX_QLENGTH) @@ -330,9 +335,10 @@ public class StructureChooser extends GStructureChooser { if (isValidSeqName(entry.getId())) { - queryBuilder.append("pdb_id:").append(entry.getId().toLowerCase()) - .append(" OR "); + String id = entry.getId().toLowerCase(); + queryBuilder.append("pdb_id:").append(id).append(" OR "); isPDBRefsFound = true; + pdbids.add(id); } } } @@ -355,9 +361,13 @@ public class StructureChooser extends GStructureChooser else if (dbRef.getSource().equalsIgnoreCase(DBRefSource.PDB)) { - queryBuilder.append("pdb_id:") - .append(getDBRefId(dbRef).toLowerCase()).append(" OR "); - isPDBRefsFound = true; + String id = getDBRefId(dbRef).toLowerCase(); + if (!pdbids.contains(id)) + { + queryBuilder.append("pdb_id:").append(id).append(" OR "); + isPDBRefsFound = true; + pdbids.add(id); + } } else { -- 1.7.10.2