10888a09821a98ac0680fad765217302858e70fa4Paul Duffin/* 20888a09821a98ac0680fad765217302858e70fa4Paul Duffin * Copyright (C) 2009 The Guava Authors 30888a09821a98ac0680fad765217302858e70fa4Paul Duffin * 40888a09821a98ac0680fad765217302858e70fa4Paul Duffin * Licensed under the Apache License, Version 2.0 (the "License"); 50888a09821a98ac0680fad765217302858e70fa4Paul Duffin * you may not use this file except in compliance with the License. 60888a09821a98ac0680fad765217302858e70fa4Paul Duffin * You may obtain a copy of the License at 70888a09821a98ac0680fad765217302858e70fa4Paul Duffin * 80888a09821a98ac0680fad765217302858e70fa4Paul Duffin * http://www.apache.org/licenses/LICENSE-2.0 90888a09821a98ac0680fad765217302858e70fa4Paul Duffin * 100888a09821a98ac0680fad765217302858e70fa4Paul Duffin * Unless required by applicable law or agreed to in writing, software 110888a09821a98ac0680fad765217302858e70fa4Paul Duffin * distributed under the License is distributed on an "AS IS" BASIS, 120888a09821a98ac0680fad765217302858e70fa4Paul Duffin * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 130888a09821a98ac0680fad765217302858e70fa4Paul Duffin * See the License for the specific language governing permissions and 140888a09821a98ac0680fad765217302858e70fa4Paul Duffin * limitations under the License. 150888a09821a98ac0680fad765217302858e70fa4Paul Duffin */ 160888a09821a98ac0680fad765217302858e70fa4Paul Duffin 170888a09821a98ac0680fad765217302858e70fa4Paul Duffinpackage com.google.common.collect; 180888a09821a98ac0680fad765217302858e70fa4Paul Duffin 190888a09821a98ac0680fad765217302858e70fa4Paul Duffinimport com.google.gwt.user.client.rpc.SerializationException; 200888a09821a98ac0680fad765217302858e70fa4Paul Duffinimport com.google.gwt.user.client.rpc.SerializationStreamReader; 210888a09821a98ac0680fad765217302858e70fa4Paul Duffinimport com.google.gwt.user.client.rpc.SerializationStreamWriter; 220888a09821a98ac0680fad765217302858e70fa4Paul Duffin 230888a09821a98ac0680fad765217302858e70fa4Paul Duffinimport java.util.Collection; 240888a09821a98ac0680fad765217302858e70fa4Paul Duffinimport java.util.LinkedHashMap; 250888a09821a98ac0680fad765217302858e70fa4Paul Duffinimport java.util.Map; 260888a09821a98ac0680fad765217302858e70fa4Paul Duffin 270888a09821a98ac0680fad765217302858e70fa4Paul Duffin/** 280888a09821a98ac0680fad765217302858e70fa4Paul Duffin * This class implements the GWT serialization of {@link LinkedHashMultimap}. 290888a09821a98ac0680fad765217302858e70fa4Paul Duffin * 300888a09821a98ac0680fad765217302858e70fa4Paul Duffin * @author Chris Povirk 310888a09821a98ac0680fad765217302858e70fa4Paul Duffin */ 320888a09821a98ac0680fad765217302858e70fa4Paul Duffinpublic class LinkedHashMultimap_CustomFieldSerializer { 330888a09821a98ac0680fad765217302858e70fa4Paul Duffin 340888a09821a98ac0680fad765217302858e70fa4Paul Duffin public static void deserialize(SerializationStreamReader in, 350888a09821a98ac0680fad765217302858e70fa4Paul Duffin LinkedHashMultimap<?, ?> out) { 360888a09821a98ac0680fad765217302858e70fa4Paul Duffin } 370888a09821a98ac0680fad765217302858e70fa4Paul Duffin 380888a09821a98ac0680fad765217302858e70fa4Paul Duffin public static LinkedHashMultimap<Object, Object> instantiate( 390888a09821a98ac0680fad765217302858e70fa4Paul Duffin SerializationStreamReader stream) throws SerializationException { 400888a09821a98ac0680fad765217302858e70fa4Paul Duffin LinkedHashMultimap<Object, Object> multimap = LinkedHashMultimap.create(); 410888a09821a98ac0680fad765217302858e70fa4Paul Duffin 420888a09821a98ac0680fad765217302858e70fa4Paul Duffin multimap.valueSetCapacity = stream.readInt(); 430888a09821a98ac0680fad765217302858e70fa4Paul Duffin int distinctKeys = stream.readInt(); 440888a09821a98ac0680fad765217302858e70fa4Paul Duffin Map<Object, Collection<Object>> map = 450888a09821a98ac0680fad765217302858e70fa4Paul Duffin new LinkedHashMap<Object, Collection<Object>>(Maps.capacity(distinctKeys)); 460888a09821a98ac0680fad765217302858e70fa4Paul Duffin for (int i = 0; i < distinctKeys; i++) { 470888a09821a98ac0680fad765217302858e70fa4Paul Duffin Object key = stream.readObject(); 480888a09821a98ac0680fad765217302858e70fa4Paul Duffin map.put(key, multimap.createCollection(key)); 490888a09821a98ac0680fad765217302858e70fa4Paul Duffin } 500888a09821a98ac0680fad765217302858e70fa4Paul Duffin int entries = stream.readInt(); 510888a09821a98ac0680fad765217302858e70fa4Paul Duffin for (int i = 0; i < entries; i++) { 520888a09821a98ac0680fad765217302858e70fa4Paul Duffin Object key = stream.readObject(); 530888a09821a98ac0680fad765217302858e70fa4Paul Duffin Object value = stream.readObject(); 540888a09821a98ac0680fad765217302858e70fa4Paul Duffin map.get(key).add(value); 550888a09821a98ac0680fad765217302858e70fa4Paul Duffin } 560888a09821a98ac0680fad765217302858e70fa4Paul Duffin multimap.setMap(map); 570888a09821a98ac0680fad765217302858e70fa4Paul Duffin 580888a09821a98ac0680fad765217302858e70fa4Paul Duffin return multimap; 590888a09821a98ac0680fad765217302858e70fa4Paul Duffin } 600888a09821a98ac0680fad765217302858e70fa4Paul Duffin 610888a09821a98ac0680fad765217302858e70fa4Paul Duffin public static void serialize(SerializationStreamWriter stream, 620888a09821a98ac0680fad765217302858e70fa4Paul Duffin LinkedHashMultimap<?, ?> multimap) throws SerializationException { 630888a09821a98ac0680fad765217302858e70fa4Paul Duffin stream.writeInt(multimap.valueSetCapacity); 640888a09821a98ac0680fad765217302858e70fa4Paul Duffin stream.writeInt(multimap.keySet().size()); 650888a09821a98ac0680fad765217302858e70fa4Paul Duffin for (Object key : multimap.keySet()) { 660888a09821a98ac0680fad765217302858e70fa4Paul Duffin stream.writeObject(key); 670888a09821a98ac0680fad765217302858e70fa4Paul Duffin } 680888a09821a98ac0680fad765217302858e70fa4Paul Duffin stream.writeInt(multimap.size()); 690888a09821a98ac0680fad765217302858e70fa4Paul Duffin for (Map.Entry<?, ?> entry : multimap.entries()) { 700888a09821a98ac0680fad765217302858e70fa4Paul Duffin stream.writeObject(entry.getKey()); 710888a09821a98ac0680fad765217302858e70fa4Paul Duffin stream.writeObject(entry.getValue()); 720888a09821a98ac0680fad765217302858e70fa4Paul Duffin } 730888a09821a98ac0680fad765217302858e70fa4Paul Duffin } 740888a09821a98ac0680fad765217302858e70fa4Paul Duffin} 75