@Override public <T, R> Map<T, R> readAsMap(Class<T> keyType, TypeInformation<R> componentType, BaseEntity entity) { if (entity == null) { return null; } Map<T, R> result = new HashMap<>(); EntityPropertyValueProvider propertyValueProvider = new EntityPropertyValueProvider( entity, this.conversions); Set<String> fieldNames = entity.getNames(); for (String field : fieldNames) { result.put(this.conversions.convertOnRead(field, null, keyType), propertyValueProvider.getPropertyValue(field, EmbeddedType.of(componentType), componentType)); } return result; }
@Override public <T, R> Map<T, R> readAsMap(Class<T> keyType, TypeInformation<R> componentType, BaseEntity entity) { if (entity == null) { return null; } Map<T, R> result = new HashMap<>(); EntityPropertyValueProvider propertyValueProvider = new EntityPropertyValueProvider( entity, this.conversions); Set<String> fieldNames = entity.getNames(); for (String field : fieldNames) { result.put(this.conversions.convertOnRead(field, null, keyType), propertyValueProvider.getPropertyValue(field, EmbeddedType.of(componentType), componentType)); } return result; }
private Object convertSingularResult(Class returnedItemType, boolean isNonEntityReturnType, List rawResult) { if (this.queryMethod.isCountQuery()) { return rawResult.size(); } else if (this.queryMethod.isExistsQuery()) { return !rawResult.isEmpty(); } if (rawResult.size() > 1) { throw new DatastoreDataException( "The query method returns a singular object but " + "the query returned more than one result."); } return isNonEntityReturnType ? this.datastoreTemplate.getDatastoreEntityConverter().getConversions() .convertOnRead(rawResult.get(0), null, returnedItemType) : this.queryMethod.getResultProcessor().processResult(rawResult.get(0)); }
private Object convertSingularResult(Class returnedItemType, boolean isNonEntityReturnType, List rawResult) { if (this.queryMethod.isCountQuery()) { return rawResult.size(); } else if (this.queryMethod.isExistsQuery()) { return !rawResult.isEmpty(); } if (rawResult.size() > 1) { throw new DatastoreDataException( "The query method returns a singular object but " + "the query returned more than one result."); } return isNonEntityReturnType ? this.datastoreTemplate.getDatastoreEntityConverter().getConversions() .convertOnRead(rawResult.get(0), null, returnedItemType) : this.queryMethod.getResultProcessor().processResult(rawResult.get(0)); }
@VisibleForTesting protected Object convertResultCollection(Object result, Class<?> collectionType) { return getDatastoreTemplate().getDatastoreEntityConverter().getConversions() .convertOnRead(result, collectionType, getQueryMethod().getReturnedObjectType()); }
private Object convertCollectionResult(Class returnedItemType, boolean isNonEntityReturnType, List rawResult) { Object result = this.datastoreTemplate.getDatastoreEntityConverter() .getConversions().convertOnRead( isNonEntityReturnType ? rawResult : applyProjection(rawResult), this.queryMethod.getCollectionReturnType(), returnedItemType); return result; }
private Object convertCollectionResult(Class returnedItemType, boolean isNonEntityReturnType, List rawResult) { Object result = this.datastoreTemplate.getDatastoreEntityConverter() .getConversions().convertOnRead( isNonEntityReturnType ? rawResult : applyProjection(rawResult), this.queryMethod.getCollectionReturnType(), returnedItemType); return result; }
@SuppressWarnings("unchecked") public <T> T getPropertyValue(String fieldName, EmbeddedType embeddedType, TypeInformation targetTypeInformation) { if (!this.entity.contains(fieldName)) { return null; } try { return this.conversion.convertOnRead(this.entity.getValue(fieldName).get(), embeddedType, targetTypeInformation); } catch (ConversionException | DatastoreDataException ex) { throw new DatastoreDataException("Unable to read property " + fieldName, ex); } } }
@SuppressWarnings("unchecked") public <T> T getPropertyValue(String fieldName, EmbeddedType embeddedType, TypeInformation targetTypeInformation) { if (!this.entity.contains(fieldName)) { return null; } try { return this.conversion.convertOnRead(this.entity.getValue(fieldName).get(), embeddedType, targetTypeInformation); } catch (ConversionException | DatastoreDataException ex) { throw new DatastoreDataException("Unable to read property " + fieldName, ex); } } }
protected Object convertResultCollection(Object result, Class<?> collectionType) { return getDatastoreTemplate().getDatastoreEntityConverter().getConversions() .convertOnRead(result, collectionType, getQueryMethod().getReturnedObjectType()); }
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."); } }
private <T> void resolveDescendantProperties(DatastorePersistentEntity datastorePersistentEntity, BaseEntity entity, T convertedObject) { datastorePersistentEntity .doWithDescendantProperties((descendantPersistentProperty) -> { Class descendantType = descendantPersistentProperty .getComponentType(); EntityQuery descendantQuery = Query.newEntityQueryBuilder() .setKind(this.datastoreMappingContext .getPersistentEntity(descendantType).kindName()) .setFilter(PropertyFilter.hasAncestor((Key) entity.getKey())) .build(); datastorePersistentEntity.getPropertyAccessor(convertedObject) .setProperty(descendantPersistentProperty, // Converting the collection type. this.datastoreEntityConverter.getConversions() .convertOnRead( convertEntitiesForRead( getDatastoreReadWriter() .run(descendantQuery), descendantType), descendantPersistentProperty .getType(), descendantType)); }); }
private <T> void resolveDescendantProperties(DatastorePersistentEntity datastorePersistentEntity, BaseEntity entity, T convertedObject) { datastorePersistentEntity .doWithDescendantProperties((descendantPersistentProperty) -> { Class descendantType = descendantPersistentProperty .getComponentType(); EntityQuery descendantQuery = Query.newEntityQueryBuilder() .setKind(this.datastoreMappingContext .getPersistentEntity(descendantType).kindName()) .setFilter(PropertyFilter.hasAncestor((Key) entity.getKey())) .build(); datastorePersistentEntity.getPropertyAccessor(convertedObject) .setProperty(descendantPersistentProperty, // Converting the collection type. this.datastoreEntityConverter.getConversions() .convertOnRead( convertEntitiesForRead( getDatastoreReadWriter() .run(descendantQuery), descendantType), descendantPersistentProperty .getType(), descendantType)); }); }