blob: 7fddb01b2a3082c304863b6a36348c436c1206d6 [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;
alshabib3d643ec2014-10-22 18:33:00 -07007import java.util.HashSet;
Yuta HIGUCHI03fec1f2014-10-03 09:13:50 -07008
9import org.onlab.onos.cluster.ControllerNode;
10import org.onlab.onos.cluster.DefaultControllerNode;
Yuta HIGUCHI03fec1f2014-10-03 09:13:50 -070011import org.onlab.onos.cluster.NodeId;
Yuta HIGUCHI40d01772014-10-21 00:08:44 -070012import org.onlab.onos.cluster.RoleInfo;
Yuta HIGUCHI80912e62014-10-12 00:15:47 -070013import org.onlab.onos.mastership.MastershipTerm;
Yuta HIGUCHI03fec1f2014-10-03 09:13:50 -070014import org.onlab.onos.net.ConnectPoint;
15import org.onlab.onos.net.DefaultAnnotations;
16import org.onlab.onos.net.DefaultDevice;
17import org.onlab.onos.net.DefaultLink;
18import org.onlab.onos.net.DefaultPort;
19import org.onlab.onos.net.Device;
20import org.onlab.onos.net.DeviceId;
21import org.onlab.onos.net.Element;
Yuta HIGUCHI5fa3dc02014-10-15 17:08:13 -070022import org.onlab.onos.net.HostId;
23import org.onlab.onos.net.HostLocation;
Yuta HIGUCHI03fec1f2014-10-03 09:13:50 -070024import org.onlab.onos.net.Link;
25import org.onlab.onos.net.LinkKey;
Yuta HIGUCHI03fec1f2014-10-03 09:13:50 -070026import org.onlab.onos.net.Port;
27import org.onlab.onos.net.PortNumber;
Madan Jampani53e44e62014-10-07 12:39:51 -070028import org.onlab.onos.net.device.DefaultDeviceDescription;
29import org.onlab.onos.net.device.DefaultPortDescription;
Madan Jampani117aaae2014-10-23 10:04:05 -070030import org.onlab.onos.net.flow.DefaultFlowEntry;
Madan Jampani38b250d2014-10-17 11:02:38 -070031import org.onlab.onos.net.flow.DefaultFlowRule;
Yuta HIGUCHI2809bf32014-10-20 22:44:12 -070032import org.onlab.onos.net.flow.DefaultTrafficSelector;
Yuta HIGUCHI85d58d12014-10-20 23:59:44 -070033import org.onlab.onos.net.flow.DefaultTrafficTreatment;
alshabibf6c2ede2014-10-22 23:31:50 -070034import org.onlab.onos.net.flow.FlowEntry;
Yuta HIGUCHI2fcfde92014-10-20 18:37:14 -070035import org.onlab.onos.net.flow.FlowId;
Madan Jampani117aaae2014-10-23 10:04:05 -070036import org.onlab.onos.net.flow.StoredFlowEntry;
Yuta HIGUCHI85d58d12014-10-20 23:59:44 -070037import org.onlab.onos.net.flow.criteria.Criteria;
38import org.onlab.onos.net.flow.criteria.Criterion;
39import org.onlab.onos.net.flow.instructions.Instructions;
Yuta HIGUCHI5fa3dc02014-10-15 17:08:13 -070040import org.onlab.onos.net.host.DefaultHostDescription;
41import org.onlab.onos.net.host.HostDescription;
Madan Jampani2ff05592014-10-10 15:42:47 -070042import org.onlab.onos.net.link.DefaultLinkDescription;
Yuta HIGUCHI03fec1f2014-10-03 09:13:50 -070043import org.onlab.onos.net.provider.ProviderId;
Yuta HIGUCHI9ee60f62014-10-09 10:00:01 -070044import org.onlab.onos.store.Timestamp;
alshabib7911a052014-10-16 17:49:37 -070045import org.onlab.packet.ChassisId;
Yuta HIGUCHI03fec1f2014-10-03 09:13:50 -070046import org.onlab.packet.IpAddress;
47import org.onlab.packet.IpPrefix;
Yuta HIGUCHI5fa3dc02014-10-15 17:08:13 -070048import org.onlab.packet.MacAddress;
49import org.onlab.packet.VlanId;
Yuta HIGUCHI8d143d22014-10-19 23:15:09 -070050import org.onlab.util.KryoNamespace;
Yuta HIGUCHI03fec1f2014-10-03 09:13:50 -070051
Yuta HIGUCHI47c40882014-10-10 18:44:37 -070052import com.google.common.collect.ImmutableList;
53import com.google.common.collect.ImmutableMap;
Yuta HIGUCHI5fa3dc02014-10-15 17:08:13 -070054import com.google.common.collect.ImmutableSet;
Yuta HIGUCHI47c40882014-10-10 18:44:37 -070055
Yuta HIGUCHI8d143d22014-10-19 23:15:09 -070056public final class KryoNamespaces {
Yuta HIGUCHI03fec1f2014-10-03 09:13:50 -070057
58 /**
Yuta HIGUCHI8d143d22014-10-19 23:15:09 -070059 * KryoNamespace which can serialize ON.lab misc classes.
Yuta HIGUCHI03fec1f2014-10-03 09:13:50 -070060 */
Yuta HIGUCHI8d143d22014-10-19 23:15:09 -070061 public static final KryoNamespace MISC = KryoNamespace.newBuilder()
Yuta HIGUCHI03fec1f2014-10-03 09:13:50 -070062 .register(IpPrefix.class, new IpPrefixSerializer())
63 .register(IpAddress.class, new IpAddressSerializer())
Yuta HIGUCHI5fa3dc02014-10-15 17:08:13 -070064 .register(MacAddress.class, new MacAddressSerializer())
65 .register(VlanId.class)
Yuta HIGUCHI03fec1f2014-10-03 09:13:50 -070066 .build();
67
68 // TODO: Populate other classes
69 /**
Yuta HIGUCHI8d143d22014-10-19 23:15:09 -070070 * KryoNamespace which can serialize API bundle classes.
Yuta HIGUCHI03fec1f2014-10-03 09:13:50 -070071 */
Yuta HIGUCHI8d143d22014-10-19 23:15:09 -070072 public static final KryoNamespace API = KryoNamespace.newBuilder()
Yuta HIGUCHI03fec1f2014-10-03 09:13:50 -070073 .register(MISC)
Yuta HIGUCHI47c40882014-10-10 18:44:37 -070074 .register(ImmutableMap.class, new ImmutableMapSerializer())
75 .register(ImmutableList.class, new ImmutableListSerializer())
Yuta HIGUCHI5fa3dc02014-10-15 17:08:13 -070076 .register(ImmutableSet.class, new ImmutableSetSerializer())
Yuta HIGUCHI03fec1f2014-10-03 09:13:50 -070077 .register(
78 //
79 ArrayList.class,
Madan Jampani53e44e62014-10-07 12:39:51 -070080 Arrays.asList().getClass(),
Yuta HIGUCHI03fec1f2014-10-03 09:13:50 -070081 HashMap.class,
alshabib3d643ec2014-10-22 18:33:00 -070082 HashSet.class,
Yuta HIGUCHI03fec1f2014-10-03 09:13:50 -070083 //
Yuta HIGUCHI47c40882014-10-10 18:44:37 -070084 //
Yuta HIGUCHI03fec1f2014-10-03 09:13:50 -070085 ControllerNode.State.class,
86 Device.Type.class,
alshabib7911a052014-10-16 17:49:37 -070087 ChassisId.class,
Yuta HIGUCHI03fec1f2014-10-03 09:13:50 -070088 DefaultAnnotations.class,
89 DefaultControllerNode.class,
90 DefaultDevice.class,
Madan Jampani53e44e62014-10-07 12:39:51 -070091 DefaultDeviceDescription.class,
Madan Jampani2ff05592014-10-10 15:42:47 -070092 DefaultLinkDescription.class,
Yuta HIGUCHI03fec1f2014-10-03 09:13:50 -070093 Port.class,
Madan Jampani53e44e62014-10-07 12:39:51 -070094 DefaultPortDescription.class,
Yuta HIGUCHI03fec1f2014-10-03 09:13:50 -070095 Element.class,
Yuta HIGUCHI9ee60f62014-10-09 10:00:01 -070096 Link.Type.class,
Yuta HIGUCHI5fa3dc02014-10-15 17:08:13 -070097 Timestamp.class,
98 HostId.class,
99 HostDescription.class,
Madan Jampani38b250d2014-10-17 11:02:38 -0700100 DefaultHostDescription.class,
Madan Jampani117aaae2014-10-23 10:04:05 -0700101 DefaultFlowEntry.class,
102 StoredFlowEntry.class,
Yuta HIGUCHI2fcfde92014-10-20 18:37:14 -0700103 DefaultFlowRule.class,
alshabib3d643ec2014-10-22 18:33:00 -0700104 DefaultFlowEntry.class,
alshabibf6c2ede2014-10-22 23:31:50 -0700105 FlowEntry.FlowEntryState.class,
Yuta HIGUCHI2809bf32014-10-20 22:44:12 -0700106 FlowId.class,
Yuta HIGUCHI85d58d12014-10-20 23:59:44 -0700107 DefaultTrafficSelector.class,
108 Criteria.PortCriterion.class,
109 Criteria.EthCriterion.class,
110 Criteria.EthTypeCriterion.class,
111 Criteria.IPCriterion.class,
112 Criteria.IPProtocolCriterion.class,
113 Criteria.VlanIdCriterion.class,
114 Criteria.VlanPcpCriterion.class,
115 Criteria.TcpPortCriterion.class,
116 Criterion.class,
117 Criterion.Type.class,
118 DefaultTrafficTreatment.class,
119 Instructions.DropInstruction.class,
Yuta HIGUCHI40d01772014-10-21 00:08:44 -0700120 Instructions.OutputInstruction.class,
121 RoleInfo.class
Yuta HIGUCHI03fec1f2014-10-03 09:13:50 -0700122 )
123 .register(URI.class, new URISerializer())
124 .register(NodeId.class, new NodeIdSerializer())
125 .register(ProviderId.class, new ProviderIdSerializer())
126 .register(DeviceId.class, new DeviceIdSerializer())
127 .register(PortNumber.class, new PortNumberSerializer())
128 .register(DefaultPort.class, new DefaultPortSerializer())
129 .register(LinkKey.class, new LinkKeySerializer())
130 .register(ConnectPoint.class, new ConnectPointSerializer())
131 .register(DefaultLink.class, new DefaultLinkSerializer())
Yuta HIGUCHIfa891c92014-10-09 15:21:40 -0700132 .register(MastershipTerm.class, new MastershipTermSerializer())
Yuta HIGUCHI5fa3dc02014-10-15 17:08:13 -0700133 .register(HostLocation.class, new HostLocationSerializer())
Yuta HIGUCHI03fec1f2014-10-03 09:13:50 -0700134
135 .build();
136
137
138 // not to be instantiated
Yuta HIGUCHI8d143d22014-10-19 23:15:09 -0700139 private KryoNamespaces() {}
Yuta HIGUCHI03fec1f2014-10-03 09:13:50 -0700140}