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.Map; 250888a09821a98ac0680fad765217302858e70fa4Paul Duffin 260888a09821a98ac0680fad765217302858e70fa4Paul Duffin/** 270888a09821a98ac0680fad765217302858e70fa4Paul Duffin * This class contains static utility methods for writing {@code Multimap} GWT 280888a09821a98ac0680fad765217302858e70fa4Paul Duffin * field serializers. Serializers should delegate to 290888a09821a98ac0680fad765217302858e70fa4Paul Duffin * {@link #serialize(SerializationStreamWriter, Multimap)} and to either 300888a09821a98ac0680fad765217302858e70fa4Paul Duffin * {@link #instantiate(SerializationStreamReader, ImmutableMultimap.Builder)} or 310888a09821a98ac0680fad765217302858e70fa4Paul Duffin * {@link #populate(SerializationStreamReader, Multimap)}. 320888a09821a98ac0680fad765217302858e70fa4Paul Duffin * 330888a09821a98ac0680fad765217302858e70fa4Paul Duffin * @author Chris Povirk 340888a09821a98ac0680fad765217302858e70fa4Paul Duffin */ 350888a09821a98ac0680fad765217302858e70fa4Paul Duffinpublic final class Multimap_CustomFieldSerializerBase { 360888a09821a98ac0680fad765217302858e70fa4Paul Duffin 370888a09821a98ac0680fad765217302858e70fa4Paul Duffin static ImmutableMultimap<Object, Object> instantiate( 380888a09821a98ac0680fad765217302858e70fa4Paul Duffin SerializationStreamReader reader, 390888a09821a98ac0680fad765217302858e70fa4Paul Duffin ImmutableMultimap.Builder<Object, Object> builder) 400888a09821a98ac0680fad765217302858e70fa4Paul Duffin throws SerializationException { 410888a09821a98ac0680fad765217302858e70fa4Paul Duffin int keyCount = reader.readInt(); 420888a09821a98ac0680fad765217302858e70fa4Paul Duffin for (int i = 0; i < keyCount; ++i) { 430888a09821a98ac0680fad765217302858e70fa4Paul Duffin Object key = reader.readObject(); 440888a09821a98ac0680fad765217302858e70fa4Paul Duffin int valueCount = reader.readInt(); 450888a09821a98ac0680fad765217302858e70fa4Paul Duffin for (int j = 0; j < valueCount; ++j) { 460888a09821a98ac0680fad765217302858e70fa4Paul Duffin Object value = reader.readObject(); 470888a09821a98ac0680fad765217302858e70fa4Paul Duffin builder.put(key, value); 480888a09821a98ac0680fad765217302858e70fa4Paul Duffin } 490888a09821a98ac0680fad765217302858e70fa4Paul Duffin } 500888a09821a98ac0680fad765217302858e70fa4Paul Duffin return builder.build(); 510888a09821a98ac0680fad765217302858e70fa4Paul Duffin } 520888a09821a98ac0680fad765217302858e70fa4Paul Duffin 530888a09821a98ac0680fad765217302858e70fa4Paul Duffin public static Multimap<Object, Object> populate( 540888a09821a98ac0680fad765217302858e70fa4Paul Duffin SerializationStreamReader reader, Multimap<Object, Object> multimap) 550888a09821a98ac0680fad765217302858e70fa4Paul Duffin throws SerializationException { 560888a09821a98ac0680fad765217302858e70fa4Paul Duffin int keyCount = reader.readInt(); 570888a09821a98ac0680fad765217302858e70fa4Paul Duffin for (int i = 0; i < keyCount; ++i) { 580888a09821a98ac0680fad765217302858e70fa4Paul Duffin Object key = reader.readObject(); 590888a09821a98ac0680fad765217302858e70fa4Paul Duffin int valueCount = reader.readInt(); 600888a09821a98ac0680fad765217302858e70fa4Paul Duffin for (int j = 0; j < valueCount; ++j) { 610888a09821a98ac0680fad765217302858e70fa4Paul Duffin Object value = reader.readObject(); 620888a09821a98ac0680fad765217302858e70fa4Paul Duffin multimap.put(key, value); 630888a09821a98ac0680fad765217302858e70fa4Paul Duffin } 640888a09821a98ac0680fad765217302858e70fa4Paul Duffin } 650888a09821a98ac0680fad765217302858e70fa4Paul Duffin return multimap; 660888a09821a98ac0680fad765217302858e70fa4Paul Duffin } 670888a09821a98ac0680fad765217302858e70fa4Paul Duffin 680888a09821a98ac0680fad765217302858e70fa4Paul Duffin public static void serialize( 690888a09821a98ac0680fad765217302858e70fa4Paul Duffin SerializationStreamWriter writer, Multimap<?, ?> instance) 700888a09821a98ac0680fad765217302858e70fa4Paul Duffin throws SerializationException { 710888a09821a98ac0680fad765217302858e70fa4Paul Duffin writer.writeInt(instance.asMap().size()); 720888a09821a98ac0680fad765217302858e70fa4Paul Duffin for (Map.Entry<?, ? extends Collection<?>> entry 730888a09821a98ac0680fad765217302858e70fa4Paul Duffin : instance.asMap().entrySet()) { 740888a09821a98ac0680fad765217302858e70fa4Paul Duffin writer.writeObject(entry.getKey()); 750888a09821a98ac0680fad765217302858e70fa4Paul Duffin writer.writeInt(entry.getValue().size()); 760888a09821a98ac0680fad765217302858e70fa4Paul Duffin for (Object value : entry.getValue()) { 770888a09821a98ac0680fad765217302858e70fa4Paul Duffin writer.writeObject(value); 780888a09821a98ac0680fad765217302858e70fa4Paul Duffin } 790888a09821a98ac0680fad765217302858e70fa4Paul Duffin } 800888a09821a98ac0680fad765217302858e70fa4Paul Duffin } 810888a09821a98ac0680fad765217302858e70fa4Paul Duffin 820888a09821a98ac0680fad765217302858e70fa4Paul Duffin private Multimap_CustomFieldSerializerBase() {} 830888a09821a98ac0680fad765217302858e70fa4Paul Duffin} 84