Bug 5540 - MeterStatsResponseConvertor, MeterConfigStatsResponseConvertor 75/40875/21
authorTomas Slusny <tomas.slusny@pantheon.sk>
Mon, 27 Jun 2016 13:49:27 +0000 (15:49 +0200)
committerTomas Slusny <tomas.slusny@pantheon.sk>
Wed, 3 Aug 2016 15:52:14 +0000 (15:52 +0000)
- Reworked MeterStatsResponseConvertor to use new ConvertorManager desing
- Moved part of logic of MeterStatsResponseConvertor to new
  MeterConfigStatsResponseConvertor
- Updated tests and usage of MeterStatsResponseConvertor and
  MeterConfigStatsResponseConvertor accordingly

Change-Id: I5555fae748fd8d3c2e0baa8d2b56ee450fe4697b
Signed-off-by: Tomas Slusny <tomas.slusny@pantheon.sk>
openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/statistics/SinglePurposeMultipartReplyTranslator.java
openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/statistics/services/AllMeterConfigStatsService.java
openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/statistics/services/compatibility/MeterStatisticsToNotificationTransformer.java
openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/statistics/services/direct/MeterDirectStatisticsService.java
openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/sal/convertor/ConvertorManager.java
openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/sal/convertor/MeterConfigStatsResponseConvertor.java [new file with mode: 0644]
openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/sal/convertor/MeterStatsResponseConvertor.java
openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/translator/MultipartReplyTranslator.java
openflowplugin/src/test/java/org/opendaylight/openflowplugin/openflow/md/core/sal/convertor/MeterConfigStatsResponseConvertorTest.java [new file with mode: 0644]
openflowplugin/src/test/java/org/opendaylight/openflowplugin/openflow/md/core/sal/convertor/MeterStatsResponseConvertorTest.java

index 732bc4f465ba2cce2f0a1213424fbacc0bd56810..a4d5ed1cea9bfb2654a25ef4570546f609043364 100644 (file)
@@ -9,11 +9,13 @@ package org.opendaylight.openflowplugin.impl.statistics;
 
 import java.math.BigInteger;
 import java.util.ArrayList;
+import java.util.Collections;
 import java.util.List;
+import java.util.Optional;
 import org.opendaylight.openflowplugin.api.openflow.md.util.OpenflowVersion;
+import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.ConvertorManager;
 import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.FlowStatsResponseConvertor;
 import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.GroupStatsResponseConvertor;
-import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.MeterStatsResponseConvertor;
 import org.opendaylight.openflowplugin.openflow.md.util.InventoryDataServiceUtil;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.Counter32;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.Counter64;
@@ -49,6 +51,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.Meter
 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.MeterKbps;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.MeterPktps;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.MeterStats;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.meter.config.stats.reply.MeterConfigStats;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.statistics.types.rev130925.duration.DurationBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.statistics.types.rev130925.node.connector.statistics.BytesBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.statistics.types.rev130925.node.connector.statistics.PacketsBuilder;
