Search in sources :

Example 11 with Value

use of com.google.cloud.datastore.Value in project spring-cloud-gcp by spring-cloud.

the class DefaultDatastoreEntityConverterTests method testCollectionFieldsNulls.

@Test
public void testCollectionFieldsNulls() {
    TestDatastoreItemCollections item = new TestDatastoreItemCollections(Arrays.asList(1, 2), null, null, new boolean[] { true, false }, null, null);
    Entity.Builder builder = getEntityBuilder();
    ENTITY_CONVERTER.write(item, builder);
    Entity entity = builder.build();
    List<Value<?>> intList = entity.getList("intList");
    assertThat(intList.stream().map(Value::get).collect(Collectors.toList())).as("validate int list values").isEqualTo(Arrays.asList(1L, 2L));
    List<Value<?>> stringArray = entity.getList("stringArray");
    assertThat(stringArray).as("validate string array is null").isNull();
    List<Value<?>> beanContext = entity.getList("beanContext");
    assertThat(beanContext).as("validate bean context is null").isNull();
    TestDatastoreItemCollections readItem = ENTITY_CONVERTER.read(TestDatastoreItemCollections.class, entity);
    assertThat(item.equals(readItem)).as("read object should be equal to original").isTrue();
}
Also used : FullEntity(com.google.cloud.datastore.FullEntity) Entity(com.google.cloud.datastore.Entity) EmbeddedEntity(org.springframework.cloud.gcp.data.datastore.core.convert.TestItemWithEmbeddedEntity.EmbeddedEntity) BaseEntity(com.google.cloud.datastore.BaseEntity) DiscriminatorValue(org.springframework.cloud.gcp.data.datastore.core.mapping.DiscriminatorValue) NullValue(com.google.cloud.datastore.NullValue) EntityValue(com.google.cloud.datastore.EntityValue) Value(com.google.cloud.datastore.Value) StringValue(com.google.cloud.datastore.StringValue) ListValue(com.google.cloud.datastore.ListValue) Test(org.junit.Test)

Example 12 with Value

use of com.google.cloud.datastore.Value in project spring-cloud-gcp by spring-cloud.

the class DefaultDatastoreEntityConverterTests method testCollectionFieldsUnsupportedWriteRead.

@Test
public void testCollectionFieldsUnsupportedWriteRead() {
    TestItemUnsupportedFields.CollectionOfUnsupportedTypes item = getCollectionOfUnsupportedTypesItem();
    DatastoreEntityConverter entityConverter = new DefaultDatastoreEntityConverter(new DatastoreMappingContext(), new TwoStepsConversions(new DatastoreCustomConversions(Arrays.asList(getIntegerToNewTypeConverter(), getNewTypeToIntegerConverter())), null, datastoreMappingContext));
    Entity.Builder builder = getEntityBuilder();
    entityConverter.write(item, builder);
    Entity entity = builder.build();
    List<Value<?>> intList = entity.getList("unsupportedElts");
    assertThat(intList.stream().map(Value::get).collect(Collectors.toList())).as("validate long list values").isEqualTo(Arrays.asList(1L, 0L));
    TestItemUnsupportedFields.CollectionOfUnsupportedTypes read = entityConverter.read(TestItemUnsupportedFields.CollectionOfUnsupportedTypes.class, entity);
    assertThat(read.equals(item)).as("read object should be equal to original").isTrue();
}
Also used : FullEntity(com.google.cloud.datastore.FullEntity) Entity(com.google.cloud.datastore.Entity) EmbeddedEntity(org.springframework.cloud.gcp.data.datastore.core.convert.TestItemWithEmbeddedEntity.EmbeddedEntity) BaseEntity(com.google.cloud.datastore.BaseEntity) DatastoreMappingContext(org.springframework.cloud.gcp.data.datastore.core.mapping.DatastoreMappingContext) DiscriminatorValue(org.springframework.cloud.gcp.data.datastore.core.mapping.DiscriminatorValue) NullValue(com.google.cloud.datastore.NullValue) EntityValue(com.google.cloud.datastore.EntityValue) Value(com.google.cloud.datastore.Value) StringValue(com.google.cloud.datastore.StringValue) ListValue(com.google.cloud.datastore.ListValue) Test(org.junit.Test)

Example 13 with Value

