blob: 4a60eb82b30628011220ca9f4e4498574092c032 [file] [log] [blame]
Yuta HIGUCHI24a086b2014-09-21 23:28:41 -07001package org.onlab.onos.store.device.impl;
2
3import java.util.ArrayList;
4import java.util.Collection;
5
6import org.onlab.onos.net.DefaultPort;
7import org.onlab.onos.net.Element;
8import org.onlab.onos.net.PortNumber;
9import org.onlab.packet.IpPrefix;
10
11import com.esotericsoftware.kryo.Kryo;
12import com.esotericsoftware.kryo.Serializer;
13import com.esotericsoftware.kryo.io.Input;
14import com.esotericsoftware.kryo.io.Output;
15import com.esotericsoftware.kryo.serializers.CollectionSerializer;
16import com.google.common.collect.ImmutableSet;
17
18// TODO move to util, etc.
19public final class DefaultPortSerializer extends
20 Serializer<DefaultPort> {
21
22 private final CollectionSerializer ipAddrSerializer
23 = new CollectionSerializer(IpPrefix.class,
24 new IpPrefixSerializer(), false);
25
26 public DefaultPortSerializer() {
27 // non-null, immutable
28 super(false, true);
29 }
30
31 @Override
32 public void write(Kryo kryo, Output output, DefaultPort object) {
33 kryo.writeClassAndObject(output, object.element());
34 kryo.writeObject(output, object.number());
35 output.writeBoolean(object.isEnabled());
36 kryo.writeObject(output, object.ipAddresses(),
37 ipAddrSerializer);
38 }
39
40 @Override
41 public DefaultPort read(Kryo kryo, Input input,
42 Class<DefaultPort> type) {
43 Element element = (Element) kryo.readClassAndObject(input);
44 PortNumber number = kryo.readObject(input, PortNumber.class);
45 boolean isEnabled = input.readBoolean();
46 @SuppressWarnings("unchecked")
47 Collection<IpPrefix> ipAddresses = kryo.readObject(
48 input, ArrayList.class, ipAddrSerializer);
49
50 return new DefaultPort(element, number, isEnabled,
51 ImmutableSet.copyOf(ipAddresses));
52 }
53}