blob: 9de6d8cde5b6f8735374038038fa20c6534a5441 [file] [log] [blame]
Yuta HIGUCHI03fec1f2014-10-03 09:13:50 -07001package org.onlab.onos.store.serializers;
2
3import java.net.URI;
4import java.util.ArrayList;
Madan Jampani53e44e62014-10-07 12:39:51 -07005import java.util.Arrays;
Yuta HIGUCHI03fec1f2014-10-03 09:13:50 -07006import java.util.HashMap;
7
8import org.onlab.onos.cluster.ControllerNode;
9import org.onlab.onos.cluster.DefaultControllerNode;
Yuta HIGUCHI03fec1f2014-10-03 09:13:50 -070010import org.onlab.onos.cluster.NodeId;
Yuta HIGUCHI40d01772014-10-21 00:08:44 -070011import org.onlab.onos.cluster.RoleInfo;
Yuta HIGUCHI80912e62014-10-12 00:15:47 -070012import org.onlab.onos.mastership.MastershipTerm;
Yuta HIGUCHI03fec1f2014-10-03 09:13:50 -070013import org.onlab.onos.net.ConnectPoint;
14import org.onlab.onos.net.DefaultAnnotations;
15import org.onlab.onos.net.DefaultDevice;
16import org.onlab.onos.net.DefaultLink;
17import org.onlab.onos.net.DefaultPort;
18import org.onlab.onos.net.Device;
19import org.onlab.onos.net.DeviceId;
20import org.onlab.onos.net.Element;
Yuta HIGUCHI5fa3dc02014-10-15 17:08:13 -070021import org.onlab.onos.net.HostId;
22import org.onlab.onos.net.HostLocation;
Yuta HIGUCHI03fec1f2014-10-03 09:13:50 -070023import org.onlab.onos.net.Link;
24import org.onlab.onos.net.LinkKey;
Yuta HIGUCHI03fec1f2014-10-03 09:13:50 -070025import org.onlab.onos.net.Port;
26import org.onlab.onos.net.PortNumber;
Madan Jampani53e44e62014-10-07 12:39:51 -070027import org.onlab.onos.net.device.DefaultDeviceDescription;
28import org.onlab.onos.net.device.DefaultPortDescription;
Madan Jampani38b250d2014-10-17 11:02:38 -070029import org.onlab.onos.net.flow.DefaultFlowRule;
Yuta HIGUCHI2809bf32014-10-20 22:44:12 -070030import org.onlab.onos.net.flow.DefaultTrafficSelector;
Yuta HIGUCHI85d58d12014-10-20 23:59:44 -070031import org.onlab.onos.net.flow.DefaultTrafficTreatment;
Yuta HIGUCHI2fcfde92014-10-20 18:37:14 -070032import org.onlab.onos.net.flow.FlowId;
Yuta HIGUCHI85d58d12014-10-20 23:59:44 -070033import org.onlab.onos.net.flow.criteria.Criteria;
34import org.onlab.onos.net.flow.criteria.Criterion;
35import org.onlab.onos.net.flow.instructions.Instructions;
Yuta HIGUCHI5fa3dc02014-10-15 17:08:13 -070036import org.onlab.onos.net.host.DefaultHostDescription;
37import org.onlab.onos.net.host.HostDescription;
Madan Jampani2ff05592014-10-10 15:42:47 -070038import org.onlab.onos.net.link.DefaultLinkDescription;
Yuta HIGUCHI03fec1f2014-10-03 09:13:50 -070039import org.onlab.onos.net.provider.ProviderId;
Yuta HIGUCHI9ee60f62014-10-09 10:00:01 -070040import org.onlab.onos.store.Timestamp;
alshabib7911a052014-10-16 17:49:37 -070041import org.onlab.packet.ChassisId;
Yuta HIGUCHI03fec1f2014-10-03 09:13:50 -070042import org.onlab.packet.IpAddress;
43import org.onlab.packet.IpPrefix;
Yuta HIGUCHI5fa3dc02014-10-15 17:08:13 -070044import org.onlab.packet.MacAddress;
45import org.onlab.packet.VlanId;
Yuta HIGUCHI8d143d22014-10-19 23:15:09 -070046import org.onlab.util.KryoNamespace;
Yuta HIGUCHI03fec1f2014-10-03 09:13:50 -070047
Yuta HIGUCHI47c40882014-10-10 18:44:37 -070048import com.google.common.collect.ImmutableList;
49import com.google.common.collect.ImmutableMap;
Yuta HIGUCHI5fa3dc02014-10-15 17:08:13 -070050import com.google.common.collect.ImmutableSet;
Yuta HIGUCHI47c40882014-10-10 18:44:37 -070051
Yuta HIGUCHI8d143d22014-10-19 23:15:09 -070052public final class KryoNamespaces {
Yuta HIGUCHI03fec1f2014-10-03 09:13:50 -070053
54 /**
Yuta HIGUCHI8d143d22014-10-19 23:15:09 -070055 * KryoNamespace which can serialize ON.lab misc classes.
Yuta HIGUCHI03fec1f2014-10-03 09:13:50 -070056 */
Yuta HIGUCHI8d143d22014-10-19 23:15:09 -070057 public static final KryoNamespace MISC = KryoNamespace.newBuilder()
Yuta HIGUCHI03fec1f2014-10-03 09:13:50 -070058 .register(IpPrefix.class, new IpPrefixSerializer())
59 .register(IpAddress.class, new IpAddressSerializer())
Yuta HIGUCHI5fa3dc02014-10-15 17:08:13 -070060 .register(MacAddress.class, new MacAddressSerializer())
61 .register(VlanId.class)
Yuta HIGUCHI03fec1f2014-10-03 09:13:50 -070062 .build();
63
64 // TODO: Populate other classes
65 /**
Yuta HIGUCHI8d143d22014-10-19 23:15:09 -070066 * KryoNamespace which can serialize API bundle classes.
Yuta HIGUCHI03fec1f2014-10-03 09:13:50 -070067 */
Yuta HIGUCHI8d143d22014-10-19 23:15:09 -070068 public static final KryoNamespace API = KryoNamespace.newBuilder()
Yuta HIGUCHI03fec1f2014-10-03 09:13:50 -070069 .register(MISC)
Yuta HIGUCHI47c40882014-10-10 18:44:37 -070070 .register(ImmutableMap.class, new ImmutableMapSerializer())
71 .register(ImmutableList.class, new ImmutableListSerializer())
Yuta HIGUCHI5fa3dc02014-10-15 17:08:13 -070072 .register(ImmutableSet.class, new ImmutableSetSerializer())
Yuta HIGUCHI03fec1f2014-10-03 09:13:50 -070073 .register(
74 //
75 ArrayList.class,
Madan Jampani53e44e62014-10-07 12:39:51 -070076 Arrays.asList().getClass(),
Yuta HIGUCHI03fec1f2014-10-03 09:13:50 -070077 HashMap.class,
78 //
Yuta HIGUCHI47c40882014-10-10 18:44:37 -070079 //
Yuta HIGUCHI03fec1f2014-10-03 09:13:50 -070080 ControllerNode.State.class,
81 Device.Type.class,
alshabib7911a052014-10-16 17:49:37 -070082 ChassisId.class,
Yuta HIGUCHI03fec1f2014-10-03 09:13:50 -070083 DefaultAnnotations.class,
84 DefaultControllerNode.class,
85 DefaultDevice.class,
Madan Jampani53e44e62014-10-07 12:39:51 -070086 DefaultDeviceDescription.class,
Madan Jampani2ff05592014-10-10 15:42:47 -070087 DefaultLinkDescription.class,
Yuta HIGUCHI03fec1f2014-10-03 09:13:50 -070088 Port.class,
Madan Jampani53e44e62014-10-07 12:39:51 -070089 DefaultPortDescription.class,
Yuta HIGUCHI03fec1f2014-10-03 09:13:50 -070090 Element.class,
Yuta HIGUCHI9ee60f62014-10-09 10:00:01 -070091 Link.Type.class,
Yuta HIGUCHI5fa3dc02014-10-15 17:08:13 -070092 Timestamp.class,
93 HostId.class,
94 HostDescription.class,
Madan Jampani38b250d2014-10-17 11:02:38 -070095 DefaultHostDescription.class,
Yuta HIGUCHI2fcfde92014-10-20 18:37:14 -070096 DefaultFlowRule.class,
Yuta HIGUCHI2809bf32014-10-20 22:44:12 -070097 FlowId.class,
Yuta HIGUCHI85d58d12014-10-20 23:59:44 -070098 DefaultTrafficSelector.class,
99 Criteria.PortCriterion.class,
100 Criteria.EthCriterion.class,
101 Criteria.EthTypeCriterion.class,
102 Criteria.IPCriterion.class,
103 Criteria.IPProtocolCriterion.class,
104 Criteria.VlanIdCriterion.class,
105 Criteria.VlanPcpCriterion.class,
106 Criteria.TcpPortCriterion.class,
107 Criterion.class,
108 Criterion.Type.class,
109 DefaultTrafficTreatment.class,
110 Instructions.DropInstruction.class,
Yuta HIGUCHI40d01772014-10-21 00:08:44 -0700111 Instructions.OutputInstruction.class,
112 RoleInfo.class
Yuta HIGUCHI03fec1f2014-10-03 09:13:50 -0700113 )
114 .register(URI.class, new URISerializer())
115 .register(NodeId.class, new NodeIdSerializer())
116 .register(ProviderId.class, new ProviderIdSerializer())
117 .register(DeviceId.class, new DeviceIdSerializer())
118 .register(PortNumber.class, new PortNumberSerializer())
119 .register(DefaultPort.class, new DefaultPortSerializer())
120 .register(LinkKey.class, new LinkKeySerializer())
121 .register(ConnectPoint.class, new ConnectPointSerializer())
122 .register(DefaultLink.class, new DefaultLinkSerializer())
Yuta HIGUCHIfa891c92014-10-09 15:21:40 -0700123 .register(MastershipTerm.class, new MastershipTermSerializer())
Yuta HIGUCHI5fa3dc02014-10-15 17:08:13 -0700124 .register(HostLocation.class, new HostLocationSerializer())
Yuta HIGUCHI03fec1f2014-10-03 09:13:50 -0700125
126 .build();
127
128
129 // not to be instantiated
Yuta HIGUCHI8d143d22014-10-19 23:15:09 -0700130 private KryoNamespaces() {}
Yuta HIGUCHI03fec1f2014-10-03 09:13:50 -0700131}