2 * ============LICENSE_START=======================================================
3 * Copyright (C) 2020-2024 Nordix Foundation
4 * Modifications Copyright (C) 2021 Pantheon.tech
5 * Modifications Copyright (C) 2021-2022 Bell Canada
6 * Modifications Copyright (C) 2022 Deutsche Telekom AG
7 * Modifications Copyright (C) 2023-2025 TechMahindra Ltd.
8 * ================================================================================
9 * Licensed under the Apache License, Version 2.0 (the "License");
10 * you may not use this file except in compliance with the License.
11 * You may obtain a copy of the License at
13 * http://www.apache.org/licenses/LICENSE-2.0
15 * Unless required by applicable law or agreed to in writing, software
16 * distributed under the License is distributed on an "AS IS" BASIS,
17 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
18 * See the License for the specific language governing permissions and
19 * limitations under the License.
21 * SPDX-License-Identifier: Apache-2.0
22 * ============LICENSE_END=========================================================
25 package org.onap.cps.api;
27 import java.time.OffsetDateTime;
28 import java.util.Collection;
30 import org.onap.cps.api.model.DataNode;
31 import org.onap.cps.api.parameters.FetchDescendantsOption;
32 import org.onap.cps.utils.ContentType;
35 * Datastore interface for handling CPS data.
37 public interface CpsDataService {
40 * Persists data for the given anchor and dataspace.
42 * @param dataspaceName dataspace name
43 * @param anchorName anchor name
44 * @param nodeData node data
45 * @param observedTimestamp observedTimestamp
47 void saveData(String dataspaceName, String anchorName, String nodeData, OffsetDateTime observedTimestamp);
50 * Persists data for the given anchor and dataspace.
52 * @param dataspaceName dataspace name
53 * @param anchorName anchor name
54 * @param nodeData node data
55 * @param observedTimestamp observedTimestamp
56 * @param contentType JSON/XML content type
58 void saveData(String dataspaceName, String anchorName, String nodeData, OffsetDateTime observedTimestamp,
59 ContentType contentType);
62 * Persists child data fragment under existing data node for the given anchor and dataspace.
64 * @param dataspaceName dataspace name
65 * @param anchorName anchor name
66 * @param parentNodeXpath parent node xpath
67 * @param nodeData node data
68 * @param observedTimestamp observedTimestamp
70 void saveData(String dataspaceName, String anchorName, String parentNodeXpath, String nodeData,
71 OffsetDateTime observedTimestamp);
74 * Persists child data fragment under existing data node for the given anchor, dataspace and content type.
76 * @param dataspaceName dataspace name
77 * @param anchorName anchor name
78 * @param parentNodeXpath parent node xpath
79 * @param nodeData node data
80 * @param observedTimestamp observedTimestamp
81 * @param contentType JSON/XML content type
84 void saveData(String dataspaceName, String anchorName, String parentNodeXpath, String nodeData,
85 OffsetDateTime observedTimestamp, ContentType contentType);
88 * Persists child data fragment representing one or more list elements under existing data node for the
89 * given anchor and dataspace.
91 * @param dataspaceName dataspace name
92 * @param anchorName anchor name
93 * @param parentNodeXpath parent node xpath
94 * @param nodeData node data representing list element(s)
95 * @param observedTimestamp observedTimestamp
96 * @param contentType JSON/XML content type
98 void saveListElements(String dataspaceName, String anchorName, String parentNodeXpath, String nodeData,
99 OffsetDateTime observedTimestamp, ContentType contentType);
102 * Retrieves all the datanodes by XPath for given dataspace and anchor.
104 * @param dataspaceName dataspace name
105 * @param anchorName anchor name
107 * @param fetchDescendantsOption defines the scope of data to fetch: either single node or all the descendant nodes
108 * (recursively) as well
109 * @return collection of data node objects
111 Collection<DataNode> getDataNodes(String dataspaceName, String anchorName, String xpath,
112 FetchDescendantsOption fetchDescendantsOption);
115 * Retrieves all the datanodes for multiple XPaths for given dataspace and anchor.
117 * @param dataspaceName dataspace name
118 * @param anchorName anchor name
119 * @param xpaths collection of xpaths
120 * @param fetchDescendantsOption defines the scope of data to fetch: either single node or all the descendant nodes
121 * (recursively) as well
122 * @return collection of data node objects
124 Collection<DataNode> getDataNodesForMultipleXpaths(String dataspaceName, String anchorName,
125 Collection<String> xpaths,
126 FetchDescendantsOption fetchDescendantsOption);
129 * Updates multiple data nodes for given dataspace and anchor using xpath to parent node.
131 * @param dataspaceName dataspace name
132 * @param anchorName anchor name
133 * @param parentNodeXpath xpath to parent node
134 * @param nodeData node data
135 * @param observedTimestamp observedTimestamp
136 * @param contentType JSON/XML content type
138 void updateNodeLeaves(String dataspaceName, String anchorName, String parentNodeXpath, String nodeData,
139 OffsetDateTime observedTimestamp, ContentType contentType);
142 * Replaces an existing data node's content including descendants.
144 * @param dataspaceName dataspace name
145 * @param anchorName anchor name
146 * @param parentNodeXpath xpath to parent node
147 * @param nodeData node data
148 * @param observedTimestamp observedTimestamp
149 * @param contentType JSON/XML content type
151 void updateDataNodeAndDescendants(String dataspaceName, String anchorName, String parentNodeXpath, String nodeData,
152 OffsetDateTime observedTimestamp, ContentType contentType);
155 * Replaces multiple existing data nodes' content including descendants in a batch operation.
157 * @param dataspaceName dataspace name
158 * @param anchorName anchor name
159 * @param nodeDataPerXPath map of xpath and node JSON/XML data
160 * @param observedTimestamp observedTimestamp
161 * @param contentType JSON/XML content type
163 void updateDataNodesAndDescendants(String dataspaceName, String anchorName, Map<String, String> nodeDataPerXPath,
164 OffsetDateTime observedTimestamp, ContentType contentType);
167 * Replaces list content by removing all existing elements and inserting the given new elements as json
168 * under given parent, anchor and dataspace.
170 * @param dataspaceName dataspace name
171 * @param anchorName anchor name
172 * @param parentNodeXpath parent node xpath
173 * @param nodeData node data representing the new list elements
174 * @param observedTimestamp observedTimestamp
175 * @param contentType JSON/XML content type
177 void replaceListContent(String dataspaceName, String anchorName, String parentNodeXpath, String nodeData,
178 OffsetDateTime observedTimestamp, ContentType contentType);
181 * Replaces list content by removing all existing elements and inserting the given new elements as data nodes
182 * under given parent, anchor and dataspace.
184 * @param dataspaceName dataspace-name
185 * @param anchorName anchor name
186 * @param parentNodeXpath parent node xpath
187 * @param dataNodes datanodes representing the updated data
188 * @param observedTimestamp observedTimestamp
190 void replaceListContent(String dataspaceName, String anchorName, String parentNodeXpath,
191 Collection<DataNode> dataNodes, OffsetDateTime observedTimestamp);
194 * Deletes data node for given anchor and dataspace.
196 * @param dataspaceName dataspace name
197 * @param anchorName anchor name
198 * @param dataNodeXpath data node xpath
199 * @param observedTimestamp observed timestamp
201 void deleteDataNode(String dataspaceName, String anchorName, String dataNodeXpath,
202 OffsetDateTime observedTimestamp);
205 * Deletes multiple data nodes for given anchor and dataspace.
207 * @param dataspaceName dataspace name
208 * @param anchorName anchor name
209 * @param dataNodeXpaths data node xpaths
210 * @param observedTimestamp observed timestamp
212 void deleteDataNodes(String dataspaceName, String anchorName, Collection<String> dataNodeXpaths,
213 OffsetDateTime observedTimestamp);
216 * Deletes all data nodes for a given anchor in a dataspace.
218 * @param dataspaceName dataspace name
219 * @param anchorName anchor name
220 * @param observedTimestamp observed timestamp
222 void deleteDataNodes(String dataspaceName, String anchorName, OffsetDateTime observedTimestamp);
225 * Deletes all data nodes for multiple anchors in a dataspace.
227 * @param dataspaceName dataspace name
228 * @param anchorNames anchor names
229 * @param observedTimestamp observed timestamp
231 void deleteDataNodes(String dataspaceName, Collection<String> anchorNames, OffsetDateTime observedTimestamp);
234 * Deletes a list or a list-element under given anchor and dataspace.
236 * @param dataspaceName dataspace name
237 * @param anchorName anchor name
238 * @param listElementXpath list element xpath
239 * @param observedTimestamp observedTimestamp
241 void deleteListOrListElement(String dataspaceName, String anchorName, String listElementXpath,
242 OffsetDateTime observedTimestamp);
245 * Updates leaves of DataNode for given dataspace and anchor using xpath, along with the leaves of each Child Data
246 * Node which already exists. This method will throw an exception if data node update or any descendant update does
249 * @param dataspaceName dataspace name
250 * @param anchorName anchor name
251 * @param parentNodeXpath xpath
252 * @param dataNodeUpdatesAsJson json data representing data node updates
253 * @param observedTimestamp observedTimestamp
255 void updateNodeLeavesAndExistingDescendantLeaves(String dataspaceName, String anchorName, String parentNodeXpath,
256 String dataNodeUpdatesAsJson, OffsetDateTime observedTimestamp);
259 * Starts a session which allows use of locks and batch interaction with the persistence service.
261 * @return Session ID string
263 String startSession();
268 * @param sessionId session ID
271 void closeSession(String sessionId);
274 * Lock anchor with default timeout.
275 * To release locks(s), the session holding the lock(s) must be closed.
277 * @param sessionID session ID
278 * @param dataspaceName dataspace name
279 * @param anchorName anchor name
281 void lockAnchor(String sessionID, String dataspaceName, String anchorName);
284 * Lock anchor with custom timeout.
285 * To release locks(s), the session holding the lock(s) must be closed.
287 * @param sessionID session ID
288 * @param dataspaceName dataspace name
289 * @param anchorName anchor name
290 * @param timeoutInMilliseconds lock attempt timeout in milliseconds
292 void lockAnchor(String sessionID, String dataspaceName, String anchorName, Long timeoutInMilliseconds);
295 * Validates JSON or XML data by parsing it using the schema associated to an anchor within the given dataspace.
296 * Validation is performed without persisting the data.
298 * @param dataspaceName the name of the dataspace where the anchor is located.
299 * @param anchorName the name of the anchor used to validate the data.
300 * @param parentNodeXpath the xpath of the parent node where the data is to be validated.
301 * @param nodeData the JSON or XML data to be validated.
302 * @param contentType the content type of the data (e.g., JSON or XML).
304 void validateData(String dataspaceName, String anchorName, String parentNodeXpath, String nodeData,
305 ContentType contentType);