private EdmSchema readSchema()

in odata2-lib/odata-client-core/src/main/java/org/apache/olingo/odata2/client/core/ep/deserializer/XmlMetadataDeserializer.java [194:256]


  private EdmSchema readSchema(final XMLStreamReader reader, EdmImpl edm) //NOSONAR
      throws XMLStreamException, EntityProviderException, EdmException { 
    reader.require(XMLStreamConstants.START_ELEMENT, edmNamespace, XmlMetadataConstants.EDM_SCHEMA);
    final EdmSchemaImpl schemaImpl = new EdmSchemaImpl();
    final List<EdmUsing> usings = new ArrayList<EdmUsing>();
    final List<EdmComplexType> complexTypes = new ArrayList<EdmComplexType>();
    final List<EdmEntityType> entityTypes = new ArrayList<EdmEntityType>();
    final List<EdmAssociation> associations = new ArrayList<EdmAssociation>();
    final List<EdmEntityContainer> entityContainers = new ArrayList<EdmEntityContainer>();
    final List<EdmAnnotationElement> annotationElements = new ArrayList<EdmAnnotationElement>();
    schemaImpl.setNamespace(reader.getAttributeValue(null, XmlMetadataConstants.EDM_SCHEMA_NAMESPACE));
    inscopeMap.put(schemaImpl.getNamespace(), new HashSet<String>());
    schemaImpl.setAlias(reader.getAttributeValue(null, XmlMetadataConstants.EDM_SCHEMA_ALIAS));
    schemaImpl.setAnnotationAttributes(readAnnotationAttribute(reader));
    currentNamespace = schemaImpl.getNamespace();
    while (reader.hasNext()
        && !(reader.isEndElement() && edmNamespace.equals(reader.getNamespaceURI())
            && XmlMetadataConstants.EDM_SCHEMA.equals(reader.getLocalName()))) {
      reader.next();
      if (reader.isStartElement()) {
        extractNamespaces(reader);
        currentHandledStartTagName = reader.getLocalName();
        if (XmlMetadataConstants.EDM_USING.equals(currentHandledStartTagName)) {
          usings.add(readUsing(reader, schemaImpl.getNamespace()));
        } else if (XmlMetadataConstants.EDM_ENTITY_TYPE.equals(currentHandledStartTagName)) {
          entityTypes.add(readEntityType(reader, edm));
        } else if (XmlMetadataConstants.EDM_COMPLEX_TYPE.equals(currentHandledStartTagName)) {
          complexTypes.add(readComplexType(reader, edm));
        } else if (XmlMetadataConstants.EDM_ASSOCIATION.equals(currentHandledStartTagName)) {
          associations.add(readAssociation(reader, edm));
        } else if (XmlMetadataConstants.EDM_ENTITY_CONTAINER.equals(currentHandledStartTagName)) {
          entityContainers.add(readEntityContainer(reader, (EdmImpl) edm));
        } else {
          annotationElements.add(readAnnotationElement(reader));
        }
      }
    }
    if (schemaImpl.getAlias() != null) {
      aliasNamespaceMap.put(schemaImpl.getAlias(), schemaImpl.getNamespace());
      edm.setAliasToNamespaceInfo(aliasNamespaceMap);
    }
    if (!annotationElements.isEmpty()) {
      schemaImpl.setAnnotationElements(annotationElements);
    }
    schemaImpl
        .setUsings(usings)
        .setEntityTypes(entityTypes)
        .setComplexTypes(complexTypes)
        .setAssociations(associations)
        .setEntityContainers(entityContainers);

    edm.setAliasToNamespaceInfo(aliasNamespaceMap)
        .setEdmAssociations(associationsMap)
        .setEdmComplexTypes(complexTypesMap)
        .setEdmEntityContainers(containerMap)
        .setDefaultEntityContainer(defaultEdmEntityContainer)
        .setEdmEntitySets(edmEntitySetList)
        .setEdmEntityTypes(entityTypesMap)
        .setEdmFunctionImports(edmFunctionImportList);


    return schemaImpl;
  }