public void set()

in typesystem/src/main/java/org/apache/atlas/typesystem/persistence/StructInstance.java [112:180]


    public void set(String attrName, Object val) throws AtlasException {
        AttributeInfo i = fieldMapping.fields.get(attrName);
        if (i == null) {
            throw new ValueConversionException(getTypeName(), val, "Unknown field " + attrName);
        }

        int pos = fieldMapping.fieldPos.get(attrName);
        int nullPos = fieldMapping.fieldNullPos.get(attrName);
        Object cVal = null;

        explicitSets[nullPos] = true;

        if (val != null && val instanceof Id) {
            ClassType clsType = TypeSystem.getInstance().getDataType(ClassType.class, i.dataType().getName());
            clsType.validateId((Id) val);
            cVal = val;
        } else {
            try {
                cVal = i.dataType().convert(val, i.multiplicity);
            } catch(ValueConversionException.NullConversionException e) {
                throw new ValueConversionException.NullConversionException("For field '" + attrName + "'", e);
            }
        }
        if (cVal == null) {
            nullFlags[nullPos] = true;
            return;
        }
        nullFlags[nullPos] = false;
        if (i.dataType() == DataTypes.BOOLEAN_TYPE) {
            bools[pos] = (Boolean) cVal;
        } else if (i.dataType() == DataTypes.BYTE_TYPE) {
            bytes[pos] = (Byte) cVal;
        } else if (i.dataType() == DataTypes.SHORT_TYPE) {
            shorts[pos] = (Short) cVal;
        } else if (i.dataType() == DataTypes.INT_TYPE) {
            ints[pos] = (Integer) cVal;
        } else if (i.dataType() == DataTypes.LONG_TYPE) {
            longs[pos] = (Long) cVal;
        } else if (i.dataType() == DataTypes.FLOAT_TYPE) {
            floats[pos] = (Float) cVal;
        } else if (i.dataType() == DataTypes.DOUBLE_TYPE) {
            doubles[pos] = (Double) cVal;
        } else if (i.dataType() == DataTypes.BIGINTEGER_TYPE) {
            bigIntegers[pos] = (BigInteger) cVal;
        } else if (i.dataType() == DataTypes.BIGDECIMAL_TYPE) {
            bigDecimals[pos] = (BigDecimal) cVal;
        } else if (i.dataType() == DataTypes.DATE_TYPE) {
            dates[pos] = (Date) cVal;
        } else if (i.dataType() == DataTypes.STRING_TYPE) {
            strings[pos] = (String) cVal;
        } else if (i.dataType().getTypeCategory() == DataTypes.TypeCategory.ENUM) {
            ints[pos] = ((EnumValue) cVal).ordinal;
        } else if (i.dataType().getTypeCategory() == DataTypes.TypeCategory.ARRAY) {
            arrays[pos] = (ImmutableList) cVal;
        } else if (i.dataType().getTypeCategory() == DataTypes.TypeCategory.MAP) {
            maps[pos] = (ImmutableMap) cVal;
        } else if (i.dataType().getTypeCategory() == DataTypes.TypeCategory.STRUCT
                || i.dataType().getTypeCategory() == DataTypes.TypeCategory.TRAIT) {
            structs[pos] = (StructInstance) cVal;
        } else if (i.dataType().getTypeCategory() == DataTypes.TypeCategory.CLASS) {
            if (cVal instanceof Id) {
                ids[pos] = (Id) cVal;
            } else {
                referenceables[pos] = (ReferenceableInstance) cVal;
            }
        } else {
            throw new AtlasException(String.format("Unknown datatype %s", i.dataType()));
        }
    }