2 * ============LICENSE_START=======================================================
3 * Copyright (C) 2021 Nordix Foundation
4 * ================================================================================
5 * Licensed under the Apache License, Version 2.0 (the "License");
6 * you may not use this file except in compliance with the License.
7 * You may obtain a copy of the License at
9 * http://www.apache.org/licenses/LICENSE-2.0
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
17 * SPDX-License-Identifier: Apache-2.0
18 * ============LICENSE_END=========================================================
21 package org.onap.cps.ncmp.api.impl.operation;
23 import com.fasterxml.jackson.annotation.JsonValue;
25 import org.onap.cps.ncmp.api.impl.client.DmiRestClient;
26 import org.springframework.http.HttpHeaders;
27 import org.springframework.http.ResponseEntity;
28 import org.springframework.stereotype.Component;
31 public class DmiOperations {
33 public enum DataStoreEnum {
34 PASSTHROUGH_OPERATIONAL("ncmp-datastore:passthrough-operational"),
35 PASSTHROUGH_RUNNING("ncmp-datastore:passthrough-running");
38 DataStoreEnum(final String value) {
44 public String toString() {
49 private DmiRestClient dmiRestClient;
50 private static final String DMI_API_PATH = "/dmi";
51 private static final String DMI_CM_HANDLE_PATH = "/v1/ch/{cmHandle}";
52 private static final String DMI_CM_HANDLE_DATASTORE_PATH = DMI_CM_HANDLE_PATH + "/data/ds";
53 private static final String URL_SEPARATOR = "/";
54 private static final String RESOURCE_IDENTIFIER = "resourceIdentifier";
55 private static final String OPTIONS_QUERY_KEY = "options";
59 * Constructor for {@code DmiOperations}. This method also manipulates url properties.
61 * @param dmiRestClient {@code DmiRestClient}
63 public DmiOperations(final DmiRestClient dmiRestClient) {
64 this.dmiRestClient = dmiRestClient;
68 * Get resources from DMI.
70 * @param dmiServiceName dmi service name
71 * @param cmHandle cmHandle
72 * @param resourceName name of the resource(s)
73 * @return {@code ResponseEntity} response entity
75 public ResponseEntity<String> getResourceFromDmi(final String dmiServiceName,
76 final String cmHandle,
77 final String resourceName) {
78 final var dmiResourceDataUrl = getDmiResourceUrl(dmiServiceName, cmHandle, resourceName);
79 final var httpHeaders = new HttpHeaders();
80 return dmiRestClient.postOperation(dmiResourceDataUrl, httpHeaders);
84 * Get resources from DMI for modules.
86 * @param dmiServiceName dmi service name
87 * @param jsonData module names and revisions as JSON
88 * @param cmHandle cmHandle
89 * @param resourceName name of the resource(s)
90 * @return {@code ResponseEntity} response entity
92 public ResponseEntity<String> getResourceFromDmiWithJsonData(final String dmiServiceName,
93 final String jsonData,
94 final String cmHandle,
95 final String resourceName) {
96 final String dmiResourceDataUrl = getDmiResourceUrl(dmiServiceName, cmHandle, resourceName);
97 return dmiRestClient.postOperationWithJsonData(dmiResourceDataUrl, jsonData, new HttpHeaders());
101 * This method fetches the resource data from operational data store for given cm handle
102 * identifier on given resource using dmi client.
104 * @param dmiServiceName dmi service name
105 * @param cmHandle network resource identifier
106 * @param resourceId resource identifier
107 * @param optionsParamInQuery options query
108 * @param acceptParamInHeader accept parameter
109 * @param jsonBody json body for put operation
110 * @return {@code ResponseEntity} response entity
112 public ResponseEntity<Object> getResourceDataOperationalFromDmi(final String dmiServiceName,
113 final String cmHandle,
114 final String resourceId,
115 final String optionsParamInQuery,
116 final String acceptParamInHeader,
117 final String jsonBody) {
118 final var dmiResourceDataUrl = getDmiDatastoreUrl(dmiServiceName, cmHandle, resourceId,
119 optionsParamInQuery, DataStoreEnum.PASSTHROUGH_OPERATIONAL);
120 final var httpHeaders = prepareHeader(acceptParamInHeader);
121 return dmiRestClient.putOperationWithJsonData(dmiResourceDataUrl, jsonBody, httpHeaders);
125 * This method fetches the resource data from pass-through running data store for given cm handle
126 * identifier on given resource using dmi client.
128 * @param dmiServiceName dmi service name
129 * @param cmHandle network resource identifier
130 * @param resourceId resource identifier
131 * @param optionsParamInQuery fields query
132 * @param acceptParamInHeader accept parameter
133 * @param jsonBody json body for put operation
134 * @return {@code ResponseEntity} response entity
136 public ResponseEntity<Object> getResourceDataPassThroughRunningFromDmi(final String dmiServiceName,
137 final String cmHandle,
138 final String resourceId,
139 final String optionsParamInQuery,
140 final String acceptParamInHeader,
141 final String jsonBody) {
142 final var dmiResourceDataUrl = getDmiDatastoreUrl(dmiServiceName, cmHandle, resourceId,
143 optionsParamInQuery, DataStoreEnum.PASSTHROUGH_RUNNING);
144 final var httpHeaders = prepareHeader(acceptParamInHeader);
145 return dmiRestClient.putOperationWithJsonData(dmiResourceDataUrl, jsonBody, httpHeaders);
149 * This method creates the resource data from pass-through running data store for given cm handle
150 * identifier on given resource using dmi client.
152 * @param dmiServiceName dmi service name
153 * @param cmHandle network resource identifier
154 * @param resourceId resource identifier
155 * @param jsonBody json body for put operation
156 * @return {@code ResponseEntity} response entity
158 public ResponseEntity<String> createResourceDataPassThroughRunningFromDmi(final String dmiServiceName,
159 final String cmHandle,
160 final String resourceId,
161 final String jsonBody) {
162 final var stringBuilder = getStringBuilderForPassThroughUrl(dmiServiceName,
163 cmHandle, resourceId, DataStoreEnum.PASSTHROUGH_RUNNING);
164 return dmiRestClient.postOperationWithJsonData(stringBuilder.toString(), jsonBody, new HttpHeaders());
167 private String getDmiResourceUrl(final String dmiServiceName,
168 final String cmHandle,
169 final String resourceName) {
170 final var stringBuilder = new StringBuilder(dmiServiceName);
171 stringBuilder.append(DMI_API_PATH);
172 stringBuilder.append(DMI_CM_HANDLE_PATH.replace("{cmHandle}", cmHandle));
173 stringBuilder.append(URL_SEPARATOR + resourceName);
174 return stringBuilder.toString();
178 * This method updates the resource data from pass-through running data store for the cm handle identifier on given
179 * resource using dmi client.
181 * @param dmiServiceName dmi service name
182 * @param cmHandle network resource identifier
183 * @param resourceId resource identifier
184 * @param jsonBody json body for put operation
185 * @return {@code ResponseEntity} response entity
187 public ResponseEntity<String> updateResourceDataPassThroughRunningFromDmi(final String dmiServiceName,
188 final String cmHandle, final String resourceId, final String jsonBody) {
189 final StringBuilder stringBuilder =
190 getStringBuilderForPassThroughUrl(dmiServiceName, cmHandle, resourceId, DataStoreEnum.PASSTHROUGH_RUNNING);
191 return dmiRestClient.postOperationWithJsonData(stringBuilder.toString(), jsonBody, new HttpHeaders());
194 private String getDmiDatastoreUrl(final String dmiServiceName,
195 final String cmHandle,
196 final String resourceId,
197 final String optionsParamInQuery,
198 final DataStoreEnum dataStoreEnum) {
199 final var stringBuilder = getStringBuilderForPassThroughUrl(dmiServiceName,
200 cmHandle, resourceId, dataStoreEnum);
201 appendOptionsQuery(stringBuilder, optionsParamInQuery);
202 return stringBuilder.toString();
205 private StringBuilder getStringBuilderForPassThroughUrl(final String dmiServiceName,
206 final String cmHandle,
207 final String resourceId,
208 final DataStoreEnum dataStoreEnum) {
209 final var stringBuilder = new StringBuilder(dmiServiceName);
210 stringBuilder.append(DMI_API_PATH);
211 stringBuilder.append(DMI_CM_HANDLE_DATASTORE_PATH.replace("{cmHandle}", cmHandle));
212 stringBuilder.append(URL_SEPARATOR + dataStoreEnum.getValue());
213 stringBuilder.append("?" + RESOURCE_IDENTIFIER + "=" + resourceId);
214 return stringBuilder;
217 private void appendOptionsQuery(final StringBuilder stringBuilder,
218 final String optionsParamInQuery) {
219 if (optionsParamInQuery != null) {
220 stringBuilder.append("&").append(OPTIONS_QUERY_KEY).append("=").append(optionsParamInQuery);
224 private HttpHeaders prepareHeader(final String acceptParam) {
225 final var httpHeaders = new HttpHeaders();
226 httpHeaders.set(HttpHeaders.ACCEPT, acceptParam);