1 package org.openecomp.core.impl;
 
   3 import org.apache.commons.lang.StringUtils;
 
   4 import org.codehaus.jackson.map.ObjectMapper;
 
   5 import org.openecomp.core.converter.errors.CreateToscaObjectErrorBuilder;
 
   6 import org.openecomp.core.utilities.json.JsonUtil;
 
   7 import org.openecomp.sdc.common.errors.CoreException;
 
   8 import org.openecomp.sdc.common.errors.ErrorCategory;
 
   9 import org.openecomp.sdc.common.errors.ErrorCode;
 
  11 import java.lang.reflect.Field;
 
  13 import java.util.Objects;
 
  14 import java.util.Optional;
 
  16 public class ToscaConverterUtil {
 
  17   private static final String set = "set";
 
  19   public static <T> Optional<T> createObjectFromClass(String objectId,
 
  20                                        Object objectCandidate,
 
  21                                        Class<T> classToCreate) {
 
  23       return createObjectUsingSetters(objectCandidate, classToCreate);
 
  24     } catch (Exception e) {
 
  25       throw new CoreException(
 
  26           new CreateToscaObjectErrorBuilder(classToCreate.getSimpleName(), objectId, e.getMessage())
 
  31   private static <T> Optional<T> createObjectUsingSetters(Object objectCandidate,
 
  32                                                           Class<T> classToCreate) throws Exception {
 
  33     if(!(objectCandidate instanceof Map)){
 
  34       return Optional.empty();
 
  37     Map<String, Object> objectAsMap = (Map<String, Object>) objectCandidate;
 
  38     Field[] classFields = classToCreate.getDeclaredFields();
 
  39     T result = classToCreate.newInstance();
 
  41     for(Field field : classFields){
 
  42       Object fieldValueToAssign = objectAsMap.get(field.getName());
 
  43       String methodName = set + StringUtils.capitalize(field.getName());
 
  45       if(shouldSetterMethodNeedsToGetInvoked(classToCreate, field, fieldValueToAssign, methodName)){
 
  46         classToCreate.getMethod(methodName, field.getType()).invoke(result, fieldValueToAssign);
 
  50     return Optional.of(result);
 
  53   private static <T> boolean shouldSetterMethodNeedsToGetInvoked(Class<T> classToCreate,
 
  55                                                                  Object fieldValueToAssign,
 
  59       return Objects.nonNull(fieldValueToAssign)
 
  60           && Objects.nonNull(classToCreate.getMethod(methodName, field.getType()));
 
  61     } catch (NoSuchMethodException e) {