in core/src/main/java/com/datastax/dse/driver/internal/core/graph/GraphSON2SerdeTP.java [296:362]
public P createObject(final Map<String, Object> data) {
final String predicate = (String) data.get(GraphSONTokens.PREDICATE);
final String predicateType = (String) data.get("predicateType");
final Object value = data.get(GraphSONTokens.VALUE);
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 {
try {
if (value instanceof Collection) {
if (predicate.equals("between")) {
return P.between(((List) value).get(0), ((List) value).get(1));
} else if (predicateType.equals(P.class.getSimpleName())
&& 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(SearchPredicate.prefix.name())) {
return Search.prefix((String) value);
} else if (predicate.equals(SearchPredicate.tokenPrefix.name())) {
return Search.tokenPrefix((String) value);
} else if (predicate.equals(SearchPredicate.regex.name())) {
return Search.regex((String) value);
} else if (predicate.equals(SearchPredicate.tokenRegex.name())) {
return Search.tokenRegex((String) value);
} else if (predicate.equals(SearchPredicate.token.name())) {
return Search.token((String) value);
} else if (predicate.equals(SearchPredicate.fuzzy.name())) {
Map<String, Object> arguments = (Map<String, Object>) value;
return Search.fuzzy(
(String) arguments.get("query"), (int) arguments.get("distance"));
} else if (predicate.equals(SearchPredicate.tokenFuzzy.name())) {
Map<String, Object> arguments = (Map<String, Object>) value;
return Search.tokenFuzzy(
(String) arguments.get("query"), (int) arguments.get("distance"));
} else if (predicate.equals(SearchPredicate.phrase.name())) {
Map<String, Object> arguments = (Map<String, Object>) value;
return Search.phrase(
(String) arguments.get("query"), (int) arguments.get("distance"));
} else if (predicateType.equals(Geo.class.getSimpleName())
&& predicate.equals(GeoPredicate.inside.name())) {
return Geo.inside(
((Distance) value).getCenter(),
((Distance) value).getRadius(),
Geo.Unit.DEGREES);
} else if (predicateType.equals(Geo.class.getSimpleName())
&& predicate.equals(GeoPredicate.insideCartesian.name())) {
return Geo.inside(((Distance) value).getCenter(), ((Distance) value).getRadius());
} else {
return (P) P.class.getMethod(predicate, Object.class).invoke(null, value);
}
}
} catch (final Exception e) {
throw new IllegalStateException(e.getMessage(), e);
}
}
}