use of com.google.cloud.datastore.Value in project spring-cloud-gcp by spring-cloud.

the class DefaultDatastoreEntityConverterTests method testCollectionFields.

@Test
public void testCollectionFields() {
    byte[][] bytes = { { 1, 2 }, { 3, 4 } };
    List<byte[]> listByteArray = Arrays.asList(bytes);
    ComparableBeanContextSupport ComparableBeanContextSupport = new ComparableBeanContextSupport();
    ComparableBeanContextSupport.add("this implementation of Collection");
    ComparableBeanContextSupport.add("is supported through a custom converter!");
    TestDatastoreItemCollections item = new TestDatastoreItemCollections(Arrays.asList(1, 2), ComparableBeanContextSupport, new String[] { "abc", "def" }, new boolean[] { true, false }, bytes, listByteArray);
    DatastoreEntityConverter entityConverter = new DefaultDatastoreEntityConverter(new DatastoreMappingContext(), new TwoStepsConversions(new DatastoreCustomConversions(Arrays.asList(new Converter<List<String>, ComparableBeanContextSupport>() {

        @Override
        public ComparableBeanContextSupport convert(List<String> source) {
            ComparableBeanContextSupport bcs = new ComparableBeanContextSupport();
            source.forEach(bcs::add);
            return bcs;
        }
    }, new Converter<ComparableBeanContextSupport, List<String>>() {

        @Override
        public List<String> convert(ComparableBeanContextSupport bcs) {
            List<String> list = new ArrayList<>();
            bcs.iterator().forEachRemaining((s) -> list.add((String) s));
            return list;
        }
    })), null, datastoreMappingContext));
    Entity.Builder builder = getEntityBuilder();
    entityConverter.write(item, builder);
    Entity entity = builder.build();
    List<Value<?>> intList = entity.getList("intList");
    assertThat(intList.stream().map(Value::get).collect(Collectors.toList())).as("validate int list values").isEqualTo(Arrays.asList(1L, 2L));
    List<Value<?>> stringArray = entity.getList("stringArray");
    assertThat(stringArray.stream().map(Value::get).collect(Collectors.toList())).as("validate string array values").isEqualTo(Arrays.asList("abc", "def"));
    List<Value<?>> beanContext = entity.getList("beanContext");
    assertThat(beanContext.stream().map(Value::get).collect(Collectors.toSet())).as("validate bean context values").isEqualTo(new HashSet<>(Arrays.asList("this implementation of Collection", "is supported through a custom converter!")));
    List<Value<?>> bytesVals = entity.getList("bytes");
    assertThat(bytesVals.stream().map(Value::get).collect(Collectors.toList())).as("validate array of byte[] values").isEqualTo(Arrays.asList(Blob.copyFrom(new byte[] { 1, 2 }), Blob.copyFrom(new byte[] { 3, 4 })));
    List<Value<?>> listByteArrayVals = entity.getList("listByteArray");
    assertThat(listByteArrayVals.stream().map(Value::get).collect(Collectors.toList())).as("validate list of byte[]").isEqualTo(Arrays.asList(Blob.copyFrom(new byte[] { 1, 2 }), Blob.copyFrom(new byte[] { 3, 4 })));
    TestDatastoreItemCollections readItem = entityConverter.read(TestDatastoreItemCollections.class, entity);
    assertThat(item.equals(readItem)).as("read object should be equal to original").isTrue();
}
Also used : ComparableBeanContextSupport(org.springframework.cloud.gcp.data.datastore.core.convert.TestDatastoreItemCollections.ComparableBeanContextSupport) FullEntity(com.google.cloud.datastore.FullEntity) Entity(com.google.cloud.datastore.Entity) EmbeddedEntity(org.springframework.cloud.gcp.data.datastore.core.convert.TestItemWithEmbeddedEntity.EmbeddedEntity) BaseEntity(com.google.cloud.datastore.BaseEntity) DatastoreMappingContext(org.springframework.cloud.gcp.data.datastore.core.mapping.DatastoreMappingContext) ArrayList(java.util.ArrayList) DiscriminatorValue(org.springframework.cloud.gcp.data.datastore.core.mapping.DiscriminatorValue) NullValue(com.google.cloud.datastore.NullValue) EntityValue(com.google.cloud.datastore.EntityValue) Value(com.google.cloud.datastore.Value) StringValue(com.google.cloud.datastore.StringValue) ListValue(com.google.cloud.datastore.ListValue) Converter(org.springframework.core.convert.converter.Converter) ArrayList(java.util.ArrayList) List(java.util.List) Test(org.junit.Test)

