public P createObject()

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