package com.googlecode.objectify.impl.translate; import com.google.appengine.api.datastore.PropertyContainer; import com.googlecode.objectify.ObjectifyFactory; import com.googlecode.objectify.impl.Path; /** * The context while creating translator factories. Tracks important state as we navigate the class graph. * * @author Jeff Schnitzer <jeff@infohazard.org> */ public class CreateContext { /** The objectify factory instance */ ObjectifyFactory factory; public ObjectifyFactory getFactory() { return this.factory; } /** */ public CreateContext(ObjectifyFactory fact) { this.factory = fact; } /** * Get the relevant translator, creating it if necessary. */ public <P, D> Translator<P, D> getTranslator(TypeKey<P> tk, CreateContext ctx, Path path) { return factory.getTranslators().get(tk, ctx, path); } /** * Get the populator for the specified class. This requires looking up the * translator for that class and then getting the populator from it. * * @param clazz is the class we want a populator for. */ @SuppressWarnings("unchecked") public <P> Populator<P> getPopulator(Class<P> clazz, Path path) { if (clazz == null || clazz.equals(Object.class)) { return (Populator<P>)NullPopulator.INSTANCE; } else { ClassTranslator<P> classTranslator = (ClassTranslator<P>)this.<P, PropertyContainer>getTranslator(new TypeKey<P>(clazz), this, path); return classTranslator.getPopulator(); } } }