Skip to content

Commit

Permalink
Merge pull request #37 from HBPMedical/dev/MIP-581/provide_experiment…
Browse files Browse the repository at this point in the history
…_uuid_to_mipengine_request

Dev/mip 581/provide experiment UUID to mipengine request
  • Loading branch information
ThanKarab authored Apr 18, 2022
2 parents 4587594 + 23b3957 commit f373cbf
Show file tree
Hide file tree
Showing 8 changed files with 94 additions and 47 deletions.
8 changes: 4 additions & 4 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -31,8 +31,8 @@
<jquery.version>3.0.0</jquery.version>
<bootstrap.version>3.3.7</bootstrap.version>
<webjars-locator.version>0.36</webjars-locator.version>
<h2.version>1.4.192</h2.version>
<postgresql.version>42.2.1</postgresql.version>
<h2.version>2.1.210</h2.version>
<postgresql.version>42.3.3</postgresql.version>
<gson.version>2.7</gson.version>
<slugify.version>2.1.5</slugify.version>
<maven-resources-plugin.version>3.0.1</maven-resources-plugin.version>
Expand All @@ -43,11 +43,11 @@
<commons-dbcp.version>2.7.0</commons-dbcp.version>
<flyway-core.version>4.2.0</flyway-core.version>
<hibernate-jpa-2.1-api.version>1.0.0.Final</hibernate-jpa-2.1-api.version>
<hibernate.version>5.4.10.Final</hibernate.version>
<hibernate.version>5.4.24.Final</hibernate.version>
<hibernate-validator.version>6.1.0.Final</hibernate-validator.version>
<aspectjweaver.version>1.8.9</aspectjweaver.version>
<javax-inject.version>1</javax-inject.version>
<protobuf-java.version>3.1.0</protobuf-java.version>
<protobuf-java.version>3.16.1</protobuf-java.version>
</properties>

<repositories>
Expand Down
1 change: 0 additions & 1 deletion src/main/java/eu/hbp/mip/controllers/AlgorithmsAPI.java
Original file line number Diff line number Diff line change
Expand Up @@ -150,7 +150,6 @@ public ArrayList<ExaremeAlgorithmDTO> getMIPEngineAlgorithms(Logger logger) {
try {
StringBuilder response = new StringBuilder();
HTTPUtil.sendGet(mipengineAlgorithmsUrl, response);
logger.LogUserAction(response.toString());
mipEngineAlgorithms = gson.fromJson(
response.toString(),
new TypeToken<ArrayList<MIPEngineAlgorithmDTO>>() {
Expand Down
23 changes: 12 additions & 11 deletions src/main/java/eu/hbp/mip/models/DTOs/ExaremeAlgorithmDTO.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,8 @@
import lombok.AllArgsConstructor;
import lombok.Data;

import java.util.*;
import java.util.ArrayList;
import java.util.List;

@Data
@AllArgsConstructor
Expand All @@ -25,37 +26,37 @@ public class ExaremeAlgorithmDTO {
@SerializedName("parameters")
private List<ExaremeAlgorithmRequestParamDTO> 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<ExaremeAlgorithmRequestParamDTO> 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);
});
}
this.setParameters(parameters);
}

