2 * Copyright (c) 2018 AT&T Intellectual Property. 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
8 package org.opendaylight.protocol.bgp.mvpn.spi.pojo.nlri;
10 import static com.google.common.base.Preconditions.checkArgument;
12 import io.netty.buffer.ByteBuf;
13 import io.netty.buffer.Unpooled;
14 import org.opendaylight.protocol.bgp.mvpn.spi.nlri.MvpnParser;
15 import org.opendaylight.protocol.bgp.mvpn.spi.nlri.MvpnRegistry;
16 import org.opendaylight.protocol.bgp.mvpn.spi.nlri.MvpnSerializer;
17 import org.opendaylight.protocol.concepts.HandlerRegistry;
18 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.mvpn.rev180417.NlriType;
19 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.mvpn.rev180417.mvpn.MvpnChoice;
20 import org.opendaylight.yangtools.concepts.Registration;
21 import org.opendaylight.yangtools.yang.binding.DataContainer;
26 * @author Claudio D. Gasparini
28 public final class SimpleMvpnNlriRegistry implements MvpnRegistry {
29 private static final SimpleMvpnNlriRegistry SINGLETON = new SimpleMvpnNlriRegistry();
30 private final HandlerRegistry<DataContainer, MvpnParser, MvpnSerializer> handlers = new HandlerRegistry<>();
32 private SimpleMvpnNlriRegistry() {
35 public static SimpleMvpnNlriRegistry getInstance() {
39 public <T extends MvpnChoice> Registration registerNlriParser(final MvpnParser<T> parser) {
40 return this.handlers.registerParser(parser.getType(), parser);
43 public <T extends MvpnChoice> Registration registerNlriSerializer(
44 final MvpnSerializer<T> serializer) {
45 return this.handlers.registerSerializer(serializer.getClazz(), serializer);
49 public MvpnChoice parseMvpn(final NlriType type, final ByteBuf nlriBuf) {
50 checkArgument(nlriBuf != null && nlriBuf.isReadable(), "Array of bytes is mandatory. Can't be null or empty.");
51 final MvpnParser parser = this.handlers.getParser(type.getIntValue());
55 return parser.parseMvpn(nlriBuf);
59 public ByteBuf serializeMvpn(final MvpnChoice mvpn) {
60 final MvpnSerializer serializer = this.handlers.getSerializer(mvpn.implementedInterface());
61 if (serializer == null) {
62 return Unpooled.buffer();
64 return serializer.serializeMvpn(mvpn);