2 * Copyright (c) 2016 Cisco Systems, Inc. and others. 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
9 package org.opendaylight.groupbasedpolicy.renderer.ios_xe_provider.impl.writer;
11 import com.google.common.util.concurrent.CheckedFuture;
12 import com.google.common.util.concurrent.Futures;
13 import com.google.common.util.concurrent.ListenableFuture;
14 import java.util.ArrayList;
15 import java.util.List;
16 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
17 import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;
18 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
19 import org.opendaylight.controller.md.sal.common.api.data.TransactionCommitFailedException;
20 import org.opendaylight.groupbasedpolicy.renderer.ios_xe_provider.impl.manager.PolicyManagerImpl;
21 import org.opendaylight.groupbasedpolicy.util.DataStoreHelper;
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.RendererName;
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.Renderers;
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.Renderer;
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.RendererKey;
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.RendererNodes;
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.nodes.RendererNode;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.nodes.RendererNodeKey;
29 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
30 import org.slf4j.Logger;
31 import org.slf4j.LoggerFactory;
33 public class NodeWriter {
35 private static final Logger LOG = LoggerFactory.getLogger(NodeWriter.class);
36 private final List<RendererNode> rendererNodesCache;
39 rendererNodesCache = new ArrayList<>();
42 public void cache(RendererNode node) {
43 rendererNodesCache.add(node);
47 * Put all cached items to data store
49 * @param dataBroker appropriate data provider
51 public ListenableFuture<Boolean> commitToDatastore(final DataBroker dataBroker) {
52 if (rendererNodesCache.isEmpty()) {
53 return Futures.immediateFuture(true);
56 final WriteTransaction writeTransaction = dataBroker.newWriteOnlyTransaction();
57 final ArrayList<RendererNode> rendererNodes = new ArrayList<>(rendererNodesCache);
59 rendererNodesCache.clear();
61 boolean createParents = true;
62 for (RendererNode rendererNode : rendererNodes) {
63 final InstanceIdentifier<RendererNode> iid = buildRendererNodeIid(rendererNode);
64 writeTransaction.put(LogicalDatastoreType.OPERATIONAL, iid, rendererNode, createParents);
65 createParents = false;
68 final boolean result = DataStoreHelper.submitToDs(writeTransaction);
69 return Futures.immediateFuture(result);
70 } catch (Exception e) {
71 LOG.error("Failed to .. {}", e.getMessage());
73 return Futures.immediateFuture(false);
77 * Removes all cached items from data store
79 * @param dataBroker appropriate data provider
81 public ListenableFuture<Boolean> removeFromDatastore(final DataBroker dataBroker) {
82 boolean result = true;
83 final WriteTransaction writeTransaction = dataBroker.newWriteOnlyTransaction();
84 for (RendererNode nodeToRemove : rendererNodesCache) {
85 final InstanceIdentifier<RendererNode> iid = buildRendererNodeIid(nodeToRemove);
87 writeTransaction.delete(LogicalDatastoreType.OPERATIONAL, iid);
88 final CheckedFuture<Void, TransactionCommitFailedException> submitFuture = writeTransaction.submit();
89 submitFuture.checkedGet();
91 } catch (TransactionCommitFailedException e) {
92 LOG.error("Write transaction failed to {}", e.getMessage());
94 } catch (Exception e) {
95 LOG.error("Failed to .. {}", e.getMessage());
100 rendererNodesCache.clear();
101 return Futures.immediateFuture(result);
104 private InstanceIdentifier<RendererNode> buildRendererNodeIid(final RendererNode rendererNode) {
105 return InstanceIdentifier.builder(Renderers.class)
106 .child(Renderer.class, new RendererKey(new RendererName(PolicyManagerImpl.IOS_XE_RENDERER)))
107 .child(RendererNodes.class)
108 .child(RendererNode.class, new RendererNodeKey(rendererNode.getNodePath()))