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
9 package org.opendaylight.protocol.bgp.mvpn.spi.pojo.nlri;
11 import com.google.common.base.Preconditions;
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.yang.binding.DataContainer;
25 * @author Claudio D. Gasparini
27 public final class SimpleMvpnNlriRegistry implements MvpnRegistry {
28 private static final SimpleMvpnNlriRegistry SINGLETON = new SimpleMvpnNlriRegistry();
29 private final HandlerRegistry<DataContainer, MvpnParser, MvpnSerializer> handlers = new HandlerRegistry<>();
31 private SimpleMvpnNlriRegistry() {
34 public static SimpleMvpnNlriRegistry getInstance() {
38 public <T extends MvpnChoice> AutoCloseable registerNlriParser(
39 final MvpnParser<T> parser) {
40 return this.handlers.registerParser(parser.getType(), parser);
43 public <T extends MvpnChoice> AutoCloseable registerNlriSerializer(
44 final MvpnSerializer<T> serializer) {
45 return this.handlers.registerSerializer(serializer.getClazz(), serializer);
48 public MvpnChoice parseMvpn(final NlriType type, final ByteBuf nlriBuf) {
49 Preconditions.checkArgument(nlriBuf != null && nlriBuf.isReadable(),
50 "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);
58 public ByteBuf serializeMvpn(final MvpnChoice mvpn) {
59 final MvpnSerializer serializer = this.handlers.getSerializer(mvpn.getImplementedInterface());
60 if (serializer == null) {
61 return Unpooled.buffer();
63 return serializer.serializeMvpn(mvpn);