01: /*
02: * Copyright 2007 Google Inc.
03: *
04: * Licensed under the Apache License, Version 2.0 (the "License"); you may not
05: * use this file except in compliance with the License. You may obtain a copy of
06: * the License at
07: *
08: * http://www.apache.org/licenses/LICENSE-2.0
09: *
10: * Unless required by applicable law or agreed to in writing, software
11: * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
12: * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13: * License for the specific language governing permissions and limitations under
14: * the License.
15: */
16: package com.google.gwt.user.client.rpc.impl;
17:
18: import com.google.gwt.user.client.rpc.SerializationException;
19: import com.google.gwt.user.client.rpc.SerializationStreamReader;
20:
21: import java.util.ArrayList;
22:
23: /**
24: * Base class for the client and server serialization streams. This class
25: * handles the basic serialization and desirialization formatting for primitive
26: * types since these are common between the client and the server.
27: */
28: public abstract class AbstractSerializationStreamReader extends
29: AbstractSerializationStream implements
30: SerializationStreamReader {
31:
32: private ArrayList<Object> seenArray = new ArrayList<Object>();
33:
34: public void prepareToRead(String encoded)
35: throws SerializationException {
36: seenArray.clear();
37:
38: // Read the stream version number
39: //
40: setVersion(readInt());
41:
42: // Read the flags from the stream
43: //
44: setFlags(readInt());
45: }
46:
47: public final Object readObject() throws SerializationException {
48: int token = readInt();
49:
50: if (token < 0) {
51: // Negative means a previous object
52: // Transform negative 1-based to 0-based.
53: return seenArray.get(-(token + 1));
54: }
55:
56: // Positive means a new object
57: String typeSignature = getString(token);
58: if (typeSignature == null) {
59: // a null string means a null instance
60: return null;
61: }
62:
63: return deserialize(typeSignature);
64: }
65:
66: /**
67: * Deserialize an object with the given type signature.
68: *
69: * @param typeSignature the type signature to deserialize
70: * @return the deserialized object
71: * @throws SerializationException
72: */
73: protected abstract Object deserialize(String typeSignature)
74: throws SerializationException;
75:
76: /**
77: * Gets a string out of the string table.
78: *
79: * @param index the index of the string to get
80: * @return the string
81: */
82: protected abstract String getString(int index);
83:
84: protected final void rememberDecodedObject(Object o) {
85: seenArray.add(o);
86: }
87:
88: }
|