diff --git a/src/main/java/com/smartharvester/controller/SmartHarvesterMappingController.java b/src/main/java/com/smartharvester/controller/SmartHarvesterMappingController.java index cc709573823b24ae1f3643f22afef91b3e5102da..d393cb943522bccbabaadd5d495444cb7292bbb2 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 0000000000000000000000000000000000000000..0d85f24a4c1491c60a2b5f83e77c88531247c4da --- /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 ce798bebb48e9a1b5210904836b379602a7f0769..bb9287f58fd56a8ce66a2966c613f3fd6a5d3d7e 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 d5f124c88143c5e9077f85452161b2cbc1456922..98d95ba02246aa4953970c865b3c06e64feaac58 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 3e448fde8b132bd91546f96b2a4f59afe18120b7..d82af2994aa69ead5f11a2fd40ed463f479bfd47 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