Search in sources :

Example 1 with PropDeclarationContext

use of com.linkedin.data.grammar.PdlParser.PropDeclarationContext in project rest.li by linkedin.

the class PdlSchemaParser method setProperties.

private Map<String, Object> setProperties(NamedTypeDeclarationContext source, NamedDataSchema target) throws ParseException {
    Map<String, Object> properties = new HashMap<>();
    properties.putAll(target.getProperties());
    if (source.doc != null) {
        target.setDoc(source.doc.value);
    }
    for (PropDeclarationContext prop : source.props) {
        addPropertiesAtPath(properties, prop);
    }
    target.setProperties(properties);
    return properties;
}
Also used : PropDeclarationContext(com.linkedin.data.grammar.PdlParser.PropDeclarationContext) HashMap(java.util.HashMap)

Example 2 with PropDeclarationContext

use of com.linkedin.data.grammar.PdlParser.PropDeclarationContext in project rest.li by linkedin.

the class PdlSchemaParser method setDocAndProperties.

/**
 * Sets doc, properties, and aliases on the provided {@link NamedDataSchema} using data parsed from the provided
 * {@link NamedTypeDeclarationContext}.
 *
 * @param source source to read doc, properties, and aliases from
 * @param target target on which to set doc, properties, and aliases
 * @return parsed properties
 */
protected Map<String, Object> setDocAndProperties(NamedTypeDeclarationContext source, NamedDataSchema target) throws ParseException {
    Map<String, Object> properties = new HashMap<>(target.getProperties());
    if (source.doc != null) {
        target.setDoc(source.doc.value);
    }
    for (PropDeclarationContext prop : source.props) {
        if (equalsSingleSegmentProperty(prop, DataSchemaConstants.ALIASES_KEY)) {
            List<Name> aliases = parseAliases(prop).stream().map(this::toName).collect(Collectors.toList());
            target.setAliases(aliases);
        } else {
            addPropertiesAtPath(properties, prop);
        }
    }
    target.setProperties(properties);
    return properties;
}
Also used : PropDeclarationContext(com.linkedin.data.grammar.PdlParser.PropDeclarationContext) IdentityHashMap(java.util.IdentityHashMap) HashMap(java.util.HashMap) Name(com.linkedin.data.schema.Name)

Example 3 with PropDeclarationContext

use of com.linkedin.data.grammar.PdlParser.PropDeclarationContext in project rest.li by linkedin.

the class PdlSchemaParser method parseEnum.

private EnumDataSchema parseEnum(NamedTypeDeclarationContext context, EnumDeclarationContext enumDecl) throws ParseException {
    Name name = toName(enumDecl.name);
    EnumDataSchema schema = new EnumDataSchema(name);
    // This is useful to set the doc and the aliases, but the properties are overwritten later (see below)
    Map<String, Object> props = setDocAndProperties(context, schema);
    bindNameToSchema(name, schema.getAliases(), schema);
    List<EnumSymbolDeclarationContext> symbolDecls = enumDecl.enumDecl.symbolDecls;
    List<String> symbols = new ArrayList<>(symbolDecls.size());
    Map<String, Object> symbolDocs = new HashMap<>();
    DataMap deprecatedSymbols = new DataMap();
    DataMap symbolProperties = new DataMap();
    for (EnumSymbolDeclarationContext symbolDecl : symbolDecls) {
        symbols.add(symbolDecl.symbol.value);
        recordLocation(symbolDecl.symbol.value, symbolDecl);
        if (symbolDecl.doc != null) {
            symbolDocs.put(symbolDecl.symbol.value, symbolDecl.doc.value);
        }
        for (PropDeclarationContext prop : symbolDecl.props) {
            String symbol = symbolDecl.symbol.value;
            Object value = parsePropValue(prop);
            if (equalsSingleSegmentProperty(prop, DataSchemaConstants.DEPRECATED_KEY)) {
                deprecatedSymbols.put(symbol, value);
            } else {
                List<String> path = new ArrayList<>(prop.path.size() + 1);
                path.add(symbol);
                path.addAll(prop.path);
                addPropertiesAtPath(prop, symbolProperties, path, value);
            }
        }
    }
    schema.setSymbols(symbols, errorMessageBuilder());
    if (!symbolDocs.isEmpty()) {
        schema.setSymbolDocs(symbolDocs, errorMessageBuilder());
    }
    if (!deprecatedSymbols.isEmpty()) {
        props.put(DataSchemaConstants.DEPRECATED_SYMBOLS_KEY, deprecatedSymbols);
    }
    if (!symbolProperties.isEmpty()) {
        props.put(DataSchemaConstants.SYMBOL_PROPERTIES_KEY, symbolProperties);
    }
    // Overwrite the properties now that we've computed the special symbol properties
    schema.setProperties(props);
    return schema;
}
Also used : EnumSymbolDeclarationContext(com.linkedin.data.grammar.PdlParser.EnumSymbolDeclarationContext) EnumDataSchema(com.linkedin.data.schema.EnumDataSchema) PropDeclarationContext(com.linkedin.data.grammar.PdlParser.PropDeclarationContext) IdentityHashMap(java.util.IdentityHashMap) HashMap(java.util.HashMap) ArrayList(java.util.ArrayList) Name(com.linkedin.data.schema.Name) DataMap(com.linkedin.data.DataMap)

Example 4 with PropDeclarationContext

use of com.linkedin.data.grammar.PdlParser.PropDeclarationContext in project rest.li by linkedin.

the class PdlSchemaParser method setProperties.

