// Copyright 2016 The Domain Registry Authors. All Rights Reserved. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package com.google.domain.registry.model.translators; import com.google.domain.registry.util.TypeUtils.TypeInstantiator; import com.googlecode.objectify.impl.Path; import com.googlecode.objectify.impl.Property; import com.googlecode.objectify.impl.translate.CreateContext; import com.googlecode.objectify.impl.translate.LoadContext; import com.googlecode.objectify.impl.translate.SaveContext; import com.googlecode.objectify.impl.translate.ValueTranslator; import com.googlecode.objectify.impl.translate.ValueTranslatorFactory; import java.lang.reflect.Type; /** Common boilerplate for translator factories. */ public abstract class AbstractSimpleTranslatorFactory extends ValueTranslatorFactory { public AbstractSimpleTranslatorFactory(Class

clazz) { super(clazz); } @Override protected final ValueTranslator createSafe( Path path, Property property, Type type, CreateContext ctx) { return new ValueTranslator(path, new TypeInstantiator(getClass()){}.getExactType()) { SimpleTranslator simpleTranslator = createTranslator(); @Override protected P loadValue(D datastoreValue, LoadContext ctx) { return simpleTranslator.loadValue(datastoreValue); } @Override protected D saveValue(P pojoValue, SaveContext ctx) { return simpleTranslator.saveValue(pojoValue); } }; } /** Translator with reduced boilerplate. */ interface SimpleTranslator { P loadValue(D datastoreValue); D saveValue(P pojoValue); } abstract SimpleTranslator createTranslator(); }