X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=blobdiff_plain;f=opendaylight%2Fforwardingrulesmanager_mdsal%2Fopenflow%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fforwardingrulesmanager_mdsal%2Fconsumer%2Fimpl%2FMeterConsumerImpl.java;h=34adc28fc5453c8816d4cab752020728d4589ded;hp=1bf4f4534dc5690ff3d9c68d6e354dfa8e4ac26a;hb=7d77087c3374f53b8f775a5ef427f868f7bf2596;hpb=4555aeef5d37c16e36d537c0ed26048ad85cd60f diff --git a/opendaylight/forwardingrulesmanager_mdsal/openflow/src/main/java/org/opendaylight/controller/forwardingrulesmanager_mdsal/consumer/impl/MeterConsumerImpl.java b/opendaylight/forwardingrulesmanager_mdsal/openflow/src/main/java/org/opendaylight/controller/forwardingrulesmanager_mdsal/consumer/impl/MeterConsumerImpl.java index 1bf4f4534d..34adc28fc5 100644 --- a/opendaylight/forwardingrulesmanager_mdsal/openflow/src/main/java/org/opendaylight/controller/forwardingrulesmanager_mdsal/consumer/impl/MeterConsumerImpl.java +++ b/opendaylight/forwardingrulesmanager_mdsal/openflow/src/main/java/org/opendaylight/controller/forwardingrulesmanager_mdsal/consumer/impl/MeterConsumerImpl.java @@ -1,13 +1,15 @@ package org.opendaylight.controller.forwardingrulesmanager_mdsal.consumer.impl; import java.util.ArrayList; +import java.util.Collection; import java.util.EnumSet; import java.util.HashMap; import java.util.HashSet; +import java.util.Iterator; import java.util.List; import java.util.Map; -import java.util.Set; import java.util.Map.Entry; +import java.util.Set; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentMap; @@ -16,8 +18,8 @@ import org.opendaylight.controller.clustering.services.CacheExistException; import org.opendaylight.controller.clustering.services.IClusterContainerServices; import org.opendaylight.controller.clustering.services.IClusterServices; import org.opendaylight.controller.md.sal.common.api.data.DataCommitHandler; -import org.opendaylight.controller.md.sal.common.api.data.DataModification; import org.opendaylight.controller.md.sal.common.api.data.DataCommitHandler.DataCommitTransaction; +import org.opendaylight.controller.md.sal.common.api.data.DataModification; import org.opendaylight.controller.sal.common.util.Rpcs; import org.opendaylight.controller.sal.core.IContainer; import org.opendaylight.controller.sal.core.Node; @@ -25,6 +27,7 @@ import org.opendaylight.controller.sal.utils.GlobalConstants; import org.opendaylight.controller.sal.utils.Status; import org.opendaylight.controller.sal.utils.StatusCode; import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.config.rev131024.Meters; +import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.config.rev131024.meters.Meter; import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.config.rev131024.meters.MeterKey; import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.service.rev130918.AddMeterInputBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.service.rev130918.MeterAdded; @@ -33,11 +36,11 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.service.rev130918.Met import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.service.rev130918.SalMeterListener; import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.service.rev130918.SalMeterService; 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.UpdatedMeterBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.band.type.BandType; import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.band.type.band.type.Drop; import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.band.type.band.type.DscpRemark; import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.band.type.band.type.Experimenter; -import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.config.rev131024.meters.Meter; import org.opendaylight.yangtools.concepts.Registration; import org.opendaylight.yangtools.yang.binding.DataObject; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; @@ -46,9 +49,9 @@ import org.opendaylight.yangtools.yang.common.RpcResult; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -public class MeterConsumerImpl { +public class MeterConsumerImpl implements IForwardingRulesManager { protected static final Logger logger = LoggerFactory.getLogger(MeterConsumerImpl.class); - private MeterEventListener meterEventListener = new MeterEventListener(); + private final MeterEventListener meterEventListener = new MeterEventListener(); private Registration meterListener; private SalMeterService meterService; private MeterDataCommitHandler commitHandler; @@ -236,16 +239,29 @@ public class MeterConsumerImpl { */ private Status updateMeter(InstanceIdentifier path, Meter meterUpdateDataObject) { MeterKey meterKey = meterUpdateDataObject.getKey(); + UpdatedMeterBuilder updateMeterBuilder = null; - if (null != meterKey && validateMeter(meterUpdateDataObject, FRMUtil.operation.ADD).isSuccess()) { - if (meterUpdateDataObject.isInstall()) { - UpdateMeterInputBuilder updateMeterBuilder = new UpdateMeterInputBuilder(); + if (null != meterKey && validateMeter(meterUpdateDataObject, FRMUtil.operation.UPDATE).isSuccess()) { + if (originalSwMeterView.containsKey(meterKey)) { + originalSwMeterView.remove(meterKey); originalSwMeterView.put(meterKey, meterUpdateDataObject); - meterService.updateMeter(updateMeterBuilder.build()); } - originalSwMeterView.put(meterKey, meterUpdateDataObject); + if (meterUpdateDataObject.isInstall()) { + UpdateMeterInputBuilder updateMeterInputBuilder = new UpdateMeterInputBuilder(); + updateMeterBuilder = new UpdatedMeterBuilder(); + updateMeterBuilder.fieldsFrom(meterUpdateDataObject); + updateMeterInputBuilder.setUpdatedMeter(updateMeterBuilder.build()); + + if (installedSwMeterView.containsKey(meterKey)) { + installedSwMeterView.remove(meterKey); + installedSwMeterView.put(meterKey, meterUpdateDataObject); + } + + meterService.updateMeter(updateMeterInputBuilder.build()); + } + } else { return new Status(StatusCode.BADREQUEST, "Meter Key or attribute validation failed"); } @@ -267,7 +283,7 @@ public class MeterConsumerImpl { if (meterUpdateDataObject.isInstall()) { UpdateMeterInputBuilder updateMeterBuilder = new UpdateMeterInputBuilder(); - originalSwMeterView.put(meterKey, meterUpdateDataObject); + installedSwMeterView.put(meterKey, meterUpdateDataObject); meterService.updateMeter(updateMeterBuilder.build()); } @@ -506,4 +522,30 @@ public class MeterConsumerImpl { } } + + @Override + public List get() { + + List orderedList = new ArrayList(); + Collection meterList = originalSwMeterView.values(); + for (Iterator iterator = meterList.iterator(); iterator.hasNext();) { + orderedList.add(iterator.next()); + } + return orderedList; + } + + @Override + public DataObject getWithName(String name, Node n) { + if (this instanceof MeterConsumerImpl) { + Collection meterList = originalSwMeterView.values(); + for (Iterator iterator = meterList.iterator(); iterator.hasNext();) { + Meter meter = iterator.next(); + if (meter.getNode().equals(n) && meter.getMeterName().equals(name)) { + + return meter; + } + } + } + return null; + } }