diff --git a/src/main/java/eu/hbp/mip/controllers/PathologiesAPI.java b/src/main/java/eu/hbp/mip/controllers/PathologiesAPI.java index e53d8d354c98f36db958492e72302612e806878c..e6a2de6856ad2efc5c9b9d445ee9f720933956ea 100644 --- a/src/main/java/eu/hbp/mip/controllers/PathologiesAPI.java +++ b/src/main/java/eu/hbp/mip/controllers/PathologiesAPI.java @@ -15,8 +15,6 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RestController; -import java.io.IOException; -import java.net.ConnectException; import java.util.*; import static org.springframework.http.MediaType.APPLICATION_JSON_VALUE; @@ -49,17 +47,14 @@ public class PathologiesAPI { Logger logger = new Logger(activeUserService.getActiveUser().getUsername(), "(GET) /pathologies"); logger.LogUserAction("Loading pathologies ..."); - Map<String, List<PathologyDTO.PathologyDatasetDTO>> datasetsPerPathology = getMIPEngineDatasetsPerPathology(logger); - System.out.println(datasetsPerPathology); + Map<String, List<PathologyDTO.EnumerationDTO>> datasetsPerPathology = getMIPEngineDatasetsPerPathology(logger); Map<String, MIPEngineAttributesDTO> mipEnginePathologyAttributes = getMIPEnginePathologyAttributes(logger); - System.out.println(mipEnginePathologyAttributes); List<PathologyDTO> pathologyDTOS = new ArrayList<>(); for (String pathology : mipEnginePathologyAttributes.keySet()) { pathologyDTOS.add(new PathologyDTO(pathology, mipEnginePathologyAttributes.get(pathology), datasetsPerPathology.get(pathology))); } - System.out.println(pathologyDTOS); // If authentication is disabled return everything if (!authenticationIsEnabled) { @@ -71,7 +66,7 @@ public class PathologiesAPI { return ResponseEntity.ok().body(gson.toJson(ClaimUtils.getAuthorizedPathologies(logger, authentication, pathologyDTOS))); } - public Map<String, List<PathologyDTO.PathologyDatasetDTO>> getMIPEngineDatasetsPerPathology(Logger logger) { + public Map<String, List<PathologyDTO.EnumerationDTO>> getMIPEngineDatasetsPerPathology(Logger logger) { Map<String, Map<String, MetadataHierarchyDTO.CommonDataElement>> mipEngineCDEsMetadata; // Get MIPEngine algorithms try { @@ -87,15 +82,17 @@ public class PathologiesAPI { return null; } - Map<String, List<PathologyDTO.PathologyDatasetDTO>> datasetsPerPathology = new HashMap<>(); + Map<String, List<PathologyDTO.EnumerationDTO>> datasetsPerPathology = new HashMap<>(); mipEngineCDEsMetadata.forEach( (pathology, cdePerDataset) -> { - List<PathologyDTO.PathologyDatasetDTO> pathologyDatasetDTOS = new ArrayList<>(); - cdePerDataset.forEach((dataset, cde) -> pathologyDatasetDTOS.add(new PathologyDTO.PathologyDatasetDTO(dataset, cde.getLabel()))); + List<PathologyDTO.EnumerationDTO> pathologyDatasetDTOS = new ArrayList<>(); + Map datasetEnumerations = (Map) cdePerDataset.get("dataset").getEnumerations(); + datasetEnumerations.forEach((code, label) -> pathologyDatasetDTOS.add(new PathologyDTO.EnumerationDTO((String) code, (String) label))); datasetsPerPathology.put(pathology, pathologyDatasetDTOS); }); + return datasetsPerPathology; } @@ -115,6 +112,14 @@ public class PathologiesAPI { return null; } - return mipEnginePathologyAttributes; + Map<String, MIPEngineAttributesDTO> mipEnginePathologyAttributesWithProperEnums = new HashMap<>(); + for (Map.Entry<String, MIPEngineAttributesDTO> entry : mipEnginePathologyAttributes.entrySet()) { + String pathology = entry.getKey(); + MIPEngineAttributesDTO attributes = entry.getValue(); + attributes.updateAttributesWithProperEnums(); + mipEnginePathologyAttributesWithProperEnums.put(pathology, attributes); + } + + return mipEnginePathologyAttributesWithProperEnums; } } diff --git a/src/main/java/eu/hbp/mip/models/DTOs/MIPEngineAttributesDTO.java b/src/main/java/eu/hbp/mip/models/DTOs/MIPEngineAttributesDTO.java index 2f81aee6a9044396960d1b940f36cb350340d13a..2c4794d7e0b691a34e82be01638f54207958b18a 100644 --- a/src/main/java/eu/hbp/mip/models/DTOs/MIPEngineAttributesDTO.java +++ b/src/main/java/eu/hbp/mip/models/DTOs/MIPEngineAttributesDTO.java @@ -1,10 +1,11 @@ package eu.hbp.mip.models.DTOs; import com.google.gson.annotations.SerializedName; -import eu.hbp.mip.models.DTOs.MetadataHierarchyDTO; import lombok.AllArgsConstructor; import lombok.Data; +import java.util.ArrayList; +import java.util.HashMap; import java.util.List; import java.util.Map; @@ -17,4 +18,19 @@ public class MIPEngineAttributesDTO { @SerializedName("tags") private Object tags; + public void updateAttributesWithProperEnums(){ + Map<String, List<MetadataHierarchyDTO>> updated_properties = new HashMap<>(); + for (Map.Entry<String, List<MetadataHierarchyDTO>> entry : this.properties.entrySet()) { + String pathology = entry.getKey(); + List<MetadataHierarchyDTO> hierarchyDTOS = entry.getValue(); + List<MetadataHierarchyDTO> updatedHierarchyDTOS = new ArrayList<>(); + + for (MetadataHierarchyDTO hierarchyDTO : hierarchyDTOS) { + hierarchyDTO.updateGroupWithProperEnums(); + updatedHierarchyDTOS.add(hierarchyDTO); + } + updated_properties.put(pathology,updatedHierarchyDTOS); + } + this.properties = updated_properties; + } } diff --git a/src/main/java/eu/hbp/mip/models/DTOs/MetadataHierarchyDTO.java b/src/main/java/eu/hbp/mip/models/DTOs/MetadataHierarchyDTO.java index e0db0c70d9430cf21b8a92c9ec70e4d8f46aa10a..200523a91b2fd6a821606ac3c32380c73ace214e 100644 --- a/src/main/java/eu/hbp/mip/models/DTOs/MetadataHierarchyDTO.java +++ b/src/main/java/eu/hbp/mip/models/DTOs/MetadataHierarchyDTO.java @@ -4,9 +4,9 @@ import com.google.gson.annotations.SerializedName; import lombok.AllArgsConstructor; import lombok.Data; -import java.util.Hashtable; +import java.util.ArrayList; import java.util.List; -import java.util.Optional; +import java.util.Map; @Data @AllArgsConstructor @@ -19,15 +19,15 @@ public class MetadataHierarchyDTO { private String code; @SerializedName("groups") - private Object groups; + private List<MetadataHierarchyDTO> groups; @SerializedName("label") private String label; @Data @AllArgsConstructor public static class CommonDataElement { - @SerializedName("isCategorical") - private Boolean isCategorical; + @SerializedName("is_categorical") + private Boolean is_categorical; @SerializedName("code") private String code; @@ -53,5 +53,46 @@ public class MetadataHierarchyDTO { @SerializedName("methodology") private String methodology; + @SerializedName("min") + private String min; + + @SerializedName("max") + private String max; + + private void updateEnumerations(){ + if (this.enumerations != null){ + Map old_enumeration = (Map) this.enumerations; + List<PathologyDTO.EnumerationDTO> enumerationDTOS = new ArrayList<>(); + old_enumeration.forEach((cdeCode, cdeLabel) -> { + enumerationDTOS.add(new PathologyDTO.EnumerationDTO((String) cdeCode, (String) cdeLabel)); + }); + setEnumerations(enumerationDTOS); + } + } + } + + public void updateVariableWithProperEnums(){ + List<CommonDataElement> updated_variables = new ArrayList<>(); + this.variables.forEach(commonDataElement -> { + commonDataElement.updateEnumerations(); + updated_variables.add(commonDataElement); + }); + setVariables(updated_variables); + } + + public void updateGroupWithProperEnums(){ + List<MetadataHierarchyDTO> updated_groups = new ArrayList<>(); + for (MetadataHierarchyDTO hierarchyDTO : this.groups) { + + if (hierarchyDTO.getVariables() != null) { + hierarchyDTO.updateVariableWithProperEnums(); + } + + if (hierarchyDTO.getGroups() != null) { + hierarchyDTO.updateGroupWithProperEnums(); + } + updated_groups.add(hierarchyDTO); + } + this.groups = updated_groups; } } diff --git a/src/main/java/eu/hbp/mip/models/DTOs/PathologyDTO.java b/src/main/java/eu/hbp/mip/models/DTOs/PathologyDTO.java index 8771aefd1aad8ad173982c4b2b0fdb9b8bce17a9..e47a27a9fd0516c1b30d951e22b93eaa3ce37152 100644 --- a/src/main/java/eu/hbp/mip/models/DTOs/PathologyDTO.java +++ b/src/main/java/eu/hbp/mip/models/DTOs/PathologyDTO.java @@ -6,7 +6,6 @@ import lombok.Data; import java.util.Arrays; import java.util.List; -import java.util.Optional; @Data @AllArgsConstructor @@ -26,14 +25,14 @@ public class PathologyDTO { private MetadataHierarchyDTO metadataHierarchyDTO; @SerializedName("datasets") - private List<PathologyDatasetDTO> datasets; + private List<EnumerationDTO> datasets; public PathologyDTO(){ } - public PathologyDTO(String pathology, MIPEngineAttributesDTO mipEngineAttributesDTO, List<PathologyDatasetDTO> pathologyDatasetDTOS) { + public PathologyDTO(String pathology, MIPEngineAttributesDTO mipEngineAttributesDTO, List<EnumerationDTO> pathologyDatasetDTOS) { MetadataHierarchyDTO metadataHierarchyDTO = mipEngineAttributesDTO.getProperties().get("cdes").get(0); List<MetadataHierarchyDTO.CommonDataElement> variables = metadataHierarchyDTO.getVariables(); variables.stream().filter(cde -> cde.getCode().equals("dataset")). @@ -50,7 +49,7 @@ public class PathologyDTO { @Data @AllArgsConstructor - public static class PathologyDatasetDTO { + public static class EnumerationDTO { @SerializedName("code") private String code; diff --git a/src/main/java/eu/hbp/mip/utils/ClaimUtils.java b/src/main/java/eu/hbp/mip/utils/ClaimUtils.java index df2a75abf5d4a509b3bb6ee534ff1ed0de4555cd..650ac9c65fc4cf461159a3d94673d406cfe19dce 100644 --- a/src/main/java/eu/hbp/mip/utils/ClaimUtils.java +++ b/src/main/java/eu/hbp/mip/utils/ClaimUtils.java @@ -68,8 +68,8 @@ public class ClaimUtils { List<PathologyDTO> userPathologies = new ArrayList<>(); for (PathologyDTO curPathology : allPathologies) { - List<PathologyDTO.PathologyDatasetDTO> userPathologyDatasets = new ArrayList<>(); - for (PathologyDTO.PathologyDatasetDTO dataset : curPathology.getDatasets()) { + List<PathologyDTO.EnumerationDTO> userPathologyDatasets = new ArrayList<>(); + for (PathologyDTO.EnumerationDTO dataset : curPathology.getDatasets()) { if (hasRoleAccess(authorities, ClaimUtils.getDatasetClaim(dataset.getCode()), logger)) { logger.LogUserAction("Added dataset: " + dataset.getCode()); userPathologyDatasets.add(dataset);