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%2FMeterChangeListener.java;h=a2def8490f77b0fbdca938511ddd9ed11f062070;hp=48d5257978cc28ff5c86a44449b55a45f15024cc;hb=3bad057a3d83945a7e23113aacbdba6ba9cb5d97;hpb=aebab42f1b08f22037ce725fd852d79584d09109 diff --git a/opendaylight/md-sal/forwardingrules-manager/src/main/java/org/opendaylight/controller/frm/meter/MeterChangeListener.java b/opendaylight/md-sal/forwardingrules-manager/src/main/java/org/opendaylight/controller/frm/meter/MeterChangeListener.java index 48d5257978..a2def8490f 100644 --- a/opendaylight/md-sal/forwardingrules-manager/src/main/java/org/opendaylight/controller/frm/meter/MeterChangeListener.java +++ b/opendaylight/md-sal/forwardingrules-manager/src/main/java/org/opendaylight/controller/frm/meter/MeterChangeListener.java @@ -8,19 +8,14 @@ package org.opendaylight.controller.frm.meter; import org.opendaylight.controller.frm.AbstractChangeListener; +import org.opendaylight.controller.md.sal.binding.api.ReadOnlyTransaction; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Uri; import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeRef; import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.Node; -import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.service.rev130918.AddMeterInput; import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.service.rev130918.AddMeterInputBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.service.rev130918.RemoveMeterInput; import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.service.rev130918.RemoveMeterInputBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.service.rev130918.SalMeterService; -import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.service.rev130918.UpdateMeterInput; import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.service.rev130918.UpdateMeterInputBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.service.rev130918.meter.update.OriginalMeter; import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.service.rev130918.meter.update.OriginalMeterBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.service.rev130918.meter.update.UpdatedMeter; import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.service.rev130918.meter.update.UpdatedMeterBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.Meter; import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.MeterRef; @@ -29,86 +24,89 @@ import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import com.google.common.base.Preconditions; + /** + * Meter Change Listener + * add, update and remove {@link Meter} processing from {@link org.opendaylight.controller.md.sal.common.api.data.AsyncDataChangeEvent}. * * @author Vaclav Demcak * */ public class MeterChangeListener extends AbstractChangeListener { - private final static Logger LOG = LoggerFactory.getLogger(MeterChangeListener.class); - - private final SalMeterService salMeterService; - - public SalMeterService getSalMeterService() { - return this.salMeterService; - } + private static final Logger LOG = LoggerFactory.getLogger(MeterChangeListener.class); - public MeterChangeListener(final SalMeterService manager) { - this.salMeterService = manager; - } + private final MeterProvider provider; - @Override - protected void validate() throws IllegalStateException { - MeterTransactionValidator.validate(this); + public MeterChangeListener (final MeterProvider provider) { + this.provider = Preconditions.checkNotNull(provider, "MeterProvider can not be null !"); } @Override - protected void remove(InstanceIdentifier identifier, DataObject removeDataObj) { - if ((removeDataObj instanceof Meter)) { + protected void remove(final InstanceIdentifier identifier, + final DataObject removeDataObj) { - final Meter meter = ((Meter) removeDataObj); - final InstanceIdentifier nodeInstanceId = identifier. firstIdentifierOf(Node.class); - final RemoveMeterInputBuilder builder = new RemoveMeterInputBuilder(meter); + final Meter meter = ((Meter) removeDataObj); + final InstanceIdentifier nodeIdent = identifier.firstIdentifierOf(Node.class); + final RemoveMeterInputBuilder builder = new RemoveMeterInputBuilder(meter); - builder.setNode(new NodeRef(nodeInstanceId)); - builder.setMeterRef(new MeterRef(identifier)); + builder.setNode(new NodeRef(nodeIdent)); + builder.setMeterRef(new MeterRef(identifier)); - Uri uri = new Uri(this.getTransactionId()); - builder.setTransactionUri(uri); - this.salMeterService.removeMeter((RemoveMeterInput) builder.build()); - LOG.debug("Transaction {} - Remove Meter has removed meter: {}", new Object[]{uri, removeDataObj}); - } + Uri uri = new Uri(this.getTransactionId()); + builder.setTransactionUri(uri); + this.provider.getSalMeterService().removeMeter(builder.build()); + LOG.debug("Transaction {} - Remove Meter has removed meter: {}", new Object[]{uri, removeDataObj}); } @Override - protected void update(InstanceIdentifier identifier, DataObject original, DataObject update) { - if (original instanceof Meter && update instanceof Meter) { + protected void update(final InstanceIdentifier identifier, + final DataObject original, final DataObject update) { - final Meter originalMeter = ((Meter) original); - final Meter updatedMeter = ((Meter) update); - final InstanceIdentifier nodeInstanceId = identifier. firstIdentifierOf(Node.class); - final UpdateMeterInputBuilder builder = new UpdateMeterInputBuilder(); + final Meter originalMeter = ((Meter) original); + final Meter updatedMeter = ((Meter) update); + final InstanceIdentifier nodeInstanceId = identifier.firstIdentifierOf(Node.class); + final UpdateMeterInputBuilder builder = new UpdateMeterInputBuilder(); - builder.setNode(new NodeRef(nodeInstanceId)); - builder.setMeterRef(new MeterRef(identifier)); + builder.setNode(new NodeRef(nodeInstanceId)); + builder.setMeterRef(new MeterRef(identifier)); - Uri uri = new Uri(this.getTransactionId()); - builder.setTransactionUri(uri); + Uri uri = new Uri(this.getTransactionId()); + builder.setTransactionUri(uri); - builder.setUpdatedMeter((UpdatedMeter) (new UpdatedMeterBuilder(updatedMeter)).build()); - builder.setOriginalMeter((OriginalMeter) (new OriginalMeterBuilder(originalMeter)).build()); + builder.setUpdatedMeter((new UpdatedMeterBuilder(updatedMeter)).build()); + builder.setOriginalMeter((new OriginalMeterBuilder(originalMeter)).build()); + + this.provider.getSalMeterService().updateMeter(builder.build()); + LOG.debug("Transaction {} - Update Meter has updated meter {} with {}", new Object[]{uri, original, update}); - this.salMeterService.updateMeter((UpdateMeterInput) builder.build()); - LOG.debug("Transaction {} - Update Meter has updated meter {} with {}", new Object[]{uri, original, update}); - } } @Override - protected void add(InstanceIdentifier identifier, DataObject addDataObj) { - if ((addDataObj instanceof Meter)) { + protected void add(final InstanceIdentifier identifier, + final DataObject addDataObj) { + + final Meter meter = ((Meter) addDataObj); + final InstanceIdentifier nodeInstanceId = identifier.firstIdentifierOf(Node.class); + final AddMeterInputBuilder builder = new AddMeterInputBuilder(meter); - final Meter meter = ((Meter) addDataObj); - final InstanceIdentifier nodeInstanceId = identifier. firstIdentifierOf(Node.class); - final AddMeterInputBuilder builder = new AddMeterInputBuilder(meter); + builder.setNode(new NodeRef(nodeInstanceId)); + builder.setMeterRef(new MeterRef(identifier)); - builder.setNode(new NodeRef(nodeInstanceId)); - builder.setMeterRef(new MeterRef(identifier)); + Uri uri = new Uri(this.getTransactionId()); + builder.setTransactionUri(uri); + this.provider.getSalMeterService().addMeter(builder.build()); + LOG.debug("Transaction {} - Add Meter has added meter: {}", new Object[]{uri, addDataObj}); + } + + @Override + protected boolean preconditionForChange(final InstanceIdentifier identifier, + final DataObject dataObj, final DataObject update) { - Uri uri = new Uri(this.getTransactionId()); - builder.setTransactionUri(uri); - this.salMeterService.addMeter((AddMeterInput) builder.build()); - LOG.debug("Transaction {} - Add Meter has added meter: {}", new Object[]{uri, addDataObj}); - } + final ReadOnlyTransaction trans = this.provider.getDataService().newReadOnlyTransaction(); + return update != null + ? (dataObj instanceof Meter && update instanceof Meter && isNodeAvailable(identifier, trans)) + : (dataObj instanceof Meter && isNodeAvailable(identifier, trans)); } -} \ No newline at end of file +}