in gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/TraversalSerializersV2.java [330:381]
public P deserialize(final JsonParser jsonParser, final DeserializationContext deserializationContext) throws IOException, JsonProcessingException {
String predicate = null;
Object value = null;
while (jsonParser.nextToken() != JsonToken.END_OBJECT) {
if (jsonParser.getCurrentName().equals(GraphSONTokens.PREDICATE)) {
jsonParser.nextToken();
predicate = jsonParser.getText();
} else if (jsonParser.getCurrentName().equals(GraphSONTokens.VALUE)) {
jsonParser.nextToken();
value = deserializationContext.readValue(jsonParser, Object.class);
}
}
if (predicate.equals(GraphSONTokens.AND) || predicate.equals(GraphSONTokens.OR)) {
return predicate.equals(GraphSONTokens.AND) ? new AndP((List<P>) value) : new OrP((List<P>) value);
} else if (predicate.equals(GraphSONTokens.NOT) && value instanceof P) {
return P.not((P<?>) value);
} else {
try {
if (value instanceof Collection) {
if (predicate.equals("between"))
return P.between(((List) value).get(0), ((List) value).get(1));
else if (predicate.equals("inside"))
return P.between(((List) value).get(0), ((List) value).get(1));
else if (predicate.equals("outside"))
return P.outside(((List) value).get(0), ((List) value).get(1));
else if (predicate.equals("within"))
return P.within((Collection) value);
else if (predicate.equals("without"))
return P.without((Collection) value);
else
return (P) P.class.getMethod(predicate, Collection.class).invoke(null, (Collection) value);
} else if (predicate.equals("typeOf")) {
if (value instanceof GType)
return P.typeOf((GType) value);
else if (value instanceof String)
return P.typeOf((String) value);
else
return P.typeOf((Class<?>) value);
} else {
try {
return (P) P.class.getMethod(predicate, Object.class).invoke(null, value);
} catch (final NoSuchMethodException e) {
return (P) P.class.getMethod(predicate, Object[].class).invoke(null, (Object) new Object[]{value});
}
}
} catch (final Exception e) {
throw new IllegalStateException(e.getMessage(), e);
}
}
}