Small fix to xsql dependencies
[controller.git] / opendaylight / md-sal / forwardingrules-manager / src / main / java / org / opendaylight / controller / frm / FRMActivator.java
1 /**
2  * Copyright (c) 2014 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 package org.opendaylight.controller.frm;
9
10 import org.opendaylight.controller.frm.flow.FlowProvider;
11 import org.opendaylight.controller.frm.group.GroupProvider;
12 import org.opendaylight.controller.frm.meter.MeterProvider;
13 import org.opendaylight.controller.frm.reconil.FlowNodeReconcilProvider;
14 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
15 import org.opendaylight.controller.sal.binding.api.AbstractBindingAwareProvider;
16 import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.ProviderContext;
17 import org.osgi.framework.BundleContext;
18 import org.slf4j.Logger;
19 import org.slf4j.LoggerFactory;
20
21 /**
22  * Forwarding Rules Manager Activator
23  *
24  * Activator manages all Providers ({@link FlowProvider}, {@link GroupProvider},
25  * {@link MeterProvider} and the {@link FlowNodeReconcilProvider}).
26  * It registers all listeners (DataChangeEvent, ReconcilNotification)
27  * in the Session Initialization phase.
28  *
29  * @author <a href="mailto:vdemcak@cisco.com">Vaclav Demcak</a>
30  * *
31  */
32 public class FRMActivator extends AbstractBindingAwareProvider {
33
34     private final static Logger LOG = LoggerFactory.getLogger(FRMActivator.class);
35
36     private final FlowProvider flowProvider;
37     private final GroupProvider groupProvider;
38     private final MeterProvider meterProvider;
39     private final FlowNodeReconcilProvider flowNodeReconcilProvider;
40
41     public FRMActivator() {
42         this.flowProvider = new FlowProvider();
43         this.groupProvider = new GroupProvider();
44         this.meterProvider = new MeterProvider();
45         this.flowNodeReconcilProvider = new FlowNodeReconcilProvider();
46     }
47
48     @Override
49     public void onSessionInitiated(final ProviderContext session) {
50         LOG.info("FRMActivator initialization.");
51         /* Flow */
52         try {
53             final DataBroker flowSalService = session.getSALService(DataBroker.class);
54             this.flowProvider.init(flowSalService);
55             this.flowProvider.start(session);
56             /* Group */
57             final DataBroker groupSalService = session.getSALService(DataBroker.class);
58             this.groupProvider.init(groupSalService);
59             this.groupProvider.start(session);
60             /* Meter */
61             final DataBroker meterSalService = session.getSALService(DataBroker.class);
62             this.meterProvider.init(meterSalService);
63             this.meterProvider.start(session);
64             /* FlowNode Reconciliation */
65             final DataBroker dbs = session.getSALService(DataBroker.class);
66             this.flowNodeReconcilProvider.init(dbs);
67             this.flowNodeReconcilProvider.start(session);
68
69             LOG.info("FRMActivator started successfully");
70         } catch (Exception e) {
71             String errMsg = "Unexpected error by starting FRMActivator";
72             LOG.error(errMsg, e);
73             throw new IllegalStateException(errMsg, e);
74         }
75     }
76
77     @Override
78     protected void stopImpl(final BundleContext context) {
79         try {
80             this.flowProvider.close();
81             this.groupProvider.close();
82             this.meterProvider.close();
83             this.flowNodeReconcilProvider.close();
84         } catch (Exception e) {
85             LOG.error("Unexpected error by stopping FRMActivator", e);
86         }
87     }
88   }