public MapType( Class<?> type, ValueType keyType, ValueType valueType ) { super( type ); this.keyType = keyType; this.valueType = valueType; if( !isMap( type ) ) { throw new IllegalArgumentException( type + " is not a Map." ); } }
public static MapType of( Class<?> keyType, Class<?> valueType ) { return of( ValueType.of( keyType ), ValueType.of( valueType ) ); }
private Map<Object, Object> deserializeMap( ModuleDescriptor module, MapType mapType, MapValue value ) throws IOException { Map<Object, Object> map = new LinkedHashMap<>( value.size() ); for( Map.Entry<Value, Value> entry : value.entrySet() ) { Object key = doDeserialize( module, mapType.keyType(), entry.getKey() ); Object val = doDeserialize( module, mapType.valueType(), entry.getValue() ); map.put( key, val ); } return map; }
public static MapType of( ValueType keyType, ValueType valueType ) { return new MapType( Map.class, keyType, valueType ); }
public static MapType of( Class<?> mapType, ValueType keyType, ValueType valueType ) { return new MapType( mapType, keyType, valueType ); }
Optional<Node> valueNode = JavaxXml.firstChildElementNamed( element, "value" ) .flatMap( JavaxXml::firstStateChildNode ); Object key = doDeserialize( module, mapType.keyType(), keyNode ); Object value = valueNode.map( node -> doDeserialize( module, mapType.valueType(), node ) ) .orElse( null ); return new HashMap.SimpleImmutableEntry<>( key, value ); .map( node -> doDeserialize( module, mapType.valueType(), node ) ) .orElse( null ); return (Map.Entry) new HashMap.SimpleImmutableEntry<>( key, value );
public static MapType of( Class<?> mapType, Class<?> keyType, Class<?> valueType ) { return of( mapType, ValueType.of( keyType ), ValueType.of( valueType ) ); }
public MapType( Class<?> type, ValueType keyType, ValueType valueType ) { super( type ); this.keyType = keyType; this.valueType = valueType; if( !isMap( type ) ) { throw new IllegalArgumentException( type + " is not a Map." ); } }
public static MapType of( ValueType keyType, ValueType valueType ) { return new MapType( Map.class, keyType, valueType ); }
/** * Map deserialization. * * {@literal JsonObject}s are deserialized to {@literal Map<String, ?>}. * {@literal JsonArray}s of key/value {@literal JsonObject}s are deserialized to {@literal Map<?, ?>}. */ private Map<?, ?> deserializeMap( ModuleDescriptor module, MapType mapType, JsonStructure json ) { if( json.getValueType() == JsonValue.ValueType.OBJECT ) { JsonObject object = (JsonObject) json; return object.entrySet().stream() .map( entry -> new AbstractMap.SimpleImmutableEntry<>( entry.getKey(), doDeserialize( module, mapType.valueType(), entry.getValue() ) ) ) .collect( toMapWithNullValues( LinkedHashMap::new ) ); } if( json.getValueType() == JsonValue.ValueType.ARRAY ) { JsonArray array = (JsonArray) json; return array.stream() .map( JsonObject.class::cast ) .map( entry -> new AbstractMap.SimpleImmutableEntry<>( doDeserialize( module, mapType.keyType(), entry.get( "key" ) ), doDeserialize( module, mapType.valueType(), entry.get( "value" ) ) ) ) .collect( toMapWithNullValues( LinkedHashMap::new ) ); } throw new SerializationException( "Don't know how to deserialize " + mapType + " from " + json ); }
public static MapType of( Class<?> keyType, Class<?> valueType ) { return of( ValueType.of( keyType ), ValueType.of( valueType ) ); }
if( MapType.isMap( objectClass ) )
public static MapType of( Class<?> mapType, ValueType keyType, ValueType valueType ) { return new MapType( mapType, keyType, valueType ); }
/** * Map deserialization. * * {@literal JsonObject}s are deserialized to {@literal Map<String, ?>}. * {@literal JsonArray}s of key/value {@literal JsonObject}s are deserialized to {@literal Map<?, ?>}. */ private Map<?, ?> deserializeMap( ModuleDescriptor module, MapType mapType, JsonStructure json ) { if( json.getValueType() == JsonValue.ValueType.OBJECT ) { JsonObject object = (JsonObject) json; return object.entrySet().stream() .map( entry -> new AbstractMap.SimpleImmutableEntry<>( entry.getKey(), doDeserialize( module, mapType.valueType(), entry.getValue() ) ) ) .collect( toMapWithNullValues( LinkedHashMap::new ) ); } if( json.getValueType() == JsonValue.ValueType.ARRAY ) { JsonArray array = (JsonArray) json; return array.stream() .map( JsonObject.class::cast ) .map( entry -> new AbstractMap.SimpleImmutableEntry<>( doDeserialize( module, mapType.keyType(), entry.get( "key" ) ), doDeserialize( module, mapType.valueType(), entry.get( "value" ) ) ) ) .collect( toMapWithNullValues( LinkedHashMap::new ) ); } throw new SerializationException( "Don't know how to deserialize " + mapType + " from " + json ); }
public static MapType of( Class<?> mapType, Class<?> keyType, Class<?> valueType ) { return of( mapType, ValueType.of( keyType ), ValueType.of( valueType ) ); }
if( MapType.isMap( objectClass ) )
@Test public void maps() { assertThat( valueTypeFactory.valueTypeOf( module, TreeMap.class ), instanceOf( MapType.class ) ); HashMap<String, Integer> map = new HashMap<>(); ValueType mapValueType = valueTypeFactory.valueTypeOf( module, map ); assertThat( mapValueType, instanceOf( MapType.class ) ); assertThat( ( (MapType) mapValueType ).keyType(), equalTo( ValueType.OBJECT ) ); assertThat( ( (MapType) mapValueType ).valueType(), equalTo( ValueType.OBJECT ) ); }
@Test public void givenEnumMapWhenSerializingAndDeserializingExpectEquals() { EnumMap<SomeEnum, Number> enumMap = new EnumMap<>( SomeEnum.class ); for( SomeEnum value : SomeEnum.values() ) { enumMap.put( value, 23 ); } String output = serialization.serialize( enumMap ); System.out.println( output ); MapType valueType = MapType.of( EnumType.of( SomeEnum.class ), ValueType.of( Integer.class ) ); Map<SomeEnum, Number> value = serialization.deserialize( module, valueType, output ); assertEquals( enumMap, value ); }
if( MapType.isMap( objectClass ) )