org.openecomp.sdc.be.model.tosca.converters.ToscaValueBaseConverter.java Source code

Java tutorial

Introduction

Here is the source code for org.openecomp.sdc.be.model.tosca.converters.ToscaValueBaseConverter.java

Source

/*-
 * ============LICENSE_START=======================================================
 * SDC
 * ================================================================================
 * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
 * ================================================================================
 * 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.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 * ============LICENSE_END=========================================================
 */

package org.openecomp.sdc.be.model.tosca.converters;

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.Set;

import org.openecomp.sdc.be.model.DataTypeDefinition;
import org.openecomp.sdc.be.model.PropertyDefinition;
import org.openecomp.sdc.be.model.tosca.ToscaPropertyType;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.google.gson.Gson;
import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonPrimitive;

public class ToscaValueBaseConverter {
    protected Gson gson = new Gson();
    private static Logger log = LoggerFactory.getLogger(ToscaValueBaseConverter.class.getName());

    protected Map<String, PropertyDefinition> getAllProperties(DataTypeDefinition dataTypeDefinition) {

        Map<String, PropertyDefinition> allParentsProps = new HashMap<>();

        while (dataTypeDefinition != null) {

            List<PropertyDefinition> currentParentsProps = dataTypeDefinition.getProperties();
            if (currentParentsProps != null) {
                currentParentsProps.stream().forEach(p -> allParentsProps.put(p.getName(), p));
            }

            dataTypeDefinition = dataTypeDefinition.getDerivedFrom();
        }

        return allParentsProps;
    }

    public ToscaPropertyType isScalarType(DataTypeDefinition dataTypeDef) {

        ToscaPropertyType result = null;

        DataTypeDefinition dataType = dataTypeDef;

        while (dataType != null) {

            String name = dataType.getName();
            ToscaPropertyType typeIfScalar = ToscaPropertyType.getTypeIfScalar(name);
            if (typeIfScalar != null) {
                result = typeIfScalar;
                break;
            }

            dataType = dataType.getDerivedFrom();
        }

        return result;
    }

    public Object handleComplexJsonValue(JsonElement elementValue) {
        Object jsonValue = null;

        Map<String, Object> value = new HashMap<String, Object>();
        if (elementValue.isJsonObject()) {
            JsonObject jsonOb = elementValue.getAsJsonObject();
            Set<Entry<String, JsonElement>> entrySet = jsonOb.entrySet();
            Iterator<Entry<String, JsonElement>> iteratorEntry = entrySet.iterator();
            while (iteratorEntry.hasNext()) {
                Entry<String, JsonElement> entry = iteratorEntry.next();
                if (entry.getValue().isJsonArray()) {
                    List<Object> array = handleJsonArray(entry.getValue());
                    value.put(entry.getKey(), array);
                } else {
                    Object object;
                    if (entry.getValue().isJsonPrimitive()) {
                        object = json2JavaPrimitive(entry.getValue().getAsJsonPrimitive());
                    } else {
                        object = handleComplexJsonValue(entry.getValue());
                    }
                    value.put(entry.getKey(), object);
                }
            }
            jsonValue = value;
        } else {
            if (elementValue.isJsonArray()) {
                jsonValue = handleJsonArray(elementValue);
            } else {
                log.debug("not supported json type {} ", elementValue);
            }
        }

        return jsonValue;
    }

    private List<Object> handleJsonArray(JsonElement entry) {
        List<Object> array = new ArrayList<>();
        JsonArray jsonArray = entry.getAsJsonArray();
        Iterator<JsonElement> iterator = jsonArray.iterator();
        while (iterator.hasNext()) {
            Object object;
            JsonElement element = iterator.next();
            if (element.isJsonPrimitive()) {
                object = json2JavaPrimitive(element.getAsJsonPrimitive());
            } else {
                object = handleComplexJsonValue(element);
            }
            array.add(object);
        }
        return array;
    }

    public Object json2JavaPrimitive(JsonPrimitive prim) {
        if (prim.isBoolean()) {
            return prim.getAsBoolean();
        } else if (prim.isString()) {
            return prim.getAsString();
        } else if (prim.isNumber()) {
            String strRepesentation = prim.getAsString();
            if (strRepesentation.contains(".")) {
                return prim.getAsDouble();
            } else {
                return prim.getAsInt();
            }
        } else {
            throw new IllegalStateException();
        }
    }
}