Example 14 with Value

use of com.google.cloud.datastore.Value in project spring-cloud-gcp by spring-cloud.

the class DefaultDatastoreEntityConverterTests method testEmbeddedEntity.

@Test
public void testEmbeddedEntity() {
    EmbeddedEntity embeddedEntityA = new EmbeddedEntity("item 0");
    EmbeddedEntity embeddedEntityB = new EmbeddedEntity("item 1");
    List<EmbeddedEntity> embeddedEntities = Arrays.asList(embeddedEntityA, embeddedEntityB);
    Map<String, String> mapSimpleValues = new HashMap<>();
    mapSimpleValues.put("a", "valueA");
    mapSimpleValues.put("b", "valueB");
    Map<String, String[]> mapListValues = new HashMap<>();
    mapListValues.put("a", new String[] { "valueA" });
    mapListValues.put("b", new String[] { "valueB" });
    Map<String, EmbeddedEntity> embeddedEntityMapEmbeddedEntity = new HashMap<>();
    embeddedEntityMapEmbeddedEntity.put("a", embeddedEntityA);
    embeddedEntityMapEmbeddedEntity.put("b", embeddedEntityB);
    Map<String, List<EmbeddedEntity>> embeddedEntityMapListOfEmbeddedEntities = new HashMap<>();
    embeddedEntityMapListOfEmbeddedEntities.put("a", Arrays.asList(embeddedEntityA));
    embeddedEntityMapListOfEmbeddedEntities.put("b", Arrays.asList(embeddedEntityB));
    Map<String, Map<Long, Map<String, String>>> nestedEmbeddedMap = new HashMap<>();
    Map<Long, Map<String, String>> nestedInnerEmbeddedMap = new HashMap<>();
    nestedInnerEmbeddedMap.put(1L, mapSimpleValues);
    nestedEmbeddedMap.put("outer1", nestedInnerEmbeddedMap);
    Map<TestDatastoreItem.Color, String> enumKeysMap = new HashMap<>();
    enumKeysMap.put(TestDatastoreItem.Color.BLACK, "black");
    enumKeysMap.put(TestDatastoreItem.Color.WHITE, "white");
    CustomMap customMap = new CustomMap();
    customMap.put("key1", "val1");
    TestItemWithEmbeddedEntity item = new TestItemWithEmbeddedEntity(123, new EmbeddedEntity("abc"), embeddedEntities, mapSimpleValues, mapListValues, embeddedEntityMapEmbeddedEntity, embeddedEntityMapListOfEmbeddedEntities, enumKeysMap, customMap);
    item.setNestedEmbeddedMaps(nestedEmbeddedMap);
    DatastoreEntityConverter entityConverter = new DefaultDatastoreEntityConverter(new DatastoreMappingContext(), new DatastoreServiceObjectToKeyFactory(() -> this.datastore));
    Entity.Builder builder = getEntityBuilder();
    entityConverter.write(item, builder);
    Entity entity = builder.build();
    assertThat(entity.getList("listOfEmbeddedEntities").stream().map((val) -> ((BaseEntity<?>) val.get()).getString("stringField")).collect(Collectors.toList())).as("validate embedded entity").isEqualTo(Arrays.asList("item 0", "item 1"));
    assertThat(entity.getEntity("embeddedEntityField").getString("stringField")).as("validate embedded entity").isEqualTo("abc");
    assertThat(entity.getLong("intField")).as("validate int field").isEqualTo(123L);
    assertThat(entity.getEntity("nestedEmbeddedMaps").getEntity("outer1").getEntity("1").getString("a")).isEqualTo("valueA");
    assertThat(entity.getEntity("nestedEmbeddedMaps").getEntity("outer1").getEntity("1").getString("b")).isEqualTo("valueB");
    assertThat(entity.getEntity("embeddedMapSimpleValues").getString("a")).isEqualTo("valueA");
    assertThat(entity.getEntity("embeddedMapSimpleValues").getString("b")).isEqualTo("valueB");
    assertThat(entity.getEntity("embeddedMapListOfValues").getList("a")).contains(StringValue.of("valueA"));
    assertThat(entity.getEntity("embeddedMapListOfValues").getList("b")).contains(StringValue.of("valueB"));
    assertThat(entity.getEntity("embeddedEntityMapEmbeddedEntity").getEntity("a").getString("stringField")).isEqualTo("item 0");
    assertThat(entity.getEntity("embeddedEntityMapEmbeddedEntity").getEntity("b").getString("stringField")).isEqualTo("item 1");
    List<Value> embeddedMapValuesEmbeddedEntityA = entity.getEntity("embeddedEntityMapListOfEmbeddedEntities").getList("a");
    List<Value> embeddedMapValuesEmbeddedEntityB = entity.getEntity("embeddedEntityMapListOfEmbeddedEntities").getList("b");
    assertThat(((BaseEntity) embeddedMapValuesEmbeddedEntityA.get(0).get()).getString("stringField")).isEqualTo("item 0");
    assertThat(embeddedMapValuesEmbeddedEntityA.size()).isEqualTo(1);
    assertThat(((BaseEntity) embeddedMapValuesEmbeddedEntityB.get(0).get()).getString("stringField")).isEqualTo("item 1");
    assertThat(embeddedMapValuesEmbeddedEntityB.size()).isEqualTo(1);
    TestItemWithEmbeddedEntity read = entityConverter.read(TestItemWithEmbeddedEntity.class, entity);
    assertThat(read.getNestedEmbeddedMaps().get("outer1").get(1L).get("a")).isEqualTo("valueA");
    assertThat(read.getNestedEmbeddedMaps().get("outer1").get(1L).get("b")).isEqualTo("valueB");
    assertThat(entity.getEntity("customMap").getString("key1")).isEqualTo("val1");
    assertThat(read).as("read objects equals the original one").isEqualTo(item);
}
Also used : FullEntity(com.google.cloud.datastore.FullEntity) Entity(com.google.cloud.datastore.Entity) EmbeddedEntity(org.springframework.cloud.gcp.data.datastore.core.convert.TestItemWithEmbeddedEntity.EmbeddedEntity) BaseEntity(com.google.cloud.datastore.BaseEntity) DatastoreMappingContext(org.springframework.cloud.gcp.data.datastore.core.mapping.DatastoreMappingContext) HashMap(java.util.HashMap) CustomMap(org.springframework.cloud.gcp.data.datastore.entities.CustomMap) ArrayList(java.util.ArrayList) List(java.util.List) BaseEntity(com.google.cloud.datastore.BaseEntity) EmbeddedEntity(org.springframework.cloud.gcp.data.datastore.core.convert.TestItemWithEmbeddedEntity.EmbeddedEntity) DiscriminatorValue(org.springframework.cloud.gcp.data.datastore.core.mapping.DiscriminatorValue) NullValue(com.google.cloud.datastore.NullValue) EntityValue(com.google.cloud.datastore.EntityValue) Value(com.google.cloud.datastore.Value) StringValue(com.google.cloud.datastore.StringValue) ListValue(com.google.cloud.datastore.ListValue) HashMap(java.util.HashMap) Map(java.util.Map) CustomMap(org.springframework.cloud.gcp.data.datastore.entities.CustomMap) Test(org.junit.Test)

