private Object toNode(Object value, boolean virtual, Map<Long, Object> nodesCache) { Value internalValue = ((InternalEntity) value).asValue(); Node node = internalValue.asNode(); if (virtual) { List<Label> labels = new ArrayList<>(); node.labels().forEach(l -> labels.add(Label.label(l))); VirtualNode virtualNode = new VirtualNode(node.id(), labels.toArray(new Label[0]), node.asMap(), db); nodesCache.put(node.id(), virtualNode); return virtualNode; } else return Util.map("entityType", internalValue.type().name(), "labels", node.labels(), "id", node.id(), "properties", node.asMap()); }
private Object toRelationship(Object value, boolean virtual, Map<Long, Object> nodesCache) { Value internalValue = ((InternalEntity) value).asValue(); Relationship relationship = internalValue.asRelationship(); if (virtual) { VirtualNode start = (VirtualNode) nodesCache.getOrDefault(relationship.startNodeId(), new VirtualNode(relationship.startNodeId(), db)); VirtualNode end = (VirtualNode) nodesCache.getOrDefault(relationship.endNodeId(), new VirtualNode(relationship.endNodeId(), db)); VirtualRelationship virtualRelationship = new VirtualRelationship(relationship.id(), start, end, RelationshipType.withName(relationship.type()), relationship.asMap()); return virtualRelationship; } else return Util.map("entityType", internalValue.type().name(), "type", relationship.type(), "id", relationship.id(), "start", relationship.startNodeId(), "end", relationship.endNodeId(), "properties", relationship.asMap()); }
@Override public float asFloat() { float floatVal = (float) val; if ((double) floatVal != val) { throw new LossyCoercion( type().name(), "Java float" ); } return floatVal; }
@Override public boolean containsKey( String key ) { throw new NotMultiValued( type().name() + " is not a keyed collection" ); }
@Override public Path asPath() { throw new Uncoercible( type().name(), "Path" ); }
@Override public Value get( String key ) { throw new NotMultiValued( type().name() + " is not a keyed collection" ); }
@Override public int asInt() { if (val > Integer.MAX_VALUE || val < Integer.MIN_VALUE) { throw new LossyCoercion( type().name(), "Java int" ); } return (int) val; }
@Override public double asDouble() { throw new Uncoercible( type().name(), "Java double" ); }
@Override public <T> Map<String, T> asMap( Function<Value,T> mapFunction ) { throw new Uncoercible( type().name(), "Java Map" ); }
@Override public Number asNumber() { throw new Uncoercible( type().name(), "Java Number" ); }
@Override public ZonedDateTime asZonedDateTime() { throw new Uncoercible( type().name(), "ZonedDateTime" ); }
@Override public Value get( int index ) { throw new NotMultiValued( type().name() + " is not an indexed collection" ); }
@Override public long asLong() { long longVal = (long) val; if ((double) longVal != val) { throw new LossyCoercion( type().name(), "Java long" ); } return longVal; }
@Override public int asInt() { throw new Uncoercible( type().name(), "Java int" ); }
@Override public float asFloat() { throw new Uncoercible( type().name(), "Java float" ); }
@Override public boolean asBoolean() { throw new Uncoercible( type().name(), "Java boolean" ); }
@Override public <T> List<T> asList( Function<Value,T> mapFunction ) { throw new Uncoercible( type().name(), "Java List" ); }
@Override public byte[] asByteArray() { throw new Uncoercible( type().name(), "Byte array" ); }
@Override public Relationship asRelationship() { throw new Uncoercible( type().name(), "Relationship" ); }
@Override public <T> Iterable<T> values( Function<Value,T> mapFunction ) { throw new NotMultiValued( type().name() + " is not iterable" ); }