blob: 61de641c3888cdd39def86b0cdc2a238091eff51 [file] [log] [blame]
Sho SHIMIZUc0e010dd2016-05-02 14:46:22 -07001/*
2 * Copyright 2016-present 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 */
Sho SHIMIZU2795d632016-05-25 14:10:13 -070016package org.onosproject.store.resource.impl;
Sho SHIMIZUc0e010dd2016-05-02 14:46:22 -070017
18import com.esotericsoftware.kryo.Kryo;
19import com.esotericsoftware.kryo.Serializer;
20import com.esotericsoftware.kryo.io.Input;
21import com.esotericsoftware.kryo.io.Output;
Sho SHIMIZUc0e010dd2016-05-02 14:46:22 -070022import com.google.common.collect.Range;
Sho SHIMIZU758cf632016-05-25 15:25:59 -070023import com.google.common.collect.RangeSet;
Sho SHIMIZUc0e010dd2016-05-02 14:46:22 -070024import com.google.common.collect.TreeRangeSet;
25import org.onlab.util.ClosedOpenRange;
Sho SHIMIZU2795d632016-05-25 14:10:13 -070026import org.onosproject.net.resource.DiscreteResourceCodec;
Sho SHIMIZUc0e010dd2016-05-02 14:46:22 -070027
28import java.util.ArrayList;
29import java.util.List;
Sho SHIMIZUc0e010dd2016-05-02 14:46:22 -070030import java.util.stream.Collectors;
Sho SHIMIZUc0e010dd2016-05-02 14:46:22 -070031
32/**
Sho SHIMIZU2795d632016-05-25 14:10:13 -070033 * Kryo Serializer for {@link EncodedDiscreteResources}.
Sho SHIMIZUc0e010dd2016-05-02 14:46:22 -070034 */
Sho SHIMIZU2795d632016-05-25 14:10:13 -070035final class EncodedResourcesSerializer extends Serializer<EncodedDiscreteResources> {
Sho SHIMIZUc0e010dd2016-05-02 14:46:22 -070036 @Override
Sho SHIMIZU2795d632016-05-25 14:10:13 -070037 public void write(Kryo kryo, Output output, EncodedDiscreteResources object) {
Sho SHIMIZU758cf632016-05-25 15:25:59 -070038 List<ClosedOpenRange> ranges = object.rangeSet().asRanges().stream()
Sho SHIMIZUc0e010dd2016-05-02 14:46:22 -070039 .map(ClosedOpenRange::of)
40 .collect(Collectors.toList());
41 kryo.writeObject(output, ranges);
42 kryo.writeClassAndObject(output, object.codec());
Sho SHIMIZUc0e010dd2016-05-02 14:46:22 -070043 }
44
45 @Override
Sho SHIMIZU2795d632016-05-25 14:10:13 -070046 public EncodedDiscreteResources read(Kryo kryo, Input input, Class<EncodedDiscreteResources> cls) {
Sho SHIMIZUc0e010dd2016-05-02 14:46:22 -070047 @SuppressWarnings("unchecked")
48 List<ClosedOpenRange> ranges = kryo.readObject(input, ArrayList.class);
49 DiscreteResourceCodec codec = (DiscreteResourceCodec) kryo.readClassAndObject(input);
Sho SHIMIZUc0e010dd2016-05-02 14:46:22 -070050
Sho SHIMIZU758cf632016-05-25 15:25:59 -070051 RangeSet<Integer> rangeSet = TreeRangeSet.create();
52 ranges.stream()
53 .map(x -> Range.closedOpen(x.lowerBound(), x.upperBound()))
54 .forEach(rangeSet::add);
55 return new EncodedDiscreteResources(rangeSet, codec);
Sho SHIMIZUc0e010dd2016-05-02 14:46:22 -070056 }
57}