in odata2-lib/odata-client-core/src/main/java/org/apache/olingo/odata2/client/core/ep/deserializer/XmlMetadataDeserializer.java [452:515]
private EdmEntityContainer readEntityContainer(final XMLStreamReader reader, EdmImpl edm)//NOSONAR
throws XMLStreamException, EntityProviderException, EdmException {
reader.require(XMLStreamConstants.START_ELEMENT, edmNamespace, XmlMetadataConstants.EDM_ENTITY_CONTAINER);
EdmEntityContainerImpl container = new EdmEntityContainerImpl(edm);
List<EdmAnnotationElement> annotationElements = new ArrayList<EdmAnnotationElement>();
List<EdmEntitySet> edmEntitySets = new ArrayList<EdmEntitySet>();
List<EdmFunctionImport> edmFunctionImports = new ArrayList<EdmFunctionImport>();
List<EdmAssociationSet> edmAssociationSets = new ArrayList<EdmAssociationSet>();
container.setName(reader.getAttributeValue(null, XmlMetadataConstants.EDM_NAME));
if (reader.getAttributeValue(Edm.NAMESPACE_M_2007_08, XmlMetadataConstants.EDM_CONTAINER_IS_DEFAULT) != null) {
container.setDefaultContainer(
"true".equalsIgnoreCase(reader.getAttributeValue(Edm.NAMESPACE_M_2007_08,
"IsDefaultEntityContainer")));
defaultEdmEntityContainer = container;
}
container.setExtendz(reader.getAttributeValue(null, XmlMetadataConstants.EDM_CONTAINER_EXTENDZ));
List<EdmAnnotationAttribute> annotationAttribute = readAnnotationAttribute(reader);
EdmAnnotationsImpl annotations = new EdmAnnotationsImpl();
annotations.setAnnotationAttributes(annotationAttribute);
container.setAnnotations(annotations);
while (reader.hasNext()
&& !(reader.isEndElement() && edmNamespace.equals(reader.getNamespaceURI())
&& XmlMetadataConstants.EDM_ENTITY_CONTAINER.equals(reader.getLocalName()))) {
reader.next();
if (reader.isStartElement()) {
extractNamespaces(reader);
currentHandledStartTagName = reader.getLocalName();
if (XmlMetadataConstants.EDM_ENTITY_SET.equals(currentHandledStartTagName)) {
EdmEntitySetImpl entity = readEntitySet(reader);
entity.setEdmEntityContainer(container);
edmEntitySets.add(entity);
} else if (XmlMetadataConstants.EDM_ASSOCIATION_SET.equals(currentHandledStartTagName)) {
EdmAssociationSet association = readAssociationSet(reader, edm);
edmAssociationSets.add(association);
} else if (XmlMetadataConstants.EDM_FUNCTION_IMPORT.equals(currentHandledStartTagName)) {
edmFunctionImports.add(readFunctionImport(reader, edm));
} else {
annotationElements.add(readAnnotationElement(reader));
}
}
}
if (!annotationElements.isEmpty()) {
annotations.setAnnotationElements(annotationElements);
container.setAnnotations(annotations);
}
if (edmFunctionImports != null && !edmFunctionImports.isEmpty()) {
setContainerInFunctionImport(edmFunctionImports, container);
}
if (edmAssociationSets != null && !edmAssociationSets.isEmpty()) {
setConatinerInAssociationSet(edmAssociationSets, container);
}
container.setNamespace(currentNamespace);
container.setEdmEntitySets(edmEntitySets).setEdmAssociationSets(edmAssociationSets).setEdmFunctionImports(
edmFunctionImports);
containerMap.put(new FullQualifiedName(currentNamespace, container.getName()),
container);
edmEntitySetList.addAll(edmEntitySets);
edmFunctionImportList.addAll(edmFunctionImports);
return container;
}