package org.onap.cps.ncmp.api.impl.operation;
-import org.jetbrains.annotations.NotNull;
+import com.fasterxml.jackson.annotation.JsonValue;
+import lombok.Getter;
import org.onap.cps.ncmp.api.impl.client.DmiRestClient;
import org.springframework.http.HttpHeaders;
import org.springframework.http.ResponseEntity;
@Component
public class DmiOperations {
+ @Getter
+ public enum DataStoreEnum {
+ PASSTHROUGH_OPERATIONAL("ncmp-datastore:passthrough-operational"),
+ PASSTHROUGH_RUNNING("ncmp-datastore:passthrough-running");
+ private String value;
+
+ DataStoreEnum(final String value) {
+ this.value = value;
+ }
+
+ @Override
+ @JsonValue
+ public String toString() {
+ return value;
+ }
+ }
private DmiRestClient dmiRestClient;
- private static final String GET_RESOURCE_DATA_FOR_PASSTHROUGH_OPERATIONAL =
- "/v1/ch/{cmHandle}/data/ds/ncmp-datastore:passthrough-operational/";
- private int indexCmHandleForGetOperational;
+ private static final String DMI_API_PATH = "/dmi";
+ private static final String DMI_CM_HANDLE_PATH = "/v1/ch/{cmHandle}";
+ private static final String DMI_CM_HANDLE_DATASTORE_PATH = DMI_CM_HANDLE_PATH + "/data/ds";
+ private static final String URL_SEPARATOR = "/";
+ private static final String RESOURCE_IDENTIFIER = "resourceIdentifier";
+ private static final String OPTIONS_QUERY_KEY = "options";
+
/**
* Constructor for {@code DmiOperations}. This method also manipulates url properties.
*/
public DmiOperations(final DmiRestClient dmiRestClient) {
this.dmiRestClient = dmiRestClient;
- indexCmHandleForGetOperational = GET_RESOURCE_DATA_FOR_PASSTHROUGH_OPERATIONAL.indexOf("{cmHandle}");
}
/**
- * This method fetches the resource data for given cm handle identifier on given resource
- * using dmi client.
+ * Get resources from DMI.
*
- * @param dmiBasePath dmi base path
- * @param cmHandle network resource identifier
- * @param resourceId resource identifier
- * @param fieldsQuery fields query
- * @param depthQuery depth query
- * @param acceptParam accept parameter
- * @param jsonBody json body for put operation
+ * @param dmiServiceName dmi service name
+ * @param cmHandle cmHandle
+ * @param resourceName name of the resource(s)
* @return {@code ResponseEntity} response entity
*/
- public ResponseEntity<Object> getResouceDataFromDmi(final String dmiBasePath,
- final String cmHandle,
- final String resourceId,
- final String fieldsQuery,
- final Integer depthQuery,
- final String acceptParam,
- final String jsonBody) {
- final StringBuilder builder = getDmiResourceDataUrl(dmiBasePath, cmHandle, resourceId, fieldsQuery, depthQuery);
- final HttpHeaders httpHeaders = prepareHeader(acceptParam);
- return dmiRestClient.putOperationWithJsonData(builder.toString(), jsonBody, httpHeaders);
+ public ResponseEntity<String> getResourceFromDmi(final String dmiServiceName,
+ final String cmHandle,
+ final String resourceName) {
+ final var dmiResourceDataUrl = getDmiResourceUrl(dmiServiceName, cmHandle, resourceName);
+ final var httpHeaders = new HttpHeaders();
+ return dmiRestClient.postOperation(dmiResourceDataUrl, httpHeaders);
}
- @NotNull
- private StringBuilder getDmiResourceDataUrl(final String dmiBasePath,
- final String cmHandle,
- final String resourceId,
- final String fieldsQuery,
- final Integer depthQuery) {
- final StringBuilder builder = new StringBuilder(GET_RESOURCE_DATA_FOR_PASSTHROUGH_OPERATIONAL);
- builder.replace(indexCmHandleForGetOperational,
- indexCmHandleForGetOperational + "{cmHandle}".length(), cmHandle);
- builder.insert(builder.length(), resourceId);
- appendFieldsAndDepth(fieldsQuery, depthQuery, builder);
- builder.insert(0, dmiBasePath);
- return builder;
+ /**
+ * Get resources from DMI for modules.
+ *
+ * @param dmiServiceName dmi service name
+ * @param jsonData module names and revisions as JSON
+ * @param cmHandle cmHandle
+ * @param resourceName name of the resource(s)
+ * @return {@code ResponseEntity} response entity
+ */
+ public ResponseEntity<String> getResourceFromDmiWithJsonData(final String dmiServiceName,
+ final String jsonData,
+ final String cmHandle,
+ final String resourceName) {
+ final String dmiResourceDataUrl = getDmiResourceUrl(dmiServiceName, cmHandle, resourceName);
+ return dmiRestClient.postOperationWithJsonData(dmiResourceDataUrl, jsonData, new HttpHeaders());
}
- private void appendFieldsAndDepth(final String fieldsQuery, final Integer depthQuery, final StringBuilder builder) {
- final boolean doesFieldExists = (fieldsQuery != null && !fieldsQuery.isEmpty());
- if (doesFieldExists) {
- builder.append("?").append("fields=").append(fieldsQuery);
- }
- if (depthQuery != null) {
- if (!doesFieldExists) {
- builder.append("?");
- } else {
- builder.append("&");
- }
- builder.append("depth=").append(depthQuery);
+ /**
+ * This method fetches the resource data from operational data store for given cm handle
+ * identifier on given resource using dmi client.
+ *
+ * @param dmiServiceName dmi service name
+ * @param cmHandle network resource identifier
+ * @param resourceId resource identifier
+ * @param optionsParamInQuery options query
+ * @param acceptParamInHeader accept parameter
+ * @param jsonBody json body for put operation
+ * @return {@code ResponseEntity} response entity
+ */
+ public ResponseEntity<Object> getResourceDataOperationalFromDmi(final String dmiServiceName,
+ final String cmHandle,
+ final String resourceId,
+ final String optionsParamInQuery,
+ final String acceptParamInHeader,
+ final String jsonBody) {
+ final var dmiResourceDataUrl = getDmiDatastoreUrl(dmiServiceName, cmHandle, resourceId,
+ optionsParamInQuery, DataStoreEnum.PASSTHROUGH_OPERATIONAL);
+ final var httpHeaders = prepareHeader(acceptParamInHeader);
+ return dmiRestClient.putOperationWithJsonData(dmiResourceDataUrl, jsonBody, httpHeaders);
+ }
+
+ /**
+ * This method fetches the resource data from pass-through running data store for given cm handle
+ * identifier on given resource using dmi client.
+ *
+ * @param dmiServiceName dmi service name
+ * @param cmHandle network resource identifier
+ * @param resourceId resource identifier
+ * @param optionsParamInQuery fields query
+ * @param acceptParamInHeader accept parameter
+ * @param jsonBody json body for put operation
+ * @return {@code ResponseEntity} response entity
+ */
+ public ResponseEntity<Object> getResourceDataPassThroughRunningFromDmi(final String dmiServiceName,
+ final String cmHandle,
+ final String resourceId,
+ final String optionsParamInQuery,
+ final String acceptParamInHeader,
+ final String jsonBody) {
+ final var dmiResourceDataUrl = getDmiDatastoreUrl(dmiServiceName, cmHandle, resourceId,
+ optionsParamInQuery, DataStoreEnum.PASSTHROUGH_RUNNING);
+ final var httpHeaders = prepareHeader(acceptParamInHeader);
+ return dmiRestClient.putOperationWithJsonData(dmiResourceDataUrl, jsonBody, httpHeaders);
+ }
+
+ /**
+ * This method creates the resource data from pass-through running data store for given cm handle
+ * identifier on given resource using dmi client.
+ *
+ * @param dmiServiceName dmi service name
+ * @param cmHandle network resource identifier
+ * @param resourceId resource identifier
+ * @param jsonBody json body for put operation
+ * @return {@code ResponseEntity} response entity
+ */
+ public ResponseEntity<String> createResourceDataPassThroughRunningFromDmi(final String dmiServiceName,
+ final String cmHandle,
+ final String resourceId,
+ final String jsonBody) {
+ final var stringBuilder = getStringBuilderForPassThroughUrl(dmiServiceName,
+ cmHandle, resourceId, DataStoreEnum.PASSTHROUGH_RUNNING);
+ return dmiRestClient.postOperationWithJsonData(stringBuilder.toString(), jsonBody, new HttpHeaders());
+ }
+
+ private String getDmiResourceUrl(final String dmiServiceName,
+ final String cmHandle,
+ final String resourceName) {
+ final var stringBuilder = new StringBuilder(dmiServiceName);
+ stringBuilder.append(DMI_API_PATH);
+ stringBuilder.append(DMI_CM_HANDLE_PATH.replace("{cmHandle}", cmHandle));
+ stringBuilder.append(URL_SEPARATOR + resourceName);
+ return stringBuilder.toString();
+ }
+
+ /**
+ * This method updates the resource data from pass-through running data store for the cm handle identifier on given
+ * resource using dmi client.
+ *
+ * @param dmiServiceName dmi service name
+ * @param cmHandle network resource identifier
+ * @param resourceId resource identifier
+ * @param jsonBody json body for put operation
+ * @return {@code ResponseEntity} response entity
+ */
+ public ResponseEntity<String> updateResourceDataPassThroughRunningFromDmi(final String dmiServiceName,
+ final String cmHandle, final String resourceId, final String jsonBody) {
+ final StringBuilder stringBuilder =
+ getStringBuilderForPassThroughUrl(dmiServiceName, cmHandle, resourceId, DataStoreEnum.PASSTHROUGH_RUNNING);
+ return dmiRestClient.postOperationWithJsonData(stringBuilder.toString(), jsonBody, new HttpHeaders());
+ }
+
+ private String getDmiDatastoreUrl(final String dmiServiceName,
+ final String cmHandle,
+ final String resourceId,
+ final String optionsParamInQuery,
+ final DataStoreEnum dataStoreEnum) {
+ final var stringBuilder = getStringBuilderForPassThroughUrl(dmiServiceName,
+ cmHandle, resourceId, dataStoreEnum);
+ appendOptionsQuery(stringBuilder, optionsParamInQuery);
+ return stringBuilder.toString();
+ }
+
+ private StringBuilder getStringBuilderForPassThroughUrl(final String dmiServiceName,
+ final String cmHandle,
+ final String resourceId,
+ final DataStoreEnum dataStoreEnum) {
+ final var stringBuilder = new StringBuilder(dmiServiceName);
+ stringBuilder.append(DMI_API_PATH);
+ stringBuilder.append(DMI_CM_HANDLE_DATASTORE_PATH.replace("{cmHandle}", cmHandle));
+ stringBuilder.append(URL_SEPARATOR + dataStoreEnum.getValue());
+ stringBuilder.append("?" + RESOURCE_IDENTIFIER + "=" + resourceId);
+ return stringBuilder;
+ }
+
+ private void appendOptionsQuery(final StringBuilder stringBuilder,
+ final String optionsParamInQuery) {
+ if (optionsParamInQuery != null) {
+ stringBuilder.append("&").append(OPTIONS_QUERY_KEY).append("=").append(optionsParamInQuery);
}
}
private HttpHeaders prepareHeader(final String acceptParam) {
- final HttpHeaders httpHeaders = new HttpHeaders();
- if (acceptParam != null && !acceptParam.isEmpty()) {
- httpHeaders.set(HttpHeaders.ACCEPT, acceptParam);
- }
+ final var httpHeaders = new HttpHeaders();
+ httpHeaders.set(HttpHeaders.ACCEPT, acceptParam);
return httpHeaders;
}
}