Merge "Bug 809: Enhancements to the toaster example"
[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.sal.binding.api.AbstractBindingAwareProvider;
14 import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.ProviderContext;
15 import org.opendaylight.controller.sal.binding.api.data.DataProviderService;
16 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.SalFlowService;
17 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.service.rev130918.SalGroupService;
18 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.service.rev130918.SalMeterService;
19 import org.osgi.framework.BundleContext;
20 import org.slf4j.Logger;
21 import org.slf4j.LoggerFactory;
22
23 public class FRMActivator extends AbstractBindingAwareProvider {
24
25     private final static Logger LOG = LoggerFactory.getLogger(FRMActivator.class);
26
27     private static FlowProvider flowProvider = new FlowProvider(); 
28     private static GroupProvider groupProvider = new GroupProvider();
29     private static MeterProvider meterProvider = new MeterProvider();
30     
31     @Override
32     public void onSessionInitiated(final ProviderContext session) {
33         DataProviderService flowSalService = session.<DataProviderService>getSALService(DataProviderService.class);
34         FRMActivator.flowProvider.setDataService(flowSalService);
35         SalFlowService rpcFlowSalService = session.<SalFlowService>getRpcService(SalFlowService.class);
36         FRMActivator.flowProvider.setSalFlowService(rpcFlowSalService);
37         FRMActivator.flowProvider.start();
38         DataProviderService groupSalService = session.<DataProviderService>getSALService(DataProviderService.class);
39         FRMActivator.groupProvider.setDataService(groupSalService);
40         SalGroupService rpcGroupSalService = session.<SalGroupService>getRpcService(SalGroupService.class);
41         FRMActivator.groupProvider.setSalGroupService(rpcGroupSalService);
42         FRMActivator.groupProvider.start();
43         DataProviderService meterSalService = session.<DataProviderService>getSALService(DataProviderService.class);
44         FRMActivator.meterProvider.setDataService(meterSalService);
45         SalMeterService rpcMeterSalService = session.<SalMeterService>getRpcService(SalMeterService.class);
46         FRMActivator.meterProvider.setSalMeterService(rpcMeterSalService);
47         FRMActivator.meterProvider.start();
48     }
49     
50     @Override
51     protected void stopImpl(final BundleContext context) {
52         try {
53             FRMActivator.flowProvider.close();
54             FRMActivator.groupProvider.close();
55             FRMActivator.meterProvider.close();
56         } catch (Throwable e) {
57             LOG.error("Unexpected error by stopping FRMActivator", e);
58             throw new RuntimeException(e);
59         }
60     }
61   }