All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.googlecode.objectify.impl.translate.ProjectionSafeTranslator Maven / Gradle / Ivy

There is a newer version: 6.1.2
Show newest version
package com.googlecode.objectify.impl.translate;

import com.google.appengine.api.datastore.RawValue;
import com.google.common.primitives.Primitives;
import com.googlecode.objectify.impl.Path;

/**
 * 

Watches out for RawValue and performs the necessary conversion if we get one. This will happen * during projection queries.

* * @author Jeff Schnitzer */ abstract public class ProjectionSafeTranslator extends NullSafeTranslator { /** The class in the datastore that we project to */ private Class projectionClass; /** */ public ProjectionSafeTranslator(Class projectionClass) { // Projection fails if we do not use the wrapper type this.projectionClass = Primitives.wrap(projectionClass); } @Override final protected P loadSafe(D value, LoadContext ctx, Path path) throws SkipException { // Projection queries produce RawValue because the index data is not self-describing. // Here we have the expected datastore type, so we can obtain it right away. if (value instanceof RawValue) { value = (D)((RawValue)value).asType(projectionClass); // Annoyingly, null values still come back as a RawValue but the content is null if (value == null) return null; } return loadSafe2(value, ctx, path); } /** * Decode from a property value as stored in the datastore to a type that will be stored in a pojo. * * @param value will not be null and will not be RawValue * @return the format which should be stored in the pojo; a null means store a literal null! * @throws com.googlecode.objectify.impl.translate.SkipException if this field subtree should be skipped */ abstract protected P loadSafe2(D value, LoadContext ctx, Path path) throws SkipException; }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy