X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=blobdiff_plain;f=opendaylight%2Fmd-sal%2Fforwardingrules-manager%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Ffrm%2Fmeter%2FMeterProvider.java;h=44de7af4957a5dca73c2ce8ae893d06877b247e5;hp=8596c3fec6e7f8f04dc2fcc4917240d35b85f8eb;hb=51e91f6bdcc88c5aa96f956e516d31dbb5e5d5e0;hpb=059605a27e8a1280cefa8186a9057144bc281518 diff --git a/opendaylight/md-sal/forwardingrules-manager/src/main/java/org/opendaylight/controller/frm/meter/MeterProvider.java b/opendaylight/md-sal/forwardingrules-manager/src/main/java/org/opendaylight/controller/frm/meter/MeterProvider.java index 8596c3fec6..44de7af495 100644 --- a/opendaylight/md-sal/forwardingrules-manager/src/main/java/org/opendaylight/controller/frm/meter/MeterProvider.java +++ b/opendaylight/md-sal/forwardingrules-manager/src/main/java/org/opendaylight/controller/frm/meter/MeterProvider.java @@ -7,61 +7,99 @@ */ package org.opendaylight.controller.frm.meter; -import org.opendaylight.controller.sal.binding.api.data.DataChangeListener; -import org.opendaylight.controller.sal.binding.api.data.DataModificationTransaction; -import org.opendaylight.controller.sal.binding.api.data.DataProviderService; +import org.opendaylight.controller.md.sal.binding.api.DataBroker; +import org.opendaylight.controller.md.sal.binding.api.DataChangeListener; +import org.opendaylight.controller.md.sal.common.api.data.AsyncDataBroker.DataChangeScope; +import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; +import org.opendaylight.controller.sal.binding.api.RpcConsumerRegistry; import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowCapableNode; import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.meters.Meter; import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.Nodes; import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.Node; import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.service.rev130918.SalMeterService; import org.opendaylight.yangtools.concepts.ListenerRegistration; -import org.opendaylight.yangtools.yang.binding.DataObject; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; -import org.opendaylight.yangtools.yang.binding.InstanceIdentifier.InstanceIdentifierBuilder; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import com.google.common.base.Preconditions; + +/** + * Meter Provider registers the {@link MeterChangeListener} and it holds all needed + * services for {@link MeterChangeListener}. + * + * @author Vaclav Demcak + * + */ public class MeterProvider implements AutoCloseable { - private final static Logger LOG = LoggerFactory.getLogger(MeterProvider.class); + private static final Logger LOG = LoggerFactory.getLogger(MeterProvider.class); - private DataProviderService dataService; private SalMeterService salMeterService; + private DataBroker dataService; /* DataChangeListener */ - private MeterChangeListener meterDataChangeListener; - ListenerRegistration meterDataChangeListenerRegistration; + private DataChangeListener meterDataChangeListener; + private ListenerRegistration meterDataChangeListenerRegistration; + + /** + * Provider Initialization Phase. + * + * @param DataProviderService dataService + */ + public void init(final DataBroker dataService) { + LOG.info("FRM Meter Config Provider initialization."); + this.dataService = Preconditions.checkNotNull(dataService, "DataProviderService can not be null !"); + } + + /** + * Listener Registration Phase + * + * @param RpcConsumerRegistry rpcRegistry + */ + public void start(final RpcConsumerRegistry rpcRegistry) { + Preconditions.checkArgument(rpcRegistry != null, "RpcConsumerRegistry can not be null !"); + this.salMeterService = Preconditions.checkNotNull(rpcRegistry.getRpcService(SalMeterService.class), + "RPC SalMeterService not found."); - public void start() { /* Build Path */ - InstanceIdentifierBuilder nodesBuilder = InstanceIdentifier. builder(Nodes.class); - InstanceIdentifierBuilder nodeChild = nodesBuilder. child(Node.class); - InstanceIdentifierBuilder augmentFlowCapNode = nodeChild. augmentation(FlowCapableNode.class); - InstanceIdentifierBuilder meterChild = augmentFlowCapNode. child(Meter.class); - final InstanceIdentifier meterDataObjectPath = meterChild.toInstance(); + InstanceIdentifier meterIdentifier = InstanceIdentifier.create(Nodes.class) + .child(Node.class).augmentation(FlowCapableNode.class).child(Meter.class); /* DataChangeListener registration */ - this.meterDataChangeListener = new MeterChangeListener(this.salMeterService); - this.meterDataChangeListenerRegistration = this.dataService.registerDataChangeListener(meterDataObjectPath, meterDataChangeListener); - LOG.info("Meter Config Provider started."); - } + this.meterDataChangeListener = new MeterChangeListener(MeterProvider.this); + this.meterDataChangeListenerRegistration = + this.dataService.registerDataChangeListener(LogicalDatastoreType.CONFIGURATION, + meterIdentifier, meterDataChangeListener, DataChangeScope.SUBTREE); - protected DataModificationTransaction startChange() { - return this.dataService.beginTransaction(); + LOG.info("FRM Meter Config Provider started."); } - public void close() throws Exception { - if(meterDataChangeListenerRegistration != null){ - meterDataChangeListenerRegistration.close(); + @Override + public void close() { + LOG.info("FRM Meter Config Provider stopped."); + if (meterDataChangeListenerRegistration != null) { + try { + meterDataChangeListenerRegistration.close(); + } catch (Exception e) { + String errMsg = "Error by stop FRM Meter Config Provider."; + LOG.error(errMsg, e); + throw new IllegalStateException(errMsg, e); + } finally { + meterDataChangeListenerRegistration = null; + } } } - public void setDataService(final DataProviderService dataService) { - this.dataService = dataService; + public DataChangeListener getMeterDataChangeListener() { + return meterDataChangeListener; + } + + public DataBroker getDataService() { + return dataService; } - public void setSalMeterService(final SalMeterService salMeterService) { - this.salMeterService = salMeterService; + public SalMeterService getSalMeterService() { + return salMeterService; } -} \ No newline at end of file +}