in lib/server-core-ext/src/main/java/org/apache/olingo/server/core/MetadataParser.java [697:780]
private <T> void readExpressions(XMLEventReader reader,
StartElement element, T target)
throws XMLStreamException {
new ElementReader<T>() {
@Override
void build(XMLEventReader reader, StartElement element, T target, String name)
throws XMLStreamException {
// element based expressions
if (!"Annotation".equals(name)) {
// attribute based expressions.
readAttributeExpressions(element, target);
for (ConstantExpressionType type:ConstantExpressionType.values()) {
if (name.equals(type.name()) && reader.peek().isCharacters()) {
CsdlExpression expr = new CsdlConstantExpression(type, elementValue(reader, element));
write(target, expr);
}
}
}
if ("Collection".equals(name)) {
CsdlCollection expr = new CsdlCollection();
readExpressions(reader, element, expr);
write(target, expr);
} else if ("AnnotationPath".equals(name)) {
write(target, new CsdlAnnotationPath().setValue(elementValue(reader, element)));
} else if ("NavigationPropertyPath".equals(name)) {
write(target, new CsdlNavigationPropertyPath()
.setValue(elementValue(reader, element)));
} else if ("Path".equals(name)) {
write(target, new CsdlPath().setValue(elementValue(reader, element)));
} else if ("PropertyPath".equals(name)) {
write(target, new CsdlPropertyPath().setValue(elementValue(reader, element)));
} else if ("UrlRef".equals(name)) {
CsdlUrlRef expr = new CsdlUrlRef();
readExpressions(reader, element, expr);
write(target, expr);
} else if ("Apply".equals(name)) {
CsdlApply expr = new CsdlApply();
expr.setFunction(attr(element, "Function"));
readExpressions(reader, element, expr);
write(target, expr);
} else if ("Cast".equals(name)) {
CsdlCast expr = new CsdlCast();
expr.setType(attr(element, "Type"));
readExpressions(reader, element, expr);
write(target, expr);
} else if ("If".equals(name)) {
CsdlIf expr = new CsdlIf();
readExpressions(reader, element, expr);
write(target, expr);
} else if ("IsOf".equals(name)) {
CsdlIsOf expr = new CsdlIsOf();
expr.setType(attr(element, "Type"));
readExpressions(reader, element, expr);
write(target, expr);
} else if ("LabeledElement".equals(name)) {
CsdlLabeledElement expr = new CsdlLabeledElement();
expr.setName(attr(element, "Name"));
readExpressions(reader, element, expr);
write(target, expr);
} else if ("LabeledElementReference".equals(name)) {
CsdlLabeledElementReference expr = new CsdlLabeledElementReference();
expr.setValue(elementValue(reader, element));
write(target, expr);
} else if ("Null".equals(name)) {
write(target, new CsdlNull());
} else if ("Record".equals(name)) {
CsdlRecord expr = new CsdlRecord();
expr.setType(attr(element, "Type"));
readPropertyValues(reader, element, expr);
write(target, expr);
} else if ("Annotation".equals(name)) {
readAnnotations(reader, element, (CsdlAnnotatable)target);
}
}
}.read(reader, element, target, "Collection", "AnnotationPath",
"NavigationPropertyPath", "Path", "PropertyPath", "UrlRef",
"Apply", "Function", "Cast", "If", "IsOf", "LabeledElement",
"LabeledElementReference", "Null", "Record","Binary", "Bool", "Date",
"DateTimeOffset", "Decimal", "Duration", "EnumMember", "Float", "Guid",
"Int", "String", "TimeOfDay", "Annotation");
}