Bump MDSAL to 4.0.0
[bgpcep.git] / bgp / extensions / mvpn / src / main / java / org / opendaylight / protocol / bgp / mvpn / spi / pojo / nlri / SimpleMvpnNlriRegistry.java
1 /*
2  * Copyright (c) 2018 AT&T Intellectual Property. 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 package org.opendaylight.protocol.bgp.mvpn.spi.pojo.nlri;
9
10 import static com.google.common.base.Preconditions.checkArgument;
11
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;
22
23 /**
24  * Mvpn Nlri Registry.
25  *
26  * @author Claudio D. Gasparini
27  */
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<>();
31
32     private SimpleMvpnNlriRegistry() {
33     }
34
35     public static SimpleMvpnNlriRegistry getInstance() {
36         return SINGLETON;
37     }
38
39     public <T extends MvpnChoice> Registration registerNlriParser(final MvpnParser<T> parser) {
40         return this.handlers.registerParser(parser.getType(), parser);
41     }
42
43     public <T extends MvpnChoice> Registration registerNlriSerializer(
44             final MvpnSerializer<T> serializer) {
45         return this.handlers.registerSerializer(serializer.getClazz(), serializer);
46     }
47
48     @Override
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());
52         if (parser == null) {
53             return null;
54         }
55         return parser.parseMvpn(nlriBuf);
56     }
57
58     @Override
59     public ByteBuf serializeMvpn(final MvpnChoice mvpn) {
60         final MvpnSerializer serializer = this.handlers.getSerializer(mvpn.implementedInterface());
61         if (serializer == null) {
62             return Unpooled.buffer();
63         }
64         return serializer.serializeMvpn(mvpn);
65     }
66 }