2 * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved.
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
9 package org.opendaylight.protocol.pcep.auto.bandwidth.extension;
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;
31 public class PcRptMessageCodec extends Stateful07PCReportMessageParser {
33 public PcRptMessageCodec(final ObjectRegistry registry) {
38 protected Reports getValidReports(final List<Object> objects, final List<Message> errors) {
39 final Optional<Object> find = Iterables.tryFind(objects, Predicates.instanceOf(BandwidthUsage.class));
41 if (find.isPresent()) {
43 objects.remove(object);
47 final Reports validReports = super.getValidReports(objects, errors);
48 if (object != null && validReports != null) {
49 final Path path = validReports.getPath();
51 return new ReportsBuilder(validReports).setPath(new PathBuilder(path).setBandwidth(
52 setBandwidthUsage(path.getBandwidth(), (BandwidthUsage) object)).build()).build();
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);
64 super.serializeObject(new BandwidthUsageBuilder().setBwSample(bw.getBwSample()).build(), buffer);
70 private static Bandwidth setBandwidthUsage(final Bandwidth bandwidth, final BandwidthUsage bwUsage) {
71 final BandwidthBuilder bandwidthBuilder;
72 if (bandwidth != null) {
73 bandwidthBuilder = new BandwidthBuilder(bandwidth);
75 bandwidthBuilder = new BandwidthBuilder();
77 bandwidthBuilder.addAugmentation(Bandwidth1.class, new Bandwidth1Builder().setBwSample(bwUsage.getBwSample()).build()).build();
78 return bandwidthBuilder.build();