@Data
@AllArgsConstructor
static class Rule
{
static class Rule {
@SerializedName("id")
private String id;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -90,6 +90,10 @@ public static class MIPEngineAlgorithmInputdataDTO {
public Optional<MIPEngineAlgorithmInputDataDetailDTO> getY() {
return Optional.ofNullable(y);
}

public Optional<MIPEngineAlgorithmInputDataDetailDTO> getX() {
return Optional.ofNullable(x);
}
}

@Data
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,21 +5,20 @@
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<String, Object> parameters;

public MIPEngineAlgorithmRequestDTO(List<ExaremeAlgorithmRequestParamDTO> exaremeAlgorithmRequestParamDTOs)
{
public MIPEngineAlgorithmRequestDTO(UUID experimentUUID, List<ExaremeAlgorithmRequestParamDTO> exaremeAlgorithmRequestParamDTOs) {
this.request_id = experimentUUID.toString();
MIPEngineAlgorithmRequestDTO.InputData inputData = new MIPEngineAlgorithmRequestDTO.InputData();
HashMap<String, Object> mipEngineParameters = new HashMap<>();

Expand All @@ -43,15 +42,14 @@ public MIPEngineAlgorithmRequestDTO(List<ExaremeAlgorithmRequestParamDTO> exarem
inputData.setDatasets(datasets);
break;
case "pathology":
inputData.setPathology(parameter.getValue());
inputData.setData_model(parameter.getValue());
break;
case "filter":
if (!parameter.getValue().equals(""))
rules.add(JsonConverters.convertJsonStringToObject(parameter.getValue(), MIPEngineAlgorithmRequestDTO.Filter.class));
break;
default:
mipEngineParameters.put(parameter.getName(), Arrays.asList(parameter.getValue().split(",")));
break;
mipEngineParameters.put(parameter.getName(), convertStringToMultipleValues(parameter.getValue()));
}
});
MIPEngineAlgorithmRequestDTO.Filter filter = new MIPEngineAlgorithmRequestDTO.Filter("AND", rules);
Expand All @@ -60,12 +58,60 @@ public MIPEngineAlgorithmRequestDTO(List<ExaremeAlgorithmRequestParamDTO> exarem
this.parameters = mipEngineParameters;
}

private static Object convertStringToMultipleValues(String str) {
String[] stringValues = str.split(",");
if (stringValues.length == 0)
return "";

if (stringValues.length == 1)
return convertStringToNumeric(stringValues[0]);

List<Object> 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
public static class InputData {
@SerializedName("pathology")
private String pathology;
@SerializedName("data_model")
private String data_model;
@SerializedName("datasets")
private List<String> datasets;
@SerializedName("filters")
Expand All @@ -74,15 +120,15 @@ public static class InputData {
private List<String> x;
@SerializedName("y")
private List<String> y;
public InputData(){

public InputData() {

}
}

@Data
@AllArgsConstructor
public static class Filter
{
public static class Filter {
@SerializedName("condition")
private String condition;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}

Expand Down
6 changes: 3 additions & 3 deletions src/main/java/eu/hbp/mip/services/ExperimentService.java
Original file line number Diff line number Diff line change
Expand Up @@ -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");
Expand All @@ -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);
Expand Down Expand Up @@ -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);
Expand Down
17 changes: 9 additions & 8 deletions src/main/java/eu/hbp/mip/utils/ControllerExceptionHandler.java
Original file line number Diff line number Diff line change
Expand Up @@ -8,14 +8,14 @@
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
public class ControllerExceptionHandler extends ResponseEntityExceptionHandler {

@ExceptionHandler(ExperimentNotFoundException.class)
public ResponseEntity<Object> handleExperimentNotFoundException(ExperimentNotFoundException ex, WebRequest request) {

ErrorMessage message = new ErrorMessage(
HttpStatus.NOT_FOUND.value(),
new Date(),
Expand All @@ -27,7 +27,6 @@ public ResponseEntity<Object> handleExperimentNotFoundException(ExperimentNotFou

@ExceptionHandler(BadRequestException.class)
public ResponseEntity<Object> handleBadRequestException(BadRequestException ex, WebRequest request) {

ErrorMessage message = new ErrorMessage(
HttpStatus.BAD_REQUEST.value(),
new Date(),
Expand All @@ -39,7 +38,6 @@ public ResponseEntity<Object> handleBadRequestException(BadRequestException ex,

@ExceptionHandler(UnauthorizedException.class)
public ResponseEntity<Object> handleUnauthorizedException(UnauthorizedException ex, WebRequest request) {

ErrorMessage message = new ErrorMessage(
HttpStatus.UNAUTHORIZED.value(),
new Date(),
Expand All @@ -49,13 +47,12 @@ public ResponseEntity<Object> 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<ErrorMessage> 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(),
Expand All @@ -78,6 +75,10 @@ public ResponseEntity<ErrorMessage> handleNoContent(NoContent nc, WebRequest req

@ExceptionHandler(Exception.class)
public ResponseEntity<ErrorMessage> 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(),
Expand Down

0 comments on commit f373cbf

Please sign in to comment.