/* * Copyright 2011 Google Inc. * * 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.gwt.user.client.rpc; /** * An interface that may be implemented by class-based custom field serializers * which will reduce the amount of server-side reflection during serialization, * hence improving their serialization performance. * * @param <T> the type of the object being serialized */ public abstract class CustomFieldSerializer<T> { /** * Deserializes the content of the object from the * {@link SerializationStreamReader}. * * @param streamReader the {@link SerializationStreamReader} to read the * object's content from * @param instance the object instance to deserialize * * @throws SerializationException if the deserialization operation is not * successful */ public abstract void deserializeInstance( SerializationStreamReader streamReader, T instance) throws SerializationException; /** * @return <code>true</code> if a specialist {@link #instantiateInstance} is * implemented; <code>false</code> otherwise */ public boolean hasCustomInstantiateInstance() { return false; } /** * Instantiates an object from the {@link SerializationStreamReader}. * <p> * Most of the time, this can be left unimplemented and the framework * will instantiate the instance itself. This is typically used when the * object being deserialized is immutable, hence it has to be created with * its state already set. * <p> * If this is overridden, the {@link #hasCustomInstantiateInstance} method * must return <code>true</code> in order for the framework to know to call * it. * * @param streamReader the {@link SerializationStreamReader} to read the * object's content from * * @return an object that has been loaded from the * {@link SerializationStreamReader} * * @throws SerializationException if the instantiation operation is not * successful */ public T instantiateInstance(SerializationStreamReader streamReader) throws SerializationException { throw new SerializationException( "instantiateInstance is not supported by " + getClass().getName()); } /** * Serializes the content of the object into the * {@link SerializationStreamWriter}. * * @param streamWriter the {@link SerializationStreamWriter} to write the * object's content to * @param instance the object instance to serialize * * @throws SerializationException if the serialization operation is not * successful */ public abstract void serializeInstance(SerializationStreamWriter streamWriter, T instance) throws SerializationException; }