aboutsummaryrefslogtreecommitdiffstats
path: root/cps-rest/src/main
diff options
context:
space:
mode:
Diffstat (limited to 'cps-rest/src/main')
-rwxr-xr-xcps-rest/src/main/java/org/onap/cps/rest/controller/DataRestController.java43
-rw-r--r--cps-rest/src/main/java/org/onap/cps/rest/controller/QueryRestController.java96
2 files changed, 34 insertions, 105 deletions
diff --git a/cps-rest/src/main/java/org/onap/cps/rest/controller/DataRestController.java b/cps-rest/src/main/java/org/onap/cps/rest/controller/DataRestController.java
index be552ecc6a..b6a2e42a14 100755
--- a/cps-rest/src/main/java/org/onap/cps/rest/controller/DataRestController.java
+++ b/cps-rest/src/main/java/org/onap/cps/rest/controller/DataRestController.java
@@ -2,7 +2,7 @@
* ============LICENSE_START=======================================================
* Copyright (C) 2020-2022 Bell Canada.
* Modifications Copyright (C) 2021 Pantheon.tech
- * Modifications Copyright (C) 2021-2024 Nordix Foundation
+ * Modifications Copyright (C) 2021-2025 Nordix Foundation
* Modifications Copyright (C) 2022-2024 TechMahindra Ltd.
* Modifications Copyright (C) 2022 Deutsche Telekom AG
* ================================================================================
@@ -30,24 +30,19 @@ import io.micrometer.core.annotation.Timed;
import jakarta.validation.ValidationException;
import java.time.OffsetDateTime;
import java.time.format.DateTimeFormatter;
-import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import lombok.RequiredArgsConstructor;
import org.apache.commons.lang3.StringUtils;
-import org.onap.cps.api.CpsAnchorService;
import org.onap.cps.api.CpsDataService;
-import org.onap.cps.api.model.Anchor;
-import org.onap.cps.api.model.DataNode;
+import org.onap.cps.api.CpsFacade;
import org.onap.cps.api.model.DeltaReport;
import org.onap.cps.api.parameters.FetchDescendantsOption;
import org.onap.cps.rest.api.CpsDataApi;
import org.onap.cps.utils.ContentType;
-import org.onap.cps.utils.DataMapUtils;
import org.onap.cps.utils.JsonObjectMapper;
-import org.onap.cps.utils.PrefixResolver;
import org.onap.cps.utils.XmlFileUtils;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
@@ -64,10 +59,9 @@ public class DataRestController implements CpsDataApi {
private static final String ISO_TIMESTAMP_FORMAT = "yyyy-MM-dd'T'HH:mm:ss.SSSZ";
private static final DateTimeFormatter ISO_TIMESTAMP_FORMATTER = DateTimeFormatter.ofPattern(ISO_TIMESTAMP_FORMAT);
+ private final CpsFacade cpsFacade;
private final CpsDataService cpsDataService;
- private final CpsAnchorService cpsAnchorService;
private final JsonObjectMapper jsonObjectMapper;
- private final PrefixResolver prefixResolver;
@Override
public ResponseEntity<String> createNode(final String apiVersion,
@@ -116,24 +110,20 @@ public class DataRestController implements CpsDataApi {
}
@Override
- @Timed(value = "cps.data.controller.datanode.get.v1",
- description = "Time taken to get data node")
+ @Timed(value = "cps.data.controller.datanode.get.v1", description = "Time taken to get data node")
public ResponseEntity<Object> getNodeByDataspaceAndAnchor(final String dataspaceName,
final String anchorName,
final String xpath,
final Boolean includeDescendants) {
- final FetchDescendantsOption fetchDescendantsOption = Boolean.TRUE.equals(includeDescendants)
- ? FetchDescendantsOption.INCLUDE_ALL_DESCENDANTS : FetchDescendantsOption.OMIT_DESCENDANTS;
- final DataNode dataNode = cpsDataService.getDataNodes(dataspaceName, anchorName, xpath,
- fetchDescendantsOption).iterator().next();
- final Anchor anchor = cpsAnchorService.getAnchor(dataspaceName, anchorName);
- final String prefix = prefixResolver.getPrefix(anchor, dataNode.getXpath());
- return new ResponseEntity<>(DataMapUtils.toDataMapWithIdentifier(dataNode, prefix), HttpStatus.OK);
+ final FetchDescendantsOption fetchDescendantsOption =
+ FetchDescendantsOption.getFetchDescendantsOption(includeDescendants);
+ final Map<String, Object> dataNodeAsMap =
+ cpsFacade.getFirstDataNodeByAnchor(dataspaceName, anchorName, xpath, fetchDescendantsOption);
+ return new ResponseEntity<>(dataNodeAsMap, HttpStatus.OK);
}
@Override
- @Timed(value = "cps.data.controller.datanode.get.v2",
- description = "Time taken to get data node")
+ @Timed(value = "cps.data.controller.datanode.get.v2", description = "Time taken to get data node")
public ResponseEntity<Object> getNodeByDataspaceAndAnchorV2(final String dataspaceName, final String anchorName,
final String xpath,
final String fetchDescendantsOptionAsString,
@@ -141,16 +131,9 @@ public class DataRestController implements CpsDataApi {
final ContentType contentType = ContentType.fromString(contentTypeInHeader);
final FetchDescendantsOption fetchDescendantsOption =
FetchDescendantsOption.getFetchDescendantsOption(fetchDescendantsOptionAsString);
- final Collection<DataNode> dataNodes = cpsDataService.getDataNodes(dataspaceName, anchorName, xpath,
- fetchDescendantsOption);
- final List<Map<String, Object>> dataMaps = new ArrayList<>(dataNodes.size());
- final Anchor anchor = cpsAnchorService.getAnchor(dataspaceName, anchorName);
- for (final DataNode dataNode: dataNodes) {
- final String prefix = prefixResolver.getPrefix(anchor, dataNode.getXpath());
- final Map<String, Object> dataMap = DataMapUtils.toDataMapWithIdentifier(dataNode, prefix);
- dataMaps.add(dataMap);
- }
- return buildResponseEntity(dataMaps, contentType);
+ final List<Map<String, Object>> dataNodesAsMaps =
+ cpsFacade.getDataNodesByAnchor(dataspaceName, anchorName, xpath, fetchDescendantsOption);
+ return buildResponseEntity(dataNodesAsMaps, contentType);
}
@Override
diff --git a/cps-rest/src/main/java/org/onap/cps/rest/controller/QueryRestController.java b/cps-rest/src/main/java/org/onap/cps/rest/controller/QueryRestController.java
index f8833094cf..11713ad5e7 100644
--- a/cps-rest/src/main/java/org/onap/cps/rest/controller/QueryRestController.java
+++ b/cps-rest/src/main/java/org/onap/cps/rest/controller/QueryRestController.java
@@ -1,6 +1,6 @@
/*
* ============LICENSE_START=======================================================
- * Copyright (C) 2021-2024 Nordix Foundation
+ * Copyright (C) 2021-2025 Nordix Foundation
* Modifications Copyright (C) 2022 Bell Canada.
* Modifications Copyright (C) 2022-2024 TechMahindra Ltd.
* ================================================================================
@@ -23,23 +23,15 @@
package org.onap.cps.rest.controller;
import io.micrometer.core.annotation.Timed;
-import java.util.ArrayList;
-import java.util.Collection;
import java.util.List;
import java.util.Map;
-import java.util.stream.Collectors;
import lombok.RequiredArgsConstructor;
-import org.onap.cps.api.CpsAnchorService;
-import org.onap.cps.api.CpsQueryService;
-import org.onap.cps.api.model.Anchor;
-import org.onap.cps.api.model.DataNode;
+import org.onap.cps.api.CpsFacade;
import org.onap.cps.api.parameters.FetchDescendantsOption;
import org.onap.cps.api.parameters.PaginationOption;
import org.onap.cps.rest.api.CpsQueryApi;
import org.onap.cps.utils.ContentType;
-import org.onap.cps.utils.DataMapUtils;
import org.onap.cps.utils.JsonObjectMapper;
-import org.onap.cps.utils.PrefixResolver;
import org.onap.cps.utils.XmlFileUtils;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
@@ -51,27 +43,24 @@ import org.springframework.web.bind.annotation.RestController;
@RequiredArgsConstructor
public class QueryRestController implements CpsQueryApi {
- private final CpsQueryService cpsQueryService;
- private final CpsAnchorService cpsAnchorService;
+ private final CpsFacade cpsFacade;
private final JsonObjectMapper jsonObjectMapper;
- private final PrefixResolver prefixResolver;
@Override
- @Timed(value = "cps.data.controller.datanode.query.v1",
- description = "Time taken to query data nodes")
+ @Timed(value = "cps.data.controller.datanode.query.v1", description = "Time taken to query data nodes")
public ResponseEntity<Object> getNodesByDataspaceAndAnchorAndCpsPath(final String dataspaceName,
final String anchorName,
final String cpsPath,
final Boolean includeDescendants) {
- final FetchDescendantsOption fetchDescendantsOption = Boolean.TRUE.equals(includeDescendants)
- ? FetchDescendantsOption.INCLUDE_ALL_DESCENDANTS : FetchDescendantsOption.OMIT_DESCENDANTS;
- return executeNodesByDataspaceQueryAndCreateResponse(dataspaceName, anchorName, cpsPath,
- fetchDescendantsOption, ContentType.JSON);
+ final FetchDescendantsOption fetchDescendantsOption =
+ FetchDescendantsOption.getFetchDescendantsOption(includeDescendants);
+ final List<Map<String, Object>> dataNodesAsMaps
+ = cpsFacade.executeAnchorQuery(dataspaceName, anchorName, cpsPath, fetchDescendantsOption);
+ return buildResponseEntity(dataNodesAsMaps, ContentType.JSON);
}
@Override
- @Timed(value = "cps.data.controller.datanode.query.v2",
- description = "Time taken to query data nodes")
+ @Timed(value = "cps.data.controller.datanode.query.v2", description = "Time taken to query data nodes")
public ResponseEntity<Object> getNodesByDataspaceAndAnchorAndCpsPathV2(final String dataspaceName,
final String anchorName,
final String cpsPath,
@@ -80,8 +69,9 @@ public class QueryRestController implements CpsQueryApi {
final ContentType contentType = ContentType.fromString(contentTypeInHeader);
final FetchDescendantsOption fetchDescendantsOption =
FetchDescendantsOption.getFetchDescendantsOption(fetchDescendantsOptionAsString);
- return executeNodesByDataspaceQueryAndCreateResponse(dataspaceName, anchorName, cpsPath,
- fetchDescendantsOption, contentType);
+ final List<Map<String, Object>> dataNodesAsMaps
+ = cpsFacade.executeAnchorQuery(dataspaceName, anchorName, cpsPath, fetchDescendantsOption);
+ return buildResponseEntity(dataNodesAsMaps, contentType);
}
@Override
@@ -96,65 +86,21 @@ public class QueryRestController implements CpsQueryApi {
FetchDescendantsOption.getFetchDescendantsOption(fetchDescendantsOptionAsString);
final PaginationOption paginationOption = (pageIndex == null || pageSize == null)
? PaginationOption.NO_PAGINATION : new PaginationOption(pageIndex, pageSize);
- final Collection<DataNode> dataNodes = cpsQueryService.queryDataNodesAcrossAnchors(dataspaceName,
- cpsPath, fetchDescendantsOption, paginationOption);
- final List<Map<String, Object>> dataNodesAsListOfMaps = new ArrayList<>(dataNodes.size());
- String prefix = null;
- final Map<String, List<DataNode>> dataNodesPerAnchor = groupDataNodesPerAnchor(dataNodes);
- for (final Map.Entry<String, List<DataNode>> dataNodesPerAnchorEntry : dataNodesPerAnchor.entrySet()) {
- final String anchorName = dataNodesPerAnchorEntry.getKey();
- if (prefix == null) {
- final Anchor anchor = cpsAnchorService.getAnchor(dataspaceName, anchorName);
- prefix = prefixResolver.getPrefix(anchor, dataNodesPerAnchorEntry.getValue().get(0).getXpath());
- }
- final Map<String, Object> dataMap = DataMapUtils.toDataMapWithIdentifierAndAnchor(
- dataNodesPerAnchorEntry.getValue(), anchorName, prefix);
- dataNodesAsListOfMaps.add(dataMap);
- }
- final Integer totalPages = getTotalPages(dataspaceName, cpsPath, paginationOption);
- return ResponseEntity.ok().header("total-pages",
- totalPages.toString()).body(jsonObjectMapper.asJsonString(dataNodesAsListOfMaps));
- }
+ final List<Map<String, Object>> dataNodesAsMaps
+ = cpsFacade.executeDataspaceQuery(dataspaceName, cpsPath, fetchDescendantsOption, paginationOption);
- private Integer getTotalPages(final String dataspaceName, final String cpsPath,
- final PaginationOption paginationOption) {
- if (paginationOption == PaginationOption.NO_PAGINATION) {
- return 1;
- }
- final int totalAnchors = cpsQueryService.countAnchorsForDataspaceAndCpsPath(dataspaceName, cpsPath);
- return totalAnchors <= paginationOption.getPageSize() ? 1
- : (int) Math.ceil((double) totalAnchors / paginationOption.getPageSize());
- }
-
- private static Map<String, List<DataNode>> groupDataNodesPerAnchor(final Collection<DataNode> dataNodes) {
- return dataNodes.stream().collect(Collectors.groupingBy(DataNode::getAnchorName));
- }
-
- private ResponseEntity<Object> executeNodesByDataspaceQueryAndCreateResponse(final String dataspaceName,
- final String anchorName, final String cpsPath, final FetchDescendantsOption fetchDescendantsOption,
- final ContentType contentType) {
- final Collection<DataNode> dataNodes =
- cpsQueryService.queryDataNodes(dataspaceName, anchorName, cpsPath, fetchDescendantsOption);
- final List<Map<String, Object>> dataNodesAsListOfMaps = new ArrayList<>(dataNodes.size());
- final Anchor anchor = cpsAnchorService.getAnchor(dataspaceName, anchorName);
- String prefix = null;
- for (final DataNode dataNode : dataNodes) {
- if (prefix == null) {
- prefix = prefixResolver.getPrefix(anchor, dataNode.getXpath());
- }
- final Map<String, Object> dataMap = DataMapUtils.toDataMapWithIdentifier(dataNode, prefix);
- dataNodesAsListOfMaps.add(dataMap);
- }
- return buildResponseEntity(dataNodesAsListOfMaps, contentType);
+ final int totalPages = cpsFacade.countAnchorsInDataspaceQuery(dataspaceName, cpsPath, paginationOption);
+ return ResponseEntity.ok().header("total-pages", String.valueOf(totalPages))
+ .body(jsonObjectMapper.asJsonString(dataNodesAsMaps));
}
- private ResponseEntity<Object> buildResponseEntity(final List<Map<String, Object>> dataNodesAsListOfMaps,
+ private ResponseEntity<Object> buildResponseEntity(final List<Map<String, Object>> dataNodesAsMaps,
final ContentType contentType) {
final String responseData;
if (ContentType.XML.equals(contentType)) {
- responseData = XmlFileUtils.convertDataMapsToXml(dataNodesAsListOfMaps);
+ responseData = XmlFileUtils.convertDataMapsToXml(dataNodesAsMaps);
} else {
- responseData = jsonObjectMapper.asJsonString(dataNodesAsListOfMaps);
+ responseData = jsonObjectMapper.asJsonString(dataNodesAsMaps);
}
return new ResponseEntity<>(responseData, HttpStatus.OK);
}