aa70dc3f87c7520dea9491bdbbae838b8339ae7c
[bgpcep.git] / bgp / 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
9 package org.opendaylight.protocol.bgp.mvpn.spi.pojo.nlri;
10
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;
21
22 /**
23  * Mvpn Nlri Registry.
24  *
25  * @author Claudio D. Gasparini
26  */
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<>();
30
31     private SimpleMvpnNlriRegistry() {
32     }
33
34     public static SimpleMvpnNlriRegistry getInstance() {
35         return SINGLETON;
36     }
37
38     public <T extends MvpnChoice> AutoCloseable registerNlriParser(
39             final MvpnParser<T> parser) {
40         return this.handlers.registerParser(parser.getType(), parser);
41     }
42
43     public <T extends MvpnChoice> AutoCloseable registerNlriSerializer(
44             final MvpnSerializer<T> serializer) {
45         return this.handlers.registerSerializer(serializer.getClazz(), serializer);
46     }
47
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());
52         if (parser == null) {
53             return null;
54         }
55         return parser.parseMvpn(nlriBuf);
56     }
57
58     public ByteBuf serializeMvpn(final MvpnChoice mvpn) {
59         final MvpnSerializer serializer = this.handlers.getSerializer(mvpn.getImplementedInterface());
60         if (serializer == null) {
61             return Unpooled.buffer();
62         }
63         return serializer.serializeMvpn(mvpn);
64     }
65 }