@@ -107,18 +110,16 @@ public class SinglePurposeMultipartReplyTranslator {
 
     private static FlowStatsResponseConvertor flowStatsConvertor = new FlowStatsResponseConvertor();
     private static GroupStatsResponseConvertor groupStatsConvertor = new GroupStatsResponseConvertor();
-    private static MeterStatsResponseConvertor meterStatsConvertor = new MeterStatsResponseConvertor();
 
 
     public List<DataObject> translate(final BigInteger datapathId, final short version, final OfHeader msg) {
 
         List<DataObject> listDataObject = new ArrayList<>();
 
-        OpenflowVersion ofVersion = OpenflowVersion.get(version);
-
         if (msg instanceof MultipartReplyMessage) {
             MultipartReplyMessage mpReply = (MultipartReplyMessage) msg;
-            NodeId node = SinglePurposeMultipartReplyTranslator.nodeIdFromDatapathId(datapathId);
+            OpenflowVersion ofVersion = OpenflowVersion.get(version);
+            NodeId node = nodeIdFromDatapathId(datapathId);
 
             translateFlow(listDataObject, mpReply, node, ofVersion, datapathId);
             translateAggregate(listDataObject, mpReply, node);
@@ -345,7 +346,10 @@ public class SinglePurposeMultipartReplyTranslator {
 
         MultipartReplyMeterCase caseBody = (MultipartReplyMeterCase) mpReply.getMultipartReplyBody();
         MultipartReplyMeter replyBody = caseBody.getMultipartReplyMeter();
-        message.setMeterStats(meterStatsConvertor.toSALMeterStatsList(replyBody.getMeterStats()));
+        final Optional<List<org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.meter.statistics.reply.MeterStats>> meterStatsList =
+                ConvertorManager.getInstance().convert(replyBody.getMeterStats());
+
+        message.setMeterStats(meterStatsList.orElse(Collections.emptyList()));
 
         listDataObject.add(message.build());
     }
@@ -364,7 +368,9 @@ public class SinglePurposeMultipartReplyTranslator {
 
         MultipartReplyMeterConfigCase caseBody = (MultipartReplyMeterConfigCase) mpReply.getMultipartReplyBody();
         MultipartReplyMeterConfig replyBody = caseBody.getMultipartReplyMeterConfig();
-        message.setMeterConfigStats(meterStatsConvertor.toSALMeterConfigList(replyBody.getMeterConfig()));
+        final Optional<List<MeterConfigStats>> meterConfigStatsList = ConvertorManager.getInstance().convert(replyBody.getMeterConfig());
+
+        message.setMeterConfigStats(meterConfigStatsList.orElse(Collections.emptyList()));
 
         listDataObject.add(message.build());
     }
index 1fc57caca09c4873ada8a46c069e2dfc8f819405..4055b69f04a2fc4506081ada2b5752b5b375cc6a 100644 (file)
@@ -9,6 +9,7 @@ package org.opendaylight.openflowplugin.impl.statistics.services;
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Optional;
 import java.util.concurrent.atomic.AtomicLong;
 import org.opendaylight.openflowjava.protocol.api.util.BinContent;
 import org.opendaylight.openflowplugin.api.openflow.device.DeviceContext;
@@ -16,7 +17,7 @@ import org.opendaylight.openflowplugin.api.openflow.device.RequestContextStack;
 import org.opendaylight.openflowplugin.api.openflow.device.Xid;
 import org.opendaylight.openflowplugin.impl.services.RequestInputUtils;
 import org.opendaylight.openflowplugin.impl.statistics.services.compatibility.AbstractCompatibleStatService;
-import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.MeterStatsResponseConvertor;
+import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.ConvertorManager;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.transaction.rev150304.TransactionId;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.statistics.rev131111.GetAllMeterConfigStatisticsInput;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.statistics.rev131111.GetAllMeterConfigStatisticsOutput;
@@ -40,7 +41,6 @@ final class AllMeterConfigStatsService
         extends AbstractCompatibleStatService<GetAllMeterConfigStatisticsInput, GetAllMeterConfigStatisticsOutput, MeterConfigStatsUpdated> {
 
     private static final MultipartRequestMeterConfigCase METER_CONFIG_CASE;
-    private static MeterStatsResponseConvertor meterStatsConvertor = new MeterStatsResponseConvertor();
 
 
     static {
@@ -81,10 +81,14 @@ final class AllMeterConfigStatsService
         for (MultipartReply mpReply : result) {
             MultipartReplyMeterConfigCase caseBody = (MultipartReplyMeterConfigCase) mpReply.getMultipartReplyBody();
             MultipartReplyMeterConfig replyBody = caseBody.getMultipartReplyMeterConfig();
-            message.getMeterConfigStats().addAll(meterStatsConvertor.toSALMeterConfigList(replyBody.getMeterConfig()));
 
+            final Optional<List<MeterConfigStats>> meterConfigStatsList = ConvertorManager.getInstance().convert(replyBody.getMeterConfig());
+
+            if (meterConfigStatsList.isPresent()) {
+                message.getMeterConfigStats().addAll(meterConfigStatsList.get());
+            }
         }
 
         return message.build();
     }
-}
+}
\ No newline at end of file
index f4f09234fb4b7a08e311145e5cd151a76b18af1d..8f15ba34cc32c2130ea9be81603440cd02d8d4ac 100644 (file)
@@ -10,9 +10,10 @@ package org.opendaylight.openflowplugin.impl.statistics.services.compatibility;
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Optional;
 import org.opendaylight.openflowplugin.api.openflow.device.DeviceInfo;
 import org.opendaylight.openflowplugin.api.openflow.md.util.OpenflowVersion;
-import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.MeterStatsResponseConvertor;
+import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.ConvertorManager;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.transaction.rev150304.TransactionId;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.statistics.rev131111.MeterStatisticsUpdated;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.statistics.rev131111.MeterStatisticsUpdatedBuilder;
@@ -26,8 +27,6 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731
  */
 public class MeterStatisticsToNotificationTransformer {
 
-    private static MeterStatsResponseConvertor meterStatsConvertor = new MeterStatsResponseConvertor();
-
     /**
      * @param mpReplyList   raw multipart response from device
      * @param deviceInfo   device state
@@ -49,7 +48,11 @@ public class MeterStatisticsToNotificationTransformer {
         for (MultipartReply mpReply : mpReplyList) {
             MultipartReplyMeterCase caseBody = (MultipartReplyMeterCase) mpReply.getMultipartReplyBody();
             MultipartReplyMeter replyBody = caseBody.getMultipartReplyMeter();
-            notification.getMeterStats().addAll(meterStatsConvertor.toSALMeterStatsList(replyBody.getMeterStats()));
+            final Optional<List<MeterStats>> meterStatsList = ConvertorManager.getInstance().convert(replyBody.getMeterStats());
+
+            if (meterStatsList.isPresent()) {
+                notification.getMeterStats().addAll(meterStatsList.get());
+            }
         }
 
         return notification.build();
index 55e0fab0cc7bddfa8483901168506c97d9693cf2..c67d126f453c194f95882534c1266b0e0fb93d9e 100644 (file)
@@ -10,11 +10,12 @@ package org.opendaylight.openflowplugin.impl.statistics.services.direct;
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Optional;
 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
 import org.opendaylight.openflowplugin.api.OFConstants;
 import org.opendaylight.openflowplugin.api.openflow.device.DeviceContext;
 import org.opendaylight.openflowplugin.api.openflow.device.RequestContextStack;
-import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.MeterStatsResponseConvertor;
+import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.ConvertorManager;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.direct.statistics.rev160511.GetMeterStatisticsInput;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.direct.statistics.rev160511.GetMeterStatisticsOutput;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.direct.statistics.rev160511.GetMeterStatisticsOutputBuilder;
@@ -39,8 +40,6 @@ import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
  * The Meter direct statistics service.
  */
 public class MeterDirectStatisticsService extends AbstractDirectStatisticsService<GetMeterStatisticsInput, GetMeterStatisticsOutput> {
-    private final MeterStatsResponseConvertor meterStatsConvertor = new MeterStatsResponseConvertor();
-
     /**
      * Instantiates a new Meter direct statistics service.
      *
@@ -74,7 +73,11 @@ public class MeterDirectStatisticsService extends AbstractDirectStatisticsServic
             for (final MultipartReply mpReply : input) {
                 final MultipartReplyMeterCase caseBody = (MultipartReplyMeterCase) mpReply.getMultipartReplyBody();
                 final MultipartReplyMeter replyBody = caseBody.getMultipartReplyMeter();
-                meterStats.addAll(meterStatsConvertor.toSALMeterStatsList(replyBody.getMeterStats()));
+                final Optional<List<MeterStats>> meterStatsList = ConvertorManager.getInstance().convert(replyBody.getMeterStats());
+
+                if (meterStatsList.isPresent()) {
+                    meterStats.addAll(meterStatsList.get());
+                }
             }
         }
 
index 882c4c550f4ffb9cb9d1ef8f0070d9a075b4f060..cb4465f181d7bde1e0afb7725ae87395eb3efc14 100644 (file)
@@ -35,6 +35,8 @@ public class ConvertorManager {
         INSTANCE.registerConvertor(new TableFeaturesConvertor());
         INSTANCE.registerConvertor(new TableFeaturesResponseConvertor());
         INSTANCE.registerConvertor(new MeterConvertor());
+        INSTANCE.registerConvertor(new MeterStatsResponseConvertor());
+        INSTANCE.registerConvertor(new MeterConfigStatsResponseConvertor());
     }
 
     // Actual convertor keys
diff --git a/openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/sal/convertor/MeterConfigStatsResponseConvertor.java b/openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/sal/convertor/MeterConfigStatsResponseConvertor.java
new file mode 100644 (file)
index 0000000..9fbb8cd
--- /dev/null
@@ -0,0 +1,149 @@
+/*
+ * Copyright (c) 2016 Cisco Systems, Inc. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+
+package org.opendaylight.openflowplugin.openflow.md.core.sal.convertor;
+
+import java.util.ArrayList;
+import java.util.List;
+import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.common.Convertor;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.BandId;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.MeterBandType;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.MeterFlags;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.MeterId;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.band.type.band.type.DropBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.band.type.band.type.DscpRemarkBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.band.type.band.type.ExperimenterBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.meter.MeterBandHeadersBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.meter.config.stats.reply.MeterConfigStats;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.meter.config.stats.reply.MeterConfigStatsBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.meter.config.stats.reply.MeterConfigStatsKey;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.meter.meter.band.headers.MeterBandHeader;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.meter.meter.band.headers.MeterBandHeaderBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.meter.meter.band.headers.MeterBandHeaderKey;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.meter.meter.band.headers.meter.band.header.MeterBandTypesBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.meter.band.header.meter.band.MeterBandDropCase;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.meter.band.header.meter.band.MeterBandDscpRemarkCase;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.meter.band.header.meter.band.MeterBandExperimenterCase;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.meter.band.header.meter.band.meter.band.drop._case.MeterBandDrop;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.meter.band.header.meter.band.meter.band.dscp.remark._case.MeterBandDscpRemark;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.meter.band.header.meter.band.meter.band.experimenter._case.MeterBandExperimenter;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.meter.config._case.multipart.reply.meter.config.MeterConfig;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.meter.config._case.multipart.reply.meter.config.meter.config.Bands;
+
+/**
+ * Converts list of OF library config meter stats to MD-SAL config meter stats.
+ *
+ * Example usage:
+ * <pre>
+ * {@code
+ * Optional<List<MeterConfigStats>> salMeterConfigStats = ConvertorManager.getInstance().convert(
+ *  ofMeterConfigStats);
+ * }
+ * </pre>
+ */
+public class MeterConfigStatsResponseConvertor implements Convertor<List<MeterConfig>, List<MeterConfigStats>> {
+
+    @Override
+    public Class<?> getType() {
+        return MeterConfig.class;
+    }
+
+    @Override
+    public List<MeterConfigStats> convert(List<MeterConfig> source) {
+        List<MeterConfigStats> listMeterConfigStats = new ArrayList<>();
+
+        for (MeterConfig meterConfig : source) {
+            MeterConfigStatsBuilder meterConfigStatsBuilder = new MeterConfigStatsBuilder();
+            meterConfigStatsBuilder.setMeterId(new MeterId(meterConfig.getMeterId().getValue()));
+            meterConfigStatsBuilder.setKey(new MeterConfigStatsKey(meterConfigStatsBuilder.getMeterId()));
+            MeterBandHeadersBuilder meterBandHeadersBuilder = new MeterBandHeadersBuilder();
+            List<Bands> bands = meterConfig.getBands();
+
+            MeterFlags meterFlags = new MeterFlags(meterConfig.getFlags().isOFPMFBURST(),
+                    meterConfig.getFlags().isOFPMFKBPS(),
+                    meterConfig.getFlags().isOFPMFPKTPS(),
+                    meterConfig.getFlags().isOFPMFSTATS());
+
+            meterConfigStatsBuilder.setFlags(meterFlags);
+            List<MeterBandHeader> listBandHeaders = new ArrayList<>();
+            int bandKey = 0;
+
+            for (Bands band : bands) {
+                MeterBandHeaderBuilder meterBandHeaderBuilder = new MeterBandHeaderBuilder();
+                if (band.getMeterBand() instanceof MeterBandDropCase) {
+                    MeterBandDropCase dropCaseBand = (MeterBandDropCase) band.getMeterBand();
+                    MeterBandDrop dropBand = dropCaseBand.getMeterBandDrop();
+                    DropBuilder dropBuilder = new DropBuilder();
+                    dropBuilder.setDropBurstSize(dropBand.getBurstSize());
+                    dropBuilder.setDropRate(dropBand.getRate());
+                    meterBandHeaderBuilder.setBandType(dropBuilder.build());
+
+                    meterBandHeaderBuilder.setBandBurstSize(dropBand.getBurstSize());
+                    meterBandHeaderBuilder.setBandRate(dropBand.getRate());
+                    BandId bandId = new BandId((long) bandKey);
+                    meterBandHeaderBuilder.setKey(new MeterBandHeaderKey(bandId));
+                    meterBandHeaderBuilder.setBandId(bandId);
+
+                    MeterBandTypesBuilder meterBandTypesBuilder = new MeterBandTypesBuilder();
+                    meterBandTypesBuilder.setFlags(new MeterBandType(true, false, false));
+                    meterBandHeaderBuilder.setMeterBandTypes(meterBandTypesBuilder.build());
+
+                    listBandHeaders.add(meterBandHeaderBuilder.build());
+                } else if (band.getMeterBand() instanceof MeterBandDscpRemarkCase) {
+                    MeterBandDscpRemarkCase dscpRemarkCaseBand = (MeterBandDscpRemarkCase) band.getMeterBand();
+                    MeterBandDscpRemark dscpRemarkBand = dscpRemarkCaseBand.getMeterBandDscpRemark();
+                    DscpRemarkBuilder dscpRemarkBuilder = new DscpRemarkBuilder();
+                    dscpRemarkBuilder.setDscpRemarkBurstSize(dscpRemarkBand.getBurstSize());
+                    dscpRemarkBuilder.setDscpRemarkRate(dscpRemarkBand.getRate());
+                    dscpRemarkBuilder.setPrecLevel(dscpRemarkBand.getPrecLevel());
+                    meterBandHeaderBuilder.setBandType(dscpRemarkBuilder.build());
+
+                    meterBandHeaderBuilder.setBandBurstSize(dscpRemarkBand.getBurstSize());
+                    meterBandHeaderBuilder.setBandRate(dscpRemarkBand.getRate());
+                    BandId bandId = new BandId((long) bandKey);
+                    meterBandHeaderBuilder.setKey(new MeterBandHeaderKey(bandId));
+                    meterBandHeaderBuilder.setBandId(bandId);
+
+                    MeterBandTypesBuilder meterBandTypesBuilder = new MeterBandTypesBuilder();
+                    meterBandTypesBuilder.setFlags(new MeterBandType(false, true, false));
+                    meterBandHeaderBuilder.setMeterBandTypes(meterBandTypesBuilder.build());
+                    listBandHeaders.add(meterBandHeaderBuilder.build());
+
+                } else if (band.getMeterBand() instanceof MeterBandExperimenterCase) {
+                    MeterBandExperimenterCase experimenterCaseBand = (MeterBandExperimenterCase) band.getMeterBand();
+                    MeterBandExperimenter experimenterBand = experimenterCaseBand.getMeterBandExperimenter();
+                    ExperimenterBuilder experimenterBuilder = new ExperimenterBuilder();
+                    experimenterBuilder.setExperimenterBurstSize(experimenterBand.getBurstSize());
+                    experimenterBuilder.setExperimenterRate(experimenterBand.getRate());
+                    meterBandHeaderBuilder.setBandType(experimenterBuilder.build());
+
+                    meterBandHeaderBuilder.setBandBurstSize(experimenterBand.getBurstSize());
+                    meterBandHeaderBuilder.setBandRate(experimenterBand.getRate());
+                    BandId bandId = new BandId((long) bandKey);
+                    meterBandHeaderBuilder.setKey(new MeterBandHeaderKey(bandId));
+                    meterBandHeaderBuilder.setBandId(bandId);
+
+                    MeterBandTypesBuilder meterBandTypesBuilder = new MeterBandTypesBuilder();
+                    meterBandTypesBuilder.setFlags(new MeterBandType(false, false, true));
+                    meterBandHeaderBuilder.setMeterBandTypes(meterBandTypesBuilder.build());
+
+                    listBandHeaders.add(meterBandHeaderBuilder.build());
+
+                }
+
+                bandKey++;
+            }
+
+            meterBandHeadersBuilder.setMeterBandHeader(listBandHeaders);
+            meterConfigStatsBuilder.setMeterBandHeaders(meterBandHeadersBuilder.build());
+            listMeterConfigStats.add(meterConfigStatsBuilder.build());
+        }
+
+        return listMeterConfigStats;
+    }
+}
\ No newline at end of file
index 9964cc31bf1a1506ee7c2da91422293076d20dfd..b9fd336692cbe122a3c113787d5a1b9b241df986 100644 (file)
@@ -12,21 +12,9 @@ import java.util.ArrayList;
 import java.util.List;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.Counter32;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.Counter64;
+import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.common.Convertor;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.BandId;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.MeterBandType;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.MeterFlags;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.MeterId;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.band.type.band.type.DropBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.band.type.band.type.DscpRemarkBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.band.type.band.type.ExperimenterBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.meter.MeterBandHeadersBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.meter.config.stats.reply.MeterConfigStats;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.meter.config.stats.reply.MeterConfigStatsBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.meter.config.stats.reply.MeterConfigStatsKey;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.meter.meter.band.headers.MeterBandHeader;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.meter.meter.band.headers.MeterBandHeaderBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.meter.meter.band.headers.MeterBandHeaderKey;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.meter.meter.band.headers.meter.band.header.MeterBandTypesBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.meter.statistics.DurationBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.meter.statistics.MeterBandStatsBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.meter.statistics.meter.band.stats.BandStat;
@@ -35,177 +23,71 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.meter
 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.meter.statistics.reply.MeterStats;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.meter.statistics.reply.MeterStatsBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.meter.statistics.reply.MeterStatsKey;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.meter.band.header.meter.band.MeterBandDropCase;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.meter.band.header.meter.band.MeterBandDscpRemarkCase;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.meter.band.header.meter.band.MeterBandExperimenterCase;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.meter.band.header.meter.band.meter.band.drop._case.MeterBandDrop;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.meter.band.header.meter.band.meter.band.dscp.remark._case.MeterBandDscpRemark;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.meter.band.header.meter.band.meter.band.experimenter._case.MeterBandExperimenter;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.meter._case.multipart.reply.meter.meter.stats.MeterBandStats;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.meter.config._case.multipart.reply.meter.config.MeterConfig;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.meter.config._case.multipart.reply.meter.config.meter.config.Bands;
 
 /**
- * Class is an utility class for converting group related statistics messages coming from switch to MD-SAL
- * messages.
+ * Converts list of OF library meter stats to MD-SAL meter stats.
  *
- * @author avishnoi@in.ibm.com
+ * Example usage:
+ * <pre>
+ * {@code
+ * Optional<List<MeterStats>> salMeterStats = ConvertorManager.getInstance().convert(
+ *  ofMeterStats);
+ * }
+ * </pre>
  */
-public class MeterStatsResponseConvertor {
-
-    /**
-     * Method converts list of OF Meter Stats to SAL Meter Stats.
-     *
-     * @param allMeterStats all meter stats
-     * @return List of MeterStats
-     */
-    public List<MeterStats> toSALMeterStatsList(
-            List<org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply
-                    .multipart.reply.body.multipart.reply.meter._case.multipart.reply.meter.MeterStats> allMeterStats) {
-        List<MeterStats> convertedSALMeters = new ArrayList<MeterStats>();
-        for (org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.
-                multipart.reply.body.multipart.reply.meter._case.multipart.reply.meter.MeterStats meter : allMeterStats) {
-            convertedSALMeters.add(toSALMeterStats(meter));
-        }
-        return convertedSALMeters;
-
+public class MeterStatsResponseConvertor implements Convertor<
+        List<org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply
+                .multipart.reply.body.multipart.reply.meter._case.multipart.reply.meter.MeterStats>,
+        List<MeterStats>> {
+
+    @Override
+    public Class<?> getType() {
+        return org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.meter._case.multipart.reply.meter.MeterStats.class;
     }
 
-    /**
-     * Method convert MeterStats message from library to MD SAL defined MeterStats
-     *
-     * @param meterStats MeterStats from library
-     * @return MeterStats -- MeterStats defined in MD-SAL
-     */
-    public MeterStats toSALMeterStats(org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply
-                                              .multipart.reply.body.multipart.reply.meter._case.multipart.reply.meter.MeterStats meterStats) {
-
-        MeterStatsBuilder salMeterStats = new MeterStatsBuilder();
-        salMeterStats.setByteInCount(new Counter64(meterStats.getByteInCount()));
+    @Override
+    public List<MeterStats> convert(List<org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.meter._case.multipart.reply.meter.MeterStats> source) {
+        List<MeterStats> convertedSALMeters = new ArrayList<>();
 
-        DurationBuilder time = new DurationBuilder();
-        time.setSecond(new Counter32(meterStats.getDurationSec()));
-        time.setNanosecond(new Counter32(meterStats.getDurationNsec()));
-        salMeterStats.setDuration(time.build());
-
-        salMeterStats.setFlowCount(new Counter32(meterStats.getFlowCount()));
-        salMeterStats.setMeterId(new MeterId(meterStats.getMeterId().getValue()));
-        salMeterStats.setPacketInCount(new Counter64(meterStats.getPacketInCount()));
-        salMeterStats.setKey(new MeterStatsKey(salMeterStats.getMeterId()));
-
-        List<MeterBandStats> allMeterBandStats = meterStats.getMeterBandStats();
-
-        MeterBandStatsBuilder meterBandStatsBuilder = new MeterBandStatsBuilder();
-        List<BandStat> listAllBandStats = new ArrayList<BandStat>();
-        int bandKey = 0;
-        for (MeterBandStats meterBandStats : allMeterBandStats) {
-            BandStatBuilder bandStatBuilder = new BandStatBuilder();
-            bandStatBuilder.setByteBandCount(new Counter64(meterBandStats.getByteBandCount()));
-            bandStatBuilder.setPacketBandCount(new Counter64(meterBandStats.getPacketBandCount()));
-            BandId bandId = new BandId((long) bandKey);
-            bandStatBuilder.setKey(new BandStatKey(bandId));
-            bandStatBuilder.setBandId(bandId);
-            bandKey++;
-            listAllBandStats.add(bandStatBuilder.build());
-        }
-        meterBandStatsBuilder.setBandStat(listAllBandStats);
-        salMeterStats.setMeterBandStats(meterBandStatsBuilder.build());
-        return salMeterStats.build();
-    }
+        for (org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.
+                multipart.reply.body.multipart.reply.meter._case.multipart.reply.meter.MeterStats meterStats : source) {
+            // Convert MeterStats message from library to MD SAL defined MeterStats
+            MeterStatsBuilder salMeterStats = new MeterStatsBuilder();
+            salMeterStats.setByteInCount(new Counter64(meterStats.getByteInCount()));
 
-    /**
-     * Method convert list of OF Meter config Stats to SAL Meter Config stats
-     *
-     * @param allMeterConfigs all meter configs
-     * @return list of MeterConfigStats
-     */
-    public List<MeterConfigStats> toSALMeterConfigList(List<MeterConfig> allMeterConfigs) {
+            DurationBuilder time = new DurationBuilder();
+            time.setSecond(new Counter32(meterStats.getDurationSec()));
+            time.setNanosecond(new Counter32(meterStats.getDurationNsec()));
+            salMeterStats.setDuration(time.build());
 
-        List<MeterConfigStats> listMeterConfigStats = new ArrayList<MeterConfigStats>();
-        for (MeterConfig meterConfig : allMeterConfigs) {
-            MeterConfigStatsBuilder meterConfigStatsBuilder = new MeterConfigStatsBuilder();
-            meterConfigStatsBuilder.setMeterId(new MeterId(meterConfig.getMeterId().getValue()));
-            meterConfigStatsBuilder.setKey(new MeterConfigStatsKey(meterConfigStatsBuilder.getMeterId()));
+            salMeterStats.setFlowCount(new Counter32(meterStats.getFlowCount()));
+            salMeterStats.setMeterId(new MeterId(meterStats.getMeterId().getValue()));
+            salMeterStats.setPacketInCount(new Counter64(meterStats.getPacketInCount()));
+            salMeterStats.setKey(new MeterStatsKey(salMeterStats.getMeterId()));
 
-            MeterBandHeadersBuilder meterBandHeadersBuilder = new MeterBandHeadersBuilder();
-            List<Bands> bands = meterConfig.getBands();
+            List<MeterBandStats> allMeterBandStats = meterStats.getMeterBandStats();
 
-            MeterFlags meterFlags = new MeterFlags(meterConfig.getFlags().isOFPMFBURST(),
-                    meterConfig.getFlags().isOFPMFKBPS(),
-                    meterConfig.getFlags().isOFPMFPKTPS(),
-                    meterConfig.getFlags().isOFPMFSTATS());
-            meterConfigStatsBuilder.setFlags(meterFlags);
-            List<MeterBandHeader> listBandHeaders = new ArrayList<MeterBandHeader>();
+            MeterBandStatsBuilder meterBandStatsBuilder = new MeterBandStatsBuilder();
+            List<BandStat> listAllBandStats = new ArrayList<>();
             int bandKey = 0;
-            for (Bands band : bands) {
-                MeterBandHeaderBuilder meterBandHeaderBuilder = new MeterBandHeaderBuilder();
-                if (band.getMeterBand() instanceof MeterBandDropCase) {
-                    MeterBandDropCase dropCaseBand = (MeterBandDropCase) band.getMeterBand();
-                    MeterBandDrop dropBand = dropCaseBand.getMeterBandDrop();
-                    DropBuilder dropBuilder = new DropBuilder();
-                    dropBuilder.setDropBurstSize(dropBand.getBurstSize());
-                    dropBuilder.setDropRate(dropBand.getRate());
-                    meterBandHeaderBuilder.setBandType(dropBuilder.build());
 
-                    meterBandHeaderBuilder.setBandBurstSize(dropBand.getBurstSize());
-                    meterBandHeaderBuilder.setBandRate(dropBand.getRate());
-                    BandId bandId = new BandId((long) bandKey);
-                    meterBandHeaderBuilder.setKey(new MeterBandHeaderKey(bandId));
-                    meterBandHeaderBuilder.setBandId(bandId);
-
-                    MeterBandTypesBuilder meterBandTypesBuilder = new MeterBandTypesBuilder();
-                    meterBandTypesBuilder.setFlags(new MeterBandType(true, false, false));
-                    meterBandHeaderBuilder.setMeterBandTypes(meterBandTypesBuilder.build());
-
-                    listBandHeaders.add(meterBandHeaderBuilder.build());
-                } else if (band.getMeterBand() instanceof MeterBandDscpRemarkCase) {
-                    MeterBandDscpRemarkCase dscpRemarkCaseBand = (MeterBandDscpRemarkCase) band.getMeterBand();
-                    MeterBandDscpRemark dscpRemarkBand = dscpRemarkCaseBand.getMeterBandDscpRemark();
-                    DscpRemarkBuilder dscpRemarkBuilder = new DscpRemarkBuilder();
-                    dscpRemarkBuilder.setDscpRemarkBurstSize(dscpRemarkBand.getBurstSize());
-                    dscpRemarkBuilder.setDscpRemarkRate(dscpRemarkBand.getRate());
-                    dscpRemarkBuilder.setPrecLevel(dscpRemarkBand.getPrecLevel());
-                    meterBandHeaderBuilder.setBandType(dscpRemarkBuilder.build());
-
-                    meterBandHeaderBuilder.setBandBurstSize(dscpRemarkBand.getBurstSize());
-                    meterBandHeaderBuilder.setBandRate(dscpRemarkBand.getRate());
-                    BandId bandId = new BandId((long) bandKey);
-                    meterBandHeaderBuilder.setKey(new MeterBandHeaderKey(bandId));
-                    meterBandHeaderBuilder.setBandId(bandId);
-
-                    MeterBandTypesBuilder meterBandTypesBuilder = new MeterBandTypesBuilder();
-                    meterBandTypesBuilder.setFlags(new MeterBandType(false, true, false));
-                    meterBandHeaderBuilder.setMeterBandTypes(meterBandTypesBuilder.build());
-                    listBandHeaders.add(meterBandHeaderBuilder.build());
-
-                } else if (band.getMeterBand() instanceof MeterBandExperimenterCase) {
-                    MeterBandExperimenterCase experimenterCaseBand = (MeterBandExperimenterCase) band.getMeterBand();
-                    MeterBandExperimenter experimenterBand = experimenterCaseBand.getMeterBandExperimenter();
-                    ExperimenterBuilder experimenterBuilder = new ExperimenterBuilder();
-                    experimenterBuilder.setExperimenterBurstSize(experimenterBand.getBurstSize());
-                    experimenterBuilder.setExperimenterRate(experimenterBand.getRate());
-                    meterBandHeaderBuilder.setBandType(experimenterBuilder.build());
-
-                    meterBandHeaderBuilder.setBandBurstSize(experimenterBand.getBurstSize());
-                    meterBandHeaderBuilder.setBandRate(experimenterBand.getRate());
-                    BandId bandId = new BandId((long) bandKey);
-                    meterBandHeaderBuilder.setKey(new MeterBandHeaderKey(bandId));
-                    meterBandHeaderBuilder.setBandId(bandId);
-
-                    MeterBandTypesBuilder meterBandTypesBuilder = new MeterBandTypesBuilder();
-                    meterBandTypesBuilder.setFlags(new MeterBandType(false, false, true));
-                    meterBandHeaderBuilder.setMeterBandTypes(meterBandTypesBuilder.build());
-
-                    listBandHeaders.add(meterBandHeaderBuilder.build());
-
-                }
+            for (MeterBandStats meterBandStats : allMeterBandStats) {
+                BandStatBuilder bandStatBuilder = new BandStatBuilder();
+                bandStatBuilder.setByteBandCount(new Counter64(meterBandStats.getByteBandCount()));
+                bandStatBuilder.setPacketBandCount(new Counter64(meterBandStats.getPacketBandCount()));
+                BandId bandId = new BandId((long) bandKey);
+                bandStatBuilder.setKey(new BandStatKey(bandId));
+                bandStatBuilder.setBandId(bandId);
                 bandKey++;
+                listAllBandStats.add(bandStatBuilder.build());
             }
-            meterBandHeadersBuilder.setMeterBandHeader(listBandHeaders);
-            meterConfigStatsBuilder.setMeterBandHeaders(meterBandHeadersBuilder.build());
-            listMeterConfigStats.add(meterConfigStatsBuilder.build());
+
+            meterBandStatsBuilder.setBandStat(listAllBandStats);
+            salMeterStats.setMeterBandStats(meterBandStatsBuilder.build());
+            convertedSALMeters.add(salMeterStats.build());
         }
 
-        return listMeterConfigStats;
+        return convertedSALMeters;
     }
-}
+}
\ No newline at end of file
index 6cbe4d415c9cf860fce622b2b1cd73d4c24dbb12..98a0c5bec991be1cf55b1ef59795ce8aa4e9b218 100644 (file)
@@ -10,15 +10,17 @@ package org.opendaylight.openflowplugin.openflow.md.core.translator;
 
 import java.math.BigInteger;
 import java.util.ArrayList;
+import java.util.Collections;
 import java.util.List;
+import java.util.Optional;
 import java.util.concurrent.CopyOnWriteArrayList;
 import org.opendaylight.openflowplugin.api.openflow.md.core.IMDMessageTranslator;
 import org.opendaylight.openflowplugin.api.openflow.md.core.SwitchConnectionDistinguisher;
 import org.opendaylight.openflowplugin.api.openflow.md.core.session.SessionContext;
 import org.opendaylight.openflowplugin.api.openflow.md.util.OpenflowVersion;
+import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.ConvertorManager;
 import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.FlowStatsResponseConvertor;
 import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.GroupStatsResponseConvertor;
-import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.MeterStatsResponseConvertor;
 import org.opendaylight.openflowplugin.openflow.md.util.InventoryDataServiceUtil;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.Counter32;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.Counter64;
@@ -54,6 +56,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.Meter
 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.MeterKbps;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.MeterPktps;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.MeterStats;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.meter.config.stats.reply.MeterConfigStats;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.statistics.types.rev130925.duration.DurationBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.statistics.types.rev130925.node.connector.statistics.BytesBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.statistics.types.rev130925.node.connector.statistics.PacketsBuilder;
@@ -110,7 +113,6 @@ public class MultipartReplyTranslator implements IMDMessageTranslator<OfHeader,
 
     private static FlowStatsResponseConvertor flowStatsConvertor = new FlowStatsResponseConvertor();
     private static GroupStatsResponseConvertor groupStatsConvertor = new GroupStatsResponseConvertor();
-    private static MeterStatsResponseConvertor meterStatsConvertor = new MeterStatsResponseConvertor();
 
 
     @Override
@@ -302,8 +304,11 @@ public class MultipartReplyTranslator implements IMDMessageTranslator<OfHeader,
 
                 MultipartReplyMeterCase caseBody = (MultipartReplyMeterCase)mpReply.getMultipartReplyBody();
                 MultipartReplyMeter replyBody = caseBody.getMultipartReplyMeter();
-                message.setMeterStats(meterStatsConvertor.toSALMeterStatsList(replyBody.getMeterStats()));
 
+                final Optional<List<org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.meter.statistics.reply.MeterStats>> meterStatsList =
+                        ConvertorManager.getInstance().convert(replyBody.getMeterStats());
+
+                message.setMeterStats(meterStatsList.orElse(Collections.emptyList()));
                 listDataObject.add(message.build());
                 return listDataObject;
             }
@@ -317,8 +322,10 @@ public class MultipartReplyTranslator implements IMDMessageTranslator<OfHeader,
 
                 MultipartReplyMeterConfigCase caseBody = (MultipartReplyMeterConfigCase)mpReply.getMultipartReplyBody();
                 MultipartReplyMeterConfig replyBody = caseBody.getMultipartReplyMeterConfig();
-                message.setMeterConfigStats(meterStatsConvertor.toSALMeterConfigList(replyBody.getMeterConfig()));
 
+                final Optional<List<MeterConfigStats>> meterConfigStatsList = ConvertorManager.getInstance().convert(replyBody.getMeterConfig());
+
+                message.setMeterConfigStats(meterConfigStatsList.orElse(Collections.emptyList()));
                 listDataObject.add(message.build());
                 return listDataObject;
             }
diff --git a/openflowplugin/src/test/java/org/opendaylight/openflowplugin/openflow/md/core/sal/convertor/MeterConfigStatsResponseConvertorTest.java b/openflowplugin/src/test/java/org/opendaylight/openflowplugin/openflow/md/core/sal/convertor/MeterConfigStatsResponseConvertorTest.java
new file mode 100644 (file)
index 0000000..4bb1cd3
--- /dev/null
@@ -0,0 +1,102 @@
+/*
+ * Copyright (c) 2016 Cisco Systems, Inc. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+
+package org.opendaylight.openflowplugin.openflow.md.core.sal.convertor;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.Optional;
+import org.junit.Test;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.meter.config.stats.reply.MeterConfigStats;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.MeterFlags;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.MeterId;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.meter.band.header.meter.band.MeterBandDropCaseBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.meter.band.header.meter.band.MeterBandDscpRemarkCaseBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.meter.band.header.meter.band.MeterBandExperimenterCaseBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.meter.band.header.meter.band.meter.band.drop._case.MeterBandDropBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.meter.band.header.meter.band.meter.band.dscp.remark._case.MeterBandDscpRemarkBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.meter.band.header.meter.band.meter.band.experimenter._case.MeterBandExperimenterBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.meter.config._case.multipart.reply.meter.config.MeterConfig;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.meter.config._case.multipart.reply.meter.config.MeterConfigBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.meter.config._case.multipart.reply.meter.config.meter.config.Bands;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.meter.config._case.multipart.reply.meter.config.meter.config.BandsBuilder;
+import org.opendaylight.yangtools.yang.binding.DataContainer;
+
+public class MeterConfigStatsResponseConvertorTest {
+    private static final int PRESET_COUNT = 7;
+
+    private List<MeterConfig> createMeterConfigList(){
+        List<MeterConfig> meterConfigs = new ArrayList<>();
+        MeterConfigBuilder meterConfigBuilder = new MeterConfigBuilder();
+        for (int i = 0; i < PRESET_COUNT; i++) {
+            meterConfigBuilder.setMeterId(new MeterId((long) i));
+            List<Bands> bandses = new ArrayList<>();
+
+            BandsBuilder bandsBuilder = new BandsBuilder();
+            bandsBuilder.setMeterBand(new MeterBandDropCaseBuilder()
+                    .setMeterBandDrop(new MeterBandDropBuilder().build()).build());
+            bandses.add(bandsBuilder.build());
+
+            bandsBuilder = new BandsBuilder();
+            bandsBuilder.setMeterBand(new MeterBandDscpRemarkCaseBuilder()
+                    .setMeterBandDscpRemark(new MeterBandDscpRemarkBuilder().build()).build());
+            bandses.add(bandsBuilder.build());
+
+            bandsBuilder = new BandsBuilder();
+            bandsBuilder.setMeterBand(new MockMeterBandBuilder());
+            bandses.add(bandsBuilder.build());
+
+            bandsBuilder = new BandsBuilder();
+            bandsBuilder.setMeterBand(new MeterBandExperimenterCaseBuilder()
+                    .setMeterBandExperimenter(new MeterBandExperimenterBuilder().build()).build());
+            bandses.add(bandsBuilder.build());
+
+            meterConfigBuilder.setBands(bandses);
+            meterConfigBuilder.setFlags(new MeterFlags(true, false, true, false));
+            meterConfigs.add(meterConfigBuilder.build());
+        }
+
+        return meterConfigs;
+    }
+
+    @Test
+    /**
+     * Test of basic mapping functionality of {@link MeterConfigStatsResponseConvertor#convert(java.util.List)} }
+     */
+    public void testToSALMeterConfigList() {
+        Optional<List<MeterConfigStats>> meterConfigsOptional = ConvertorManager.getInstance().convert(createMeterConfigList());
+        List<MeterConfigStats> meterConfigs = meterConfigsOptional.orElse(Collections.emptyList());
+
+        assertEquals(PRESET_COUNT, meterConfigs.size());
+        int cnt = 0;
+        for (MeterConfigStats meterConfigStats: meterConfigs){
+            assertEquals(new Long(cnt), meterConfigStats.getMeterId().getValue());
+            assertTrue(meterConfigStats.getFlags().isMeterBurst());
+            assertFalse(meterConfigStats.getFlags().isMeterKbps());
+            assertTrue(meterConfigStats.getFlags().isMeterPktps());
+            assertFalse(meterConfigStats.getFlags().isMeterStats());
+
+            cnt++;
+        }
+    }
+
+
+    private final class MockMeterBandBuilder implements org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.meter.band.header.MeterBand {
+
+        @Override
+        public Class<? extends DataContainer> getImplementedInterface() {
+            return MockMeterBandBuilder.class;
+        }
+    }
+
+}
\ No newline at end of file
index 8bc4c258942900991fc7ec119a512a159ea0dd95..16b9871ad339adc2a7f91bd42a8dfca04df26d1a 100644 (file)
@@ -9,33 +9,22 @@
 package org.opendaylight.openflowplugin.openflow.md.core.sal.convertor;
 
 import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
+
 import java.math.BigInteger;
 import java.util.ArrayList;
+import java.util.Collections;
 import java.util.List;
+import java.util.Optional;
 import org.junit.Test;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.meter.config.stats.reply.MeterConfigStats;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.meter.statistics.meter.band.stats.BandStat;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.meter.statistics.reply.MeterStats;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.meter.statistics.reply.MeterStatsKey;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.MeterFlags;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.MeterId;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.meter._case.multipart.reply.meter.MeterStatsBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.meter._case.multipart.reply.meter.meter.stats.MeterBandStats;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.meter._case.multipart.reply.meter.meter.stats.MeterBandStatsBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.meter.config._case.multipart.reply.meter.config.MeterConfig;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.meter.config._case.multipart.reply.meter.config.MeterConfigBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.meter.config._case.multipart.reply.meter.config.meter.config.Bands;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.meter.config._case.multipart.reply.meter.config.meter.config.BandsBuilder;
-import org.opendaylight.yangtools.yang.binding.DataContainer;
 
-/**
- * Created by Martin Bobak mbobak@cisco.com on 9/18/14.
- */
 public class MeterStatsResponseConvertorTest {
-
-    private static final MeterStatsResponseConvertor METER_STATS_RESPONSE_CONVERTOR = new MeterStatsResponseConvertor();
     private static final int PRESET_COUNT = 7;
 
 
@@ -67,30 +56,14 @@ public class MeterStatsResponseConvertorTest {
         return allMeterStats;
     }
 
-    private final List<MeterConfig> createMeterConfigList(){
-        List<MeterConfig> meterConfigs = new ArrayList<>();
-        MeterConfigBuilder meterConfigBuilder = new MeterConfigBuilder();
-        for (int i = 0; i < PRESET_COUNT; i++) {
-            meterConfigBuilder.setMeterId(new MeterId((long) i));
-            List<Bands> bandses = new ArrayList<>();
-            for (int j = 0; j < PRESET_COUNT; j++){
-                BandsBuilder bandsBuilder = new BandsBuilder();
-                bandsBuilder.setMeterBand(new MockMeterBandBuilder());
-                bandses.add(bandsBuilder.build());
-            }
-            meterConfigBuilder.setBands(bandses);
-            meterConfigBuilder.setFlags(new MeterFlags(true, false, true, false));
-            meterConfigs.add(meterConfigBuilder.build());
-        }
-        return meterConfigs;
-    }
     @Test
     /**
-     * Test of basic mapping functionality of {@link MeterStatsResponseConvertor#toSALMeterStatsList(java.util.List)}
+     * Test of basic mapping functionality of {@link MeterStatsResponseConvertor#convert(java.util.List)}
      */
     public void testToSALMeterStatsList() {
 
-        List<MeterStats> meterStatsList = METER_STATS_RESPONSE_CONVERTOR.toSALMeterStatsList(createMeterStatsLit());
+        Optional<List<MeterStats>> meterStatsListOptional = ConvertorManager.getInstance().convert(createMeterStatsLit());
+        List<MeterStats> meterStatsList = meterStatsListOptional.orElse(Collections.emptyList());
         assertEquals(PRESET_COUNT, meterStatsList.size());
 
         int cnt = 0;
@@ -115,33 +88,4 @@ public class MeterStatsResponseConvertorTest {
             cnt++;
         }
     }
-
-    @Test
-    /**
-     * Test of basic mapping functionality of {@link MeterStatsResponseConvertor#toSALMeterStatsList(java.util.List)}
-     */
-    public void testToSALMeterConfigList() {
-        List<MeterConfigStats> meterConfigs = METER_STATS_RESPONSE_CONVERTOR.toSALMeterConfigList(createMeterConfigList());
-        assertEquals(PRESET_COUNT, meterConfigs.size());
-        int cnt = 0;
-        for (MeterConfigStats meterConfigStats: meterConfigs){
-            assertEquals(new Long(cnt), meterConfigStats.getMeterId().getValue());
-            assertTrue(meterConfigStats.getFlags().isMeterBurst());
-            assertFalse(meterConfigStats.getFlags().isMeterKbps());
-            assertTrue(meterConfigStats.getFlags().isMeterPktps());
-            assertFalse(meterConfigStats.getFlags().isMeterStats());
-
-            cnt++;
-        }
-    }
-
-
-    private final class MockMeterBandBuilder implements org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.meter.band.header.MeterBand {
-
-        @Override
-        public Class<? extends DataContainer> getImplementedInterface() {
-            return MockMeterBandBuilder.class;
-        }
-    }
-
-}
+}
\ No newline at end of file