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;
}
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;
}
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;
}
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);
}
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;
}
Aggregations