aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authortalio <tali.orenbach@amdocs.com>2017-11-21 10:00:27 +0200
committerAvi Gaffa <avi.gaffa@amdocs.com>2017-11-21 09:30:22 +0000
commit2b79f16651701fdfa04eb100bc83f2a42b8ed609 (patch)
treef61d47888514142c0be011466f2d5c3526e9a07a
parent15dfe1e9a127bc73f671b9601d8b8c8e25c2d65f (diff)
fix NPE in extract
fix NPE when extracting components without images / flavors Issue - Id : SDC-694 Change-Id: I3e4444132a40a2567833375ceea1951803dd16b0 Signed-off-by: talio <tali.orenbach@amdocs.com>
-rw-r--r--openecomp-be/lib/openecomp-sdc-vendor-software-product-lib/openecomp-sdc-vendor-software-product-core/src/main/java/org/openecomp/sdc/vendorsoftwareproduct/services/impl/composition/CompositionDataExtractorImpl.java46
-rw-r--r--openecomp-be/lib/openecomp-tosca-converter-lib/openecomp-tosca-converter-api/src/main/java/org/openecomp/core/converter/ServiceTemplateReaderService.java2
-rw-r--r--openecomp-be/lib/openecomp-tosca-converter-lib/openecomp-tosca-converter-core/src/main/java/org/openecomp/core/impl/ToscaConverterImpl.java18
-rw-r--r--openecomp-be/lib/openecomp-tosca-converter-lib/openecomp-tosca-converter-core/src/main/java/org/openecomp/core/impl/ToscaConverterUtil.java55
-rw-r--r--openecomp-be/lib/openecomp-tosca-converter-lib/openecomp-tosca-converter-core/src/main/java/org/openecomp/core/impl/services/ServiceTemplateReaderServiceImpl.java5
5 files changed, 68 insertions, 58 deletions
diff --git a/openecomp-be/lib/openecomp-sdc-vendor-software-product-lib/openecomp-sdc-vendor-software-product-core/src/main/java/org/openecomp/sdc/vendorsoftwareproduct/services/impl/composition/CompositionDataExtractorImpl.java b/openecomp-be/lib/openecomp-sdc-vendor-software-product-lib/openecomp-sdc-vendor-software-product-core/src/main/java/org/openecomp/sdc/vendorsoftwareproduct/services/impl/composition/CompositionDataExtractorImpl.java
index 93b95240d1..19e48eceaa 100644
--- a/openecomp-be/lib/openecomp-sdc-vendor-software-product-lib/openecomp-sdc-vendor-software-product-core/src/main/java/org/openecomp/sdc/vendorsoftwareproduct/services/impl/composition/CompositionDataExtractorImpl.java
+++ b/openecomp-be/lib/openecomp-sdc-vendor-software-product-lib/openecomp-sdc-vendor-software-product-core/src/main/java/org/openecomp/sdc/vendorsoftwareproduct/services/impl/composition/CompositionDataExtractorImpl.java
@@ -324,43 +324,33 @@ public class CompositionDataExtractorImpl implements CompositionDataExtractor {
private Map<String,List<String>> getComponentImages(Map<String, NodeTemplate>
computeNodeTemplates,
ToscaServiceModel toscaServiceModel) {
- Map<String,List<String>> computeImages = new HashMap<>();
- for (String component : computeNodeTemplates.keySet()) {
- List<String> images = new ArrayList<>();
- Map<String,Object> properties = computeNodeTemplates.get(component).getProperties();
-
- List<Object> imagesList = properties.entrySet()
- .stream()
- .filter(map -> map.getKey().equals("image"))
- .map(map -> map.getValue())
- .collect(Collectors.toList());
- for (Object obj : imagesList) {
- if (obj instanceof String) {
- images.add((String) obj);
- } else {
- Map<String,String> objMap = new ObjectMapper().convertValue(obj,Map.class);
- images.add(getInputs(toscaServiceModel,objMap.get("get_input")));
- }
- }
- computeImages.put(component,images);
- }
- return computeImages;
+ return getComponentProperty(ToscaConstants.COMPUTE_IMAGE, computeNodeTemplates, toscaServiceModel);
}
private Map<String,List<String>> getComponentComputeFlavor(Map<String, NodeTemplate>
computeNodeTemplates,
ToscaServiceModel toscaServiceModel) {
- Map<String,List<String>> componentComputeFlavor = new HashMap<>();
+ return getComponentProperty(ToscaConstants.COMPUTE_FLAVOR, computeNodeTemplates, toscaServiceModel);
+ }
+
+ private Map<String, List<String>> getComponentProperty(String propertyName,
+ Map<String, NodeTemplate> computeNodeTemplates,
+ ToscaServiceModel toscaServiceModel) {
+ Map<String,List<String>> componentPropertyValues = new HashMap<>();
for (String component : computeNodeTemplates.keySet()) {
List<String> computes = new ArrayList<>();
Map<String,Object> properties = computeNodeTemplates.get(component).getProperties();
- List<Object> computessList = properties.entrySet()
+ if(MapUtils.isEmpty(properties)){
+ continue;
+ }
+
+ List<Object> computesList = properties.entrySet()
.stream()
- .filter(map -> map.getKey().equals("flavor"))
- .map(map -> map.getValue())
+ .filter(map -> map.getKey().equals(propertyName))
+ .map(Map.Entry::getValue)
.collect(Collectors.toList());
- for (Object obj : computessList) {
+ for (Object obj : computesList) {
if (obj instanceof String) {
computes.add((String) obj);
} else {
@@ -368,9 +358,9 @@ public class CompositionDataExtractorImpl implements CompositionDataExtractor {
computes.add(getInputs(toscaServiceModel, objMap.get("get_input")));
}
}
- componentComputeFlavor.put(component,computes);
+ componentPropertyValues.put(component,computes);
}
- return componentComputeFlavor;
+ return componentPropertyValues;
}
private String getInputs(ToscaServiceModel toscaServiceModel, String inputValue) {
diff --git a/openecomp-be/lib/openecomp-tosca-converter-lib/openecomp-tosca-converter-api/src/main/java/org/openecomp/core/converter/ServiceTemplateReaderService.java b/openecomp-be/lib/openecomp-tosca-converter-lib/openecomp-tosca-converter-api/src/main/java/org/openecomp/core/converter/ServiceTemplateReaderService.java
index 09c823ce7e..1bc97b4d69 100644
--- a/openecomp-be/lib/openecomp-tosca-converter-lib/openecomp-tosca-converter-api/src/main/java/org/openecomp/core/converter/ServiceTemplateReaderService.java
+++ b/openecomp-be/lib/openecomp-tosca-converter-lib/openecomp-tosca-converter-api/src/main/java/org/openecomp/core/converter/ServiceTemplateReaderService.java
@@ -10,7 +10,7 @@ public interface ServiceTemplateReaderService {
Object getToscaVersion();
- Object getNodeTypes();
+ Map<String, Object> getNodeTypes();
Object getTopologyTemplate();
diff --git a/openecomp-be/lib/openecomp-tosca-converter-lib/openecomp-tosca-converter-core/src/main/java/org/openecomp/core/impl/ToscaConverterImpl.java b/openecomp-be/lib/openecomp-tosca-converter-lib/openecomp-tosca-converter-core/src/main/java/org/openecomp/core/impl/ToscaConverterImpl.java
index f38b7e096a..e7ff3aa8ee 100644
--- a/openecomp-be/lib/openecomp-tosca-converter-lib/openecomp-tosca-converter-core/src/main/java/org/openecomp/core/impl/ToscaConverterImpl.java
+++ b/openecomp-be/lib/openecomp-tosca-converter-lib/openecomp-tosca-converter-core/src/main/java/org/openecomp/core/impl/ToscaConverterImpl.java
@@ -1,7 +1,6 @@
package org.openecomp.core.impl;
import org.apache.commons.collections.MapUtils;
-import org.apache.commons.lang3.StringUtils;
import org.openecomp.core.converter.ServiceTemplateReaderService;
import org.openecomp.core.converter.ToscaConverter;
import org.openecomp.core.converter.datatypes.Constants;
@@ -284,26 +283,15 @@ public class ToscaConverterImpl implements ToscaConverter {
entry.getKey(), entry.getValue(), ParameterDefinition.class);
parameterDefinition.ifPresent(parameterDefinitionValue -> {
- handleDefaultValue(entry.getValue(), parameterDefinition.get());
+ Optional<Object> defaultValue =
+ ToscaConverterUtil.getDefaultValue(entry.getValue(), parameterDefinition.get());
+ defaultValue.ifPresent(parameterDefinitionValue::set_default);
addToServiceTemplateAccordingToSection(
serviceTemplate, inputsOrOutputs, entry.getKey(), parameterDefinition.get());
} );
}
}
- private void handleDefaultValue(Object entryValue,
- ParameterDefinition parameterDefinition) {
- if(!(entryValue instanceof Map)
- || Objects.isNull(parameterDefinition)){
- return;
- }
-
- Object defaultValue = ((Map) entryValue).get("default");
- if(Objects.nonNull(defaultValue)) {
- parameterDefinition.set_default(defaultValue);
- }
- }
-
private void addToServiceTemplateAccordingToSection(ServiceTemplate serviceTemplate,
String inputsOrOutputs,
String parameterId,
diff --git a/openecomp-be/lib/openecomp-tosca-converter-lib/openecomp-tosca-converter-core/src/main/java/org/openecomp/core/impl/ToscaConverterUtil.java b/openecomp-be/lib/openecomp-tosca-converter-lib/openecomp-tosca-converter-core/src/main/java/org/openecomp/core/impl/ToscaConverterUtil.java
index 4120c6994c..20ac6413e7 100644
--- a/openecomp-be/lib/openecomp-tosca-converter-lib/openecomp-tosca-converter-core/src/main/java/org/openecomp/core/impl/ToscaConverterUtil.java
+++ b/openecomp-be/lib/openecomp-tosca-converter-lib/openecomp-tosca-converter-core/src/main/java/org/openecomp/core/impl/ToscaConverterUtil.java
@@ -1,24 +1,33 @@
package org.openecomp.core.impl;
+import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang.StringUtils;
-import org.codehaus.jackson.map.ObjectMapper;
import org.openecomp.core.converter.errors.CreateToscaObjectErrorBuilder;
-import org.openecomp.core.utilities.json.JsonUtil;
import org.openecomp.sdc.common.errors.CoreException;
-import org.openecomp.sdc.common.errors.ErrorCategory;
-import org.openecomp.sdc.common.errors.ErrorCode;
import java.lang.reflect.Field;
+import java.util.HashSet;
import java.util.Map;
import java.util.Objects;
import java.util.Optional;
+import java.util.Set;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
public class ToscaConverterUtil {
- private static final String set = "set";
+ private static final String SET = "set";
+ private static final String DEFAULT = "default";
+ private static final String DEFAULT_CAPITAL = "Default";
+ private static Set<String> defaultValueKeys;
+
+ static {
+ defaultValueKeys =
+ Stream.of(DEFAULT, DEFAULT_CAPITAL).collect(Collectors.toSet());
+ }
public static <T> Optional<T> createObjectFromClass(String objectId,
- Object objectCandidate,
- Class<T> classToCreate) {
+ Object objectCandidate,
+ Class<T> classToCreate) {
try {
return createObjectUsingSetters(objectCandidate, classToCreate);
} catch (Exception e) {
@@ -30,7 +39,8 @@ public class ToscaConverterUtil {
private static <T> Optional<T> createObjectUsingSetters(Object objectCandidate,
Class<T> classToCreate) throws Exception {
- if(!(objectCandidate instanceof Map)){
+ if (Objects.isNull(objectCandidate)
+ || !(objectCandidate instanceof Map)) {
return Optional.empty();
}
@@ -38,18 +48,17 @@ public class ToscaConverterUtil {
Field[] classFields = classToCreate.getDeclaredFields();
T result = classToCreate.newInstance();
- for(Field field : classFields){
+ for (Field field : classFields) {
Object fieldValueToAssign = objectAsMap.get(field.getName());
- String methodName = set + StringUtils.capitalize(field.getName());
+ String methodName = SET + StringUtils.capitalize(field.getName());
- if(shouldSetterMethodNeedsToGetInvoked(classToCreate, field, fieldValueToAssign, methodName)){
+ if(shouldSetterMethodNeedsToGetInvoked(classToCreate, field, fieldValueToAssign, methodName)) {
classToCreate.getMethod(methodName, field.getType()).invoke(result, fieldValueToAssign);
}
}
return Optional.of(result);
}
-
private static <T> boolean shouldSetterMethodNeedsToGetInvoked(Class<T> classToCreate,
Field field,
Object fieldValueToAssign,
@@ -62,4 +71,26 @@ public class ToscaConverterUtil {
return false;
}
}
+
+ public static Optional<Object> getDefaultValue(Object entryValue,
+ Object objectToAssignDefaultValue) {
+ if (!(entryValue instanceof Map)
+ || Objects.isNull(objectToAssignDefaultValue)) {
+ return Optional.empty();
+ }
+
+ return Optional.ofNullable(getDefaultParameterValue((Map<String, Object>) entryValue));
+ }
+
+ private static Object getDefaultParameterValue(Map<String, Object> entryValue) {
+ Object defaultValue = null;
+ Set<String> keys = new HashSet<>(entryValue.keySet());
+ keys.retainAll(defaultValueKeys);
+
+ if (CollectionUtils.isNotEmpty(keys)) {
+ defaultValue = entryValue.get(keys.iterator().next());
+ }
+
+ return defaultValue;
+ }
}
diff --git a/openecomp-be/lib/openecomp-tosca-converter-lib/openecomp-tosca-converter-core/src/main/java/org/openecomp/core/impl/services/ServiceTemplateReaderServiceImpl.java b/openecomp-be/lib/openecomp-tosca-converter-lib/openecomp-tosca-converter-core/src/main/java/org/openecomp/core/impl/services/ServiceTemplateReaderServiceImpl.java
index 8155fcc7f6..22780af343 100644
--- a/openecomp-be/lib/openecomp-tosca-converter-lib/openecomp-tosca-converter-core/src/main/java/org/openecomp/core/impl/services/ServiceTemplateReaderServiceImpl.java
+++ b/openecomp-be/lib/openecomp-tosca-converter-lib/openecomp-tosca-converter-core/src/main/java/org/openecomp/core/impl/services/ServiceTemplateReaderServiceImpl.java
@@ -37,8 +37,9 @@ public class ServiceTemplateReaderServiceImpl implements ServiceTemplateReaderSe
}
@Override
- public Object getNodeTypes(){
- return this.readServiceTemplate.get(nodeTypes);
+ public Map<String, Object> getNodeTypes(){
+ return Objects.isNull(this.readServiceTemplate.get(nodeTypes)) ? new HashMap<>()
+ :(Map<String, Object>) this.readServiceTemplate.get(nodeTypes);
}
@Override