Example 15 with Value

use of com.google.cloud.datastore.Value in project spring-cloud-gcp by spring-cloud.

the class DatastoreTemplate method exampleToQuery.

private <T> StructuredQuery exampleToQuery(Example<T> example, DatastoreQueryOptions queryOptions, boolean keyQuery) {
    validateExample(example);
    T probe = example.getProbe();
    FullEntity.Builder<IncompleteKey> probeEntityBuilder = Entity.newBuilder();
    this.datastoreEntityConverter.write(probe, probeEntityBuilder);
    FullEntity<IncompleteKey> probeEntity = probeEntityBuilder.build();
    DatastorePersistentEntity<?> persistentEntity = this.datastoreMappingContext.getPersistentEntity(example.getProbeType());
    LinkedList<StructuredQuery.Filter> filters = new LinkedList<>();
    NullHandler nullHandler = example.getMatcher().getNullHandler();
    persistentEntity.doWithColumnBackedProperties((persistentProperty) -> {
        if (!ignoredProperty(example, persistentProperty)) {
            Value<?> value = getValue(example, probeEntity, persistentEntity, persistentProperty);
            addFilter(nullHandler, filters, persistentProperty.getFieldName(), value);
        }
    });
    persistentEntity.doWithAssociations((AssociationHandler<DatastorePersistentProperty>) association -> {
        PersistentPropertyAccessor<?> accessor = persistentEntity.getPropertyAccessor(example.getProbe());
        DatastorePersistentProperty property = association.getInverse();
        Object value = accessor.getProperty(property);
        Value<?> key = value == null ? NullValue.of() : KeyValue.of(objectToKeyFactory.getKeyFromObject(value, this.datastoreMappingContext.getPersistentEntity(value.getClass())));
        addFilter(nullHandler, filters, property.getFieldName(), key);
    });
    StructuredQuery.Builder<?> builder = keyQuery ? Query.newKeyQueryBuilder() : Query.newEntityQueryBuilder();
    builder.setKind(persistentEntity.kindName());
    if (!filters.isEmpty()) {
        builder.setFilter(StructuredQuery.CompositeFilter.and(filters.pop(), filters.toArray(new StructuredQuery.Filter[0])));
    }
    applyQueryOptions(builder, queryOptions, persistentEntity);
    return builder.build();
}
Also used : FullEntity(com.google.cloud.datastore.FullEntity) Query(com.google.cloud.datastore.Query) Builder(com.google.cloud.datastore.Entity.Builder) PathElement(com.google.cloud.datastore.PathElement) SliceUtil(org.springframework.cloud.gcp.data.datastore.core.util.SliceUtil) PersistentPropertyAccessor(org.springframework.data.mapping.PersistentPropertyAccessor) TransactionSynchronizationManager(org.springframework.transaction.support.TransactionSynchronizationManager) Filter(com.google.cloud.datastore.StructuredQuery.Filter) AfterQueryEvent(org.springframework.cloud.gcp.data.datastore.core.mapping.event.AfterQueryEvent) KeyQuery(com.google.cloud.datastore.KeyQuery) ClassTypeInformation(org.springframework.data.util.ClassTypeInformation) QueryResults(com.google.cloud.datastore.QueryResults) Map(java.util.Map) ApplicationEventPublisher(org.springframework.context.ApplicationEventPublisher) Pageable(org.springframework.data.domain.Pageable) Sort(org.springframework.data.domain.Sort) PersistentProperty(org.springframework.data.mapping.PersistentProperty) AfterFindByKeyEvent(org.springframework.cloud.gcp.data.datastore.core.mapping.event.AfterFindByKeyEvent) BaseEntity(com.google.cloud.datastore.BaseEntity) DatastoreDataException(org.springframework.cloud.gcp.data.datastore.core.mapping.DatastoreDataException) Collection(java.util.Collection) KeyValue(com.google.cloud.datastore.KeyValue) AfterSaveEvent(org.springframework.cloud.gcp.data.datastore.core.mapping.event.AfterSaveEvent) Set(java.util.Set) DatastorePersistentEntity(org.springframework.cloud.gcp.data.datastore.core.mapping.DatastorePersistentEntity) Example(org.springframework.data.domain.Example) Collectors(java.util.stream.Collectors) IncompleteKey(com.google.cloud.datastore.IncompleteKey) Slice(org.springframework.data.domain.Slice) Objects(java.util.Objects) List(java.util.List) Optional(java.util.Optional) KeyUtil(org.springframework.cloud.gcp.data.datastore.core.util.KeyUtil) ListValue(com.google.cloud.datastore.ListValue) DatastoreMappingContext(org.springframework.cloud.gcp.data.datastore.core.mapping.DatastoreMappingContext) BeforeDeleteEvent(org.springframework.cloud.gcp.data.datastore.core.mapping.event.BeforeDeleteEvent) Key(com.google.cloud.datastore.Key) BeforeSaveEvent(org.springframework.cloud.gcp.data.datastore.core.mapping.event.BeforeSaveEvent) DatastoreEntityConverter(org.springframework.cloud.gcp.data.datastore.core.convert.DatastoreEntityConverter) SliceImpl(org.springframework.data.domain.SliceImpl) HashMap(java.util.HashMap) Datastore(com.google.cloud.datastore.Datastore) ProjectionEntityQuery(com.google.cloud.datastore.ProjectionEntityQuery) Function(java.util.function.Function) Supplier(java.util.function.Supplier) ArrayList(java.util.ArrayList) Cursor(com.google.cloud.datastore.Cursor) HashSet(java.util.HashSet) NullHandler(org.springframework.data.domain.ExampleMatcher.NullHandler) ValueUtil(org.springframework.cloud.gcp.data.datastore.core.util.ValueUtil) Entity(com.google.cloud.datastore.Entity) PropertyFilter(com.google.cloud.datastore.StructuredQuery.PropertyFilter) NullValue(com.google.cloud.datastore.NullValue) StreamSupport(java.util.stream.StreamSupport) Nullable(org.springframework.lang.Nullable) LinkedList(java.util.LinkedList) StructuredQuery(com.google.cloud.datastore.StructuredQuery) ApplicationEventPublisherAware(org.springframework.context.ApplicationEventPublisherAware) Iterator(java.util.Iterator) TypeUtils(org.springframework.util.TypeUtils) ObjectToKeyFactory(org.springframework.cloud.gcp.data.datastore.core.convert.ObjectToKeyFactory) ExampleMatcher(org.springframework.data.domain.ExampleMatcher) DatastoreReaderWriter(com.google.cloud.datastore.DatastoreReaderWriter) EntityQuery(com.google.cloud.datastore.EntityQuery) AfterDeleteEvent(org.springframework.cloud.gcp.data.datastore.core.mapping.event.AfterDeleteEvent) ApplicationEvent(org.springframework.context.ApplicationEvent) AssociationHandler(org.springframework.data.mapping.AssociationHandler) BaseKey(com.google.cloud.datastore.BaseKey) Value(com.google.cloud.datastore.Value) DatastorePersistentProperty(org.springframework.cloud.gcp.data.datastore.core.mapping.DatastorePersistentProperty) Collections(java.util.Collections) DatastorePageable(org.springframework.cloud.gcp.data.datastore.repository.query.DatastorePageable) Assert(org.springframework.util.Assert) StructuredQuery(com.google.cloud.datastore.StructuredQuery) NullHandler(org.springframework.data.domain.ExampleMatcher.NullHandler) PersistentPropertyAccessor(org.springframework.data.mapping.PersistentPropertyAccessor) FullEntity(com.google.cloud.datastore.FullEntity) LinkedList(java.util.LinkedList) IncompleteKey(com.google.cloud.datastore.IncompleteKey) Filter(com.google.cloud.datastore.StructuredQuery.Filter) PropertyFilter(com.google.cloud.datastore.StructuredQuery.PropertyFilter) KeyValue(com.google.cloud.datastore.KeyValue) ListValue(com.google.cloud.datastore.ListValue) NullValue(com.google.cloud.datastore.NullValue) Value(com.google.cloud.datastore.Value) DatastorePersistentProperty(org.springframework.cloud.gcp.data.datastore.core.mapping.DatastorePersistentProperty)

Aggregations

Value (com.google.cloud.datastore.Value)17 Test (org.junit.Test)11 KeyValue (com.google.cloud.datastore.KeyValue)10 ListValue (com.google.cloud.datastore.ListValue)9 BaseEntity (com.google.cloud.datastore.BaseEntity)8 EntityValue (com.google.cloud.datastore.EntityValue)8 FullEntity (com.google.cloud.datastore.FullEntity)8 NullValue (com.google.cloud.datastore.NullValue)8 DatastoreMappingContext (org.springframework.cloud.gcp.data.datastore.core.mapping.DatastoreMappingContext)8 DoubleValue (com.google.cloud.datastore.DoubleValue)7 Entity (com.google.cloud.datastore.Entity)7 LongValue (com.google.cloud.datastore.LongValue)7 StringValue (com.google.cloud.datastore.StringValue)7 ArrayList (java.util.ArrayList)7 List (java.util.List)7 Cursor (com.google.cloud.datastore.Cursor)6 GqlQuery (com.google.cloud.datastore.GqlQuery)6 Map (java.util.Map)6 DatastoreDataException (org.springframework.cloud.gcp.data.datastore.core.mapping.DatastoreDataException)6 Slice (org.springframework.data.domain.Slice)6