summaryrefslogtreecommitdiffstats
path: root/catalog-be/src/main/java/org/openecomp/sdc/be/components/impl/CommonImportManager.java
diff options
context:
space:
mode:
Diffstat (limited to 'catalog-be/src/main/java/org/openecomp/sdc/be/components/impl/CommonImportManager.java')
-rw-r--r--catalog-be/src/main/java/org/openecomp/sdc/be/components/impl/CommonImportManager.java258
1 files changed, 128 insertions, 130 deletions
diff --git a/catalog-be/src/main/java/org/openecomp/sdc/be/components/impl/CommonImportManager.java b/catalog-be/src/main/java/org/openecomp/sdc/be/components/impl/CommonImportManager.java
index c3ecda3e03..326022d806 100644
--- a/catalog-be/src/main/java/org/openecomp/sdc/be/components/impl/CommonImportManager.java
+++ b/catalog-be/src/main/java/org/openecomp/sdc/be/components/impl/CommonImportManager.java
@@ -7,9 +7,9 @@
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
- *
+ *
* http://www.apache.org/licenses/LICENSE-2.0
- *
+ *
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -19,10 +19,21 @@
* Modifications copyright (c) 2019 Nokia
* ================================================================================
*/
-
package org.openecomp.sdc.be.components.impl;
+import static java.util.stream.Collectors.toList;
+
import fj.data.Either;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.function.BiFunction;
+import java.util.function.Consumer;
+import java.util.function.Function;
+import java.util.stream.Collectors;
import org.apache.commons.lang3.tuple.ImmutablePair;
import org.openecomp.sdc.be.components.impl.ImportUtils.ResultStatusEnum;
import org.openecomp.sdc.be.components.impl.exceptions.ByActionStatusComponentException;
@@ -47,24 +58,10 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.yaml.snakeyaml.Yaml;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Map.Entry;
-import java.util.function.BiFunction;
-import java.util.function.Consumer;
-import java.util.function.Function;
-import java.util.stream.Collectors;
-
-import static java.util.stream.Collectors.toList;
-
@Component("commonImportManager")
public class CommonImportManager {
private static final Logger log = Logger.getLogger(CommonImportManager.class.getName());
-
private final ComponentsUtils componentsUtils;
private final PropertyOperation propertyOperation;
@@ -81,12 +78,10 @@ public class CommonImportManager {
private static List<PropertyDefinition> getProperties(Map<String, Object> toscaJson) {
List<PropertyDefinition> values = null;
Either<Map<String, PropertyDefinition>, ResultStatusEnum> properties = ImportUtils.getProperties(toscaJson);
-
if (properties.isLeft()) {
values = new ArrayList<>();
Map<String, PropertyDefinition> propertiesMap = properties.left().value();
if (propertiesMap != null && !propertiesMap.isEmpty()) {
-
for (Entry<String, PropertyDefinition> entry : propertiesMap.entrySet()) {
String propName = entry.getKey();
PropertyDefinition propertyDefinition = entry.getValue();
@@ -96,28 +91,27 @@ public class CommonImportManager {
}
}
}
-
return values;
}
+ private static <T> List<T> append(List<T> list, T value) {
+ list.add(value);
+ return list;
+ }
+
protected void setPropertiesMap(Map<String, Object> toscaJson, Consumer<Map<String, PropertyDefinition>> consumer) {
final List<PropertyDefinition> properties = getProperties(toscaJson);
if (properties != null) {
- Map<String, PropertyDefinition> collect = properties.stream()
- .collect(Collectors.toMap(PropertyDefinition::getName, Function.identity()));
+ Map<String, PropertyDefinition> collect = properties.stream().collect(Collectors.toMap(PropertyDefinition::getName, Function.identity()));
consumer.accept(collect);
}
}
- public interface ICreateElementType<T1, T2, T3> {
- T3 createElement(T1 firstArg, T2 secondArg);
- }
-
- protected <T> Either<List<T>, ActionStatus> createElementTypesFromYml(String elementTypesYml, ICreateElementType<String, Map<String, Object>, T> createApi) {
-
+ protected <T> Either<List<T>, ActionStatus> createElementTypesFromYml(String elementTypesYml,
+ ICreateElementType<String, Map<String, Object>, T> createApi) {
List<T> elementTypes;
Map<String, Object> toscaJson = convertToFieldMap(elementTypesYml);
- if (toscaJson==null) {
+ if (toscaJson == null) {
return Either.right(ActionStatus.INVALID_YAML_FILE);
}
elementTypes = createElementTypesFromToscaJsonMap(createApi, toscaJson);
@@ -135,11 +129,9 @@ public class CommonImportManager {
return toscaJson;
}
-
- protected <T extends ToscaDataDefinition> List<T> createTypesFromToscaJsonMap(
- BiFunction<String, Map<String, Object>, T> createApi, Map<String, Object> toscaJson) {
+ protected <T extends ToscaDataDefinition> List<T> createTypesFromToscaJsonMap(BiFunction<String, Map<String, Object>, T> createApi,
+ Map<String, Object> toscaJson) {
List<T> elementTypes = new ArrayList<>();
-
for (Entry<String, Object> elementTypeNameDataEntry : toscaJson.entrySet()) {
String elementTypeName = elementTypeNameDataEntry.getKey();
Map<String, Object> elementTypeJsonData = (Map<String, Object>) elementTypeNameDataEntry.getValue();
@@ -149,10 +141,9 @@ public class CommonImportManager {
return elementTypes;
}
- protected <T> List<T> createElementTypesFromToscaJsonMap(
- ICreateElementType<String, Map<String, Object>, T> createApi, Map<String, Object> toscaJson) {
+ protected <T> List<T> createElementTypesFromToscaJsonMap(ICreateElementType<String, Map<String, Object>, T> createApi,
+ Map<String, Object> toscaJson) {
List<T> elementTypes = new ArrayList<>();
-
for (Entry<String, Object> elementTypeNameDataEntry : toscaJson.entrySet()) {
String elementTypeName = elementTypeNameDataEntry.getKey();
Map<String, Object> elementTypeJsonData = (Map<String, Object>) elementTypeNameDataEntry.getValue();
@@ -162,10 +153,9 @@ public class CommonImportManager {
return elementTypes;
}
- protected <T> Map<String, T> createElementTypesMapFromToscaJsonMap(
- ICreateElementType<String, Map<String, Object>, T> createApi, Map<String, Object> toscaJson) {
+ protected <T> Map<String, T> createElementTypesMapFromToscaJsonMap(ICreateElementType<String, Map<String, Object>, T> createApi,
+ Map<String, Object> toscaJson) {
Map<String, T> elementTypesMap = new HashMap<>();
-
Iterator<Entry<String, Object>> elementTypesEntryItr = toscaJson.entrySet().iterator();
while (elementTypesEntryItr.hasNext()) {
Entry<String, Object> elementTypeNameDataEntry = elementTypesEntryItr.next();
@@ -184,31 +174,27 @@ public class CommonImportManager {
}
}
- public enum ElementTypeEnum {
- POLICY_TYPE, GROUP_TYPE, DATA_TYPE, CAPABILITY_TYPE, INTERFACE_LIFECYCLE_TYPE, RELATIONSHIP_TYPE
- }
-
private ActionStatus convertFromStorageResponseForElementType(StorageOperationStatus status, ElementTypeEnum elementTypeEnum) {
ActionStatus ret;
switch (elementTypeEnum) {
- case GROUP_TYPE:
- ret = componentsUtils.convertFromStorageResponseForGroupType(status);
- break;
- case DATA_TYPE:
- ret = componentsUtils.convertFromStorageResponseForDataType(status);
- break;
- case CAPABILITY_TYPE:
- ret = componentsUtils.convertFromStorageResponseForCapabilityType(status);
- break;
- case INTERFACE_LIFECYCLE_TYPE:
- ret = componentsUtils.convertFromStorageResponseForLifecycleType(status);
- break;
- case RELATIONSHIP_TYPE:
- ret = componentsUtils.convertFromStorageResponseForRelationshipType(status);
- break;
- default:
- ret = componentsUtils.convertFromStorageResponse(status);
- break;
+ case GROUP_TYPE:
+ ret = componentsUtils.convertFromStorageResponseForGroupType(status);
+ break;
+ case DATA_TYPE:
+ ret = componentsUtils.convertFromStorageResponseForDataType(status);
+ break;
+ case CAPABILITY_TYPE:
+ ret = componentsUtils.convertFromStorageResponseForCapabilityType(status);
+ break;
+ case INTERFACE_LIFECYCLE_TYPE:
+ ret = componentsUtils.convertFromStorageResponseForLifecycleType(status);
+ break;
+ case RELATIONSHIP_TYPE:
+ ret = componentsUtils.convertFromStorageResponseForRelationshipType(status);
+ break;
+ default:
+ ret = componentsUtils.convertFromStorageResponse(status);
+ break;
}
return ret;
}
@@ -216,22 +202,21 @@ public class CommonImportManager {
private <T> ResponseFormat getResponseFormatForElementType(ActionStatus actionStatus, ElementTypeEnum elementTypeEnum, T elementTypeDefinition) {
ResponseFormat ret;
switch (elementTypeEnum) {
- case GROUP_TYPE:
- ret = componentsUtils.getResponseFormatByGroupType(actionStatus, (GroupTypeDefinition) elementTypeDefinition);
- break;
- case POLICY_TYPE:
- ret = componentsUtils.getResponseFormatByPolicyType(actionStatus, (PolicyTypeDefinition) elementTypeDefinition);
- break;
- case DATA_TYPE:
- ret = componentsUtils.getResponseFormatByDataType(actionStatus, (DataTypeDefinition) elementTypeDefinition, null);
- break;
- case CAPABILITY_TYPE:
- ret = componentsUtils.getResponseFormatByCapabilityType(actionStatus, (CapabilityTypeDefinition) elementTypeDefinition);
- break;
-
- default:
- ret = componentsUtils.getResponseFormat(actionStatus);
- break;
+ case GROUP_TYPE:
+ ret = componentsUtils.getResponseFormatByGroupType(actionStatus, (GroupTypeDefinition) elementTypeDefinition);
+ break;
+ case POLICY_TYPE:
+ ret = componentsUtils.getResponseFormatByPolicyType(actionStatus, (PolicyTypeDefinition) elementTypeDefinition);
+ break;
+ case DATA_TYPE:
+ ret = componentsUtils.getResponseFormatByDataType(actionStatus, (DataTypeDefinition) elementTypeDefinition, null);
+ break;
+ case CAPABILITY_TYPE:
+ ret = componentsUtils.getResponseFormatByCapabilityType(actionStatus, (CapabilityTypeDefinition) elementTypeDefinition);
+ break;
+ default:
+ ret = componentsUtils.getResponseFormat(actionStatus);
+ break;
}
return ret;
}
@@ -264,11 +249,13 @@ public class CommonImportManager {
}
return createdElementTypes;
}
-
+
protected <T> Either<List<ImmutablePair<T, Boolean>>, ResponseFormat> createElementTypesByDao(List<T> elementTypesToCreate,
- Function<T, Either<ActionStatus, ResponseFormat>> validator, Function<T, ImmutablePair<ElementTypeEnum, String>> elementInfoGetter,
- Function<String, Either<T, StorageOperationStatus>> elementFetcher, Function<T, Either<T, StorageOperationStatus>> elementAdder,
- BiFunction<T, T, Either<T, StorageOperationStatus>> elementUpgrader) {
+ Function<T, Either<ActionStatus, ResponseFormat>> validator,
+ Function<T, ImmutablePair<ElementTypeEnum, String>> elementInfoGetter,
+ Function<String, Either<T, StorageOperationStatus>> elementFetcher,
+ Function<T, Either<T, StorageOperationStatus>> elementAdder,
+ BiFunction<T, T, Either<T, StorageOperationStatus>> elementUpgrader) {
List<ImmutablePair<T, Boolean>> createdElementTypes = new ArrayList<>();
@@ -279,49 +266,42 @@ public class CommonImportManager {
while (elementTypeItr.hasNext()) {
T elementType = elementTypeItr.next();
eitherResult = handleType(elementType, validator, elementInfoGetter, elementFetcher, elementAdder, elementUpgrader)
- .left()
- .map(elem -> append(createdElementTypes, elem));
-
+ .left()
+ .map(elem -> append(createdElementTypes, elem));
+
if (eitherResult.isRight()) {
break;
}
-
- if(!elementTypeItr.hasNext()) {
+
+ if (!elementTypeItr.hasNext()) {
log.info("all {} were created successfully!!!", elementType);
}
}
- }
- catch(Exception e) {
+ } catch (Exception e) {
eitherResult = Either.right(componentsUtils.getResponseFormat(ActionStatus.GENERAL_ERROR));
throw e;
- }
- finally {
+ } finally {
if (eitherResult.isLeft()) {
propertyOperation.getJanusGraphGenericDao().commit();
- }
- else {
+ } else {
propertyOperation.getJanusGraphGenericDao().rollback();
}
}
return eitherResult;
}
-
- private static <T> List<T> append(List<T> list, T value) {
- list.add(value);
- return list;
- }
-
-
- private <T> Either<ImmutablePair<T, Boolean>, ResponseFormat> handleType(T elementType,
- Function<T, Either<ActionStatus, ResponseFormat>> validator, Function<T, ImmutablePair<ElementTypeEnum, String>> elementInfoGetter,
- Function<String, Either<T, StorageOperationStatus>> elementFetcher, Function<T, Either<T, StorageOperationStatus>> elementAdder,
- BiFunction<T, T, Either<T, StorageOperationStatus>> elementUpgrader) {
-
+
+ private <T> Either<ImmutablePair<T, Boolean>, ResponseFormat> handleType(T elementType,
+ Function<T, Either<ActionStatus, ResponseFormat>> validator,
+ Function<T, ImmutablePair<ElementTypeEnum, String>> elementInfoGetter,
+ Function<String, Either<T, StorageOperationStatus>> elementFetcher,
+ Function<T, Either<T, StorageOperationStatus>> elementAdder,
+ BiFunction<T, T, Either<T, StorageOperationStatus>> elementUpgrader) {
+
final ImmutablePair<ElementTypeEnum, String> elementInfo = elementInfoGetter.apply(elementType);
ElementTypeEnum elementTypeEnum = elementInfo.left;
String elementName = elementInfo.right;
-
+
Either<ActionStatus, ResponseFormat> validateElementType = validator.apply(elementType);
if (validateElementType.isRight()) {
ResponseFormat responseFormat = validateElementType.right().value();
@@ -336,7 +316,8 @@ public class CommonImportManager {
StorageOperationStatus status = findElementType.right().value();
log.debug("searched {} finished with result:{}", elementTypeEnum, status);
if (status != StorageOperationStatus.NOT_FOUND) {
- ResponseFormat responseFormat = getResponseFormatForElementType(convertFromStorageResponseForElementType(status, elementTypeEnum), elementTypeEnum, elementType);
+ ResponseFormat responseFormat = getResponseFormatForElementType(convertFromStorageResponseForElementType(status, elementTypeEnum),
+ elementTypeEnum, elementType);
return Either.right(responseFormat);
} else {
return addElementType(elementType, elementAdder, elementTypeEnum, elementName);
@@ -356,15 +337,18 @@ public class CommonImportManager {
}
}
- private <T> Either<ImmutablePair<T, Boolean>, ResponseFormat> addElementType(T elementType, Function<T, Either<T, StorageOperationStatus>> elementAdder, ElementTypeEnum elementTypeEnum, String elementName) {
+ private <T> Either<ImmutablePair<T, Boolean>, ResponseFormat> addElementType(T elementType,
+ Function<T, Either<T, StorageOperationStatus>> elementAdder,
+ ElementTypeEnum elementTypeEnum, String elementName) {
Either<T, StorageOperationStatus> dataModelResponse = elementAdder.apply(elementType);
-
+
if (dataModelResponse.isRight()) {
BeEcompErrorManager.getInstance().logBeFailedAddingNodeTypeError("Create {}", elementTypeEnum.name());
log.debug("failed to create {}: {}", elementTypeEnum, elementName);
if (dataModelResponse.right().value() != StorageOperationStatus.OK) {
- ResponseFormat responseFormat = getResponseFormatForElementType(convertFromStorageResponseForElementType(dataModelResponse.right().value(), elementTypeEnum), elementTypeEnum, elementType);
-
+ ResponseFormat responseFormat = getResponseFormatForElementType(
+ convertFromStorageResponseForElementType(dataModelResponse.right().value(), elementTypeEnum), elementTypeEnum, elementType);
+
return Either.right(responseFormat);
} else {
return Either.left(new ImmutablePair<>(elementType, false));
@@ -374,17 +358,19 @@ public class CommonImportManager {
return Either.left(new ImmutablePair<>(elementType, true));
}
}
-
-
- private <T> Either<ImmutablePair<T, Boolean>, ResponseFormat> updateElementType(T elementType, BiFunction<T, T, Either<T, StorageOperationStatus>> elementUpgrader,
- ElementTypeEnum elementTypeEnum, String elementName, T existingElementType) {
+
+ private <T> Either<ImmutablePair<T, Boolean>, ResponseFormat> updateElementType(T elementType,
+ BiFunction<T, T, Either<T, StorageOperationStatus>> elementUpgrader,
+ ElementTypeEnum elementTypeEnum, String elementName,
+ T existingElementType) {
Either<T, StorageOperationStatus> upgradeResponse = elementUpgrader.apply(elementType, existingElementType);
if (upgradeResponse.isRight()) {
StorageOperationStatus status = upgradeResponse.right().value();
if (status == StorageOperationStatus.OK) {
return Either.left(new ImmutablePair<>(elementType, false));
} else {
- ResponseFormat responseFormat = getResponseFormatForElementType(convertFromStorageResponseForElementType(upgradeResponse.right().value(), elementTypeEnum), elementTypeEnum, elementType);
+ ResponseFormat responseFormat = getResponseFormatForElementType(
+ convertFromStorageResponseForElementType(upgradeResponse.right().value(), elementTypeEnum), elementTypeEnum, elementType);
return Either.right(responseFormat);
}
} else {
@@ -393,34 +379,35 @@ public class CommonImportManager {
}
}
-
- public <T extends ToscaTypeDataDefinition> Either<List<ImmutablePair<T, Boolean>>, ResponseFormat> createElementTypes(ToscaTypeImportData toscaTypeImportData, Function<String, Either<List<T>, ActionStatus>> elementTypeFromYmlCreater,
- Function<List<T>, Either<List<ImmutablePair<T, Boolean>>, ResponseFormat>> elementTypeDaoCreater) {
+ public <T extends ToscaTypeDataDefinition> Either<List<ImmutablePair<T, Boolean>>, ResponseFormat> createElementTypes(
+ ToscaTypeImportData toscaTypeImportData, Function<String, Either<List<T>, ActionStatus>> elementTypeFromYmlCreater,
+ Function<List<T>, Either<List<ImmutablePair<T, Boolean>>, ResponseFormat>> elementTypeDaoCreater) {
Either<List<T>, ActionStatus> elementTypes = elementTypeFromYmlCreater.apply(toscaTypeImportData.getToscaTypesYml());
return elementTypes
- .right()
- .map(err -> componentsUtils.getResponseFormat(err, ""))
- .left()
- .map(toscaTypes -> enrichTypesWithNonToscaMetadata(toscaTypes, toscaTypeImportData.getToscaTypeMetadata()))
- .left()
- .bind(elementTypeDaoCreater::apply);
+ .right()
+ .map(err -> componentsUtils.getResponseFormat(err, ""))
+ .left()
+ .map(toscaTypes -> enrichTypesWithNonToscaMetadata(toscaTypes, toscaTypeImportData.getToscaTypeMetadata()))
+ .left()
+ .bind(elementTypeDaoCreater::apply);
}
public <T extends ToscaDataDefinition> List<ImmutablePair<T, Boolean>> createElementTypes(String toscaTypesYml,
BiFunction<String, Map<String, Object>, T> createApi,
TypeOperations<T> typeOperations) {
Map<String, Object> fieldMap = convertToFieldMap(toscaTypesYml);
- if (fieldMap==null) {
+ if (fieldMap == null) {
throw new ByActionStatusComponentException(ActionStatus.INVALID_YAML_FILE);
}
List<T> elementTypes = createTypesFromToscaJsonMap(createApi, fieldMap);
return createTypesByDao(elementTypes, typeOperations);
}
- private <T extends ToscaTypeDataDefinition> List<T> enrichTypesWithNonToscaMetadata(List<T> toscaTypes, Map<String, ToscaTypeMetadata> toscaTypeMetadata) {
+ private <T extends ToscaTypeDataDefinition> List<T> enrichTypesWithNonToscaMetadata(List<T> toscaTypes,
+ Map<String, ToscaTypeMetadata> toscaTypeMetadata) {
return toscaTypes.stream()
- .map(toscaType -> setNonToscaMetaDataOnType(toscaTypeMetadata, toscaType))
- .collect(toList());
+ .map(toscaType -> setNonToscaMetaDataOnType(toscaTypeMetadata, toscaType))
+ .collect(toList());
}
private <T extends ToscaTypeDataDefinition> T setNonToscaMetaDataOnType(Map<String, ToscaTypeMetadata> toscaTypeMetadata, T toscaTypeDefinition) {
@@ -435,8 +422,10 @@ public class CommonImportManager {
return toscaTypeDefinition;
}
- public <T> Either<List<ImmutablePair<T, Boolean>>, ResponseFormat> createElementTypes(String elementTypesYml, Function<String, Either<List<T>, ActionStatus>> elementTypeFromYmlCreater,
- Function<List<T>, Either<List<ImmutablePair<T, Boolean>>, ResponseFormat>> elementTypeDaoCreater, ElementTypeEnum elementTypeEnum) {
+ public <T> Either<List<ImmutablePair<T, Boolean>>, ResponseFormat> createElementTypes(String elementTypesYml,
+ Function<String, Either<List<T>, ActionStatus>> elementTypeFromYmlCreater,
+ Function<List<T>, Either<List<ImmutablePair<T, Boolean>>, ResponseFormat>> elementTypeDaoCreater,
+ ElementTypeEnum elementTypeEnum) {
Either<List<T>, ActionStatus> elementTypes = elementTypeFromYmlCreater.apply(elementTypesYml);
if (elementTypes.isRight()) {
@@ -447,4 +436,13 @@ public class CommonImportManager {
return elementTypeDaoCreater.apply(elementTypes.left().value());
}
+
+ public enum ElementTypeEnum {
+ POLICY_TYPE, GROUP_TYPE, DATA_TYPE, CAPABILITY_TYPE, INTERFACE_LIFECYCLE_TYPE, RELATIONSHIP_TYPE
+ }
+
+ public interface ICreateElementType<T1, T2, T3> {
+
+ T3 createElement(T1 firstArg, T2 secondArg);
+ }
}