public static Type effectiveTypeOfGenericSchema()

in src/main/java/com/epam/eco/commons/avro/AvroUtils.java [341:373]


    public static Type effectiveTypeOfGenericSchema(Object genericSchema) throws UnknownTypeException {
        Validate.notNull(genericSchema, "Generic schema is null");

        if (genericSchema instanceof Map) {
            Type type = typeForName(
                    ((Map<String, Object>)genericSchema).get(AvroConstants.SCHEMA_KEY_TYPE).toString());
            if (type == Type.MAP) {
                return effectiveTypeOfGenericSchema(
                        ((Map<String, Object>)genericSchema).get(AvroConstants.SCHEMA_KEY_MAP_VALUES));
            } else if (type == Type.ARRAY) {
                return effectiveTypeOfGenericSchema(
                        ((Map<String, Object>)genericSchema).get(AvroConstants.SCHEMA_KEY_ARRAY_ITEMS));
            } else {
                return type;
            }
        } else if (genericSchema instanceof List) {
            List<Object> genericUnionSchema = (List<Object>)genericSchema;
            if (genericUnionSchema.size() == 1) {
                return effectiveTypeOfGenericSchema(genericUnionSchema.get(0));
            } else if (genericUnionSchema.size() == 2) {
                Object first = genericUnionSchema.get(0);
                Object second = genericUnionSchema.get(1);
                if (Type.NULL.getName().equals(first)) {
                    return effectiveTypeOfGenericSchema(second);
                } else if (Type.NULL.getName().equals(second)) {
                    return effectiveTypeOfGenericSchema(first);
                }
            }
            return Type.UNION;
        } else {
            return typeForName(genericSchema.toString());
        }
    }