protected CsdlDynamicExpression doDeserialize()

in lib/client-core/src/main/java/org/apache/olingo/client/core/edm/xml/annotation/ClientCsdlDynamicExpression.java [79:165]


    protected CsdlDynamicExpression doDeserialize(final JsonParser jp,
        final DeserializationContext ctxt) throws IOException {

      CsdlDynamicExpression expression = null;

      if ("Not".equals(jp.getCurrentName())) {
        final CsdlLogicalOrComparisonExpression not =
            new CsdlLogicalOrComparisonExpression(LogicalOrComparisonExpressionType.Not);
        jp.nextToken();
        // Search for field name
        while (jp.getCurrentToken() != JsonToken.FIELD_NAME) {
          jp.nextToken();
        }
        not.setLeft(jp.readValueAs(ClientCsdlDynamicExpression.class));
        // Search for end object
        while (jp.getCurrentToken() != JsonToken.END_OBJECT || !"Not".equals(jp.getCurrentName())) {
          jp.nextToken();
        }

        expression = not;
      } else if (LogicalOrComparisonExpressionType.fromString(jp.getCurrentName()) != null) {
        final CsdlLogicalOrComparisonExpression logicalOrComparissonExp =
            new CsdlLogicalOrComparisonExpression(LogicalOrComparisonExpressionType.fromString(jp.getCurrentName()));
        jp.nextToken();
        // Search for field name
        while (jp.getCurrentToken() != JsonToken.FIELD_NAME) {
          jp.nextToken();
        }
        // TODO: Read as expression
        logicalOrComparissonExp.setLeft(jp.readValueAs(ClientCsdlDynamicExpression.class));
        logicalOrComparissonExp.setRight(jp.readValueAs(ClientCsdlDynamicExpression.class));
        // Search for expression
        while (jp.getCurrentToken() != JsonToken.END_OBJECT || !jp.getCurrentName().equals(logicalOrComparissonExp
            .getType().name())) {
          jp.nextToken();
        }

        expression = logicalOrComparissonExp;
      } else if (PATH.equals(jp.getCurrentName())) {
        expression = new CsdlPath().setValue(jp.nextTextValue());
      } else if (NAVIGATION_PROPERTY_PATH.equals(jp.getCurrentName())) {
        expression = new CsdlNavigationPropertyPath().setValue(jp.nextTextValue());
      } else if (PROPERTY_PATH.equals(jp.getCurrentName())) {
        expression = new CsdlPropertyPath().setValue(jp.nextTextValue());
      } else if (ANNOTATION_PATH.equals(jp.getCurrentName())) {
        expression = new CsdlAnnotationPath().setValue(jp.nextTextValue());
      } else if (APPLY.equals(jp.getCurrentName())) {
        jp.nextToken();
        expression = jp.readValueAs(ClientCsdlApply.class);
      } else if (CAST.equals(jp.getCurrentName())) {
        jp.nextToken();
        expression = jp.readValueAs(ClientCsdlCast.class);
      } else if (COLLECTION.equals(jp.getCurrentName())) {
        jp.nextToken();
        expression = jp.readValueAs(ClientCsdlCollection.class);
        if(expression == null) {
          expression = new ClientCsdlCollection();
        }
      } else if (IF.equals(jp.getCurrentName())) {
        jp.nextToken();
        jp.nextToken();

        final CsdlIf ifImpl = new CsdlIf();
        ifImpl.setGuard(parseConstOrEnumExpression(jp));
        ifImpl.setThen(parseConstOrEnumExpression(jp));
        ifImpl.setElse(parseConstOrEnumExpression(jp));

        expression = ifImpl;
      } else if (IS_OF.equals(jp.getCurrentName())) {
        jp.nextToken();
        expression = jp.readValueAs(ClientCsdlIsOf.class);
      } else if (LABELED_ELEMENT.equals(jp.getCurrentName())) {
        jp.nextToken();
        expression = jp.readValueAs(ClientCsdlLabeledElement.class);
      } else if (NULL.equals(jp.getCurrentName())) {
        jp.nextToken();
        expression = jp.readValueAs(ClientCsdlNull.class);
      } else if (RECORD.equals(jp.getCurrentName())) {
        jp.nextToken();
        expression = jp.readValueAs(ClientCsdlRecord.class);
      } else if (URL_REF.equals(jp.getCurrentName())) {
        jp.nextToken();
        expression = jp.readValueAs(ClientCsdlUrlRef.class);
      }

      return expression;
    }