@Override public JsonObject addProperty( MigrationContext context, JsonObject state, String name, Object defaultValue ) throws JsonException { JsonObject valueState = state.getJsonObject( JSONKeys.VALUE ); if( !valueState.containsKey( name ) ) { valueState = jsonFactories.cloneBuilder( valueState ) .add( name, serialization.toJson( defaultValue ) ) .build(); JsonObject migratedState = jsonFactories.cloneBuilderExclude( state, JSONKeys.VALUE ) .add( JSONKeys.VALUE, valueState ) .build(); context.markAsChanged(); for( MigrationEvents migrationEvent : migrationEvents ) { migrationEvent.propertyAdded( state.getString( JSONKeys.IDENTITY ), name, defaultValue ); } return migratedState; } else { context.addFailure( "Add property " + name + ", default:" + defaultValue ); return state; } }
@Test public void serializeMapWithStringKeysAsJsonObject() { Map<String, String> map = new HashMap<>(); map.put( "foo", "bar" ); map.put( "baz", "bazar" ); JsonValue json = jsonSerialization.toJson( map ); assertThat( json.getValueType(), is( JsonValue.ValueType.OBJECT ) ); JsonObject jsonObject = (JsonObject) json; assertThat( jsonObject.getString( "foo" ), equalTo( "bar" ) ); assertThat( jsonObject.getString( "baz" ), equalTo( "bazar" ) ); MapType mapType = MapType.of( ValueType.STRING, ValueType.STRING ); Map<String, String> map2 = jsonSerialization.fromJson( module, mapType, json ); assertThat( map2, equalTo( map ) ); }
private void serializeNamedAssociations( EntityState entityState, Map<String, String> named ) { Stream<? extends AssociationDescriptor> associations = entityState.entityDescriptor().state().namedAssociations(); associations.forEach( descriptor -> { NamedAssociationState references = entityState.namedAssociationValueOf( descriptor.qualifiedName() ); Map<String, String> refs = references.stream() .collect( Collectors.toMap( Map.Entry::getKey, entry -> entry.getValue().toString() ) ); String serialized = valueSerialization.serialize( refs ); named.put( descriptor.qualifiedName().name(), serialized ); } ); }
@Override public Object propertyValueOf( QualifiedName stateName ) { try { ValueType valueType = entityDescriptor.state().findPropertyModelByQualifiedName( stateName ).valueType(); JsonValue jsonValue = state.getJsonObject( JSONKeys.VALUE ).get( stateName.name() ); return serialization.fromJson( module, valueType, jsonValue ); } catch( SerializationException e ) { throw new EntityStoreException( e ); } }
Object deserialized = valueSerialization.deserialize( module, propertyDescriptor.valueType(), storedValue ); properties.put( propertyDescriptor.qualifiedName(), deserialized );
@Override public Object propertyValueOf( QualifiedName stateName ) { try { ValueType valueType = entityDescriptor.state().findPropertyModelByQualifiedName( stateName ).valueType(); JsonValue jsonValue = state.getJsonObject( JSONKeys.VALUE ).get( stateName.name() ); return serialization.fromJson( module, valueType, jsonValue ); } catch( SerializationException e ) { throw new EntityStoreException( e ); } }
serialization.deserialize( module, persistentProperty.valueType(), formValue ) );
@Override public void setPropertyValue( QualifiedName stateName, Object newValue ) { try { JsonValue jsonValue = serialization.toJson( ALL_TYPE_INFO, newValue ); if( stateCloneWithProperty( stateName.name(), jsonValue ) ) { markUpdated(); } } catch( SerializationException e ) { throw new EntityStoreException( "Unable to set property " + stateName + " value " + newValue, e ); } }
@Test public void serializeMapWithComplexKeyToJsonArrayOfEntryObjects() { Map<SomeValue, String> map = new LinkedHashMap<>(); map.put( newSomeValue( "foo" ), "bar" ); map.put( newSomeValue( "baz" ), "bazar" ); JsonValue json = jsonSerialization.toJson( map ); assertThat( json.getValueType(), is( JsonValue.ValueType.ARRAY ) ); JsonArray jsonArray = (JsonArray) json; JsonObject fooEntry = jsonArray.getJsonObject( 0 ); JsonObject bazEntry = jsonArray.getJsonObject( 1 ); assertThat( fooEntry.getJsonObject( "key" ).getString( "foo" ), equalTo( "foo" ) ); assertThat( fooEntry.getString( "value" ), equalTo( "bar" ) ); assertThat( bazEntry.getJsonObject( "key" ).getString( "foo" ), equalTo( "baz" ) ); assertThat( bazEntry.getString( "value" ), equalTo( "bazar" ) ); MapType mapType = MapType.of( ValueCompositeType.of( api.valueDescriptorFor( map.keySet().iterator().next() ) ), ValueType.STRING ); Map<SomeValue, String> map2 = jsonSerialization.fromJson( module, mapType, json ); assertThat( map2, equalTo( map ) ); }
@Test public void deserializeJsonArrayOfEntryObjectsAsMapWithStringKeys() { JsonObjectBuilder fooEntryBuilder = jsonFactories.builderFactory().createObjectBuilder(); fooEntryBuilder.add( "key", "foo" ); fooEntryBuilder.add( "value", "bar" ); JsonObject fooEntry = fooEntryBuilder.build(); JsonObjectBuilder bazEntryBuilder = jsonFactories.builderFactory().createObjectBuilder(); bazEntryBuilder.add( "key", "baz" ); bazEntryBuilder.add( "value", "bazar" ); JsonObject bazEntry = bazEntryBuilder.build(); JsonArrayBuilder arrayBuilder = jsonFactories.builderFactory().createArrayBuilder(); arrayBuilder.add( fooEntry ); arrayBuilder.add( bazEntry ); JsonArray jsonArray = arrayBuilder.build(); MapType mapType = MapType.of( ValueType.STRING, ValueType.STRING ); Map<String, String> map = jsonSerialization.fromJson( module, mapType, jsonArray ); assertThat( map.get( "foo" ), equalTo( "bar" ) ); assertThat( map.get( "baz" ), equalTo( "bazar" ) ); }
private void serializeProperties( EntityState entityState, Map<String, String> props ) { Stream<? extends PropertyDescriptor> properties = entityState.entityDescriptor().state().properties(); properties.forEach( descriptor -> { Object value = entityState.propertyValueOf( descriptor.qualifiedName() ); if( value != null ) { String serialized = valueSerialization.serialize( value ); props.put( descriptor.qualifiedName().name(), serialized ); } } ); }
@Override public void setPropertyValue( QualifiedName stateName, Object newValue ) { try { JsonValue jsonValue = serialization.toJson( ALL_TYPE_INFO, newValue ); if( stateCloneWithProperty( stateName.name(), jsonValue ) ) { markUpdated(); } } catch( SerializationException e ) { throw new EntityStoreException( "Unable to set property " + stateName + " value " + newValue, e ); } }
Object value = jsonSerialization.fromJson( module, property.valueType(), jsonValue ); properties.put( property.qualifiedName(), value );
+ ( persistentProperty.isImmutable() ? "readonly=\"true\" " : "" ) + "name=\"" + persistentProperty.qualifiedName() + "\" " + "value=\"" + ( value == null ? "" : serialization.serialize( value ) ) + "\"/></td></tr>" ); } );
JsonValue jsonValue = jsonSerialization.toJson( value ); valueBuilder.add( persistentProperty.qualifiedName().name(), jsonValue ); } );
try jsonSerialization.fromJson( module, mapType, jsonArray ); fail( "Should have failed deserialization" );
JsonValue jsonValue = jsonSerialization.toJson( value ); valueBuilder.add( persistentProperty.qualifiedName().name(), jsonValue ); } );
Object value = jsonSerialization.fromJson( module, property.valueType(), jsonValue ); properties.put( property.qualifiedName(), value );
@Test public void valueCompositeJsonEquality() { // START SNIPPET: json-serialization try( UnitOfWork uow = unitOfWorkFactory.newUnitOfWork() ) { Some valueInstance = buildSomeValue( moduleInstance, uow, "42" ); // Serialize using injected service JsonValue serializedJson = jsonSerialization.toJson( valueInstance ); System.out.println( serializedJson.toString() ); // Deserialize using Module API Some valueFromSerializedState = moduleInstance.newValueFromSerializedState( Some.class, serializedJson.toString() ); assertThat( "Deserialized Value equality", valueInstance, equalTo( valueFromSerializedState ) ); // END SNIPPET: json-serialization // value.toString() JsonValue valueJsonWithoutTypeInfo = jsonSerialization.toJson( Serializer.Options.NO_TYPE_INFO, valueFromSerializedState ); JsonObject valueToStringJson = jsonFactories.readerFactory() .createReader( new StringReader( valueFromSerializedState.toString() ) ) .readObject(); assertThat( "value.toString() JSON equality", valueJsonWithoutTypeInfo, equalTo( valueToStringJson ) ); // START SNIPPET: json-serialization } // END SNIPPET: json-serialization } }
@Test public void serializeMapWithMixedKeysAsJsonArrayOfEntryObjects() { Map<Object, String> map = new LinkedHashMap<>(); map.put( "foo", "bar" ); map.put( newSomeValue( "baz" ), "bazar" ); JsonValue json = jsonSerialization.toJson( map ); assertThat( json.getValueType(), is( JsonValue.ValueType.ARRAY ) ); JsonArray jsonArray = (JsonArray) json; JsonObject fooEntry = jsonArray.getJsonObject( 0 ); JsonObject bazEntry = jsonArray.getJsonObject( 1 ); assertThat( fooEntry.getString( "key" ), equalTo( "foo" ) ); assertThat( fooEntry.getString( "value" ), equalTo( "bar" ) ); assertThat( bazEntry.getJsonObject( "key" ).getString( "foo" ), equalTo( "baz" ) ); assertThat( bazEntry.getString( "value" ), equalTo( "bazar" ) ); }