BGPCEP-704: Add restart session rpc
[bgpcep.git] / pcep / auto-bandwidth-extension / src / main / java / org / opendaylight / protocol / pcep / auto / bandwidth / extension / PcRptMessageCodec.java
1 /*
2  * Copyright (c) 2016 Cisco Systems, Inc. and others.  All rights reserved.
3  *
4  * This program and the accompanying materials are made available under the
5  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6  * and is available at http://www.eclipse.org/legal/epl-v10.html
7  */
8
9 package org.opendaylight.protocol.pcep.auto.bandwidth.extension;
10
11 import com.google.common.base.Optional;
12 import com.google.common.base.Predicates;
13 import com.google.common.collect.Iterables;
14 import io.netty.buffer.ByteBuf;
15 import java.util.List;
16 import org.opendaylight.protocol.pcep.ietf.stateful07.Stateful07PCReportMessageParser;
17 import org.opendaylight.protocol.pcep.spi.ObjectRegistry;
18 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.pcep.auto.bandwidth.rev171025.Bandwidth1;
19 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.pcep.auto.bandwidth.rev171025.Bandwidth1Builder;
20 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.pcep.auto.bandwidth.rev171025.bandwidth.usage.object.BandwidthUsage;
21 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.pcep.auto.bandwidth.rev171025.bandwidth.usage.object.BandwidthUsageBuilder;
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev171025.pcrpt.message.pcrpt.message.Reports;
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev171025.pcrpt.message.pcrpt.message.ReportsBuilder;
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev171025.pcrpt.message.pcrpt.message.reports.Path;
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev171025.pcrpt.message.pcrpt.message.reports.PathBuilder;
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.Message;
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.Object;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.bandwidth.object.Bandwidth;
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.bandwidth.object.BandwidthBuilder;
30
31 public class PcRptMessageCodec extends Stateful07PCReportMessageParser {
32
33     public PcRptMessageCodec(final ObjectRegistry registry) {
34         super(registry);
35     }
36
37     @Override
38     protected Reports getValidReports(final List<Object> objects, final List<Message> errors) {
39         final Optional<Object> find = Iterables.tryFind(objects, Predicates.instanceOf(BandwidthUsage.class));
40         final Object object;
41         if (find.isPresent()) {
42             object = find.get();
43             objects.remove(object);
44         } else {
45             object = null;
46         }
47         final Reports validReports = super.getValidReports(objects, errors);
48         if (object != null && validReports != null) {
49             final Path path = validReports.getPath();
50             if (path != null) {
51                 return new ReportsBuilder(validReports).setPath(new PathBuilder(path).setBandwidth(
52                         setBandwidthUsage(path.getBandwidth(), (BandwidthUsage) object)).build()).build();
53             }
54         }
55         return validReports;
56     }
57
58     @Override
59     protected void serializeObject(final Object object, final ByteBuf buffer) {
60         super.serializeObject(object, buffer);
61         if (object instanceof Bandwidth) {
62             final Bandwidth1 bw = ((Bandwidth) object).getAugmentation(Bandwidth1.class);
63             if (bw != null) {
64                 super.serializeObject(new BandwidthUsageBuilder().setBwSample(bw.getBwSample()).build(), buffer);
65             }
66
67         }
68     }
69
70     private static Bandwidth setBandwidthUsage(final Bandwidth bandwidth, final BandwidthUsage bwUsage) {
71         final BandwidthBuilder bandwidthBuilder;
72         if (bandwidth != null) {
73             bandwidthBuilder = new BandwidthBuilder(bandwidth);
74         } else {
75             bandwidthBuilder = new BandwidthBuilder();
76         }
77         bandwidthBuilder.addAugmentation(Bandwidth1.class, new Bandwidth1Builder().setBwSample(bwUsage.getBwSample()).build()).build();
78         return bandwidthBuilder.build();
79     }
80
81 }