in odata2-lib/odata-client-core/src/main/java/org/apache/olingo/odata2/client/core/ep/deserializer/XmlMetadataDeserializer.java [902:988]
private EdmEntityType readEntityType(final XMLStreamReader reader,
EdmImpl edm) throws XMLStreamException, EntityProviderException, EdmException {
reader.require(XMLStreamConstants.START_ELEMENT, edmNamespace, XmlMetadataConstants.EDM_ENTITY_TYPE);
EdmEntityTypeImpl entityType = new EdmEntityTypeImpl();
List<EdmProperty> properties = new ArrayList<EdmProperty>();
List<String> edmPropertyNames = new ArrayList<String>();
List<EdmNavigationProperty> edmNavProperties = new ArrayList<EdmNavigationProperty>();
List<EdmAnnotationElement> annotationElements = new ArrayList<EdmAnnotationElement>();
List<String> edmNavigationPropertyNames = new ArrayList<String>();
List<String> edmKeyPropertyNames = new ArrayList<String>();
List<EdmProperty> edmKeyProperties = new ArrayList<EdmProperty>();
EdmKeyImpl key = null;
((EdmNamedImpl) entityType).setName(reader.getAttributeValue(null, XmlMetadataConstants.EDM_NAME));
entityType.setNamespace(currentNamespace);
entityType.setEdm((EdmImpl) edm);
String hasStream = reader.getAttributeValue(Edm.NAMESPACE_M_2007_08, XmlMetadataConstants.M_ENTITY_TYPE_HAS_STREAM);
if (hasStream != null) {
entityType.setHasStream("true".equalsIgnoreCase(hasStream));
}
if (reader.getAttributeValue(null, XmlMetadataConstants.EDM_TYPE_ABSTRACT) != null) {
entityType.setAbstract("true".equalsIgnoreCase(reader.getAttributeValue(null,
XmlMetadataConstants.EDM_TYPE_ABSTRACT)));
}
String baseType = reader.getAttributeValue(null, XmlMetadataConstants.EDM_BASE_TYPE);
if (baseType != null) {
FullQualifiedName fqName = extractFQName(baseType);
entityType.setBaseType(fqName);
//Populating base type map with child and parent for multiple inheritance
entityBaseTypeMap.put(extractFQNameFromEntityType(entityType), fqName);
}
entityType.setCustomizableFeedMappings(readCustomizableFeedMappings(reader));
EdmAnnotationsImpl annotations = new EdmAnnotationsImpl();
annotations.setAnnotationAttributes(readAnnotationAttribute(reader));
while (reader.hasNext()
&& !(reader.isEndElement() && edmNamespace.equals(reader.getNamespaceURI())
&& XmlMetadataConstants.EDM_ENTITY_TYPE.equals(reader.getLocalName()))) {
reader.next();
if (reader.isStartElement()) {
currentHandledStartTagName = reader.getLocalName();
if (XmlMetadataConstants.EDM_ENTITY_TYPE_KEY.equals(currentHandledStartTagName)) {
key = readEntityTypeKey(reader);
} else if (XmlMetadataConstants.EDM_PROPERTY.equals(currentHandledStartTagName)) {
properties.add(readProperty(reader, edm));
} else if (XmlMetadataConstants.EDM_NAVIGATION_PROPERTY.equals(currentHandledStartTagName)) {
edmNavProperties.add(readNavigationProperty(reader, edm));
} else {
annotationElements.add(readAnnotationElement(reader));
}
extractNamespaces(reader);
}
}
if (!annotationElements.isEmpty()) {
annotations.setAnnotationElements(annotationElements);
}
for (EdmProperty property : properties) {
edmPropertyNames.add(property.getName());
if (key != null) {
for(EdmProperty keyProperty: key.getKeys()){
if(property.getName().equals(keyProperty.getName())){
edmKeyPropertyNames.add(keyProperty.getName());
edmKeyProperties.add(property);
}
}
}
}
for ( EdmNavigationProperty navigations : edmNavProperties){
edmNavigationPropertyNames.add(navigations.getName());
}
entityType.setAnnotations(annotations);
entityType.setEdmKeyProperties(edmKeyProperties);
entityType.setNavigationProperties(edmNavProperties);
entityType.setEdmNavigationPropertyNames(edmNavigationPropertyNames);
entityType.setEdmKeyPropertyNames(edmKeyPropertyNames);
entityType.setProperties(properties);
entityType.setEdmPropertyNames(edmPropertyNames);
if (entityType.getName() != null) {
FullQualifiedName fqName = new FullQualifiedName(currentNamespace, entityType.getName());
entityTypesMap.put(fqName, entityType);
} else {
throw new EntityProviderException(EntityProviderException.MISSING_ATTRIBUTE.addContent("Name"));
}
return entityType;
}