blob: 92b7cb43f8250d8a89e84c696655a249c88be825 [file] [log] [blame]
Charles Chan14967c22015-12-07 11:11:50 -08001/*
2 * Copyright 2015-2016 Open Networking Laboratory
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17package org.onosproject.store.serializers;
18
19import com.esotericsoftware.kryo.Kryo;
20import com.esotericsoftware.kryo.Serializer;
21import com.esotericsoftware.kryo.io.Input;
22import com.esotericsoftware.kryo.io.Output;
23import org.onlab.osgi.DefaultServiceDirectory;
24import org.onosproject.net.DeviceId;
25import org.onosproject.net.behaviour.ExtensionSelectorResolver;
26import org.onosproject.net.driver.DefaultDriverData;
27import org.onosproject.net.driver.DefaultDriverHandler;
28import org.onosproject.net.driver.DriverHandler;
29import org.onosproject.net.driver.DriverService;
30import org.onosproject.net.flow.criteria.Criteria;
31import org.onosproject.net.flow.criteria.ExtensionCriterion;
32import org.onosproject.net.flow.criteria.ExtensionSelector;
33import org.onosproject.net.flow.criteria.ExtensionSelectorType;
34
35/**
36 * Serializer for extension criteria.
37 */
38public class ExtensionCriterionSerializer extends Serializer<ExtensionCriterion> {
39
40 /**
41 * Constructs a extension criterion serializer.
42 */
43 public ExtensionCriterionSerializer() {
44 super(false, true);
45 }
46
47 @Override
48 public void write(Kryo kryo, Output output, ExtensionCriterion object) {
49 kryo.writeClassAndObject(output, object.extensionSelector().type());
50 kryo.writeClassAndObject(output, object.deviceId());
51 kryo.writeClassAndObject(output, object.extensionSelector().serialize());
52 }
53
54 @Override
55 public ExtensionCriterion read(Kryo kryo, Input input,
56 Class<ExtensionCriterion> type) {
57 ExtensionSelectorType exType = (ExtensionSelectorType) kryo.readClassAndObject(input);
58 DeviceId deviceId = (DeviceId) kryo.readClassAndObject(input);
59
60 DriverService driverService = DefaultServiceDirectory.getService(DriverService.class);
61 DriverHandler handler = new DefaultDriverHandler(
62 new DefaultDriverData(driverService.getDriver(deviceId), deviceId));
63
64 ExtensionSelectorResolver resolver = handler.behaviour(ExtensionSelectorResolver.class);
65 ExtensionSelector selector = resolver.getExtensionSelector(exType);
66
67 byte[] bytes = (byte[]) kryo.readClassAndObject(input);
68 selector.deserialize(bytes);
69 return Criteria.extension(selector, deviceId);
70 }
71}