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