@Test public void testGetList() throws Exception { BaseEntity<Key> entity = builder.build(); List<? extends Value<?>> list = entity.getList("list1"); assertEquals(3, list.size()); assertEquals(NullValue.of(), list.get(0)); assertEquals("foo", list.get(1).get()); assertEquals(LAT_LNG, list.get(2).get()); list = entity.getList("list2"); assertEquals(2, list.size()); assertEquals(Long.valueOf(10), list.get(0).get()); assertEquals(Double.valueOf(2), list.get(1).get()); list = entity.getList("list3"); assertEquals(1, list.size()); assertEquals(Boolean.TRUE, list.get(0).get()); entity = builder.set("list1", ListValue.of(list)).build(); assertEquals(list, entity.getList("list1")); List<Value<?>> stringList = entity.getList("stringList"); assertEquals( ImmutableList.of(StringValue.of("s1"), StringValue.of("s2"), StringValue.of("s3")), stringList); List<Value<Double>> doubleList = entity.getList("doubleList"); assertEquals( ImmutableList.of(DoubleValue.of(12.3), DoubleValue.of(4.56), DoubleValue.of(.789)), doubleList); List<EntityValue> entityList = entity.getList("entityList"); assertEquals( ImmutableList.of(EntityValue.of(ENTITY), EntityValue.of(PARTIAL_ENTITY)), entityList); }
private Object findReferenced(BaseEntity entity, DatastorePersistentProperty referencePersistentProperty) { String fieldName = referencePersistentProperty.getFieldName(); try { Object referenced; if (!entity.contains(fieldName)) { referenced = null; } else if (referencePersistentProperty.isCollectionLike()) { Class referencedType = referencePersistentProperty.getComponentType(); List<Value<Key>> keyValues = entity.getList(fieldName); referenced = this.datastoreEntityConverter.getConversions() .convertOnRead( findAllById( keyValues.stream().map(Value::get).collect(Collectors.toList()), referencedType), referencePersistentProperty.getType(), referencedType); } else { referenced = findById(entity.getKey(fieldName), referencePersistentProperty.getType()); } return referenced; } catch (ClassCastException ex) { throw new DatastoreDataException( "Error loading reference property " + fieldName + "." + "Reference properties must be stored as Keys or lists of Keys" + " in Cloud Datastore for singular or multiple references, respectively."); } }
private Object findReferenced(BaseEntity entity, DatastorePersistentProperty referencePersistentProperty) { String fieldName = referencePersistentProperty.getFieldName(); try { Object referenced; if (!entity.contains(fieldName)) { referenced = null; } else if (referencePersistentProperty.isCollectionLike()) { Class referencedType = referencePersistentProperty.getComponentType(); List<Value<Key>> keyValues = entity.getList(fieldName); referenced = this.datastoreEntityConverter.getConversions() .convertOnRead( findAllById( keyValues.stream().map(Value::get).collect(Collectors.toList()), referencedType), referencePersistentProperty.getType(), referencedType); } else { referenced = findById(entity.getKey(fieldName), referencePersistentProperty.getType()); } return referenced; } catch (ClassCastException ex) { throw new DatastoreDataException( "Error loading reference property " + fieldName + "." + "Reference properties must be stored as Keys or lists of Keys" + " in Cloud Datastore for singular or multiple references, respectively."); } }