Fix a few deprecation warnings
[bgpcep.git] / config-loader / protocols-config-loader / src / main / java / org / opendaylight / bgpcep / config / loader / protocols / ProtocolsConfigFileProcessor.java
1 /*
2  * Copyright (c) 2017 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.bgpcep.config.loader.protocols;
9
10 import com.google.common.annotations.VisibleForTesting;
11 import com.google.common.util.concurrent.FluentFuture;
12 import javax.annotation.PostConstruct;
13 import javax.annotation.PreDestroy;
14 import javax.inject.Inject;
15 import javax.inject.Singleton;
16 import org.eclipse.jdt.annotation.NonNull;
17 import org.opendaylight.bgpcep.config.loader.spi.AbstractConfigFileProcessor;
18 import org.opendaylight.bgpcep.config.loader.spi.ConfigLoader;
19 import org.opendaylight.mdsal.common.api.CommitInfo;
20 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
21 import org.opendaylight.mdsal.dom.api.DOMDataBroker;
22 import org.opendaylight.mdsal.dom.api.DOMDataTreeWriteTransaction;
23 import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.network.instance.rev151018.network.instance.top.NetworkInstances;
24 import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.network.instance.rev151018.network.instance.top.network.instances.NetworkInstance;
25 import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.network.instance.rev151018.network.instance.top.network.instances.network.instance.Protocols;
26 import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.network.instance.rev151018.network.instance.top.network.instances.network.instance.protocols.Protocol;
27 import org.opendaylight.yangtools.yang.common.QName;
28 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
29 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier;
30 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifierWithPredicates;
31 import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode;
32 import org.opendaylight.yangtools.yang.data.api.schema.MapNode;
33 import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
34 import org.opendaylight.yangtools.yang.data.spi.node.ImmutableNodes;
35 import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier.Absolute;
36
37 @Singleton
38 public final class ProtocolsConfigFileProcessor extends AbstractConfigFileProcessor {
39     private static final QName NAME = QName.create(NetworkInstance.QNAME, "name").intern();
40
41     // TODO: isn't there a better place where we can get this?
42     @VisibleForTesting
43     static final String GLOBAL_BGP_NAME = "global-bgp";
44
45     private static final @NonNull NodeIdentifierWithPredicates GLOBAL_BGP =
46         NodeIdentifierWithPredicates.of(NetworkInstance.QNAME, NAME, GLOBAL_BGP_NAME);
47     private static final @NonNull YangInstanceIdentifier GLOBAL_BGP_PATH = YangInstanceIdentifier.of(
48         NodeIdentifier.create(NetworkInstances.QNAME), NodeIdentifier.create(NetworkInstance.QNAME), GLOBAL_BGP);
49
50     @Inject
51     public ProtocolsConfigFileProcessor(final ConfigLoader configLoader, final DOMDataBroker dataBroker) {
52         super("Protocols", configLoader, dataBroker);
53     }
54
55     @PostConstruct
56     public void init() {
57         start();
58     }
59
60     @PreDestroy
61     @Override
62     public void close() {
63         stop();
64     }
65
66     @Override
67     public Absolute fileRootSchema() {
68         return Absolute.of(NetworkInstances.QNAME, NetworkInstance.QNAME, Protocols.QNAME);
69     }
70
71     @Override
72     protected FluentFuture<? extends CommitInfo> loadConfiguration(final DOMDataBroker dataBroker,
73             final NormalizedNode dto) {
74         final ContainerNode protocolsContainer = (ContainerNode) dto;
75         final MapNode protocols = (MapNode) protocolsContainer.childByArg(new NodeIdentifier(Protocol.QNAME));
76         if (protocols == null) {
77             return CommitInfo.emptyFluentFuture();
78         }
79
80         final DOMDataTreeWriteTransaction wtx = dataBroker.newWriteOnlyTransaction();
81
82         // Ensure global-bgp exists
83         wtx.merge(LogicalDatastoreType.CONFIGURATION, GLOBAL_BGP_PATH, ImmutableNodes.newMapEntryBuilder()
84             .withNodeIdentifier(GLOBAL_BGP)
85             .withChild(ImmutableNodes.leafNode(NAME, GLOBAL_BGP_NAME))
86             .build());
87         wtx.merge(LogicalDatastoreType.CONFIGURATION,
88             GLOBAL_BGP_PATH.node(Protocols.QNAME).node(protocols.name()), protocols);
89         return wtx.commit();
90     }
91 }