summaryrefslogtreecommitdiffstats
path: root/catalog-be/src/main/java/org/openecomp/sdc/be/components/merge/property/PropertyDataValueMergeBusinessLogic.java
diff options
context:
space:
mode:
Diffstat (limited to 'catalog-be/src/main/java/org/openecomp/sdc/be/components/merge/property/PropertyDataValueMergeBusinessLogic.java')
-rw-r--r--catalog-be/src/main/java/org/openecomp/sdc/be/components/merge/property/PropertyDataValueMergeBusinessLogic.java76
1 files changed, 26 insertions, 50 deletions
diff --git a/catalog-be/src/main/java/org/openecomp/sdc/be/components/merge/property/PropertyDataValueMergeBusinessLogic.java b/catalog-be/src/main/java/org/openecomp/sdc/be/components/merge/property/PropertyDataValueMergeBusinessLogic.java
index 7356b446a4..df7b877364 100644
--- a/catalog-be/src/main/java/org/openecomp/sdc/be/components/merge/property/PropertyDataValueMergeBusinessLogic.java
+++ b/catalog-be/src/main/java/org/openecomp/sdc/be/components/merge/property/PropertyDataValueMergeBusinessLogic.java
@@ -7,18 +7,14 @@ import java.util.Map;
import java.util.Optional;
import java.util.stream.Collectors;
-import javax.annotation.Resource;
-
import org.openecomp.sdc.be.dao.titan.TitanOperationStatus;
import org.openecomp.sdc.be.datatypes.elements.GetInputValueDataDefinition;
import org.openecomp.sdc.be.datatypes.elements.PropertyDataDefinition;
import org.openecomp.sdc.be.model.DataTypeDefinition;
import org.openecomp.sdc.be.model.cache.ApplicationDataTypeCache;
import org.openecomp.sdc.be.model.tosca.ToscaFunctions;
-import org.openecomp.sdc.be.model.tosca.ToscaPropertyType;
import org.openecomp.sdc.be.tosca.PropertyConvertor;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import org.openecomp.sdc.common.log.wrappers.Logger;
import org.springframework.stereotype.Component;
import com.google.gson.Gson;
@@ -28,72 +24,62 @@ import fj.data.Either;
@Component
public class PropertyDataValueMergeBusinessLogic {
- private static final Logger LOGGER = LoggerFactory.getLogger(PropertyDataValueMergeBusinessLogic.class);
+ private static final Logger LOGGER = Logger.getLogger(PropertyDataValueMergeBusinessLogic.class);
+ private final PropertyValueMerger propertyValueMerger;
+ private final ApplicationDataTypeCache dataTypeCache;
+
private final PropertyConvertor propertyConvertor = PropertyConvertor.getInstance();
-
- private PropertyValueMerger complexPropertyValueMerger = ComplexPropertyValueMerger.getInstance();
-
- private PropertyValueMerger scalarPropertyValueMerger = ScalarPropertyValueMerger.getInstance();
-
- @Resource
- private ApplicationDataTypeCache dataTypeCache;
-
private final Gson gson = new Gson();
+
+ public PropertyDataValueMergeBusinessLogic(PropertyValueMerger propertyValueMerger, ApplicationDataTypeCache dataTypeCache) {
+ this.propertyValueMerger = propertyValueMerger;
+ this.dataTypeCache = dataTypeCache;
+ }
+
/**
*
* @param oldProp the old property to merge value from
* @param newProp the new property to merge value into
- * @param getInputNamesToMerge inputs names which their corresponding get_input values are allowed to be merged
*/
public void mergePropertyValue(PropertyDataDefinition oldProp, PropertyDataDefinition newProp, List<String> getInputNamesToMerge) {
Either<Map<String, DataTypeDefinition>, TitanOperationStatus> dataTypesEither = dataTypeCache.getAll();
if (dataTypesEither.isRight()) {
LOGGER.debug("failed to fetch data types, skip merging of previous property values. status: {}", dataTypesEither.right().value());
}
- mergePropertyValue(oldProp, newProp, dataTypesEither.left().value(), getInputNamesToMerge);
- mergeComplexPropertyGetInputsValues(oldProp, newProp);
+ else {
+ mergePropertyValue(oldProp, newProp, dataTypesEither.left().value(), getInputNamesToMerge);
+ }
}
-
+
private void mergePropertyValue(PropertyDataDefinition oldProp, PropertyDataDefinition newProp, Map<String, DataTypeDefinition> dataTypes, List<String> getInputNamesToMerge) {
Object oldValAsObject = convertPropertyStrValueToObject(oldProp, dataTypes);
Object newValAsObject = convertPropertyStrValueToObject(newProp, dataTypes);
- PropertyValueMerger propertyValueMerger = getPropertyValueMerger(newProp);
if(oldValAsObject != null){
- Object mergedValue = propertyValueMerger.mergeValues(oldValAsObject, newValAsObject, getInputNamesToMerge);
+ Object mergedValue = propertyValueMerger.merge(oldValAsObject, newValAsObject, getInputNamesToMerge, newProp.getType(), newProp.getSchemaType(), dataTypes);
newProp.setValue(convertPropertyValueObjectToString(mergedValue));
+
+ mergePropertyGetInputsValues(oldProp, newProp);
}
+
}
-
- private PropertyValueMerger getPropertyValueMerger(PropertyDataDefinition newProp) {
- if (ToscaPropertyType.isPrimitiveType(newProp.getType()) || ToscaPropertyType.isPrimitiveType(newProp.getSchemaType())) {
- return scalarPropertyValueMerger;
- }
- return complexPropertyValueMerger;
- }
-
+
private String convertPropertyValueObjectToString(Object mergedValue) {
- if (isEmptyValue(mergedValue)) {
+ if (PropertyValueMerger.isEmptyValue(mergedValue)) {
return null;
}
return mergedValue instanceof String? mergedValue.toString() : gson.toJson(mergedValue);
}
private Object convertPropertyStrValueToObject(PropertyDataDefinition propertyDataDefinition, Map<String, DataTypeDefinition> dataTypes) {
- String propValue = propertyDataDefinition.getValue() == null ? "": propertyDataDefinition.getValue();
- String propertyType = propertyDataDefinition.getType();
- String innerType = propertyDataDefinition.getSchemaType();
- return propertyConvertor.convertToToscaObject(propertyType, propValue, innerType, dataTypes);
+ String propValue = propertyDataDefinition.getValue() == null ? "": propertyDataDefinition.getValue();
+ String propertyType = propertyDataDefinition.getType();
+ String innerType = propertyDataDefinition.getSchemaType();
+ return propertyConvertor.convertToToscaObject(propertyType, propValue, innerType, dataTypes, true);
}
- private boolean isEmptyValue(Object val) {
- return val == null ||
- val instanceof Map && ((Map) val).isEmpty() ||
- val instanceof List && ((List) val).isEmpty();
- }
-
- private void mergeComplexPropertyGetInputsValues(PropertyDataDefinition oldProp, PropertyDataDefinition newProp) {
+ protected void mergePropertyGetInputsValues(PropertyDataDefinition oldProp, PropertyDataDefinition newProp) {
if (!oldProp.isGetInputProperty()) {
return;
}
@@ -117,14 +103,4 @@ public class PropertyDataValueMergeBusinessLogic {
String getInputEntry = "\"%s\":\"%s\"";
return value != null && value.contains(String.format(getInputEntry, ToscaFunctions.GET_INPUT.getFunctionName(), inputName));
}
-
-
-
-
-
-
-
-
-
-
}