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=========================================================
21 package org.openecomp.sdc.be.components.impl;
23 import fj.data.Either;
24 import org.apache.commons.lang3.tuple.ImmutablePair;
25 import org.openecomp.sdc.be.components.impl.CommonImportManager.ElementTypeEnum;
26 import org.openecomp.sdc.be.components.impl.ImportUtils.ToscaTagNamesEnum;
27 import org.openecomp.sdc.be.config.BeEcompErrorManager;
28 import org.openecomp.sdc.be.dao.api.ActionStatus;
29 import org.openecomp.sdc.be.impl.ComponentsUtils;
30 import org.openecomp.sdc.be.model.CapabilityTypeDefinition;
31 import org.openecomp.sdc.be.model.GroupTypeDefinition;
32 import org.openecomp.sdc.be.model.PropertyDefinition;
33 import org.openecomp.sdc.be.model.jsontitan.operations.ToscaOperationFacade;
34 import org.openecomp.sdc.be.model.operations.api.IGroupTypeOperation;
35 import org.openecomp.sdc.be.model.operations.api.StorageOperationStatus;
36 import org.openecomp.sdc.exception.ResponseFormat;
37 import org.slf4j.Logger;
38 import org.slf4j.LoggerFactory;
39 import org.springframework.stereotype.Component;
41 import javax.annotation.Resource;
42 import java.util.ArrayList;
43 import java.util.Collections;
44 import java.util.List;
47 import java.util.stream.Collectors;
49 @Component("groupTypeImportManager")
50 public class GroupTypeImportManager {
52 public static void main(String[] args) {
54 List<PropertyDefinition> properties = new ArrayList<>();
55 PropertyDefinition propertyDefintion = new PropertyDefinition();
56 propertyDefintion.setName("aaa");
57 properties.add(propertyDefintion);
59 List<String> allParentsProps = new ArrayList<>();
60 allParentsProps.add("aaa");
61 allParentsProps.add("bbb");
63 Set<String> alreadyExistPropsCollection = properties.stream().filter(p -> allParentsProps.contains(p.getName())).map(p -> p.getName()).collect(Collectors.toSet());
64 System.out.println(alreadyExistPropsCollection);
68 private static final Logger log = LoggerFactory.getLogger(GroupTypeImportManager.class);
70 private IGroupTypeOperation groupTypeOperation;
72 private ComponentsUtils componentsUtils;
74 private ToscaOperationFacade toscaOperationFacade;
77 private CommonImportManager commonImportManager;
79 public Either<List<ImmutablePair<GroupTypeDefinition, Boolean>>, ResponseFormat> createGroupTypes(String groupTypesYml) {
80 return commonImportManager.createElementTypes(groupTypesYml, elementTypeYml -> createGroupTypesFromYml(elementTypeYml), groupTypesList -> createGroupTypesByDao(groupTypesList), ElementTypeEnum.GroupType);
83 private Either<List<GroupTypeDefinition>, ActionStatus> createGroupTypesFromYml(String groupTypesYml) {
85 return commonImportManager.createElementTypesFromYml(groupTypesYml, (groupTypeName, groupTypeJsonData) -> createGroupType(groupTypeName, groupTypeJsonData));
88 private Either<List<ImmutablePair<GroupTypeDefinition, Boolean>>, ResponseFormat> createGroupTypesByDao(List<GroupTypeDefinition> groupTypesToCreate) {
89 return commonImportManager.createElementTypesByDao(groupTypesToCreate, groupType -> validateGroupType(groupType), groupType -> new ImmutablePair<>(ElementTypeEnum.GroupType, groupType.getType()),
90 groupTypeName -> groupTypeOperation.getLatestGroupTypeByType(groupTypeName), groupType -> groupTypeOperation.addGroupType(groupType), groupTypeOperation::upgradeGroupType);
93 private Either<ActionStatus, ResponseFormat> validateGroupType(GroupTypeDefinition groupType) {
94 Either<ActionStatus, ResponseFormat> result = Either.left(ActionStatus.OK);
95 if (groupType.getMembers() != null) {
96 if (groupType.getMembers().isEmpty()) {
97 ResponseFormat responseFormat = componentsUtils.getResponseFormat(ActionStatus.GROUP_MEMBER_EMPTY, groupType.getType());
98 result = Either.right(responseFormat);
100 for (String member : groupType.getMembers()) {
101 // Verify that such Resource exist
102 Either<org.openecomp.sdc.be.model.Resource, StorageOperationStatus> eitherMemberExist = toscaOperationFacade.getLatestByToscaResourceName(member);
103 if (eitherMemberExist.isRight()) {
104 StorageOperationStatus operationStatus = eitherMemberExist.right().value();
105 log.debug("Error when fetching parent resource {}, error: {}", member, operationStatus);
106 ActionStatus convertFromStorageResponse = componentsUtils.convertFromStorageResponse(operationStatus);
107 BeEcompErrorManager.getInstance().logBeComponentMissingError("Import GroupType", "resource", member);
108 result = Either.right(componentsUtils.getResponseFormat(convertFromStorageResponse, member));
118 private GroupTypeDefinition createGroupType(String groupTypeName, Map<String, Object> toscaJson) {
120 GroupTypeDefinition groupType = new GroupTypeDefinition();
122 if (toscaJson != null) {
124 commonImportManager.setField(toscaJson, ToscaTagNamesEnum.DESCRIPTION.getElementName(), groupType::setDescription);
126 commonImportManager.setField(toscaJson, ToscaTagNamesEnum.DERIVED_FROM.getElementName(), groupType::setDerivedFrom);
128 commonImportManager.setProperties(toscaJson, groupType::setProperties);
130 commonImportManager.setField(toscaJson, ToscaTagNamesEnum.METADATA.getElementName(), groupType::setMetadata);
132 List<CapabilityTypeDefinition> capabilityTypes = createGroupCapabilityTypes(toscaJson);
133 groupType.setCapabilityTypes(capabilityTypes);
135 commonImportManager.setField(toscaJson, ToscaTagNamesEnum.MEMBERS.getElementName(), groupType::setMembers);
137 groupType.setType(groupTypeName);
139 groupType.setHighestVersion(true);
141 groupType.setVersion(ImportUtils.Constants.FIRST_CERTIFIED_VERSION_VERSION);
150 private List<CapabilityTypeDefinition> createGroupCapabilityTypes(Map<String, Object> toscaJson) {
151 CapabilityTypeToscaJsonHolder capabilityTypeToscaJsonHolder = new CapabilityTypeToscaJsonHolder();
152 commonImportManager.setField(toscaJson, ToscaTagNamesEnum.CAPABILITIES.getElementName(), capabilityTypeToscaJsonHolder::setCapabilityTypeToscaJson);
153 List<CapabilityTypeDefinition> capabilityTypes;
154 if (capabilityTypeToscaJsonHolder.isEmpty()) {
155 capabilityTypes = Collections.emptyList();
158 capabilityTypes = commonImportManager.createElementTypesFromToscaJsonMap(this::createGroupCapabilityType, capabilityTypeToscaJsonHolder.getCapabilityTypeToscaJson());
160 return capabilityTypes;
163 private class CapabilityTypeToscaJsonHolder {
164 private Map<String, Object> capabilityTypeToscaJson;
166 public Map<String, Object> getCapabilityTypeToscaJson() {
167 return capabilityTypeToscaJson;
170 public boolean isEmpty() {
171 return capabilityTypeToscaJson == null;
174 public void setCapabilityTypeToscaJson(Map<String, Object> capabilityTypeToscaJson) {
175 this.capabilityTypeToscaJson = capabilityTypeToscaJson;
179 private CapabilityTypeDefinition createGroupCapabilityType(String capabilityTypeName, Map<String, Object> toscaJson) {
180 CapabilityTypeDefinition capabilityType = new CapabilityTypeDefinition();
182 commonImportManager.setField(toscaJson, ToscaTagNamesEnum.TYPE.getElementName(), capabilityType::setType);
184 commonImportManager.setPropertiesMap(toscaJson, capabilityType::setProperties);
186 return capabilityType;