/**
 * Sets properties on the provided {@link ComplexDataSchema} using data parsed from the provided
 * {@link AnonymousTypeDeclarationContext}.
 *
 * @param source source to read properties from
 * @param target target on which to set properties
 */
private void setProperties(AnonymousTypeDeclarationContext source, ComplexDataSchema target) throws ParseException {
    Map<String, Object> properties = new HashMap<>(target.getProperties());
    for (PropDeclarationContext prop : source.props) {
        addPropertiesAtPath(properties, prop);
    }
    target.setProperties(properties);
}
Also used : PropDeclarationContext(com.linkedin.data.grammar.PdlParser.PropDeclarationContext) IdentityHashMap(java.util.IdentityHashMap) HashMap(java.util.HashMap)

Example 5 with PropDeclarationContext

use of com.linkedin.data.grammar.PdlParser.PropDeclarationContext in project rest.li by linkedin.

the class PdlSchemaParser method parseUnion.

private UnionDataSchema parseUnion(UnionDeclarationContext union, boolean withinTypref) throws ParseException {
    UnionDataSchema schema = new UnionDataSchema();
    List<UnionMemberDeclarationContext> members = union.typeParams.members;
    List<UnionDataSchema.Member> unionMembers = new ArrayList<>(members.size());
    for (UnionMemberDeclarationContext memberDecl : members) {
        // Get union member type assignment
        TypeAssignmentContext memberType = memberDecl.member;
        DataSchema dataSchema = toDataSchema(memberType);
        if (dataSchema != null) {
            UnionDataSchema.Member unionMember = new UnionDataSchema.Member(dataSchema);
            recordLocation(unionMember, memberDecl);
            unionMember.setDeclaredInline(isDeclaredInline(memberDecl.member));
            // Get union member alias, if any
            UnionMemberAliasContext alias = memberDecl.unionMemberAlias();
            if (alias != null) {
                // Set union member alias
                boolean isAliasValid = unionMember.setAlias(alias.name.value, startCalleeMessageBuilder());
                if (!isAliasValid) {
                    appendCalleeMessage(unionMember);
                }
                // Set union member docs and properties
                if (alias.doc != null) {
                    unionMember.setDoc(alias.doc.value);
                }
                final Map<String, Object> properties = new HashMap<>();
                for (PropDeclarationContext prop : alias.props) {
                    addPropertiesAtPath(properties, prop);
                }
                unionMember.setProperties(properties);
            }
            unionMembers.add(unionMember);
        }
    }
    schema.setMembers(unionMembers, errorMessageBuilder());
    return schema;
}
Also used : IdentityHashMap(java.util.IdentityHashMap) HashMap(java.util.HashMap) ArrayList(java.util.ArrayList) UnionMemberAliasContext(com.linkedin.data.grammar.PdlParser.UnionMemberAliasContext) UnionDataSchema(com.linkedin.data.schema.UnionDataSchema) EnumDataSchema(com.linkedin.data.schema.EnumDataSchema) TyperefDataSchema(com.linkedin.data.schema.TyperefDataSchema) RecordDataSchema(com.linkedin.data.schema.RecordDataSchema) ArrayDataSchema(com.linkedin.data.schema.ArrayDataSchema) FixedDataSchema(com.linkedin.data.schema.FixedDataSchema) DataSchema(com.linkedin.data.schema.DataSchema) MapDataSchema(com.linkedin.data.schema.MapDataSchema) ComplexDataSchema(com.linkedin.data.schema.ComplexDataSchema) NamedDataSchema(com.linkedin.data.schema.NamedDataSchema) UnionDataSchema(com.linkedin.data.schema.UnionDataSchema) PropDeclarationContext(com.linkedin.data.grammar.PdlParser.PropDeclarationContext) TypeAssignmentContext(com.linkedin.data.grammar.PdlParser.TypeAssignmentContext) UnionMemberDeclarationContext(com.linkedin.data.grammar.PdlParser.UnionMemberDeclarationContext)

Aggregations

PropDeclarationContext (com.linkedin.data.grammar.PdlParser.PropDeclarationContext)6 HashMap (java.util.HashMap)6 IdentityHashMap (java.util.IdentityHashMap)5 ArrayList (java.util.ArrayList)3 EnumDataSchema (com.linkedin.data.schema.EnumDataSchema)2 Name (com.linkedin.data.schema.Name)2 DataMap (com.linkedin.data.DataMap)1 EnumSymbolDeclarationContext (com.linkedin.data.grammar.PdlParser.EnumSymbolDeclarationContext)1 FieldDeclarationContext (com.linkedin.data.grammar.PdlParser.FieldDeclarationContext)1 FieldDefaultContext (com.linkedin.data.grammar.PdlParser.FieldDefaultContext)1 JsonValueContext (com.linkedin.data.grammar.PdlParser.JsonValueContext)1 TypeAssignmentContext (com.linkedin.data.grammar.PdlParser.TypeAssignmentContext)1 UnionMemberAliasContext (com.linkedin.data.grammar.PdlParser.UnionMemberAliasContext)1 UnionMemberDeclarationContext (com.linkedin.data.grammar.PdlParser.UnionMemberDeclarationContext)1 ArrayDataSchema (com.linkedin.data.schema.ArrayDataSchema)1 ComplexDataSchema (com.linkedin.data.schema.ComplexDataSchema)1 DataSchema (com.linkedin.data.schema.DataSchema)1 FixedDataSchema (com.linkedin.data.schema.FixedDataSchema)1 MapDataSchema (com.linkedin.data.schema.MapDataSchema)1 NamedDataSchema (com.linkedin.data.schema.NamedDataSchema)1