| /* |
| * 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.server.rpc; |
| |
| import com.google.gwt.user.client.rpc.SerializationException; |
| import com.google.gwt.user.client.rpc.TypeCheckedGenericClass; |
| import com.google.gwt.user.client.rpc.TypeCheckedObjectsTestSetValidator; |
| import com.google.gwt.user.server.rpc.impl.DequeMap; |
| import com.google.gwt.user.server.rpc.impl.SerializabilityUtil; |
| import com.google.gwt.user.server.rpc.impl.ServerSerializationStreamReader; |
| |
| import java.lang.reflect.Field; |
| import java.lang.reflect.Type; |
| import java.lang.reflect.TypeVariable; |
| import java.util.HashMap; |
| |
| /** |
| * This class is defined outside of the TypeCheckedObjectTestSetFactory because |
| * of a bug where custom field serializers cannot be inner classes. Once we fix |
| * this bug we can move this class into the test set factory. |
| */ |
| @SuppressWarnings({"rawtypes", "unused"}) |
| public class TypeCheckedGenericClass_ServerCustomFieldSerializer { |
| @SuppressWarnings("unchecked") |
| public static void deserializeChecked(ServerSerializationStreamReader streamReader, |
| TypeCheckedGenericClass instance, Type[] expectedParameterTypes, |
| DequeMap<TypeVariable<?>, Type> resolvedTypes) throws SerializationException { |
| Object junkKey = streamReader.readObject(); |
| Object junkValue = streamReader.readObject(); |
| |
| /* |
| * If deserializing a superclass we will not have been instantiated using |
| * the custom instantiator, so skip the checks for correct markers. |
| */ |
| if (instance.getClass() != TypeCheckedGenericClass.class |
| || ((instance.getMarkerKey() instanceof Integer) |
| && ((Integer) instance.getMarkerKey()).intValue() == 54321 |
| && (instance.getMarkerValue() instanceof String) && ((String) instance.getMarkerValue()) |
| .equals("LocalMarker"))) { |
| instance.setMarker(TypeCheckedObjectsTestSetValidator.markerKey, |
| TypeCheckedObjectsTestSetValidator.markerValue); |
| } else { |
| throw new SerializationException( |
| "Incorrect markers in TypeCheckedGenericClass server deserialization. " |
| + "Custom instantiate probably not called."); |
| } |
| |
| try { |
| Field declField = TypeCheckedGenericClass.class.getField("hashField"); |
| Type declGenericType = declField.getGenericType(); |
| SerializabilityUtil.resolveTypes(declGenericType, resolvedTypes); |
| instance.hashField = (HashMap) streamReader.readObject(declGenericType, resolvedTypes); |
| SerializabilityUtil.releaseTypes(declGenericType, resolvedTypes); |
| } catch (Exception e) { |
| throw new SerializationException(e); |
| } |
| } |
| |
| @SuppressWarnings("unchecked") |
| public static void deserialize(ServerSerializationStreamReader streamReader, |
| TypeCheckedGenericClass instance) throws SerializationException { |
| Object junkKey = streamReader.readObject(); |
| Object junkValue = streamReader.readObject(); |
| |
| /* |
| * If deserializing a superclass we will not have been instantiated using |
| * the custom instantiator, so skip the checks for correct markers. |
| */ |
| if (instance.getClass() != TypeCheckedGenericClass.class |
| || ((instance.getMarkerKey() instanceof Integer) |
| && ((Integer) instance.getMarkerKey()).intValue() == 54321 |
| && (instance.getMarkerValue() instanceof String) && ((String) instance.getMarkerValue()) |
| .equals("LocalMarker"))) { |
| instance.setMarker(TypeCheckedObjectsTestSetValidator.markerKey, |
| TypeCheckedObjectsTestSetValidator.markerValue); |
| } else { |
| throw new SerializationException( |
| "Incorrect markers in TypeCheckedGenericClass server deserialization. " |
| + "Custom instantiate probably not called."); |
| } |
| |
| instance.hashField = (HashMap) streamReader.readObject(); |
| } |
| |
| public static TypeCheckedGenericClass instantiateChecked( |
| ServerSerializationStreamReader streamReader, Type[] expectedParameterTypes, |
| DequeMap<TypeVariable<?>, Type> resolvedTypes) { |
| TypeCheckedGenericClass<Integer, String> result = |
| new TypeCheckedGenericClass<Integer, String>(); |
| result.setMarker(54321, "LocalMarker"); |
| return result; |
| } |
| |
| public static TypeCheckedGenericClass instantiate( |
| ServerSerializationStreamReader streamReader) { |
| TypeCheckedGenericClass<Integer, String> result = |
| new TypeCheckedGenericClass<Integer, String>(); |
| result.setMarker(54321, "LocalMarker"); |
| return result; |
| } |
| } |