X-Git-Url: https://gerrit.onap.org/r/gitweb?a=blobdiff_plain;f=cps-rest%2Fsrc%2Fmain%2Fjava%2Forg%2Fonap%2Fcps%2Frest%2Fcontroller%2FDataRestController.java;h=73c2c27c9106096278b942e074a1b46a18d7d65a;hb=70f9a7d4f2d46f2630f8045d1729ecc3d3131f56;hp=64b441829d747231a493ae0afac2d4e0e085726f;hpb=b0c2031e8d546336685c84cfccef8d515144dfc6;p=cps.git 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 64b441829..73c2c27c9 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 @@ -1,6 +1,6 @@ /* * ============LICENSE_START======================================================= - * Copyright (C) 2020 Bell Canada. + * Copyright (C) 2020-2021 Bell Canada. * Modifications Copyright (C) 2021 Pantheon.tech * Modifications Copyright (C) 2021 Nordix Foundation * ================================================================================ @@ -9,6 +9,7 @@ * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 + * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. @@ -21,6 +22,10 @@ package org.onap.cps.rest.controller; +import java.time.OffsetDateTime; +import java.time.format.DateTimeFormatter; +import javax.validation.ValidationException; +import org.apache.commons.lang3.StringUtils; import org.onap.cps.api.CpsDataService; import org.onap.cps.rest.api.CpsDataApi; import org.onap.cps.spi.FetchDescendantsOption; @@ -36,31 +41,39 @@ import org.springframework.web.bind.annotation.RestController; public class DataRestController implements CpsDataApi { private static final String ROOT_XPATH = "/"; + 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); @Autowired private CpsDataService cpsDataService; @Override - public ResponseEntity createNode(final String jsonData, final String dataspaceName, final String anchorName, - final String parentNodeXpath) { + public ResponseEntity createNode(final String dataspaceName, final String anchorName, + final Object jsonData, final String parentNodeXpath, final String observedTimestamp) { if (isRootXpath(parentNodeXpath)) { - cpsDataService.saveData(dataspaceName, anchorName, jsonData); + cpsDataService.saveData(dataspaceName, anchorName, jsonData.toString(), + toOffsetDateTime(observedTimestamp)); } else { - cpsDataService.saveData(dataspaceName, anchorName, parentNodeXpath, jsonData); + cpsDataService.saveData(dataspaceName, anchorName, parentNodeXpath, jsonData.toString(), + toOffsetDateTime(observedTimestamp)); } return new ResponseEntity<>(HttpStatus.CREATED); } @Override - public ResponseEntity addListNodeElements(final String jsonData, final String parentNodeXpath, - final String dataspaceName, final String anchorName) { - cpsDataService.saveListNodeData(dataspaceName, anchorName, parentNodeXpath, jsonData); - return new ResponseEntity<>(HttpStatus.CREATED); + public ResponseEntity deleteDataNode(final String dataspaceName, final String anchorName, + final String xpath, final String observedTimestamp) { + cpsDataService.deleteDataNode(dataspaceName, anchorName, xpath, + toOffsetDateTime(observedTimestamp)); + return new ResponseEntity<>(HttpStatus.NO_CONTENT); } @Override - public ResponseEntity getNodesByDataspace(final String dataspaceName) { - return null; + public ResponseEntity addListElements(final String parentNodeXpath, + final String dataspaceName, final String anchorName, final Object jsonData, final String observedTimestamp) { + cpsDataService.saveListElements(dataspaceName, anchorName, parentNodeXpath, jsonData.toString(), + toOffsetDateTime(observedTimestamp)); + return new ResponseEntity<>(HttpStatus.CREATED); } @Override @@ -74,27 +87,50 @@ public class DataRestController implements CpsDataApi { } @Override - public ResponseEntity updateNodeLeaves(final String jsonData, final String dataspaceName, - final String anchorName, final String parentNodeXpath) { - cpsDataService.updateNodeLeaves(dataspaceName, anchorName, parentNodeXpath, jsonData); + public ResponseEntity updateNodeLeaves(final String dataspaceName, + final String anchorName, final Object jsonData, final String parentNodeXpath, final String observedTimestamp) { + cpsDataService.updateNodeLeaves(dataspaceName, anchorName, parentNodeXpath, jsonData.toString(), + toOffsetDateTime(observedTimestamp)); return new ResponseEntity<>(HttpStatus.OK); } @Override - public ResponseEntity replaceNode(final String jsonData, final String dataspaceName, - final String anchorName, final String parentNodeXpath) { - cpsDataService.replaceNodeTree(dataspaceName, anchorName, parentNodeXpath, jsonData); + public ResponseEntity replaceNode(final String dataspaceName, final String anchorName, + final Object jsonData, final String parentNodeXpath, final String observedTimestamp) { + cpsDataService + .replaceNodeTree(dataspaceName, anchorName, parentNodeXpath, jsonData.toString(), + toOffsetDateTime(observedTimestamp)); return new ResponseEntity<>(HttpStatus.OK); } @Override - public ResponseEntity replaceListNodeElements(final String jsonData, final String parentNodeXpath, - final String dataspaceName, final String anchorName) { - cpsDataService.replaceListNodeData(dataspaceName, anchorName, parentNodeXpath, jsonData); + public ResponseEntity replaceListContent(final String parentNodeXpath, + final String dataspaceName, final String anchorName, final Object jsonData, + final String observedTimestamp) { + cpsDataService.replaceListContent(dataspaceName, anchorName, parentNodeXpath, jsonData.toString(), + toOffsetDateTime(observedTimestamp)); return new ResponseEntity<>(HttpStatus.OK); } + @Override + public ResponseEntity deleteListOrListElement(final String dataspaceName, final String anchorName, + final String listElementXpath, final String observedTimestamp) { + cpsDataService + .deleteListOrListElement(dataspaceName, anchorName, listElementXpath, toOffsetDateTime(observedTimestamp)); + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } + private static boolean isRootXpath(final String xpath) { return ROOT_XPATH.equals(xpath); } + + private static OffsetDateTime toOffsetDateTime(final String datetTimestamp) { + try { + return StringUtils.isEmpty(datetTimestamp) + ? null : OffsetDateTime.parse(datetTimestamp, ISO_TIMESTAMP_FORMATTER); + } catch (final Exception exception) { + throw new ValidationException( + String.format("observed-timestamp must be in '%s' format", ISO_TIMESTAMP_FORMAT)); + } + } }