/* * Copyright (c) 2002-2017 "Neo Technology," * Network Engine for Objects in Lund AB [http://neotechnology.com] * * This file is part of Neo4j. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.neo4j.driver.internal.types; import java.util.List; import java.util.Map; import org.neo4j.driver.internal.AsValue; import org.neo4j.driver.v1.Value; import org.neo4j.driver.v1.Values; import org.neo4j.driver.v1.types.Entity; import org.neo4j.driver.v1.types.MapAccessorWithDefaultValue; import org.neo4j.driver.v1.types.Node; import org.neo4j.driver.v1.types.Path; import org.neo4j.driver.v1.types.Relationship; import org.neo4j.driver.v1.util.Function; public abstract class InternalMapAccessorWithDefaultValue implements MapAccessorWithDefaultValue { public abstract Value get( String key ); @Override public Value get( String key, Value defaultValue ) { return get( get( key ), defaultValue ); } private Value get( Value value, Value defaultValue ) { if( value.equals( Values.NULL ) ) { return defaultValue; } else { return ((AsValue) value).asValue(); } } @Override public Object get( String key, Object defaultValue ) { return get( get( key ), defaultValue ); } private Object get(Value value, Object defaultValue ) { if( value.equals( Values.NULL ) ) { return defaultValue; } else { return value.asObject(); } } @Override public Number get( String key, Number defaultValue ) { return get( get( key ), defaultValue ); } private Number get( Value value, Number defaultValue ) { if( value.equals( Values.NULL ) ) { return defaultValue; } else { return value.asNumber(); } } @Override public Entity get( String key, Entity defaultValue ) { return get( get( key ), defaultValue ); } private Entity get( Value value, Entity defaultValue ) { if( value.equals( Values.NULL ) ) { return defaultValue; } else { return value.asEntity(); } } @Override public Node get( String key, Node defaultValue ) { return get( get( key ), defaultValue ); } private Node get( Value value, Node defaultValue ) { if( value.equals( Values.NULL ) ) { return defaultValue; } else { return value.asNode(); } } @Override public Path get( String key, Path defaultValue ) { return get( get( key ), defaultValue ); } private Path get( Value value, Path defaultValue ) { if( value.equals( Values.NULL ) ) { return defaultValue; } else { return value.asPath(); } } @Override public Relationship get( String key, Relationship defaultValue ) { return get( get( key ), defaultValue ); } private Relationship get( Value value, Relationship defaultValue ) { if( value.equals( Values.NULL ) ) { return defaultValue; } else { return value.asRelationship(); } } @Override public List<Object> get( String key, List<Object> defaultValue ) { return get( get( key ), defaultValue ); } private List<Object> get( Value value, List<Object> defaultValue ) { if( value.equals( Values.NULL ) ) { return defaultValue; } else { return value.asList(); } } @Override public <T> List<T> get( String key, List<T> defaultValue, Function<Value,T> mapFunc ) { return get( get( key ), defaultValue, mapFunc ); } private <T> List<T> get( Value value, List<T> defaultValue, Function<Value, T> mapFunc ) { if( value.equals( Values.NULL ) ) { return defaultValue; } else { return value.asList( mapFunc ); } } @Override public Map<String, Object> get( String key, Map<String,Object> defaultValue ) { return get( get( key ), defaultValue ); } private Map<String, Object> get( Value value, Map<String, Object> defaultValue ) { if( value.equals( Values.NULL ) ) { return defaultValue; } else { return value.asMap(); } } @Override public <T> Map<String, T> get( String key, Map<String,T> defaultValue, Function<Value,T> mapFunc ) { return get( get( key ), defaultValue, mapFunc ); } private <T>Map<String, T> get( Value value, Map<String, T> defaultValue, Function<Value, T> mapFunc ) { if( value.equals( Values.NULL ) ) { return defaultValue; } else { return value.asMap( mapFunc ); } } @Override public int get( String key, int defaultValue ) { return get( get( key ), defaultValue ); } private int get( Value value, int defaultValue ) { if( value.equals( Values.NULL ) ) { return defaultValue; } else { return value.asInt(); } } @Override public long get( String key, long defaultValue ) { return get( get( key ), defaultValue ); } private long get( Value value, long defaultValue ) { if( value.equals( Values.NULL ) ) { return defaultValue; } else { return value.asLong(); } } @Override public boolean get( String key, boolean defaultValue ) { return get( get( key ), defaultValue ); } private boolean get( Value value, boolean defaultValue ) { if( value.equals( Values.NULL ) ) { return defaultValue; } else { return value.asBoolean(); } } @Override public String get( String key, String defaultValue ) { return get( get( key ), defaultValue ); } private String get( Value value, String defaultValue ) { if( value.equals( Values.NULL ) ) { return defaultValue; } else { return value.asString(); } } @Override public float get( String key, float defaultValue ) { return get( get( key ), defaultValue ); } private float get( Value value, float defaultValue ) { if( value.equals( Values.NULL ) ) { return defaultValue; } else { return value.asFloat(); } } @Override public double get( String key, double defaultValue ) { return get( get( key ), defaultValue ); } private double get( Value value, double defaultValue ) { if( value.equals( Values.NULL ) ) { return defaultValue; } else { return value.asDouble(); } } }