private void readEntityContainer()

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);
  }