From dbd2066f90a7667cc299d4d4f191384339a1b195 Mon Sep 17 00:00:00 2001 From: ThanKarab Date: Fri, 15 Apr 2022 15:13:10 +0300 Subject: [PATCH 1/3] Upgraded dependencies. --- pom.xml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pom.xml b/pom.xml index d92ff1f2d..65595f588 100644 --- a/pom.xml +++ b/pom.xml @@ -31,8 +31,8 @@ 3.0.0 3.3.7 0.36 - 1.4.192 - 42.2.1 + 2.1.210 + 42.3.3 2.7 2.1.5 3.0.1 @@ -43,11 +43,11 @@ 2.7.0 4.2.0 1.0.0.Final - 5.4.10.Final + 5.4.24.Final 6.1.0.Final 1.8.9 1 - 3.1.0 + 3.16.1 From 0e1654464c0eb982838ea0464edf2294ae2f41d3 Mon Sep 17 00:00:00 2001 From: ThanKarab Date: Fri, 15 Apr 2022 20:19:48 +0300 Subject: [PATCH 2/3] Fixes for MIP-Engine 0.7.0 integration. 1) Added logs when an internal exception occurs. 2) Made 'x' inputdata optional just like 'y'. 3) 'pathology' renamed to 'data_model' for mipengine. --- .../eu/hbp/mip/controllers/AlgorithmsAPI.java | 1 - .../mip/models/DTOs/ExaremeAlgorithmDTO.java | 23 ++++++++++--------- .../models/DTOs/MIPEngineAlgorithmDTO.java | 8 +++++-- .../DTOs/MIPEngineAlgorithmRequestDTO.java | 16 ++++++------- .../repositories/ExperimentRepository.java | 4 ---- .../hbp/mip/services/ExperimentService.java | 6 ++--- .../mip/utils/ControllerExceptionHandler.java | 17 +++++++------- 7 files changed, 38 insertions(+), 37 deletions(-) diff --git a/src/main/java/eu/hbp/mip/controllers/AlgorithmsAPI.java b/src/main/java/eu/hbp/mip/controllers/AlgorithmsAPI.java index 2746a2b7b..af7b96607 100644 --- a/src/main/java/eu/hbp/mip/controllers/AlgorithmsAPI.java +++ b/src/main/java/eu/hbp/mip/controllers/AlgorithmsAPI.java @@ -150,7 +150,6 @@ public ArrayList getMIPEngineAlgorithms(Logger logger) { try { StringBuilder response = new StringBuilder(); HTTPUtil.sendGet(mipengineAlgorithmsUrl, response); - logger.LogUserAction(response.toString()); mipEngineAlgorithms = gson.fromJson( response.toString(), new TypeToken>() { diff --git a/src/main/java/eu/hbp/mip/models/DTOs/ExaremeAlgorithmDTO.java b/src/main/java/eu/hbp/mip/models/DTOs/ExaremeAlgorithmDTO.java index 07459a27e..82566812a 100644 --- a/src/main/java/eu/hbp/mip/models/DTOs/ExaremeAlgorithmDTO.java +++ b/src/main/java/eu/hbp/mip/models/DTOs/ExaremeAlgorithmDTO.java @@ -4,7 +4,8 @@ import lombok.AllArgsConstructor; import lombok.Data; -import java.util.*; +import java.util.ArrayList; +import java.util.List; @Data @AllArgsConstructor @@ -25,26 +26,26 @@ public class ExaremeAlgorithmDTO { @SerializedName("parameters") private List parameters; - public ExaremeAlgorithmDTO() - { + public ExaremeAlgorithmDTO() { } - public ExaremeAlgorithmDTO(MIPEngineAlgorithmDTO mipEngineAlgorithm ) - { + public ExaremeAlgorithmDTO(MIPEngineAlgorithmDTO mipEngineAlgorithm) { this.name = mipEngineAlgorithm.getName().toUpperCase(); this.label = mipEngineAlgorithm.getLabel(); this.desc = mipEngineAlgorithm.getDesc(); this.type = "mipengine"; List parameters = new ArrayList<>(); - if (mipEngineAlgorithm.getInputdata().getY().isPresent()){ + if (mipEngineAlgorithm.getInputdata().getY().isPresent()) { parameters.add(new ExaremeAlgorithmRequestParamDTO("y", mipEngineAlgorithm.getInputdata().getY().get())); } - parameters.add(new ExaremeAlgorithmRequestParamDTO("x", mipEngineAlgorithm.getInputdata().getX())); - parameters.add(new ExaremeAlgorithmRequestParamDTO("pathology", mipEngineAlgorithm.getInputdata().getPathology())); + if (mipEngineAlgorithm.getInputdata().getX().isPresent()) { + parameters.add(new ExaremeAlgorithmRequestParamDTO("x", mipEngineAlgorithm.getInputdata().getX().get())); + } + parameters.add(new ExaremeAlgorithmRequestParamDTO("pathology", mipEngineAlgorithm.getInputdata().getData_model())); parameters.add(new ExaremeAlgorithmRequestParamDTO("dataset", mipEngineAlgorithm.getInputdata().getDatasets())); parameters.add(new ExaremeAlgorithmRequestParamDTO("filter", mipEngineAlgorithm.getInputdata().getFilter())); - if (mipEngineAlgorithm.getParameters().isPresent()){ + if (mipEngineAlgorithm.getParameters().isPresent()) { mipEngineAlgorithm.getParameters().get().forEach((name, parameterDTO) -> { ExaremeAlgorithmRequestParamDTO parameter = new ExaremeAlgorithmRequestParamDTO(name, parameterDTO); parameters.add(parameter); @@ -52,10 +53,10 @@ public ExaremeAlgorithmDTO(MIPEngineAlgorithmDTO mipEngineAlgorithm ) } this.setParameters(parameters); } + @Data @AllArgsConstructor - static class Rule - { + static class Rule { @SerializedName("id") private String id; diff --git a/src/main/java/eu/hbp/mip/models/DTOs/MIPEngineAlgorithmDTO.java b/src/main/java/eu/hbp/mip/models/DTOs/MIPEngineAlgorithmDTO.java index d991fde80..8f908902c 100644 --- a/src/main/java/eu/hbp/mip/models/DTOs/MIPEngineAlgorithmDTO.java +++ b/src/main/java/eu/hbp/mip/models/DTOs/MIPEngineAlgorithmDTO.java @@ -78,8 +78,8 @@ public static class MIPEngineAlgorithmInputdataDTO { @SerializedName("y") private MIPEngineAlgorithmInputDataDetailDTO y; - @SerializedName("pathology") - private MIPEngineAlgorithmInputDataDetailDTO pathology; + @SerializedName("data_model") + private MIPEngineAlgorithmInputDataDetailDTO data_model; @SerializedName("datasets") private MIPEngineAlgorithmInputDataDetailDTO datasets; @@ -90,6 +90,10 @@ public static class MIPEngineAlgorithmInputdataDTO { public Optional getY() { return Optional.ofNullable(y); } + + public Optional getX() { + return Optional.ofNullable(x); + } } @Data diff --git a/src/main/java/eu/hbp/mip/models/DTOs/MIPEngineAlgorithmRequestDTO.java b/src/main/java/eu/hbp/mip/models/DTOs/MIPEngineAlgorithmRequestDTO.java index a5604f2e7..da5f96d1d 100644 --- a/src/main/java/eu/hbp/mip/models/DTOs/MIPEngineAlgorithmRequestDTO.java +++ b/src/main/java/eu/hbp/mip/models/DTOs/MIPEngineAlgorithmRequestDTO.java @@ -5,21 +5,21 @@ import lombok.AllArgsConstructor; import lombok.Data; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.HashMap; -import java.util.List; +import java.util.*; @Data @AllArgsConstructor public class MIPEngineAlgorithmRequestDTO { + @SerializedName("request_id") + private String request_id; @SerializedName("inputdata") private InputData inputdata; @SerializedName("parameters") private HashMap parameters; - public MIPEngineAlgorithmRequestDTO(List exaremeAlgorithmRequestParamDTOs) + public MIPEngineAlgorithmRequestDTO(UUID experimentUUID, List exaremeAlgorithmRequestParamDTOs) { + this.request_id = experimentUUID.toString(); MIPEngineAlgorithmRequestDTO.InputData inputData = new MIPEngineAlgorithmRequestDTO.InputData(); HashMap mipEngineParameters = new HashMap<>(); @@ -43,7 +43,7 @@ public MIPEngineAlgorithmRequestDTO(List exarem inputData.setDatasets(datasets); break; case "pathology": - inputData.setPathology(parameter.getValue()); + inputData.setData_model(parameter.getValue()); break; case "filter": if (!parameter.getValue().equals("")) @@ -64,8 +64,8 @@ public MIPEngineAlgorithmRequestDTO(List exarem @Data @AllArgsConstructor public static class InputData { - @SerializedName("pathology") - private String pathology; + @SerializedName("data_model") + private String data_model; @SerializedName("datasets") private List datasets; @SerializedName("filters") diff --git a/src/main/java/eu/hbp/mip/repositories/ExperimentRepository.java b/src/main/java/eu/hbp/mip/repositories/ExperimentRepository.java index 4960f27c4..c4cd47ebe 100644 --- a/src/main/java/eu/hbp/mip/repositories/ExperimentRepository.java +++ b/src/main/java/eu/hbp/mip/repositories/ExperimentRepository.java @@ -73,10 +73,6 @@ default ExperimentDAO createExperimentInTheDatabase(ExperimentDTO experimentDTO, logger.LogUserAction("Attempted to save changes to database but an error ocurred : " + e.getMessage() + "."); throw new InternalServerError(e.getMessage()); } - - logger.LogUserAction(" id : " + experimentDAO.getUuid()); - logger.LogUserAction(" algorithm : " + experimentDAO.getAlgorithm()); - logger.LogUserAction(" name : " + experimentDAO.getName()); return experimentDAO; } diff --git a/src/main/java/eu/hbp/mip/services/ExperimentService.java b/src/main/java/eu/hbp/mip/services/ExperimentService.java index 1a4403d76..747b5acdd 100644 --- a/src/main/java/eu/hbp/mip/services/ExperimentService.java +++ b/src/main/java/eu/hbp/mip/services/ExperimentService.java @@ -403,6 +403,7 @@ private ExperimentDTO createSynchronousExperiment(ExperimentDTO experimentDTO, L logger.LogUserAction("Running the algorithm..."); ExperimentDAO experimentDAO = experimentRepository.createExperimentInTheDatabase(experimentDTO, activeUserService.getActiveUser(), logger); + experimentDTO.setUuid(experimentDAO.getUuid()); logger.LogUserAction("Created experiment with uuid :" + experimentDAO.getUuid()); logger.LogUserAction("Starting execution in thread"); @@ -422,9 +423,8 @@ private ExperimentDTO createSynchronousExperiment(ExperimentDTO experimentDTO, L experimentDAO.setStatus((exaremeAlgorithmResultDTO.getCode() >= 400) ? ExperimentDAO.Status.error : ExperimentDAO.Status.success); } catch (Exception e) { - logger.LogUserAction("There was an exception: " + e.getMessage()); - experimentDAO.setStatus(ExperimentDAO.Status.error); + throw e; } experimentRepository.finishExperiment(experimentDAO, logger); @@ -499,7 +499,7 @@ private ExaremeAlgorithmResultDTO runMIPEngineExperiment(ExperimentDTO experimen String algorithmEndpoint = mipengineAlgorithmsUrl + "/" + algorithmName.toLowerCase(); MIPEngineAlgorithmRequestDTO mipEngineAlgorithmRequestDTO = - new MIPEngineAlgorithmRequestDTO(experimentDTO.getAlgorithm().getParameters()); + new MIPEngineAlgorithmRequestDTO(experimentDTO.getUuid(), experimentDTO.getAlgorithm().getParameters()); String algorithmBody = JsonConverters.convertObjectToJsonString(mipEngineAlgorithmRequestDTO); logger.LogUserAction("MIP-Engine algorithm execution. Endpoint: " + algorithmEndpoint); logger.LogUserAction("MIP-Engine algorithm execution. Body: " + algorithmBody); diff --git a/src/main/java/eu/hbp/mip/utils/ControllerExceptionHandler.java b/src/main/java/eu/hbp/mip/utils/ControllerExceptionHandler.java index 7f644fb7f..09d396151 100644 --- a/src/main/java/eu/hbp/mip/utils/ControllerExceptionHandler.java +++ b/src/main/java/eu/hbp/mip/utils/ControllerExceptionHandler.java @@ -8,6 +8,7 @@ import org.springframework.web.context.request.WebRequest; import org.springframework.web.servlet.mvc.method.annotation.ResponseEntityExceptionHandler; +import java.util.Arrays; import java.util.Date; @ControllerAdvice @@ -15,7 +16,6 @@ public class ControllerExceptionHandler extends ResponseEntityExceptionHandler { @ExceptionHandler(ExperimentNotFoundException.class) public ResponseEntity handleExperimentNotFoundException(ExperimentNotFoundException ex, WebRequest request) { - ErrorMessage message = new ErrorMessage( HttpStatus.NOT_FOUND.value(), new Date(), @@ -27,7 +27,6 @@ public ResponseEntity handleExperimentNotFoundException(ExperimentNotFou @ExceptionHandler(BadRequestException.class) public ResponseEntity handleBadRequestException(BadRequestException ex, WebRequest request) { - ErrorMessage message = new ErrorMessage( HttpStatus.BAD_REQUEST.value(), new Date(), @@ -39,7 +38,6 @@ public ResponseEntity handleBadRequestException(BadRequestException ex, @ExceptionHandler(UnauthorizedException.class) public ResponseEntity handleUnauthorizedException(UnauthorizedException ex, WebRequest request) { - ErrorMessage message = new ErrorMessage( HttpStatus.UNAUTHORIZED.value(), new Date(), @@ -49,13 +47,12 @@ public ResponseEntity handleUnauthorizedException(UnauthorizedException return new ResponseEntity<>(message, HttpStatus.UNAUTHORIZED); } - @ExceptionHandler(IllegalArgumentException.class) - public Object handleIllegalArgumentException(IllegalArgumentException ex, WebRequest request) { - return null; - } - @ExceptionHandler(InternalServerError.class) public ResponseEntity handleInternalServerError(InternalServerError er, WebRequest request) { + logger.error("An unexpected exception occurred: " + er.getClass() + + "\nMessage: " + er.getMessage() + + "\nStacktrace: " + Arrays.toString(er.getStackTrace()).replaceAll(", ", "\n") + ); ErrorMessage message = new ErrorMessage( HttpStatus.INTERNAL_SERVER_ERROR.value(), new Date(), @@ -78,6 +75,10 @@ public ResponseEntity handleNoContent(NoContent nc, WebRequest req @ExceptionHandler(Exception.class) public ResponseEntity globalExceptionHandler(Exception ex, WebRequest request) { + logger.error("An unexpected exception occurred: " + ex.getClass() + + "\nMessage: " + ex.getMessage() + + "\nStacktrace: " + Arrays.toString(ex.getStackTrace()).replaceAll(", ", "\n") + ); ErrorMessage message = new ErrorMessage( HttpStatus.INTERNAL_SERVER_ERROR.value(), new Date(), From 23b395721dd35c9978c3191ea33ee9d756d646a4 Mon Sep 17 00:00:00 2001 From: ThanKarab Date: Mon, 18 Apr 2022 13:17:36 +0300 Subject: [PATCH 3/3] Added logic for sending MIP-Engine parameter values as Integer/Double when possible. --- .../DTOs/MIPEngineAlgorithmRequestDTO.java | 60 ++++++++++++++++--- 1 file changed, 53 insertions(+), 7 deletions(-) diff --git a/src/main/java/eu/hbp/mip/models/DTOs/MIPEngineAlgorithmRequestDTO.java b/src/main/java/eu/hbp/mip/models/DTOs/MIPEngineAlgorithmRequestDTO.java index da5f96d1d..7bcfe53e1 100644 --- a/src/main/java/eu/hbp/mip/models/DTOs/MIPEngineAlgorithmRequestDTO.java +++ b/src/main/java/eu/hbp/mip/models/DTOs/MIPEngineAlgorithmRequestDTO.java @@ -17,8 +17,7 @@ public class MIPEngineAlgorithmRequestDTO { @SerializedName("parameters") private HashMap parameters; - public MIPEngineAlgorithmRequestDTO(UUID experimentUUID, List exaremeAlgorithmRequestParamDTOs) - { + public MIPEngineAlgorithmRequestDTO(UUID experimentUUID, List exaremeAlgorithmRequestParamDTOs) { this.request_id = experimentUUID.toString(); MIPEngineAlgorithmRequestDTO.InputData inputData = new MIPEngineAlgorithmRequestDTO.InputData(); HashMap mipEngineParameters = new HashMap<>(); @@ -50,8 +49,7 @@ public MIPEngineAlgorithmRequestDTO(UUID experimentUUID, List values = new ArrayList<>(); + for (String value : stringValues) { + values.add(convertStringToNumeric(value)); + } + return values; + } + + private static Object convertStringToNumeric(String str) { + if (isInteger(str)) + return Integer.parseInt(str); + else if (isFloat(str)) + return Double.parseDouble(str); + else + return str; + } + + private static boolean isFloat(String strNum) { + if (strNum == null) { + return false; + } + try { + double d = Double.parseDouble(strNum); + } catch (NumberFormatException nfe) { + return false; + } + return true; + } + + private static boolean isInteger(String strNum) { + if (strNum == null) { + return false; + } + try { + double d = Integer.parseInt(strNum); + } catch (NumberFormatException nfe) { + return false; + } + return true; + } + @Data @AllArgsConstructor @@ -74,15 +120,15 @@ public static class InputData { private List x; @SerializedName("y") private List y; - public InputData(){ + + public InputData() { } } @Data @AllArgsConstructor - public static class Filter - { + public static class Filter { @SerializedName("condition") private String condition;