Search in sources :

Example 1 with Util

use of apoc.util.Util in project neo4j-apoc-procedures by neo4j-contrib.

the class Convert method convertToList.

@SuppressWarnings("unchecked")
private <T> List<T> convertToList(Object list, Class<T> type) {
    List<Object> convertedList = convertToList(list);
    if (convertedList == null) {
        return null;
    }
    Stream<T> stream = null;
    Types varType = Types.of(type);
    switch(varType) {
        case INTEGER:
            stream = (Stream<T>) convertedList.stream().map(Util::toLong);
            break;
        case FLOAT:
            stream = (Stream<T>) convertedList.stream().map(Util::toDouble);
            break;
        case STRING:
            stream = (Stream<T>) convertedList.stream().map(this::toString);
            break;
        case BOOLEAN:
            stream = (Stream<T>) convertedList.stream().map(this::toBoolean);
            break;
        case NODE:
            stream = (Stream<T>) convertedList.stream().map(this::toNode);
            break;
        case RELATIONSHIP:
            stream = (Stream<T>) convertedList.stream().map(this::toRelationship);
            break;
        default:
            throw new RuntimeException("Supported types are: Integer, Float, String, Boolean, Node, Relationship");
    }
    return stream.collect(Collectors.toList());
}
Also used : Types(apoc.meta.Meta.Types) Util(apoc.util.Util)

Example 2 with Util

use of apoc.util.Util in project neo4j-apoc-procedures by neo4j-contrib.

the class Strings method toCypher.

@UserFunction
@Description("apoc.text.toCypher(value, {skipKeys,keepKeys,skipValues,keepValues,skipNull,node,relationship,start,end}) | tries it's best to convert the value to a cypher-property-string")
public String toCypher(@Name("value") Object value, @Name(value = "config", defaultValue = "{}") Map<String, Object> config) {
    if (config.containsKey("keepValues") && !((Collection) config.get("keepValues")).stream().noneMatch((v) -> (v.getClass().isInstance(value) || isPrimitive(value) && isPrimitive(v)) && !value.equals(v)))
        return null;
    else if (config.containsKey("skipValues") && ((Collection) config.get("skipValues")).contains(value))
        return null;
    if (value == null)
        return "null";
    if (value instanceof Number || value instanceof Boolean)
        return value.toString();
    if (value instanceof String)
        return '\'' + value.toString() + '\'';
    if (value instanceof Iterable)
        return '[' + StreamSupport.stream(((Iterable<?>) value).spliterator(), false).map(v -> toCypher(v, config)).filter(Objects::nonNull).collect(Collectors.joining(",")) + ']';
    if (value.getClass().isArray())
        return '[' + Arrays.stream((Object[]) value).map(v -> toCypher(v, config)).filter(Objects::nonNull).collect(Collectors.joining(",")) + ']';
    if (value instanceof Node) {
        Node node = (Node) value;
        String labels = StreamSupport.stream(node.getLabels().spliterator(), false).map(l -> quote(l.name())).collect(Collectors.joining(":"));
        if (!labels.isEmpty())
            labels = ':' + labels;
        String var = cypherName(config, "node", () -> "", Util::quote);
        return '(' + var + labels + ' ' + toCypher(node.getAllProperties(), config) + ')';
    }
    if (value instanceof Relationship) {
        Relationship rel = (Relationship) value;
        String type = ':' + quote(rel.getType().name());
        String start = cypherName(config, "start", () -> toCypher(rel.getStartNode(), config), (s) -> '(' + quote(s) + ')');
        String relationship = cypherName(config, "relationship", () -> "", Util::quote);
        String end = cypherName(config, "end", () -> toCypher(rel.getEndNode(), config), (s) -> '(' + quote(s) + ')');
        return start + "-[" + relationship + type + ' ' + toCypher(rel.getAllProperties(), config) + "]->" + end;
    }
    if (value instanceof Map) {
        Map<String, Object> values = (Map<String, Object>) value;
        if (config.containsKey("keepKeys")) {
            values.keySet().retainAll((List<String>) (config.get("keepKeys")));
        }
        if (config.containsKey("skipKeys")) {
            values.keySet().removeAll((List<String>) (config.get("skipKeys")));
        }
        return '{' + values.entrySet().stream().map((e) -> Pair.of(e.getKey(), toCypher(e.getValue(), config))).filter((p) -> p.other() != null).sorted(Comparator.comparing(Pair::first)).map((p) -> quote(p.first()) + ":" + p.other()).collect(Collectors.joining(",")) + '}';
    }
    return null;
}
Also used : java.util(java.util) URLDecoder(java.net.URLDecoder) Pair(org.neo4j.helpers.collection.Pair) Function(java.util.function.Function) Supplier(java.util.function.Supplier) StringUtils(org.apache.commons.lang3.StringUtils) Node(org.neo4j.graphdb.Node) Matcher(java.util.regex.Matcher) Util.quote(apoc.util.Util.quote) Arrays.asList(java.util.Arrays.asList) ThreadLocalRandom(java.util.concurrent.ThreadLocalRandom) StreamSupport(java.util.stream.StreamSupport) Math.toIntExact(java.lang.Math.toIntExact) Util(apoc.util.Util) Procedure(org.neo4j.procedure.Procedure) Description(org.neo4j.procedure.Description) StringResult(apoc.result.StringResult) Collectors(java.util.stream.Collectors) UserFunction(org.neo4j.procedure.UserFunction) Normalizer(java.text.Normalizer) URLEncoder(java.net.URLEncoder) Relationship(org.neo4j.graphdb.Relationship) Stream(java.util.stream.Stream) Name(org.neo4j.procedure.Name) Pattern(java.util.regex.Pattern) UnsupportedEncodingException(java.io.UnsupportedEncodingException) Node(org.neo4j.graphdb.Node) Util(apoc.util.Util) Relationship(org.neo4j.graphdb.Relationship) Description(org.neo4j.procedure.Description) UserFunction(org.neo4j.procedure.UserFunction)

Aggregations

Util (apoc.util.Util)2 Types (apoc.meta.Meta.Types)1 StringResult (apoc.result.StringResult)1 Util.quote (apoc.util.Util.quote)1 UnsupportedEncodingException (java.io.UnsupportedEncodingException)1 Math.toIntExact (java.lang.Math.toIntExact)1 URLDecoder (java.net.URLDecoder)1 URLEncoder (java.net.URLEncoder)1 Normalizer (java.text.Normalizer)1 java.util (java.util)1 Arrays.asList (java.util.Arrays.asList)1 ThreadLocalRandom (java.util.concurrent.ThreadLocalRandom)1 Function (java.util.function.Function)1 Supplier (java.util.function.Supplier)1 Matcher (java.util.regex.Matcher)1 Pattern (java.util.regex.Pattern)1 Collectors (java.util.stream.Collectors)1 Stream (java.util.stream.Stream)1 StreamSupport (java.util.stream.StreamSupport)1 StringUtils (org.apache.commons.lang3.StringUtils)1