• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2009 The Guava Authors
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package com.google.common.collect;
18 
19 import com.google.gwt.user.client.rpc.SerializationException;
20 import com.google.gwt.user.client.rpc.SerializationStreamReader;
21 import com.google.gwt.user.client.rpc.SerializationStreamWriter;
22 
23 import java.util.Collection;
24 import java.util.LinkedHashMap;
25 import java.util.Map;
26 
27 /**
28  * This class implements the GWT serialization of {@link LinkedHashMultimap}.
29  *
30  * @author Chris Povirk
31  */
32 public class LinkedHashMultimap_CustomFieldSerializer {
33 
deserialize(SerializationStreamReader in, LinkedHashMultimap<?, ?> out)34   public static void deserialize(SerializationStreamReader in,
35       LinkedHashMultimap<?, ?> out) {
36   }
37 
instantiate( SerializationStreamReader stream)38   public static LinkedHashMultimap<Object, Object> instantiate(
39       SerializationStreamReader stream) throws SerializationException {
40     LinkedHashMultimap<Object, Object> multimap = LinkedHashMultimap.create();
41 
42     multimap.valueSetCapacity = stream.readInt();
43     int distinctKeys = stream.readInt();
44     Map<Object, Collection<Object>> map =
45         new LinkedHashMap<Object, Collection<Object>>(Maps.capacity(distinctKeys));
46     for (int i = 0; i < distinctKeys; i++) {
47       Object key = stream.readObject();
48       map.put(key, multimap.createCollection(key));
49     }
50     int entries = stream.readInt();
51     for (int i = 0; i < entries; i++) {
52       Object key = stream.readObject();
53       Object value = stream.readObject();
54       map.get(key).add(value);
55     }
56     multimap.setMap(map);
57 
58     return multimap;
59   }
60 
serialize(SerializationStreamWriter stream, LinkedHashMultimap<?, ?> multimap)61   public static void serialize(SerializationStreamWriter stream,
62       LinkedHashMultimap<?, ?> multimap) throws SerializationException {
63     stream.writeInt(multimap.valueSetCapacity);
64     stream.writeInt(multimap.keySet().size());
65     for (Object key : multimap.keySet()) {
66       stream.writeObject(key);
67     }
68     stream.writeInt(multimap.size());
69     for (Map.Entry<?, ?> entry : multimap.entries()) {
70       stream.writeObject(entry.getKey());
71       stream.writeObject(entry.getValue());
72     }
73   }
74 }
75