2 * Copyright (c) 2017 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
8 package org.opendaylight.bgpcep.config.loader.protocols;
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;
38 public final class ProtocolsConfigFileProcessor extends AbstractConfigFileProcessor {
39 private static final QName NAME = QName.create(NetworkInstance.QNAME, "name").intern();
41 // TODO: isn't there a better place where we can get this?
43 static final String GLOBAL_BGP_NAME = "global-bgp";
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);
51 public ProtocolsConfigFileProcessor(final ConfigLoader configLoader, final DOMDataBroker dataBroker) {
52 super("Protocols", configLoader, dataBroker);
67 public Absolute fileRootSchema() {
68 return Absolute.of(NetworkInstances.QNAME, NetworkInstance.QNAME, Protocols.QNAME);
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();
80 final DOMDataTreeWriteTransaction wtx = dataBroker.newWriteOnlyTransaction();
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))
87 wtx.merge(LogicalDatastoreType.CONFIGURATION,
88 GLOBAL_BGP_PATH.node(Protocols.QNAME).node(protocols.name()), protocols);