in lib/server-core-ext/src/main/java/org/apache/olingo/server/core/MetadataParser.java [1051:1155]
private void readEntityContainer(XMLEventReader reader, StartElement element, CsdlSchema schema)
throws XMLStreamException {
final CsdlEntityContainer container = new CsdlEntityContainer();
container.setName(attr(element, "Name"));
if (attr(element, "Extends") != null) {
container.setExtendsContainer(attr(element, "Extends"));
}
container.setActionImports(new ArrayList<CsdlActionImport>());
container.setFunctionImports(new ArrayList<CsdlFunctionImport>());
container.setEntitySets(new ArrayList<CsdlEntitySet>());
container.setSingletons(new ArrayList<CsdlSingleton>());
new ElementReader<CsdlSchema>() {
@Override
void build(XMLEventReader reader, StartElement element, CsdlSchema schema, String name)
throws XMLStreamException {
if ("EntitySet".equals(name)) {
readEntitySet(reader, element, container);
} else if ("Singleton".equals(name)) {
readSingleton(reader, element, container);
} else if ("ActionImport".equals(name)) {
readActionImport(reader, element, container);
} else if ("FunctionImport".equals(name)) {
readFunctionImport(reader, element, container);
} else if ("Annotation".equals(name)) {
readAnnotations(reader, element, container);
}
}
private void readFunctionImport(XMLEventReader reader,
StartElement element, CsdlEntityContainer container)
throws XMLStreamException {
CsdlFunctionImport functionImport = new CsdlFunctionImport();
functionImport.setName(attr(element, "Name"));
functionImport.setFunction(new FullQualifiedName(attr(element, "Function")));
functionImport.setIncludeInServiceDocument(Boolean.parseBoolean(attr(element,
"IncludeInServiceDocument")));
String entitySet = attr(element, "EntitySet");
if (entitySet != null) {
functionImport.setEntitySet(entitySet);
}
peekAnnotations(reader, "FunctionImport", functionImport);
container.getFunctionImports().add(functionImport);
}
private void readActionImport(XMLEventReader reader,
StartElement element, CsdlEntityContainer container)
throws XMLStreamException {
CsdlActionImport actionImport = new CsdlActionImport();
actionImport.setName(attr(element, "Name"));
actionImport.setAction(new FullQualifiedName(attr(element, "Action")));
String entitySet = attr(element, "EntitySet");
if (entitySet != null) {
actionImport.setEntitySet(entitySet);
}
peekAnnotations(reader, "ActionImport", actionImport);
container.getActionImports().add(actionImport);
}
private void readSingleton(XMLEventReader reader, StartElement element,
CsdlEntityContainer container) throws XMLStreamException {
CsdlSingleton singleton = new CsdlSingleton();
singleton.setNavigationPropertyBindings(new ArrayList<CsdlNavigationPropertyBinding>());
singleton.setName(attr(element, "Name"));
singleton.setType(new FullQualifiedName(attr(element, "Type")));
singleton.setNavigationPropertyBindings(new ArrayList<CsdlNavigationPropertyBinding>());
readNavigationPropertyBindings(reader, element, singleton);
container.getSingletons().add(singleton);
}
private void readEntitySet(XMLEventReader reader, StartElement element,
CsdlEntityContainer container) throws XMLStreamException {
CsdlEntitySet entitySet = new CsdlEntitySet();
entitySet.setName(attr(element, "Name"));
entitySet.setType(new FullQualifiedName(attr(element, "EntityType")));
entitySet.setIncludeInServiceDocument(Boolean.parseBoolean(attr(element,
"IncludeInServiceDocument")));
entitySet.setNavigationPropertyBindings(new ArrayList<CsdlNavigationPropertyBinding>());
readNavigationPropertyBindings(reader, element, entitySet);
container.getEntitySets().add(entitySet);
}
private void readNavigationPropertyBindings(XMLEventReader reader, StartElement element,
CsdlBindingTarget entitySet) throws XMLStreamException {
new ElementReader<CsdlBindingTarget>() {
@Override
void build(XMLEventReader reader, StartElement element,
CsdlBindingTarget entitySet, String name) throws XMLStreamException {
if ("NavigationPropertyBinding".equals(name)) {
CsdlNavigationPropertyBinding binding = new CsdlNavigationPropertyBinding();
binding.setPath(attr(element, "Path"));
binding.setTarget(attr(element, "Target"));
entitySet.getNavigationPropertyBindings().add(binding);
} else if ("Annotation".equals(name)) {
readAnnotations(reader, element, entitySet);
}
}
}.read(reader, element, entitySet, "NavigationPropertyBinding", "Annotation");
}
}.read(reader, element, schema, "EntitySet", "Singleton", "ActionImport", "FunctionImport", "Annotation");
schema.setEntityContainer(container);
}