Bump upstreams for 2022.09 Chlorine
[openflowplugin.git] / extension / openflowplugin-extension-eric / src / main / java / org / opendaylight / openflowplugin / extension / vendor / eric / EricExtensionProvider.java
1 /*
2  * Copyright (c) 2019 Ericsson India Global Services Pvt Ltd. and others.  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.openflowplugin.extension.vendor.eric;
9
10 import static java.util.Objects.requireNonNull;
11
12 import java.util.List;
13 import org.opendaylight.openflowjava.eric.codec.match.Icmpv6NDOptionsTypeCodec;
14 import org.opendaylight.openflowjava.eric.codec.match.Icmpv6NDReservedCodec;
15 import org.opendaylight.openflowjava.protocol.api.util.EncodeConstants;
16 import org.opendaylight.openflowplugin.extension.api.ConverterExtensionKey;
17 import org.opendaylight.openflowplugin.extension.api.ExtensionConverterRegistrator;
18 import org.opendaylight.openflowplugin.extension.api.OpenFlowPluginExtensionRegistratorProvider;
19 import org.opendaylight.openflowplugin.extension.vendor.eric.convertor.match.Icmpv6NDOptionsTypeConvertor;
20 import org.opendaylight.openflowplugin.extension.vendor.eric.convertor.match.Icmpv6NDReservedConvertor;
21 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.eric.match.rev180730.Icmpv6NdOptionsTypeKey;
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.eric.match.rev180730.Icmpv6NdReservedKey;
23 import org.opendaylight.yangtools.concepts.ObjectRegistration;
24 import org.slf4j.Logger;
25 import org.slf4j.LoggerFactory;
26
27 public class EricExtensionProvider implements AutoCloseable {
28     private static final Logger LOG = LoggerFactory.getLogger(EricExtensionProvider.class);
29     private static final Icmpv6NDReservedConvertor ICMPV6_ND_RESERVED_CONVERTOR = new Icmpv6NDReservedConvertor();
30     private static final Icmpv6NDOptionsTypeConvertor ICMPV6_ND_OPTIONS_TYPE_CONVERTOR =
31         new Icmpv6NDOptionsTypeConvertor();
32
33     private final ExtensionConverterRegistrator extensionConverterRegistrator;
34     private final List<ObjectRegistration<?>> registrations;
35
36     /**
37      * Register appropriate converters.
38      */
39     public EricExtensionProvider(final OpenFlowPluginExtensionRegistratorProvider provider) {
40         extensionConverterRegistrator = requireNonNull(provider.getExtensionConverterRegistrator());
41         registrations = List.of(
42             extensionConverterRegistrator.registerMatchConvertor(new ConverterExtensionKey<>(
43                 Icmpv6NdReservedKey.VALUE, EncodeConstants.OF_VERSION_1_3), ICMPV6_ND_RESERVED_CONVERTOR),
44             extensionConverterRegistrator.registerMatchConvertor(
45                 Icmpv6NDReservedCodec.SERIALIZER_KEY, ICMPV6_ND_RESERVED_CONVERTOR),
46             extensionConverterRegistrator.registerMatchConvertor(new ConverterExtensionKey<>(
47                 Icmpv6NdOptionsTypeKey.VALUE, EncodeConstants.OF_VERSION_1_3), ICMPV6_ND_OPTIONS_TYPE_CONVERTOR),
48             extensionConverterRegistrator.registerMatchConvertor(
49                 Icmpv6NDOptionsTypeCodec.SERIALIZER_KEY, ICMPV6_ND_OPTIONS_TYPE_CONVERTOR));
50     }
51
52     @Override
53     @SuppressWarnings("checkstyle:IllegalCatch")
54     public void close() {
55         registrations.forEach(janitor -> {
56             try {
57                 janitor.close();
58             } catch (RuntimeException e) {
59                 LOG.warn("closing of extension converter failed", e);
60             }
61         });
62         registrations.clear();
63     }
64 }