private void readExpressions()

in lib/server-core-ext/src/main/java/org/apache/olingo/server/core/MetadataParser.java [697:780]


  private <T> void readExpressions(XMLEventReader reader,
      StartElement element, T target)
      throws XMLStreamException {
    new ElementReader<T>() {
      @Override
      void build(XMLEventReader reader, StartElement element, T target, String name)
          throws XMLStreamException {
        
        // element based expressions
        if (!"Annotation".equals(name)) {
          // attribute based expressions.
          readAttributeExpressions(element, target);        
          
          for (ConstantExpressionType type:ConstantExpressionType.values()) {
            if (name.equals(type.name()) && reader.peek().isCharacters()) {
              CsdlExpression expr = new CsdlConstantExpression(type, elementValue(reader, element));
              write(target, expr);
            }        
          }
        }
        
        if ("Collection".equals(name)) {
          CsdlCollection expr = new CsdlCollection();
          readExpressions(reader, element, expr);
          write(target, expr);
        } else if ("AnnotationPath".equals(name)) {
          write(target, new CsdlAnnotationPath().setValue(elementValue(reader, element)));
        } else if ("NavigationPropertyPath".equals(name)) {
          write(target, new CsdlNavigationPropertyPath()
              .setValue(elementValue(reader, element)));
        } else if ("Path".equals(name)) {
          write(target, new CsdlPath().setValue(elementValue(reader, element)));
        } else if ("PropertyPath".equals(name)) {
          write(target, new CsdlPropertyPath().setValue(elementValue(reader, element)));
        } else if ("UrlRef".equals(name)) {
          CsdlUrlRef expr = new CsdlUrlRef();
          readExpressions(reader, element, expr);
          write(target, expr);
        } else if ("Apply".equals(name)) {
          CsdlApply expr = new CsdlApply();
          expr.setFunction(attr(element, "Function"));
          readExpressions(reader, element, expr);
          write(target, expr);
        } else if ("Cast".equals(name)) {
          CsdlCast expr = new CsdlCast();
          expr.setType(attr(element, "Type"));
          readExpressions(reader, element, expr);
          write(target, expr);
        } else if ("If".equals(name)) {
          CsdlIf expr = new CsdlIf();
          readExpressions(reader, element, expr);
          write(target, expr);
        } else if ("IsOf".equals(name)) {
          CsdlIsOf expr = new CsdlIsOf();
          expr.setType(attr(element, "Type"));
          readExpressions(reader, element, expr);
          write(target, expr);
        } else if ("LabeledElement".equals(name)) {
          CsdlLabeledElement expr = new CsdlLabeledElement();
          expr.setName(attr(element, "Name"));
          readExpressions(reader, element, expr);
          write(target, expr);
        } else if ("LabeledElementReference".equals(name)) {
          CsdlLabeledElementReference expr = new CsdlLabeledElementReference();
          expr.setValue(elementValue(reader, element));
          write(target, expr);
        } else if ("Null".equals(name)) {
          write(target, new CsdlNull());
        } else if ("Record".equals(name)) {
          CsdlRecord expr = new CsdlRecord();
          expr.setType(attr(element, "Type"));          
          readPropertyValues(reader, element, expr);
          write(target, expr);          
        } else if ("Annotation".equals(name)) {
          readAnnotations(reader, element, (CsdlAnnotatable)target);
        }
      }
    }.read(reader, element, target, "Collection", "AnnotationPath",
        "NavigationPropertyPath", "Path", "PropertyPath", "UrlRef",
        "Apply", "Function", "Cast", "If", "IsOf", "LabeledElement",
        "LabeledElementReference", "Null", "Record","Binary", "Bool", "Date",
        "DateTimeOffset", "Decimal", "Duration", "EnumMember", "Float", "Guid",
        "Int", "String", "TimeOfDay", "Annotation");
  }