2 * Copyright © 2016-2018 European Support Limited
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
17 package org.openecomp.sdc.be.model.jsontitan.operations;
19 import fj.data.Either;
20 import org.openecomp.sdc.be.dao.jsongraph.types.EdgeLabelEnum;
21 import org.openecomp.sdc.be.dao.jsongraph.types.VertexTypeEnum;
22 import org.openecomp.sdc.be.datatypes.elements.CapabilityDataDefinition;
23 import org.openecomp.sdc.be.datatypes.elements.ListCapabilityDataDefinition;
24 import org.openecomp.sdc.be.datatypes.enums.JsonPresentationFields;
25 import org.openecomp.sdc.be.model.CapabilityDefinition;
26 import org.openecomp.sdc.be.model.Component;
27 import org.openecomp.sdc.be.model.operations.api.StorageOperationStatus;
28 import org.slf4j.Logger;
29 import org.slf4j.LoggerFactory;
31 import java.util.ArrayList;
32 import java.util.Collections;
33 import java.util.List;
35 @org.springframework.stereotype.Component("capabilities-operation")
36 public class CapabilitiesOperation extends BaseOperation {
37 private static final Logger LOGGER = LoggerFactory.getLogger(CapabilitiesOperation.class);
39 public Either<List<CapabilityDefinition>, StorageOperationStatus> addCapabilities(
41 List<CapabilityDefinition> capabilityDefinitions) {
42 return addOrUpdateCapabilities(componentId, capabilityDefinitions, false);
45 public Either<List<CapabilityDefinition>, StorageOperationStatus> updateCapabilities(
47 List<CapabilityDefinition> capabilityDefinitions) {
48 return addOrUpdateCapabilities(componentId, capabilityDefinitions, true);
51 private Either<List<CapabilityDefinition>, StorageOperationStatus> addOrUpdateCapabilities(String componentId,
52 List<CapabilityDefinition> capabilityDefinitions,
53 boolean isUpdateAction) {
54 StorageOperationStatus statusRes = performUpdateToscaAction(isUpdateAction,
55 componentId, Collections
56 .singletonList(convertToListCapabilityDataDefinition(capabilityDefinitions)));
57 if (!statusRes.equals(StorageOperationStatus.OK)) {
59 LOGGER.error("Failed to find the parent capability of capability type {}."
60 + " status is {}", componentId, statusRes);
61 return Either.right(statusRes);
64 return Either.left(capabilityDefinitions);
67 public StorageOperationStatus deleteCapabilities(Component component,
68 String capabilityIdToDelete) {
69 return deleteToscaDataElements(component.getUniqueId(),
70 EdgeLabelEnum.CAPABILITIES,
71 Collections.singletonList(capabilityIdToDelete));
74 private static ListCapabilityDataDefinition convertToListCapabilityDataDefinition(
75 List<CapabilityDefinition> capabilities) {
76 List<CapabilityDataDefinition> capabilityDefinitions = new ArrayList<>(capabilities);
77 return new ListCapabilityDataDefinition(capabilityDefinitions);
80 private StorageOperationStatus performUpdateToscaAction(boolean isUpdate,
82 List<ListCapabilityDataDefinition> toscaDataList) {
84 return updateToscaDataOfToscaElement(componentId, EdgeLabelEnum.CAPABILITIES,
85 VertexTypeEnum.CAPABILITIES, toscaDataList, JsonPresentationFields.TYPE);
87 return addToscaDataToToscaElement(componentId, EdgeLabelEnum.CAPABILITIES,
88 VertexTypeEnum.CAPABILITIES, toscaDataList, JsonPresentationFields.TYPE);