2 * ============LICENSE_START=======================================================
4 * ================================================================================
5 * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
6 * ================================================================================
7 * Licensed under the Apache License, Version 2.0 (the "License");
8 * you may not use this file except in compliance with the License.
9 * You may obtain a copy of the License at
11 * http://www.apache.org/licenses/LICENSE-2.0
13 * Unless required by applicable law or agreed to in writing, software
14 * distributed under the License is distributed on an "AS IS" BASIS,
15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 * See the License for the specific language governing permissions and
17 * limitations under the License.
18 * ============LICENSE_END=========================================================
20 package org.openecomp.sdc.be.components.impl;
22 import fj.data.Either;
23 import java.util.List;
25 import java.util.Optional;
26 import org.apache.commons.lang3.StringUtils;
27 import org.apache.commons.lang3.tuple.ImmutablePair;
28 import org.openecomp.sdc.be.dao.api.ActionStatus;
29 import org.openecomp.sdc.be.model.CapabilityTypeDefinition;
30 import org.openecomp.sdc.be.model.Model;
31 import org.openecomp.sdc.be.model.operations.api.StorageOperationStatus;
32 import org.openecomp.sdc.be.model.operations.impl.CapabilityTypeOperation;
33 import org.openecomp.sdc.be.model.operations.impl.ModelOperation;
34 import org.openecomp.sdc.be.model.operations.impl.UniqueIdBuilder;
35 import org.openecomp.sdc.be.model.utils.TypeCompareUtils;
36 import org.openecomp.sdc.be.utils.TypeUtils;
37 import org.openecomp.sdc.common.log.wrappers.Logger;
38 import org.openecomp.sdc.exception.ResponseFormat;
39 import org.springframework.beans.factory.annotation.Autowired;
40 import org.springframework.stereotype.Component;
42 @Component("capabilityTypeImportManager")
43 public class CapabilityTypeImportManager {
45 private static final Logger log = Logger.getLogger(CapabilityTypeImportManager.class.getName());
46 private final CapabilityTypeOperation capabilityTypeOperation;
47 private final CommonImportManager commonImportManager;
48 private final ModelOperation modelOperation;
51 public CapabilityTypeImportManager(CapabilityTypeOperation capabilityTypeOperation, CommonImportManager commonImportManager, ModelOperation modelOperation) {
52 this.capabilityTypeOperation = capabilityTypeOperation;
53 this.commonImportManager = commonImportManager;
54 this.modelOperation = modelOperation;
57 public Either<List<ImmutablePair<CapabilityTypeDefinition, Boolean>>, ResponseFormat> createCapabilityTypes(final String capabilityTypesYml, final String modelName) {
58 return commonImportManager.createElementTypes(capabilityTypesYml, capabilityTypesFromYml -> createCapabilityTypesFromYml(capabilityTypesYml, modelName), this::upsertCapabilityTypesByDao,
59 CommonImportManager.ElementTypeEnum.CAPABILITY_TYPE);
62 private Either<List<CapabilityTypeDefinition>, ActionStatus> createCapabilityTypesFromYml(final String capabilityTypesYml, final String modelName) {
63 final Either<List<CapabilityTypeDefinition>, ActionStatus> capabilityTypes = commonImportManager.createElementTypesFromYml(capabilityTypesYml, this::createCapabilityType);
64 if (capabilityTypes.isLeft() && StringUtils.isNotEmpty(modelName)){
65 final Optional<Model> modelOptional = modelOperation.findModelByName(modelName);
66 if (modelOptional.isPresent()) {
67 capabilityTypes.left().value().forEach(capabilityType -> capabilityType.setModel(modelName));
68 return capabilityTypes;
70 return Either.right(ActionStatus.INVALID_MODEL);
72 return capabilityTypes;
75 private Either<List<ImmutablePair<CapabilityTypeDefinition, Boolean>>, ResponseFormat> upsertCapabilityTypesByDao(
76 List<CapabilityTypeDefinition> capabilityTypesToCreate) {
77 return commonImportManager.createElementTypesByDao(capabilityTypesToCreate, capabilityType -> Either.left(ActionStatus.OK),
78 capabilityType -> new ImmutablePair<>(CommonImportManager.ElementTypeEnum.CAPABILITY_TYPE, UniqueIdBuilder.buildCapabilityTypeUid(capabilityType.getModel(), capabilityType.getType())),
79 capabilityTypeOperation::getCapabilityType, capabilityTypeOperation::addCapabilityType, this::updateCapabilityType);
82 private Either<CapabilityTypeDefinition, StorageOperationStatus> updateCapabilityType(CapabilityTypeDefinition newCapabilityType,
83 CapabilityTypeDefinition oldCapabilityType) {
84 Either<CapabilityTypeDefinition, StorageOperationStatus> validationRes = capabilityTypeOperation.validateUpdateProperties(newCapabilityType);
85 if (validationRes.isRight()) {
86 log.error("#updateCapabilityType - One or all properties of capability type {} not valid. status is {}", newCapabilityType,
87 validationRes.right().value());
90 if (TypeCompareUtils.isCapabilityTypesEquals(newCapabilityType, oldCapabilityType)) {
91 return TypeCompareUtils.typeAlreadyExists();
93 return capabilityTypeOperation.updateCapabilityType(newCapabilityType, oldCapabilityType);
96 private CapabilityTypeDefinition createCapabilityType(String capabilityTypeName, Map<String, Object> toscaJson) {
97 CapabilityTypeDefinition capabilityType = new CapabilityTypeDefinition();
98 capabilityType.setType(capabilityTypeName);
100 commonImportManager.setField(toscaJson, TypeUtils.ToscaTagNamesEnum.DESCRIPTION.getElementName(), capabilityType::setDescription);
102 commonImportManager.setField(toscaJson, TypeUtils.ToscaTagNamesEnum.DERIVED_FROM.getElementName(), capabilityType::setDerivedFrom);
104 commonImportManager.setPropertiesMap(toscaJson, capabilityType::setProperties);
105 return capabilityType;