Search in sources :

Example 41 with EntityProto

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());
}
Also used : ImmutableList(com.google.common.collect.ImmutableList) Property(com.google.storage.onestore.v3.OnestoreEntity.Property)

Example 42 with EntityProto

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));
        }
    }
}
Also used : Property(com.google.storage.onestore.v3.OnestoreEntity.Property) EntityProto(com.google.storage.onestore.v3.OnestoreEntity.EntityProto)

Aggregations

EntityProto (com.google.storage.onestore.v3.OnestoreEntity.EntityProto)32 Property (com.google.storage.onestore.v3.OnestoreEntity.Property)13 Path (com.google.storage.onestore.v3.OnestoreEntity.Path)9 Reference (com.google.storage.onestore.v3.OnestoreEntity.Reference)9 ByteString (com.google.protobuf.ByteString)7 ImmutableList (com.google.common.collect.ImmutableList)6 Map (java.util.Map)6 PropertyValue (com.google.storage.onestore.v3.OnestoreEntity.PropertyValue)5 Entity (com.google.appengine.api.datastore.Entity)3 Extent (com.google.appengine.api.datastore.dev.LocalDatastoreService.Extent)3 Profile (com.google.appengine.api.datastore.dev.LocalDatastoreService.Profile)3 Cost (com.google.apphosting.datastore.DatastoreV3Pb.Cost)3 ImmutableMap (com.google.common.collect.ImmutableMap)3 Element (com.google.storage.onestore.v3.OnestoreEntity.Path.Element)3 ArrayList (java.util.ArrayList)3 HashMap (java.util.HashMap)3 LinkedHashMap (java.util.LinkedHashMap)3 LinkedList (java.util.LinkedList)3 List (java.util.List)3 WeakHashMap (java.util.WeakHashMap)3