c43c41e49353d92ffb18b181d317a8b8a4e05994
[groupbasedpolicy.git] / renderers / ios-xe / src / main / java / org / opendaylight / groupbasedpolicy / renderer / ios_xe_provider / impl / IosXeRendererProviderImpl.java
1 /*
2  * Copyright (c) 2016 Cisco Systems, Inc. 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
9 package org.opendaylight.groupbasedpolicy.renderer.ios_xe_provider.impl;
10
11 import com.google.common.base.Preconditions;
12 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
13 import org.opendaylight.controller.sal.binding.api.BindingAwareBroker;
14 import org.opendaylight.controller.sal.binding.api.BindingAwareProvider;
15 import org.opendaylight.groupbasedpolicy.renderer.ios_xe_provider.api.IosXeRendererProvider;
16 import org.opendaylight.groupbasedpolicy.renderer.ios_xe_provider.impl.cache.EpPolicyCacheImpl;
17 import org.opendaylight.groupbasedpolicy.renderer.ios_xe_provider.impl.listener.EpPolicyTemplateBySgtListenerImpl;
18 import org.opendaylight.groupbasedpolicy.renderer.ios_xe_provider.impl.listener.RendererConfigurationListenerImpl;
19 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.RendererName;
20 import org.slf4j.Logger;
21 import org.slf4j.LoggerFactory;
22
23 /**
24  * Purpose: bootstrap provider implementation of Ios-xe renderer
25  */
26 public class IosXeRendererProviderImpl implements IosXeRendererProvider, BindingAwareProvider {
27
28     private static final Logger LOG = LoggerFactory.getLogger(IosXeRendererProviderImpl.class);
29
30     private final DataBroker dataBroker;
31     private final RendererName rendererName;
32     private RendererConfigurationListenerImpl rendererConfigurationListener;
33     private EpPolicyTemplateBySgtListenerImpl epPolicyTemplateBySgtListener;
34     private EpPolicyCacheImpl epPolicyCache;
35
36     public IosXeRendererProviderImpl(final DataBroker dataBroker, final BindingAwareBroker broker,
37                                      final RendererName rendererName) {
38         LOG.debug("ios-xe renderer bootstrap");
39         this.dataBroker = Preconditions.checkNotNull(dataBroker, "missing dataBroker dependency");
40         this.rendererName = Preconditions.checkNotNull(rendererName, "missing rendererName param");
41         broker.registerProvider(this);
42     }
43
44     @Override
45     public void close() {
46         //TODO
47         LOG.info("closing ios-xe renderer");
48         if (rendererConfigurationListener != null) {
49             rendererConfigurationListener.close();
50         }
51         if (epPolicyTemplateBySgtListener != null) {
52             epPolicyTemplateBySgtListener.close();
53         }
54         if (epPolicyCache != null) {
55             epPolicyCache.invalidateAll();
56         }
57     }
58
59     @Override
60     public void onSessionInitiated(final BindingAwareBroker.ProviderContext providerContext) {
61         LOG.info("starting ios-xe renderer");
62         //TODO register listeners:
63         // ep-policy-template-by-sgt
64         epPolicyCache = new EpPolicyCacheImpl();
65         epPolicyTemplateBySgtListener = new EpPolicyTemplateBySgtListenerImpl(dataBroker, epPolicyCache);
66         // renderer-configuration endpoints
67         rendererConfigurationListener = new RendererConfigurationListenerImpl(dataBroker, rendererName, epPolicyCache);
68         // supported node list maintenance
69         // TODO: upkeep of available renderer-nodes
70     }
71 }