Merge "[sdc] - repositories proxied by LF are removed"
[sdc.git] / catalog-be / src / main / java / org / openecomp / sdc / be / components / impl / GroupTypeImportManager.java
1 /*-
2  * ============LICENSE_START=======================================================
3  * SDC
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
10  * 
11  *      http://www.apache.org/licenses/LICENSE-2.0
12  * 
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=========================================================
19  */
20
21 package org.openecomp.sdc.be.components.impl;
22
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.GroupTypeDefinition;
31 import org.openecomp.sdc.be.model.PropertyDefinition;
32 import org.openecomp.sdc.be.model.jsontitan.operations.ToscaOperationFacade;
33 import org.openecomp.sdc.be.model.operations.api.IGroupTypeOperation;
34 import org.openecomp.sdc.be.model.operations.api.StorageOperationStatus;
35 import org.openecomp.sdc.exception.ResponseFormat;
36 import org.slf4j.Logger;
37 import org.slf4j.LoggerFactory;
38 import org.springframework.stereotype.Component;
39
40 import javax.annotation.Resource;
41 import java.util.ArrayList;
42 import java.util.List;
43 import java.util.Map;
44 import java.util.Set;
45 import java.util.function.Consumer;
46 import java.util.stream.Collectors;
47
48 @Component("groupTypeImportManager")
49 public class GroupTypeImportManager {
50
51         public static void main(String[] args) {
52
53                 List<PropertyDefinition> properties = new ArrayList<>();
54                 PropertyDefinition propertyDefintion = new PropertyDefinition();
55                 propertyDefintion.setName("aaa");
56                 properties.add(propertyDefintion);
57
58                 List<String> allParentsProps = new ArrayList<>();
59                 allParentsProps.add("aaa");
60                 allParentsProps.add("bbb");
61
62                 Set<String> alreadyExistPropsCollection = properties.stream().filter(p -> allParentsProps.contains(p.getName())).map(p -> p.getName()).collect(Collectors.toSet());
63                 System.out.println(alreadyExistPropsCollection);
64
65         }
66
67         private static Logger log = LoggerFactory.getLogger(GroupTypeImportManager.class.getName());
68         @Resource
69         private IGroupTypeOperation groupTypeOperation;
70         @Resource
71         private ComponentsUtils componentsUtils;
72         @Resource
73         private ToscaOperationFacade toscaOperationFacade;
74
75         @Resource
76         private CommonImportManager commonImportManager;
77
78         public Either<List<ImmutablePair<GroupTypeDefinition, Boolean>>, ResponseFormat> createGroupTypes(String groupTypesYml) {
79                 return commonImportManager.createElementTypes(groupTypesYml, elementTypeYml -> createGroupTypesFromYml(elementTypeYml), groupTypesList -> createGroupTypesByDao(groupTypesList), ElementTypeEnum.GroupType);
80         }
81
82         private Either<List<GroupTypeDefinition>, ActionStatus> createGroupTypesFromYml(String groupTypesYml) {
83
84                 return commonImportManager.createElementTypesFromYml(groupTypesYml, (groupTypeName, groupTypeJsonData) -> createGroupType(groupTypeName, groupTypeJsonData));
85         }
86
87         private Either<List<ImmutablePair<GroupTypeDefinition, Boolean>>, ResponseFormat> createGroupTypesByDao(List<GroupTypeDefinition> groupTypesToCreate) {
88                 return commonImportManager.createElementTypesByDao(groupTypesToCreate, groupType -> validateGroupType(groupType), groupType -> new ImmutablePair<>(ElementTypeEnum.GroupType, groupType.getType()),
89                                 groupTypeName -> groupTypeOperation.getLatestGroupTypeByType(groupTypeName), groupType -> groupTypeOperation.addGroupType(groupType), null);
90         }
91
92         private Either<ActionStatus, ResponseFormat> validateGroupType(GroupTypeDefinition groupType) {
93                 Either<ActionStatus, ResponseFormat> result = Either.left(ActionStatus.OK);
94                 if (groupType.getMembers() != null) {
95                         if (groupType.getMembers().isEmpty()) {
96                                 ResponseFormat responseFormat = componentsUtils.getResponseFormat(ActionStatus.GROUP_MEMBER_EMPTY, groupType.getType());
97                                 result = Either.right(responseFormat);
98                         } else {
99                                 for (String member : groupType.getMembers()) {
100                                         // Verify that such Resource exist
101                                         Either<org.openecomp.sdc.be.model.Resource, StorageOperationStatus> eitherMemberExist = toscaOperationFacade.getLatestByToscaResourceName(member);
102                                         if (eitherMemberExist.isRight()) {
103                                                 StorageOperationStatus operationStatus = eitherMemberExist.right().value();
104                                                 log.debug("Error when fetching parent resource {}, error: {}", member, operationStatus);
105                                                 ActionStatus convertFromStorageResponse = componentsUtils.convertFromStorageResponse(operationStatus);
106                                                 BeEcompErrorManager.getInstance().logBeComponentMissingError("Import GroupType", "resource", member);
107                                                 result = Either.right(componentsUtils.getResponseFormat(convertFromStorageResponse, member));
108                                                 break;
109                                         }
110                                 }
111
112                         }
113                 }
114                 return result;
115         }
116
117         private GroupTypeDefinition createGroupType(String groupTypeName, Map<String, Object> toscaJson) {
118
119                 GroupTypeDefinition groupType = new GroupTypeDefinition();
120
121                 if (toscaJson != null) {
122                         // Description
123                         final Consumer<String> descriptionSetter = description -> groupType.setDescription(description);
124                         commonImportManager.setField(toscaJson, ToscaTagNamesEnum.DESCRIPTION.getElementName(), descriptionSetter);
125                         // Derived From
126                         final Consumer<String> derivedFromSetter = derivedFrom -> groupType.setDerivedFrom(derivedFrom);
127                         commonImportManager.setField(toscaJson, ToscaTagNamesEnum.DERIVED_FROM.getElementName(), derivedFromSetter);
128                         // Properties
129                         commonImportManager.setProperties(toscaJson, (values) -> groupType.setProperties(values));
130                         // Metadata
131                         final Consumer<Map<String, String>> metadataSetter = metadata -> groupType.setMetadata(metadata);
132                         commonImportManager.setField(toscaJson, ToscaTagNamesEnum.METADATA.getElementName(), metadataSetter);
133                         // Members
134                         final Consumer<List<String>> membersSetter = members -> groupType.setMembers(members);
135                         commonImportManager.setField(toscaJson, ToscaTagNamesEnum.MEMBERS.getElementName(), membersSetter);
136
137                         groupType.setType(groupTypeName);
138
139                         groupType.setHighestVersion(true);
140
141                         groupType.setVersion(ImportUtils.Constants.FIRST_CERTIFIED_VERSION_VERSION);
142                 }
143                 return groupType;
144         }
145
146 }