From e17c9f78baaa3ea7e9556c3caf335f986135ec38 Mon Sep 17 00:00:00 2001 From: Baptiste Toulemonde <toulemonde@cines.fr> Date: Tue, 23 Aug 2022 10:37:14 +0200 Subject: [PATCH] WIP --- .../SmartHarvesterMappingController.java | 21 +++++- .../model/mapping/request/KeywordRequest.java | 25 +++++++ .../model/mapping/request/MappingRequest.java | 10 +-- .../service/OpenApiServiceImpl.java | 74 ++++++++++++++++++- src/main/resources/application-dev.properties | 6 +- 5 files changed, 124 insertions(+), 12 deletions(-) create mode 100644 src/main/java/com/smartharvester/model/mapping/request/KeywordRequest.java diff --git a/src/main/java/com/smartharvester/controller/SmartHarvesterMappingController.java b/src/main/java/com/smartharvester/controller/SmartHarvesterMappingController.java index cc70957..d393cb9 100644 --- a/src/main/java/com/smartharvester/controller/SmartHarvesterMappingController.java +++ b/src/main/java/com/smartharvester/controller/SmartHarvesterMappingController.java @@ -2,10 +2,12 @@ package com.smartharvester.controller; import com.smartharvester.model.mapping.Path; +import com.smartharvester.model.mapping.request.KeywordRequest; import com.smartharvester.model.mapping.request.MappingRequest; import com.smartharvester.model.mapping.response.MappingResponse; import com.smartharvester.service.MappingFromIsoService; import com.smartharvester.service.MappingService; +import com.smartharvester.service.OpenApiServiceImpl; import io.swagger.v3.oas.annotations.tags.Tag; import org.json.JSONException; import org.slf4j.Logger; @@ -36,6 +38,9 @@ public class SmartHarvesterMappingController { @Autowired private MappingService mappingService; + @Autowired + private OpenApiServiceImpl openApiService; + @GetMapping public ResponseEntity<String> transformXmlToRdf(@RequestParam(value = "url") String url, @RequestParam(value = "catalogId") String catalogId) { @@ -50,7 +55,7 @@ public class SmartHarvesterMappingController { public ResponseEntity<MappingResponse> map(@RequestBody MappingRequest mappingRequest, @RequestParam("catalogId") String catalogId, @RequestParam String fdpUrl, @RequestParam boolean isJsonpath) { ResponseEntity<?> responseEntity; - List<String> urls = mappingRequest.getUrls(); + List<String> ids = mappingRequest.getIds(); List<Path> paths = mappingRequest.getPaths(); String fdpToken = mappingRequest.getFdpToken(); List<String> publishedUrl = new ArrayList<>(); @@ -58,6 +63,9 @@ public class SmartHarvesterMappingController { List<Path> distributionPaths = paths.stream().filter(path -> path.getDcatClass().equals("dcat:distribution")) .collect(Collectors.toList()); + List<String> urls = new ArrayList<>(); + ids.parallelStream().forEach(id -> urls.addAll(this.openApiService.getUrls(this.openApiService.getOpenApiByUUDI(catalogId), id))); + for (String url : urls) { String datasetId; @@ -105,4 +113,15 @@ public class SmartHarvesterMappingController { } + @PostMapping("/keywords") + public ResponseEntity<List<String>> getKeywords (@RequestBody KeywordRequest req) { + List<String> keywords = new ArrayList<>(); + if (req.isJSonPath()) { + + } else { + + } + return ResponseEntity.ok(keywords); + } + } diff --git a/src/main/java/com/smartharvester/model/mapping/request/KeywordRequest.java b/src/main/java/com/smartharvester/model/mapping/request/KeywordRequest.java new file mode 100644 index 0000000..0d85f24 --- /dev/null +++ b/src/main/java/com/smartharvester/model/mapping/request/KeywordRequest.java @@ -0,0 +1,25 @@ +package com.smartharvester.model.mapping.request; + +import java.util.List; + +public class KeywordRequest { + + private boolean isJSonPath; + private List<String> keywordPaths; + + public boolean isJSonPath() { + return isJSonPath; + } + + public void setJSonPath(boolean JSonPath) { + isJSonPath = JSonPath; + } + + public List<String> getKeywordPaths() { + return keywordPaths; + } + + public void setKeywordPaths(List<String> keywordPaths) { + this.keywordPaths = keywordPaths; + } +} diff --git a/src/main/java/com/smartharvester/model/mapping/request/MappingRequest.java b/src/main/java/com/smartharvester/model/mapping/request/MappingRequest.java index ce798be..bb9287f 100644 --- a/src/main/java/com/smartharvester/model/mapping/request/MappingRequest.java +++ b/src/main/java/com/smartharvester/model/mapping/request/MappingRequest.java @@ -6,17 +6,17 @@ import java.util.List; public class MappingRequest { - private List<String> urls; + private List<String> ids; private List<Path> paths; private String fdpToken; - public List<String> getUrls() { - return urls; + public List<String> getIds() { + return ids; } - public void setUrls(List<String> urls) { - this.urls = urls; + public void setIds(List<String> ids) { + this.ids = ids; } public List<Path> getPaths() { diff --git a/src/main/java/com/smartharvester/service/OpenApiServiceImpl.java b/src/main/java/com/smartharvester/service/OpenApiServiceImpl.java index d5f124c..98d95ba 100644 --- a/src/main/java/com/smartharvester/service/OpenApiServiceImpl.java +++ b/src/main/java/com/smartharvester/service/OpenApiServiceImpl.java @@ -7,9 +7,8 @@ import com.smartharvester.model.openapi.OpenApiPathItemParameter; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; +import java.util.*; +import java.util.stream.Collectors; public class OpenApiServiceImpl implements OpenApiService { @@ -61,5 +60,74 @@ public class OpenApiServiceImpl implements OpenApiService { openApiDaoRepository.save(openApi); } + public List<String> getUrls(OpenApi openApi, String id) { + List<Map<String, OpenApiPathItem>> datasetItems = + (List<Map<String, OpenApiPathItem>>) this.getDatasetItems(openApi); + List<String> paths = this.getPaths(openApi); + List<String> urls = new ArrayList<>(); + for (int i = 0; i < datasetItems.size(); i++) { + String url = ""; + List<OpenApiPathItemParameter> parameters = datasetItems.get(i).get("get").getParameters(); + Map<String, String> mapQueryParameters = new HashMap<>(); + Map<String, String> mapPathParameters = new HashMap<>(); + for(OpenApiPathItemParameter param: parameters) { + if (param.getRequired()) { + if(param.getIn().equals("query")) { + mapQueryParameters.put(param.getName(), id); + } else if (param.getIn().equals("path")){ + paths.set(i, paths.get(i).replace("{" + param.getName() + "}", id)); + } + } else { + if(param.getIn().equals("query")) { + mapQueryParameters.put(param.getName(), param.getSchema().getDefaultValue()); + } else if (param.getIn().equals("path")){ + mapPathParameters.put(param.getName(), param.getSchema().getDefaultValue()); + } + } + } + String listOfParams = "?"; + String pathParam = ""; + for(Map.Entry<String, String> entry: mapQueryParameters.entrySet()) { + listOfParams = listOfParams.concat(entry.getKey() + "=" + entry.getValue() + "&"); + } + for(Map.Entry<String, String> entry: mapPathParameters.entrySet()) { + pathParam += "/" + entry.getValue(); + } + + listOfParams = StringUtils.substring(listOfParams, 0, listOfParams.length() - 1); + + url = this.getBaseUrl(openApi) + paths.get(i) + pathParam + listOfParams; + + String pathToData = datasetItems.get(i).get("get").getResponses() + .get(datasetItems.get(i).get("get").getResponses().keySet().toArray()[0]).getContent() + .get("application/json").getExample(); + + + urls.add(url); + } + + + return urls; + } + + public Collection<Map<String, OpenApiPathItem>> getDatasetItems(OpenApi openApi) { + return openApi.getPaths().values().stream().filter(e -> e.get("get").getTags().get(0).equals("dataset")) + .collect( + Collectors.toList()); + } + + public List<String> getPaths(OpenApi openApi) { + List<String> paths = new ArrayList<>(); + for (Map.Entry<String, Map<String, OpenApiPathItem>> mapEntry : openApi.getPaths().entrySet()) { + if (mapEntry.getValue().get("get").getTags().get(0).equals("dataset")) { + paths.add(mapEntry.getKey()); + } + } + return paths; + } + + public String getBaseUrl(OpenApi openApi) { + return openApi.getServers().get(0).getUrl(); + } } diff --git a/src/main/resources/application-dev.properties b/src/main/resources/application-dev.properties index 3e448fd..d82af29 100644 --- a/src/main/resources/application-dev.properties +++ b/src/main/resources/application-dev.properties @@ -6,8 +6,8 @@ spring.jackson.serialization.indent-output=true server.port=8080 # 3. MongoDB configuration. -spring.data.mongodb.uri=mongodb://admin:adminadmin@90.147.167.103:27017/fdp?authSource=admin - +#spring.data.mongodb.uri=mongodb://admin:adminadmin@90.147.167.103:27017/fdp?authSource=admin +spring.data.mongodb.uri=mongodb://10.6.10.97:27017/fdp?authSource=admin # 4. Logging configuration. logging.level.com.assignment.springboot.mongo=DEBUG @@ -42,4 +42,4 @@ spring.security.oauth2.client.provider.oidc.issuer-uri=https://iam-pillar.cloud. spring.security.oauth2.client.registration.oidc.client-id=a03a6ac2-acfe-4916-9d0f-db874ea94e75 spring.security.oauth2.client.registration.oidc.client-secret=cLONCJ8MccdHwobCEMSl_sYDJGKpmBxH16SyiRIBx8XeoDa2ZLwzTvF_aVoEeOt3h2sNbZqltRqhfHKeI3g7Dw spring.security.oauth2.client.registration.oidc.scope=address,phone,openid,email,profile -spring.security.oauth2.client.registration.oidc.redirect-uri=http://localhost:4200/callback \ No newline at end of file +spring.security.oauth2.client.registration.oidc.redirect-uri=http://localhost:4200/callback -- GitLab