use of com.google.storage.onestore.v3.OnestoreEntity.EntityProto in project appengine-java-standard by GoogleCloudPlatform.
the class EntityStorageConversions method createComputedAndStashedValuesForEntityValues.
/**
* Modifies an entity by marking all indexed entity values for stashing, and flattening all leaf
* sub-properties into top-level properties. Does not perform any kind of validation.
*
* @param diskEntity The EntityProto to modify.
*/
private static void createComputedAndStashedValuesForEntityValues(EntityProto diskEntity) {
ImmutableList.Builder<Property> computedProperties = ImmutableList.builder();
for (int i = 0; i < diskEntity.propertySize(); i++) {
Property property = diskEntity.getProperty(i);
if (isEntityValue(property)) {
// Mark for stashing.
property.setStashed(i);
flattenIndexedEntityValues(property.getName(), property.isMultiple(), property.getValue().getStringValueAsBytes(), computedProperties);
}
}
diskEntity.mutablePropertys().addAll(computedProperties.build());
}
use of com.google.storage.onestore.v3.OnestoreEntity.EntityProto in project appengine-java-standard by GoogleCloudPlatform.
the class EntityStorageConversions method flattenIndexedEntityValues.
/**
* Recursively walk the given entity value and flattens all leaf sub-properties into
* flattenedProperties. In the top level call pathPrefix and multiplePath should be respectively
* the name and the multiple bit of the property enclosing the entity value. This method is
* designed for internal use, do not make it public.
*
* @param pathPrefix Prefix to be added to property names for the current recursion level.
* @param multiplePath Whether a multiple property has been encountered in the path.
* @param currentSerializedEntityValue The serialized entity value to inspect recursively.
* @param flattenedProperties The list where flattened sub-properties are to be added.
*/
private static void flattenIndexedEntityValues(String pathPrefix, boolean multiplePath, byte[] currentSerializedEntityValue, ImmutableList.Builder<Property> flattenedProperties) {
checkArgument(!Strings.isNullOrEmpty(pathPrefix));
EntityProto currentEntityValue = deserializeEmbeddedEntityProto(currentSerializedEntityValue, pathPrefix);
if (currentEntityValue.getKey().getPath().elementSize() > 0) {
// Path is not empty
flattenedProperties.add(new Property().setName(pathPrefix + Kinds.PROPERTY_PATH_DELIMITER_AND_KEY_SUFFIX).setValue(ReferenceValues.toReferenceProperty(currentEntityValue.getKey())).setMultiple(multiplePath).setComputed(true));
}
for (Property property : currentEntityValue.propertys()) {
if (isEntityValue(property)) {
// This is a nested entity value.
flattenIndexedEntityValues(pathPrefix + Kinds.PROPERTY_PATH_DELIMITER + property.getName(), multiplePath || property.isMultiple(), property.getValue().getStringValueAsBytes(), flattenedProperties);
} else {
// This is a leaf sub-property.
flattenedProperties.add(property.setName(pathPrefix + Kinds.PROPERTY_PATH_DELIMITER + property.getName()).setMultiple(multiplePath || property.isMultiple()).setComputed(true));
}
}
}
Aggregations