Bug 5540 - ConvertorManager DataContainer source, one Convertor interface 32/41632/9
authorTomas Slusny <tomas.slusny@pantheon.sk>
Mon, 11 Jul 2016 07:26:38 +0000 (09:26 +0200)
committerTomas Slusny <tomas.slusny@pantheon.sk>
Wed, 3 Aug 2016 17:01:48 +0000 (17:01 +0000)
- Changed source type for Convertor interface and ConvertorManager to must extend
  YANG DataContainer
- Started using getImplementedInterface() to get source type

Change-Id: Ic229c278516074f42218b45a5040d3601b386bd7
Signed-off-by: Tomas Slusny <tomas.slusny@pantheon.sk>
37 files changed:
openflowplugin-impl/src/test/java/org/opendaylight/openflowplugin/impl/services/SalFlowServiceImplTest.java
openflowplugin-impl/src/test/java/org/opendaylight/openflowplugin/impl/statistics/services/direct/FlowDirectStatisticsServiceTest.java
openflowplugin-impl/src/test/java/org/opendaylight/openflowplugin/impl/statistics/services/direct/GroupDirectStatisticsServiceTest.java
openflowplugin-impl/src/test/java/org/opendaylight/openflowplugin/impl/statistics/services/direct/MeterDirectStatisticsServiceTest.java
openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/sal/convertor/ConvertorExecutor.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/ConvertorRegistrator.java
openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/sal/convertor/GroupConvertor.java
openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/sal/convertor/GroupDescStatsResponseConvertor.java
openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/sal/convertor/GroupStatsResponseConvertor.java
openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/sal/convertor/MeterConfigStatsResponseConvertor.java
openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/sal/convertor/MeterConvertor.java
openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/sal/convertor/MeterStatsResponseConvertor.java
openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/sal/convertor/PacketOutConvertor.java
openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/sal/convertor/PortConvertor.java
openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/sal/convertor/TableFeaturesConvertor.java
openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/sal/convertor/TableFeaturesResponseConvertor.java
openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/sal/convertor/action/ActionConvertor.java
openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/sal/convertor/action/ActionResponseConvertor.java
openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/sal/convertor/common/ConvertReactor.java
openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/sal/convertor/common/Convertor.java
openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/sal/convertor/common/ParametrizedConvertor.java [deleted file]
openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/sal/convertor/flow/FlowConvertor.java
openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/sal/convertor/flow/FlowInstructionResponseConvertor.java
openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/sal/convertor/flow/FlowStatsResponseConvertor.java
openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/sal/convertor/flow/flowflag/FlowFlagConvertor.java
openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/sal/convertor/flow/flowflag/FlowFlagReactor.java
openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/sal/convertor/flow/flowflag/FlowFlagReactorMappingFactory.java
openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/sal/convertor/match/MatchConvertor.java
openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/sal/convertor/match/MatchReactor.java
openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/sal/convertor/match/MatchReactorMappingFactory.java
openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/sal/convertor/match/MatchResponseConvertor.java
openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/sal/convertor/match/MatchV10ResponseConvertor.java
openflowplugin/src/test/java/org/opendaylight/openflowplugin/openflow/md/core/sal/convertor/ConvertorManagerTest.java [deleted file]
openflowplugin/src/test/java/org/opendaylight/openflowplugin/openflow/md/core/sal/convertor/GroupConvertorTest.java
openflowplugin/src/test/java/org/opendaylight/openflowplugin/openflow/md/core/sal/convertor/TableFeaturesConvertorTest.java
openflowplugin/src/test/java/org/opendaylight/openflowplugin/openflow/md/core/sal/convertor/flow/FlowConvertorTest.java

index 6600c9e8a5ec0ab102e997dad54ed54643cd6335..070cf5e32bb2f323c149d3284d15af83f0ef577f 100644 (file)
@@ -45,12 +45,16 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.ta
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.tables.table.Flow;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.tables.table.FlowKey;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.AddFlowInput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.AddFlowInputBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.AddFlowOutput;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.RemoveFlowInput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.RemoveFlowInputBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.RemoveFlowOutput;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.UpdateFlowInput;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.flow.update.OriginalFlow;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.flow.update.OriginalFlowBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.flow.update.UpdatedFlow;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.flow.update.UpdatedFlowBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.FlowRef;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.Match;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeId;
@@ -145,7 +149,11 @@ public class SalFlowServiceImplTest extends TestCase {
 
     @Test
     public void testAddFlowFailCallback() throws Exception {
-        AddFlowInput mockedAddFlowInput = createFlowMock(AddFlowInput.class);
+        AddFlowInput mockedAddFlowInput = new AddFlowInputBuilder()
+                .setMatch(match)
+                .setTableId((short)1)
+                .build();
+
         Mockito.doReturn(Futures.<RequestContext<Object>>immediateFailedFuture(new Exception("ut-failed-response")))
                 .when(requestContext).getFuture();
 
@@ -160,7 +168,10 @@ public class SalFlowServiceImplTest extends TestCase {
 
     @Test
     public void testRemoveFlowFailCallback() throws Exception {
-        RemoveFlowInput mockedRemoveFlowInput = createFlowMock(RemoveFlowInput.class);
+        RemoveFlowInput mockedRemoveFlowInput = new RemoveFlowInputBuilder()
+                .setMatch(match)
+                .build();
+
         Mockito.doReturn(Futures.<RequestContext<Object>>immediateFailedFuture(new Exception("ut-failed-response")))
                 .when(requestContext).getFuture();
 
@@ -178,7 +189,11 @@ public class SalFlowServiceImplTest extends TestCase {
     }
 
     private void addFlow(final ItemLifecycleListener itemLifecycleListener) throws ExecutionException, InterruptedException {
-        AddFlowInput mockedAddFlowInput = createFlowMock(AddFlowInput.class);
+        AddFlowInput mockedAddFlowInput = new AddFlowInputBuilder()
+                .setMatch(match)
+                .setTableId((short)1)
+                .build();
+
         salFlowService.setItemLifecycleListener(itemLifecycleListener);
 
         mockingFlowRegistryLookup();
@@ -199,7 +214,10 @@ public class SalFlowServiceImplTest extends TestCase {
     }
 
     private void removeFlow(final ItemLifecycleListener itemLifecycleListener) throws Exception {
-        RemoveFlowInput mockedRemoveFlowInput = createFlowMock(RemoveFlowInput.class);
+        RemoveFlowInput mockedRemoveFlowInput = new RemoveFlowInputBuilder()
+                .setMatch(match)
+                .setTableId((short)1)
+                .build();
 
         if (itemLifecycleListener != null) {
             salFlowService.setItemLifecycleListener(itemLifecycleListener);
@@ -227,14 +245,22 @@ public class SalFlowServiceImplTest extends TestCase {
     private void updateFlow(final ItemLifecycleListener itemLifecycleListener) throws Exception {
         UpdateFlowInput mockedUpdateFlowInput = mock(UpdateFlowInput.class);
 
-        UpdatedFlow mockedUpdateFlow = createFlowMock(UpdatedFlow.class);
+        UpdatedFlow mockedUpdateFlow = new UpdatedFlowBuilder()
+                .setMatch(match)
+                .setTableId((short)1)
+                .build();
+
         when(mockedUpdateFlowInput.getUpdatedFlow()).thenReturn(mockedUpdateFlow);
 
         FlowRef mockedFlowRef = mock(FlowRef.class);
         Mockito.doReturn(TABLE_II.child(Flow.class, new FlowKey(new FlowId(DUMMY_FLOW_ID)))).when(mockedFlowRef).getValue();
         when(mockedUpdateFlowInput.getFlowRef()).thenReturn(mockedFlowRef);
 
-        OriginalFlow mockedOriginalFlow = createFlowMock(OriginalFlow.class);
+        OriginalFlow mockedOriginalFlow = new OriginalFlowBuilder()
+                .setMatch(match)
+                .setTableId((short)1)
+                .build();
+
         when(mockedUpdateFlowInput.getOriginalFlow()).thenReturn(mockedOriginalFlow);
 
         if (itemLifecycleListener != null) {
@@ -266,10 +292,4 @@ public class SalFlowServiceImplTest extends TestCase {
         assertNotNull(addFlowOutputRpcResult);
         assertTrue(addFlowOutputRpcResult.isSuccessful());
     }
-
-    private <T extends org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.Flow> T createFlowMock(Class<T> flowClazz) {
-        T mockedFlow = mock(flowClazz);
-        when(mockedFlow.getMatch()).thenReturn(match);
-        return mockedFlow;
-    }
 }
index b2f39f30e73b560e0a12b65e99401359a21b753c..0d234bb31e00e4614e287f5ac17aacc9eed5af61 100644 (file)
@@ -33,6 +33,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.MultipartReplyFlowCase;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.flow._case.MultipartReplyFlow;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.flow._case.multipart.reply.flow.FlowStats;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.flow._case.multipart.reply.flow.FlowStatsBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestFlowCase;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.multipart.request.flow._case.MultipartRequestFlow;
 
@@ -66,22 +67,25 @@ public class FlowDirectStatisticsServiceTest extends AbstractDirectStatisticsSer
         final MultipartReply reply = mock(MultipartReply.class);
         final MultipartReplyFlowCase flowCase = mock(MultipartReplyFlowCase.class);
         final MultipartReplyFlow flow = mock(MultipartReplyFlow.class);
-        final FlowStats flowStat = mock(FlowStats.class);
-        final List<FlowStats> flowStats = Arrays.asList(flowStat);
-        final List<MultipartReply> input = Arrays.asList(reply);
+        final FlowStats flowStat = new FlowStatsBuilder()
+                .setDurationSec(1L)
+                .setDurationNsec(1L)
+                .setTableId(TABLE_NO)
+                .setByteCount(BigInteger.ONE)
+                .setPacketCount(BigInteger.ONE)
+                .setFlags(mock(FlowModFlags.class))
+                .setMatch(new org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.grouping.MatchBuilder()
+                        .setMatchEntry(Collections.emptyList())
+                        .build())
+                .build();
+
+        final List<FlowStats> flowStats = Collections.singletonList(flowStat);
+        final List<MultipartReply> input = Collections.singletonList(reply);
 
         when(flow.getFlowStats()).thenReturn(flowStats);
         when(flowCase.getMultipartReplyFlow()).thenReturn(flow);
         when(reply.getMultipartReplyBody()).thenReturn(flowCase);
 
-        when(flowStat.getTableId()).thenReturn(TABLE_NO);
-        when(flowStat.getByteCount()).thenReturn(BigInteger.ONE);
-        when(flowStat.getPacketCount()).thenReturn(BigInteger.ONE);
-        when(flowStat.getFlags()).thenReturn(mock(FlowModFlags.class));
-        when(flowStat.getMatch()).thenReturn(new org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.grouping.MatchBuilder()
-                .setMatchEntry(Collections.emptyList())
-                .build());
-
         final GetFlowStatisticsOutput output = service.buildReply(input, true);
         assertTrue(output.getFlowAndStatisticsMapList().size() > 0);
 
index 87811f1b92eeed7e1dd621700040dee457873577..6b8af6873ba32dc4b594ee3d4ef6e94eba20526d 100644 (file)
@@ -18,6 +18,7 @@ import static org.mockito.Mockito.when;
 
 import java.math.BigInteger;
 import java.util.Arrays;
+import java.util.Collections;
 import java.util.List;
 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.direct.statistics.rev160511.GetGroupStatisticsInput;
@@ -27,6 +28,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.MultipartReplyGroupCase;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.group._case.MultipartReplyGroup;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.group._case.multipart.reply.group.GroupStats;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.group._case.multipart.reply.group.GroupStatsBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestGroupCase;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.multipart.request.group._case.MultipartRequestGroup;
 
@@ -57,18 +59,23 @@ public class GroupDirectStatisticsServiceTest extends AbstractDirectStatisticsSe
         final MultipartReply reply = mock(MultipartReply.class);
         final MultipartReplyGroupCase groupCase = mock(MultipartReplyGroupCase.class);
         final MultipartReplyGroup group = mock(MultipartReplyGroup.class);
-        final GroupStats groupStat = mock(GroupStats.class);
-        final List<GroupStats> groupStats = Arrays.asList(groupStat);
-        final List<MultipartReply> input = Arrays.asList(reply);
+        final GroupStats groupStat = new GroupStatsBuilder()
+                .setGroupId(new org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.GroupId(GROUP_NO))
+                .setByteCount(BigInteger.ONE)
+                .setPacketCount(BigInteger.ONE)
+                .setBucketStats(Collections.emptyList())
+                .setDurationSec(1L)
+                .setDurationNsec(1L)
+                .setRefCount(0L)
+                .build();
+
+        final List<GroupStats> groupStats = Collections.singletonList(groupStat);
+        final List<MultipartReply> input = Collections.singletonList(reply);
 
         when(group.getGroupStats()).thenReturn(groupStats);
         when(groupCase.getMultipartReplyGroup()).thenReturn(group);
         when(reply.getMultipartReplyBody()).thenReturn(groupCase);
 
-        when(groupStat.getGroupId()).thenReturn(new org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.GroupId(GROUP_NO));
-        when(groupStat.getByteCount()).thenReturn(BigInteger.ONE);
-        when(groupStat.getPacketCount()).thenReturn(BigInteger.ONE);
-
         final GetGroupStatisticsOutput output = service.buildReply(input, true);
         assertTrue(output.getGroupStats().size() > 0);
 
index b923cff06871a636161f0e638563b75991896774..c3da98efdc81dd96789fc610b6007d99cf107fe7 100644 (file)
@@ -18,6 +18,7 @@ import static org.mockito.Mockito.when;
 
 import java.math.BigInteger;
 import java.util.Arrays;
+import java.util.Collections;
 import java.util.List;
 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.direct.statistics.rev160511.GetMeterStatisticsInput;
@@ -27,6 +28,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.MultipartReplyMeterCase;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.meter._case.MultipartReplyMeter;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.meter._case.multipart.reply.meter.MeterStats;
+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.request.multipart.request.body.MultipartRequestMeterCase;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.multipart.request.meter._case.MultipartRequestMeter;
 
@@ -57,18 +59,23 @@ public class MeterDirectStatisticsServiceTest extends AbstractDirectStatisticsSe
         final MultipartReply reply = mock(MultipartReply.class);
         final MultipartReplyMeterCase MeterCase = mock(MultipartReplyMeterCase.class);
         final MultipartReplyMeter meter = mock(MultipartReplyMeter.class);
-        final MeterStats meterStat = mock(MeterStats.class);
-        final List<MeterStats> meterStats = Arrays.asList(meterStat);
-        final List<MultipartReply> input = Arrays.asList(reply);
+        final MeterStats meterStat = new MeterStatsBuilder()
+                .setMeterId(new org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.MeterId(METER_NO))
+                .setByteInCount(BigInteger.ONE)
+                .setPacketInCount(BigInteger.ONE)
+                .setDurationSec(1L)
+                .setDurationNsec(1L)
+                .setFlowCount(0L)
+                .setMeterBandStats(Collections.emptyList())
+                .build();
+
+        final List<MeterStats> meterStats = Collections.singletonList(meterStat);
+        final List<MultipartReply> input = Collections.singletonList(reply);
 
         when(meter.getMeterStats()).thenReturn(meterStats);
         when(MeterCase.getMultipartReplyMeter()).thenReturn(meter);
         when(reply.getMultipartReplyBody()).thenReturn(MeterCase);
 
-        when(meterStat.getMeterId()).thenReturn(new org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.MeterId(METER_NO));
-        when(meterStat.getByteInCount()).thenReturn(BigInteger.ONE);
-        when(meterStat.getPacketInCount()).thenReturn(BigInteger.ONE);
-
         final GetMeterStatisticsOutput output = service.buildReply(input, true);
         assertTrue(output.getMeterStats().size() > 0);
 
index 191ad4bb299ef6067fd7242e332f1abcf689faf1..1e28a5498ddc462eee432faebcae46361d2320e9 100644 (file)
@@ -8,8 +8,10 @@
 
 package org.opendaylight.openflowplugin.openflow.md.core.sal.convertor;
 
+import java.util.Collection;
 import java.util.Optional;
 import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.common.ConvertorData;
+import org.opendaylight.yangtools.yang.binding.DataContainer;
 
 public interface ConvertorExecutor {
     /**
@@ -17,20 +19,22 @@ public interface ConvertorExecutor {
      *
      * @param <FROM> the source type
      * @param <TO>   the result type
+     * @param <DATA> the data type
      * @param source the source
+     * @param data   convertor data
      * @return the result (can be empty, if no convertor was found)
      */
-    <FROM, TO> Optional<TO> convert(final FROM source);
+    <FROM extends DataContainer, TO, DATA extends ConvertorData> Optional<TO> convert(final FROM source, final DATA data);
 
     /**
-     * Lookup and use convertor by specified type, then converts source and returns converted result
+     * Lookup and use convertor by specified type, then converts source collection and returns converted result
      *
      * @param <FROM> the source type
      * @param <TO>   the result type
      * @param <DATA> the data type
-     * @param source the source
+     * @param source the source collection
      * @param data   convertor data
      * @return the result (can be empty, if no convertor was found)
      */
-    <FROM, TO, DATA extends ConvertorData> Optional<TO> convert(final FROM source, final DATA data);
+    <FROM extends DataContainer, TO, DATA extends ConvertorData> Optional<TO> convert(final Collection<FROM> source, final DATA data);
 }
\ No newline at end of file
index b9981b46fbc3cce7da006f6af354177252ab8556..8669e5df21e57a38752ad57801c4685b39e13ea5 100644 (file)
@@ -15,23 +15,24 @@ import java.util.Map;
 import java.util.Objects;
 import java.util.Optional;
 import java.util.concurrent.ConcurrentHashMap;
+import javax.annotation.Nullable;
 import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.action.ActionConvertor;
 import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.action.ActionResponseConvertor;
 import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.common.Convertor;
 import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.common.ConvertorData;
-import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.common.ParametrizedConvertor;
 import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.flow.FlowConvertor;
 import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.flow.FlowInstructionResponseConvertor;
 import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.flow.FlowStatsResponseConvertor;
 import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.match.MatchResponseConvertor;
 import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.match.MatchV10ResponseConvertor;
+import org.opendaylight.yangtools.yang.binding.DataContainer;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 /**
  * Manages various convertors and allows to use them all in one generic way
  */
-public class ConvertorManager implements ConvertorRegistrator, ConvertorExecutor {
+public class ConvertorManager implements ConvertorExecutor, ConvertorRegistrator {
     private static final Logger LOG = LoggerFactory.getLogger(ConvertorManager.class);
     private static ConvertorManager INSTANCE;
 
@@ -59,13 +60,11 @@ public class ConvertorManager implements ConvertorRegistrator, ConvertorExecutor
     }
 
     // Actual convertor keys
-    private List<Class<?>> convertorKeys = new ArrayList<>();
-    private List<Class<?>> parametrizedConvertorKeys = new ArrayList<>();
+    private List<Class<? extends DataContainer>> convertorKeys = new ArrayList<>();
 
     // Cache, that holds all registered convertors, but they can have multiple keys,
     // based on instanceof checks in the convert method
-    private Map<Class<?>, Convertor> convertors = new ConcurrentHashMap<>();
-    private Map<Class<?>, ParametrizedConvertor> parametrizedConvertors = new ConcurrentHashMap<>();
+    private Map<Class<? extends DataContainer>, Convertor> convertors = new ConcurrentHashMap<>();
 
     private ConvertorManager() {
         // Hiding implicit constructor
@@ -81,8 +80,9 @@ public class ConvertorManager implements ConvertorRegistrator, ConvertorExecutor
     }
 
     @Override
+    @SuppressWarnings("unchecked")
     public Convertor registerConvertor(final Convertor convertor) {
-        final Class<?> type = convertor.getType();
+        final Class<? extends DataContainer> type = convertor.getType();
         final Convertor result = convertors.get(type);
 
         if (Objects.isNull(result)) {
@@ -96,37 +96,31 @@ public class ConvertorManager implements ConvertorRegistrator, ConvertorExecutor
         return result;
     }
 
-    @Override
-    public ParametrizedConvertor registerConvertor(final ParametrizedConvertor convertor) {
-        final Class<?> type = convertor.getType();
-        final ParametrizedConvertor result = parametrizedConvertors.get(type);
-
-        if (Objects.isNull(result)) {
-            parametrizedConvertorKeys.add(type);
-            parametrizedConvertors.put(type, convertor);
-            LOG.debug("{} is now converted by {}", type, convertor);
-        } else {
-            LOG.warn("Convertor for type {} is already registered", type);
-        }
-
-        return result;
+    public <FROM extends DataContainer, TO> Optional<TO> convert(final FROM source) {
+        return convert(source, null);
     }
 
     @Override
     @SuppressWarnings("unchecked")
-    public <FROM, TO> Optional<TO> convert(final FROM source) {
-        final Optional<Class<?>> optionalType = extractType(source);
+    public <FROM extends DataContainer, TO, DATA extends ConvertorData> Optional<TO> convert(final FROM source, @Nullable final DATA data) {
+        Optional<TO> result = Optional.empty();
 
-        if (!optionalType.isPresent()) {
-            LOG.trace("Cannot convert {}", source);
-            return Optional.empty();
+        if (Objects.isNull(source)) {
+            LOG.trace("Cannot extract type from null source");
+            return result;
+        }
+
+        final Class<? extends DataContainer> type = source.getImplementedInterface();
+
+        if (Objects.isNull(type)) {
+            LOG.warn("Cannot extract type from source, because getImplementedInterface() returns null");
+            return result;
         }
 
-        final Class<?> type = optionalType.get();
         Convertor convertor = convertors.get(type);
 
         if (Objects.isNull(convertor)) {
-            for (final Class<?> key : convertorKeys) {
+            for (final Class<? extends DataContainer> key : convertorKeys) {
                 if (key.isAssignableFrom(type)) {
                     convertor = convertors.get(key);
                     convertors.put(type, convertor);
@@ -137,31 +131,49 @@ public class ConvertorManager implements ConvertorRegistrator, ConvertorExecutor
 
             if (Objects.isNull(convertor)) {
                 LOG.warn("Convertor for {} not found", type);
-                return Optional.empty();
+                return result;
             }
         }
 
-        return Optional.of((TO) convertor.convert(source));
+        result = Optional.of((TO) convertor.convert(source, data));
+        return result;
+    }
+
+    public <FROM extends DataContainer, TO> Optional<TO> convert(final Collection<FROM> source) {
+        return convert(source, null);
     }
 
     @Override
     @SuppressWarnings("unchecked")
-    public <FROM, TO, DATA extends ConvertorData> Optional<TO> convert(final FROM source, final DATA data) {
-        final Optional<Class<?>> optionalType = extractType(source);
+    public <FROM extends DataContainer, TO, DATA extends ConvertorData> Optional<TO> convert(final Collection<FROM> source, @Nullable final DATA data) {
+        Optional<TO> result = Optional.empty();
 
-        if (!optionalType.isPresent()) {
-            LOG.trace("Cannot convert {}", source);
-            return Optional.empty();
+        if (Objects.isNull(source)) {
+            LOG.trace("Cannot extract type from null source");
+            return result;
         }
 
-        final Class<?> type = optionalType.get();
-        ParametrizedConvertor convertor = parametrizedConvertors.get(type);
+        final Optional<FROM> first = source.stream().findFirst();
+
+        if (!first.isPresent()) {
+            LOG.trace("Cannot extract type from empty collection");
+            return result;
+        }
+
+        final Class<? extends DataContainer> type = first.get().getImplementedInterface();
+
+        if (Objects.isNull(type)) {
+            LOG.warn("Cannot extract type from source, because getImplementedInterface() returns null");
+            return result;
+        }
+
+        Convertor convertor = convertors.get(type);
 
         if (Objects.isNull(convertor)) {
-            for (final Class<?> key : parametrizedConvertorKeys) {
+            for (final Class<? extends DataContainer> key : convertorKeys) {
                 if (key.isAssignableFrom(type)) {
-                    convertor = parametrizedConvertors.get(key);
-                    parametrizedConvertors.put(type, convertor);
+                    convertor = convertors.get(key);
+                    convertors.put(type, convertor);
                     LOG.debug("{} is now converted by {}", type, convertor);
                     break;
                 }
@@ -169,32 +181,11 @@ public class ConvertorManager implements ConvertorRegistrator, ConvertorExecutor
 
             if (Objects.isNull(convertor)) {
                 LOG.warn("Convertor for {} not found", type);
-                return Optional.empty();
+                return result;
             }
         }
 
-        return Optional.of((TO) convertor.convert(source, data));
-    }
-
-    private <FROM> Optional<Class<?>> extractType(FROM source) {
-        if (Objects.isNull(source)) {
-            LOG.trace("Cannot extract type from source, because it is null");
-            return Optional.empty();
-        }
-
-        Class<?> type = source.getClass();
-
-        if (source instanceof Collection) {
-            final Optional first = ((Collection) source).stream().findFirst();
-
-            if (!first.isPresent()) {
-                LOG.trace("Cannot extract type {}, because it is empty collection", type);
-                return Optional.empty();
-            }
-
-            type = first.get().getClass();
-        }
-
-        return Optional.of(type);
+        result = Optional.of((TO) convertor.convert(source, data));
+        return result;
     }
 }
\ No newline at end of file
index bc889dc11fba57a41e677837c083b75421c9787a..9fbd844ab6e0a0081b2344748e82a6385675581e 100644 (file)
@@ -9,7 +9,6 @@
 package org.opendaylight.openflowplugin.openflow.md.core.sal.convertor;
 
 import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.common.Convertor;
-import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.common.ParametrizedConvertor;
 
 public interface ConvertorRegistrator {
     /**
@@ -19,12 +18,4 @@ public interface ConvertorRegistrator {
      * @return previous convertor if already registered or null
      */
     Convertor registerConvertor(final Convertor convertor);
-
-    /**
-     * Register convertor.
-     *
-     * @param convertor the convertor
-     * @return previous convertor if already registered or null
-     */
-    ParametrizedConvertor registerConvertor(final ParametrizedConvertor convertor);
 }
\ No newline at end of file
index 6250fa2ae205d4c5dffdd69953be701c46d23f40..7a17a790a65bc58f5223456bc33bb7bc70b03f28 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014 Ericsson India Global Services Pvt Ltd. and others.  All rights reserved.
+ * 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,
@@ -16,7 +16,7 @@ import java.util.List;
 import java.util.Optional;
 import org.opendaylight.openflowjava.protocol.api.util.BinContent;
 import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.action.data.ActionConvertorData;
-import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.common.ParametrizedConvertor;
+import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.common.Convertor;
 import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.data.VersionDatapathIdConvertorData;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.service.rev130918.AddGroupInput;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.service.rev130918.RemoveGroupInput;
@@ -33,6 +33,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev13
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.GroupModInputBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.buckets.grouping.BucketsList;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.buckets.grouping.BucketsListBuilder;
+import org.opendaylight.yangtools.yang.binding.DataContainer;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -49,7 +50,7 @@ import org.slf4j.LoggerFactory;
  * }
  * </pre>
  */
-public class GroupConvertor implements ParametrizedConvertor<Group, GroupModInputBuilder, VersionDatapathIdConvertorData> {
+public class GroupConvertor implements Convertor<Group, GroupModInputBuilder, VersionDatapathIdConvertorData> {
     /**
      * Create default empty group mod input builder
      * Use this method, if result from convertor is empty.
@@ -132,7 +133,7 @@ public class GroupConvertor implements ParametrizedConvertor<Group, GroupModInpu
     }
 
     @Override
-    public Class<?> getType() {
+    public Class<? extends DataContainer> getType() {
         return Group.class;
     }
 
index 2556e8722e19d53c01e8d7243105d82f71470e8f..05cd849e6c5c4a51ac7e3565275e54d5a73e8c5d 100644 (file)
@@ -13,8 +13,9 @@ import java.util.Collections;
 import java.util.List;
 import java.util.Optional;
 import org.opendaylight.openflowplugin.extension.api.path.ActionPath;
+import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.ConvertorManager;
 import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.action.data.ActionResponseConvertorData;
-import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.common.ParametrizedConvertor;
+import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.common.Convertor;
 import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.data.VersionConvertorData;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.Action;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.ActionBuilder;
@@ -30,6 +31,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group
 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.desc.stats.reply.GroupDescStatsKey;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.buckets.grouping.BucketsList;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.group.desc._case.multipart.reply.group.desc.GroupDesc;
+import org.opendaylight.yangtools.yang.binding.DataContainer;
 
 /**
  * Converts GroupDesc message from library to MD SAL defined GroupDescStats
@@ -42,7 +44,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731
  * }
  * </pre>
  */
-public class GroupDescStatsResponseConvertor implements ParametrizedConvertor<List<GroupDesc>, List<GroupDescStats>, VersionConvertorData> {
+public class GroupDescStatsResponseConvertor implements Convertor<List<GroupDesc>, List<GroupDescStats>, VersionConvertorData> {
 
     private org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.Buckets toSALBucketsDesc(List<BucketsList> bucketDescStats, short version) {
         final ActionResponseConvertorData data = new ActionResponseConvertorData(version);
@@ -94,7 +96,7 @@ public class GroupDescStatsResponseConvertor implements ParametrizedConvertor<Li
     }
 
     @Override
-    public Class<?> getType() {
+    public Class<? extends DataContainer> getType() {
         return GroupDesc.class;
     }
 
index 7326adbcf48d70881b5d5c05423a476c2bf56f17..8bf6524bb75799d9c8a74edf1433fa59070b0571 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2015 IBM Corporation and others.  All rights reserved.
+ * 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,
@@ -9,11 +9,11 @@
 package org.opendaylight.openflowplugin.openflow.md.core.sal.convertor;
 
 import java.util.ArrayList;
-import java.util.Collections;
 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.openflowplugin.openflow.md.core.sal.convertor.data.VersionConvertorData;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.BucketId;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.GroupId;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.statistics.Buckets;
@@ -26,6 +26,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group
 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.statistics.reply.GroupStatsBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.statistics.reply.GroupStatsKey;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.group._case.multipart.reply.group.group.stats.BucketStats;
+import org.opendaylight.yangtools.yang.binding.DataContainer;
 
 /**
  * Converts group related statistics messages coming from switch to MD-SAL messages.
@@ -39,7 +40,8 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731
  */
 public class GroupStatsResponseConvertor implements Convertor<
         List<org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.group._case.multipart.reply.group.GroupStats>,
-        List<GroupStats>> {
+        List<GroupStats>,
+        VersionConvertorData> {
 
     private Buckets toSALBuckets(List<BucketStats> bucketStats) {
         BucketsBuilder salBuckets = new BucketsBuilder();
@@ -63,12 +65,12 @@ public class GroupStatsResponseConvertor implements Convertor<
     }
 
     @Override
-    public Class<?> getType() {
+    public Class<? extends DataContainer> getType() {
         return org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.group._case.multipart.reply.group.GroupStats.class;
     }
 
     @Override
-    public List<GroupStats> convert(List<org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.group._case.multipart.reply.group.GroupStats> source) {
+    public List<GroupStats> convert(List<org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.group._case.multipart.reply.group.GroupStats> source, VersionConvertorData data) {
         List<GroupStats> convertedSALGroups = new ArrayList<>();
 
         for (org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply
index 9fbb8cd9c48bb2dc5580b0c52ae5ab5b49092b2e..6108b4f43be2f217945dd419734f228f76cfaef6 100644 (file)
@@ -11,6 +11,7 @@ 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.openflowplugin.openflow.md.core.sal.convertor.data.VersionConvertorData;
 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;
@@ -34,6 +35,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731
 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;
+import org.opendaylight.yangtools.yang.binding.DataContainer;
 
 /**
  * Converts list of OF library config meter stats to MD-SAL config meter stats.
@@ -46,15 +48,15 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731
  * }
  * </pre>
  */
-public class MeterConfigStatsResponseConvertor implements Convertor<List<MeterConfig>, List<MeterConfigStats>> {
+public class MeterConfigStatsResponseConvertor implements Convertor<List<MeterConfig>, List<MeterConfigStats>, VersionConvertorData> {
 
     @Override
-    public Class<?> getType() {
+    public Class<? extends DataContainer> getType() {
         return MeterConfig.class;
     }
 
     @Override
-    public List<MeterConfigStats> convert(List<MeterConfig> source) {
+    public List<MeterConfigStats> convert(List<MeterConfig> source, VersionConvertorData data) {
         List<MeterConfigStats> listMeterConfigStats = new ArrayList<>();
 
         for (MeterConfig meterConfig : source) {
index 07e8dd46ba40f154bccf1275017b435e39a42d55..ff50aae6d026c394bcbe12b047aaa4ed3db75d93 100644 (file)
@@ -10,7 +10,7 @@ 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.ParametrizedConvertor;
+import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.common.Convertor;
 import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.data.VersionConvertorData;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.service.rev130918.meter.update.UpdatedMeter;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.Meter;
@@ -36,6 +36,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731
 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.meter.mod.Bands;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.meter.mod.BandsBuilder;
+import org.opendaylight.yangtools.yang.binding.DataContainer;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -50,7 +51,7 @@ import org.slf4j.LoggerFactory;
  * }
  * </pre>
  */
-public class MeterConvertor implements ParametrizedConvertor<Meter, MeterModInputBuilder, VersionConvertorData> {
+public class MeterConvertor implements Convertor<Meter, MeterModInputBuilder, VersionConvertorData> {
     private static final Logger LOG = LoggerFactory.getLogger(MeterConvertor.class);
 
     /**
@@ -141,7 +142,7 @@ public class MeterConvertor implements ParametrizedConvertor<Meter, MeterModInpu
     }
 
     @Override
-    public Class<?> getType() {
+    public Class<? extends DataContainer> getType() {
         return Meter.class;
     }
 
index b9fd336692cbe122a3c113787d5a1b9b241df986..bc1e024447e859aeaaa11ff06ea95836c1a030c2 100644 (file)
@@ -13,6 +13,7 @@ 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.openflowplugin.openflow.md.core.sal.convertor.data.VersionConvertorData;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.BandId;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.MeterId;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.meter.statistics.DurationBuilder;
@@ -24,6 +25,7 @@ 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.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.multipart.reply.multipart.reply.body.multipart.reply.meter._case.multipart.reply.meter.meter.stats.MeterBandStats;
+import org.opendaylight.yangtools.yang.binding.DataContainer;
 
 /**
  * Converts list of OF library meter stats to MD-SAL meter stats.
@@ -39,15 +41,16 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731
 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>> {
+        List<MeterStats>,
+        VersionConvertorData> {
 
     @Override
-    public Class<?> getType() {
+    public Class<? extends DataContainer> 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;
     }
 
     @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) {
+    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, VersionConvertorData data) {
         List<MeterStats> convertedSALMeters = new ArrayList<>();
 
         for (org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.
index 3db52261d80b3ad97fc3f147d4376afe17ef5ec6..706c0f9f4ae70090adf650608d1807cba5329fec 100644 (file)
@@ -17,7 +17,7 @@ import org.opendaylight.controller.sal.common.util.Arguments;
 import org.opendaylight.openflowplugin.api.OFConstants;
 import org.opendaylight.openflowplugin.api.openflow.md.util.OpenflowVersion;
 import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.action.data.ActionConvertorData;
-import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.common.ParametrizedConvertor;
+import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.common.Convertor;
 import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.data.PacketOutConvertorData;
 import org.opendaylight.openflowplugin.openflow.md.util.InventoryDataServiceUtil;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeConnectorRef;
@@ -30,6 +30,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev13
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.PacketOutInput;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.PacketOutInputBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.packet.service.rev130709.TransmitPacketInput;
+import org.opendaylight.yangtools.yang.binding.DataContainer;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier.PathArgument;
 import org.slf4j.Logger;
@@ -48,7 +49,7 @@ import org.slf4j.LoggerFactory;
  * }
  * </pre>
  */
-public class PacketOutConvertor implements ParametrizedConvertor<TransmitPacketInput, PacketOutInput, PacketOutConvertorData> {
+public class PacketOutConvertor implements Convertor<TransmitPacketInput, PacketOutInput, PacketOutConvertorData> {
     private static final Logger LOG = LoggerFactory.getLogger(PacketOutConvertor.class);
 
     /**
@@ -75,7 +76,7 @@ public class PacketOutConvertor implements ParametrizedConvertor<TransmitPacketI
     }
 
     @Override
-    public Class<?> getType() {
+    public Class<? extends DataContainer> getType() {
         return TransmitPacketInput.class;
     }
 
index e644a090fb21eb70b7b94371e061239977825040..2e49cdedae6a97e1eba0fe5c33ec2a79be1e53e8 100644 (file)
@@ -11,7 +11,7 @@ package org.opendaylight.openflowplugin.openflow.md.core.sal.convertor;
 import com.google.common.annotations.VisibleForTesting;
 import org.opendaylight.openflowplugin.api.openflow.md.util.OpenflowVersion;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.MacAddress;
-import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.common.ParametrizedConvertor;
+import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.common.Convertor;
 import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.data.VersionConvertorData;
 import org.opendaylight.openflowplugin.openflow.md.util.OpenflowPortsUtil;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.port.rev130925.port.mod.port.Port;
@@ -25,6 +25,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.PortModInputBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.port.desc._case.multipart.reply.port.desc.Ports;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.port.desc._case.multipart.reply.port.desc.PortsBuilder;
+import org.opendaylight.yangtools.yang.binding.DataContainer;
 
 /**
  * Converts port mod, port status and port description MD-SAL messages to OF library data
@@ -37,7 +38,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731
  * }
  * </pre>
  */
-public class PortConvertor implements ParametrizedConvertor<Port, PortModInput, VersionConvertorData> {
+public class PortConvertor implements Convertor<Port, PortModInput, VersionConvertorData> {
 
     /**
      * Create default empty port mod input
@@ -144,7 +145,7 @@ public class PortConvertor implements ParametrizedConvertor<Port, PortModInput,
     }
 
     @Override
-    public Class<?> getType() {
+    public Class<? extends DataContainer> getType() {
         return Port.class;
     }
 
index d5699ed0ad59860116272c8ce03af47b2c77b6bf..a77cf1f05a400eee3d286feb255178f2a2b815b5 100644 (file)
@@ -17,6 +17,7 @@ import java.util.List;
 import java.util.Map;
 import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.common.Convertor;
 import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.common.OrderComparator;
+import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.data.VersionConvertorData;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.CopyTtlInCase;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.CopyTtlOutCase;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.DecMplsTtlCase;
@@ -144,6 +145,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table
 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature.prop.type.match.MatchSetfield;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature.prop.type.next.table.miss.TablesMiss;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature.prop.type.wildcards.WildcardSetfield;
+import org.opendaylight.yangtools.yang.binding.DataContainer;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -159,7 +161,8 @@ import org.slf4j.LoggerFactory;
  */
 public class TableFeaturesConvertor implements Convertor<
         org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.TableFeatures,
-        List<TableFeatures>> {
+        List<TableFeatures>,
+        VersionConvertorData> {
 
     private static final Logger LOG = LoggerFactory.getLogger(TableFeaturesConvertor.class);
     private static final Ordering<org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.features.table.features.table.properties.TableFeatureProperties> TABLE_FEATURE_PROPS_ORDERING =
@@ -592,12 +595,12 @@ public class TableFeaturesConvertor implements Convertor<
     }
 
     @Override
-    public Class<?> getType() {
+    public Class<? extends DataContainer> getType() {
         return org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.TableFeatures.class;
     }
 
     @Override
-    public List<TableFeatures> convert(org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.TableFeatures source) {
+    public List<TableFeatures> convert(org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.TableFeatures source, VersionConvertorData data) {
         List<TableFeatures> ofTableFeaturesList = new ArrayList<>();
         TableFeaturesBuilder ofTableFeatures = new TableFeaturesBuilder();
 
index 63e53a1de74f0ee3a071353770cd47589ada96e1..576bced2a521bfca58a77ffe07448d1bc4ffea5b 100644 (file)
@@ -18,6 +18,7 @@ import java.util.Map;
 import java.util.stream.Collectors;
 import org.opendaylight.openflowplugin.api.OFConstants;
 import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.common.Convertor;
+import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.data.VersionConvertorData;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.CopyTtlInCaseBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.CopyTtlOutCaseBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.DecMplsTtlCaseBuilder;
@@ -162,6 +163,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table
 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.features.table.features.TableProperties;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.features.table.features.TablePropertiesBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.features.table.features.table.properties.TableFeaturePropertiesBuilder;
+import org.opendaylight.yangtools.yang.binding.DataContainer;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -175,7 +177,7 @@ import org.slf4j.LoggerFactory;
  * }
  * </pre>
  */
-public class TableFeaturesResponseConvertor implements Convertor<MultipartReplyTableFeatures, List<TableFeatures>> {
+public class TableFeaturesResponseConvertor implements Convertor<MultipartReplyTableFeatures, List<TableFeatures>, VersionConvertorData> {
     private static final Logger LOG = LoggerFactory.getLogger(TableFeaturesResponseConvertor.class);
     private static final Map<TableFeaturesPropType, ActionExecutor> TABLE_FEATURE_PROPERTY_TYPE_TO_ACTION;
     private static final Map<Class<?>, org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.Action> OF_TO_SAL_ACTION;
@@ -481,12 +483,12 @@ public class TableFeaturesResponseConvertor implements Convertor<MultipartReplyT
     }
 
     @Override
-    public Class<?> getType() {
+    public Class<? extends DataContainer> getType() {
         return MultipartReplyTableFeatures.class;
     }
 
     @Override
-    public List<TableFeatures> convert(MultipartReplyTableFeatures source) {
+    public List<TableFeatures> convert(MultipartReplyTableFeatures source, VersionConvertorData data) {
         if (source == null || source.getTableFeatures() == null) {
             return Collections.emptyList();
         }
index 3d7c5f02046cdb2ba5119ed692fac0c4782a061f..4fd3a7f66ae78d120df3c08c7f7ce063f2b79a89 100644 (file)
@@ -53,9 +53,10 @@ import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.action.cas
 import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.action.cases.SalToOfStripVlanActionV10Case;
 import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.action.cases.SalToOfVendorCodecCase;
 import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.action.data.ActionConvertorData;
+import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.common.Convertor;
 import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.common.ConvertorProcessor;
-import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.common.ParametrizedConvertor;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.actions.grouping.Action;
+import org.opendaylight.yangtools.yang.binding.DataContainer;
 
 /**
  * Converts SAL actions into OF Library actions
@@ -70,7 +71,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev1
  * }
  * </pre>
  */
-public final class ActionConvertor implements ParametrizedConvertor<
+public final class ActionConvertor implements Convertor<
         List<org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.Action>,
         List<Action>,
         ActionConvertorData> {
@@ -126,7 +127,7 @@ public final class ActionConvertor implements ParametrizedConvertor<
             .addCase(new SalToOfGeneralExtensionGroupingCase());
 
     @Override
-    public Class<?> getType() {
+    public Class<? extends DataContainer> getType() {
         return org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.Action.class;
     }
 
index 1ddf48088b451aa9675de72dd05e2a85abba6d71..1128ef6ae0fb575fce819fd16097203da2d46902 100644 (file)
@@ -32,10 +32,11 @@ import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.action.cas
 import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.action.cases.OfToSalSetQueueCase;
 import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.action.cases.OfToSalStripVlanCase;
 import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.action.data.ActionResponseConvertorData;
+import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.common.Convertor;
 import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.common.ConvertorProcessor;
-import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.common.ParametrizedConvertor;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.ActionChoice;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.actions.grouping.Action;
+import org.opendaylight.yangtools.yang.binding.DataContainer;
 
 /**
  * Converts OF actions associated with bucket to SAL Actions.
@@ -49,7 +50,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev1
  * }
  * </pre>
  */
-public final class ActionResponseConvertor implements ParametrizedConvertor<
+public final class ActionResponseConvertor implements Convertor<
         List<Action>,
         List<org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.Action>,
         ActionResponseConvertorData> {
@@ -79,7 +80,7 @@ public final class ActionResponseConvertor implements ParametrizedConvertor<
             .addCase(new OfToSalStripVlanCase());
 
     @Override
-    public Class<?> getType() {
+    public Class<? extends DataContainer> getType() {
         return Action.class;
     }
 
index 5127570a2aca81eb3c13402a84bfc9939e4afa92..0ff50e7c24750a4a80cc0accea1849a8c72a898a 100644 (file)
@@ -18,10 +18,10 @@ import java.util.Map;
  */
 public abstract class ConvertReactor<FROM> {
     private final Map<InjectionKey, ResultInjector<?, ?>> injectionMapping;
-    private final Map<Short, Convertor<FROM, ?>> conversionMapping;
+    private final Map<Short, Convertor<FROM, ?, ?>> conversionMapping;
 
     protected ConvertReactor() {
-        final Map<Short, Convertor<FROM, ?>> conversions = new HashMap<>();
+        final Map<Short, Convertor<FROM, ?, ?>> conversions = new HashMap<>();
         final Map<InjectionKey, ResultInjector<?, ?>> injections = new HashMap<>();
         initMappings(conversions, injections);
 
@@ -35,7 +35,7 @@ public abstract class ConvertReactor<FROM> {
      * @param conversions convert from
      * @param injections injection
      */
-    protected abstract void initMappings(Map<Short, Convertor<FROM, ?>> conversions,
+    protected abstract void initMappings(Map<Short, Convertor<FROM, ?, ?>> conversions,
             Map<InjectionKey, ResultInjector<?, ?>> injections);
 
     /**
@@ -49,11 +49,11 @@ public abstract class ConvertReactor<FROM> {
     public <RESULT, TARGET> void convert(final FROM source, final short version, final TARGET target) {
 
         //lookup converter
-        Convertor<FROM, RESULT> convertor = (Convertor<FROM, RESULT>) conversionMapping.get(version);
+        Convertor<FROM, RESULT, ?> convertor = (Convertor<FROM, RESULT, ?>) conversionMapping.get(version);
         if (convertor == null) {
             throw new IllegalArgumentException("convertor for given version ["+version+"] not found");
         }
-        RESULT convertedItem = convertor.convert(source);
+        RESULT convertedItem = convertor.convert(source, null);
 
         //lookup injection
         InjectionKey key = buildInjectionKey(version, convertedItem, target);
index 0e94005c07d0234bb0ac2ccc49975f664d750563..6cc21c4dc23f850560851c62293e1c59cc891322 100644 (file)
@@ -8,13 +8,16 @@
 
 package org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.common;
 
+import javax.annotation.Nullable;
+import org.opendaylight.yangtools.yang.binding.DataContainer;
+
 /**
  * Converts OpenflowJava to MDSal model and vice versa
  *
  * @param <FROM> type of source
  * @param <TO>   type of result
  */
-public interface Convertor<FROM, TO> {
+public interface Convertor<FROM, TO, DATA extends ConvertorData> {
 
     /**
      * Gets type of convertor, used in
@@ -22,13 +25,14 @@ public interface Convertor<FROM, TO> {
      *
      * @return the type of convertor
      */
-    Class<?> getType();
+    Class<? extends DataContainer> getType();
 
     /**
      * Converts source to result
      *
      * @param source source
+     * @param data   convertor data
      * @return converted source
      */
-    TO convert(FROM source);
+    TO convert(FROM source, @Nullable DATA data);
 }
diff --git a/openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/sal/convertor/common/ParametrizedConvertor.java b/openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/sal/convertor/common/ParametrizedConvertor.java
deleted file mode 100644 (file)
index 885d924..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * 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.common;
-
-/**
- * Converts OpenflowJava to MDSal model and vice versa
- *
- * @param <FROM> type of source
- * @param <TO>   type of result
- * @param <DATA>   type of convertor data
- */
-public interface ParametrizedConvertor<FROM, TO, DATA extends ConvertorData> {
-
-    /**
-     * Gets type of convertor, used in
-     * {@link org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.ConvertorManager}.
-     *
-     * @return the type of convertor
-     */
-    Class<?> getType();
-
-    /**
-     * Converts source to result
-     *
-     * @param source source
-     * @param data   convertor data
-     * @return converted source
-     */
-    TO convert(FROM source, DATA data);
-}
index 758fc27a470e2e9f4ed1ac712a3e42a65c605bb8..56badf14fe9dadea6fdea3afd696e0191f5f1bd0 100644 (file)
@@ -19,9 +19,9 @@ import java.util.Optional;
 import org.opendaylight.openflowplugin.api.OFConstants;
 import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.ConvertorManager;
 import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.action.data.ActionConvertorData;
+import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.common.Convertor;
 import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.common.ConvertorProcessor;
 import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.common.OrderComparator;
-import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.common.ParametrizedConvertor;
 import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.data.VersionDatapathIdConvertorData;
 import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.flow.cases.ApplyActionsCase;
 import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.flow.cases.ClearActionsCase;
@@ -64,6 +64,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev13
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.OxmMatchType;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entries.grouping.MatchEntry;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.FlowModInputBuilder;
+import org.opendaylight.yangtools.yang.binding.DataContainer;
 
 /**
  * Converts the SAL Flow to OF Flow. It checks if there is a set-vlan-id (1.0) action made on OF1.3.
@@ -78,7 +79,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731
  * }
  * </pre>
  */
-public class FlowConvertor implements ParametrizedConvertor<Flow, List<FlowModInputBuilder>, VersionDatapathIdConvertorData> {
+public class FlowConvertor implements Convertor<Flow, List<FlowModInputBuilder>, VersionDatapathIdConvertorData> {
     /**
      * Default idle timeout
      */
@@ -511,7 +512,7 @@ public class FlowConvertor implements ParametrizedConvertor<Flow, List<FlowModIn
     }
 
     @Override
-    public Class<?> getType() {
+    public Class<? extends DataContainer> getType() {
         return Flow.class;
     }
 
index 9a160f69d0052170ee64df9de0aedbbd506d5597..aa5177e7c3ce07e2b4b31a968e2d0f1fcb49a2cb 100644 (file)
@@ -17,7 +17,7 @@ import org.opendaylight.openflowplugin.api.OFConstants;
 import org.opendaylight.openflowplugin.extension.api.path.ActionPath;
 import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.ConvertorManager;
 import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.action.data.ActionResponseConvertorData;
-import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.common.ParametrizedConvertor;
+import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.common.Convertor;
 import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.data.VersionConvertorData;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.Action;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.Instructions;
@@ -41,6 +41,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.instruction
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.instruction.rev130731.instruction.grouping.instruction.choice.GotoTableCase;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.instruction.rev130731.instruction.grouping.instruction.choice.MeterCase;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.instruction.rev130731.instruction.grouping.instruction.choice.WriteActionsCase;
+import org.opendaylight.yangtools.yang.binding.DataContainer;
 
 /**
  * Converts Openflow 1.3+ specific instructions to MD-SAL format flow instruction
@@ -53,13 +54,13 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.instruction
  * }
  * </pre>
  */
-public final class FlowInstructionResponseConvertor implements ParametrizedConvertor<
+public final class FlowInstructionResponseConvertor implements Convertor<
         List<org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.instruction.rev130731.instructions.grouping.Instruction>,
         Instructions,
         VersionConvertorData> {
 
     @Override
-    public Class<?> getType() {
+    public Class<? extends DataContainer> getType() {
         return org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.instruction.rev130731.instructions.grouping.Instruction.class;
     }
 
index 7da1a33b30f5785b15e62a389b15493d4a1cd9a8..9e6ddf2aed1945f4595116132eb351a94aebd610 100644 (file)
@@ -20,7 +20,7 @@ import org.opendaylight.openflowplugin.extension.api.path.MatchPath;
 import org.opendaylight.openflowplugin.openflow.md.core.extension.MatchExtensionHelper;
 import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.ConvertorManager;
 import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.action.data.ActionResponseConvertorData;
-import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.common.ParametrizedConvertor;
+import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.common.Convertor;
 import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.data.VersionConvertorData;
 import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.data.VersionDatapathIdConvertorData;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.Counter32;
@@ -40,6 +40,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instru
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.list.InstructionKey;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.statistics.types.rev130925.duration.DurationBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.flow._case.multipart.reply.flow.FlowStats;
+import org.opendaylight.yangtools.yang.binding.DataContainer;
 
 /**
  * Converts flow related statistics messages coming from openflow switch to MD-SAL messages.
@@ -53,7 +54,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731
  * }
  * </pre>
  */
-public class FlowStatsResponseConvertor implements ParametrizedConvertor<List<FlowStats>, List<FlowAndStatisticsMapList>, VersionDatapathIdConvertorData> {
+public class FlowStatsResponseConvertor implements Convertor<List<FlowStats>, List<FlowAndStatisticsMapList>, VersionDatapathIdConvertorData> {
 
     /**
      * Method wraps openflow 1.0 actions list to Apply Action Instructions
@@ -89,7 +90,7 @@ public class FlowStatsResponseConvertor implements ParametrizedConvertor<List<Fl
     }
 
     @Override
-    public Class<?> getType() {
+    public Class<? extends DataContainer> getType() {
         return FlowStats.class;
     }
 
index a22808d049b5c0c427880a587d90830544971779..3faf75132d464224b974ee35bd6cbef9348eb861 100644 (file)
@@ -9,23 +9,30 @@
 package org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.flow.flowflag;
 
 import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.common.Convertor;
+import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.data.VersionConvertorData;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.FlowModFlags;
+import org.opendaylight.yangtools.yang.binding.DataContainer;
 
 /**
  * converting from MD-SAL match model into appropriate OF-API match model
  *
  * @param <E> type of converted match
  */
-public interface FlowFlagConvertor<E> extends Convertor<FlowModFlags, E> {
+public interface FlowFlagConvertor<E> extends Convertor<FlowModFlags, E, VersionConvertorData> {
 
-    default Class<?> getType() {
-        return FlowModFlags.class;
+    @Override
+    default Class<? extends DataContainer> getType() {
+        return DataContainer.class;
+    }
+
+    @Override
+    default E convert(FlowModFlags source, VersionConvertorData data) {
+        return convert(source);
     }
     
     /**
      * @param source flow mode flags
      * @return converted match (into OF-API model)
      */
-    @Override
     E convert(FlowModFlags source);
 }
index f4e51a8e9b8c87d314ef4d30863cdf0812ca2b82..7cd4b5d6852c75432cab321d2f66f337a2f9af81 100644 (file)
@@ -34,7 +34,7 @@ public class FlowFlagReactor extends ConvertReactor<FlowModFlags> {
     }
 
     @Override
-    protected void initMappings(final Map<Short, Convertor<FlowModFlags, ?>> conversions,
+    protected void initMappings(final Map<Short, Convertor<FlowModFlags, ?, ?>> conversions,
                                 final Map<InjectionKey, ResultInjector<?, ?>> injections) {
         FlowFlagReactorMappingFactory.addFlowFlagsConvertors(conversions);
         FlowFlagReactorMappingFactory.addFlowFlagsIjectors(injections);
index fac616de9eeb2dd72938fa6c55f0b183bfd77b36..b7b3e00b925db0ff34371b5f48303cbec19687a3 100644 (file)
@@ -27,7 +27,7 @@ public class FlowFlagReactorMappingFactory {
     /**
      * @param conversionMapping conversion mapping
      */
-    public static void addFlowFlagsConvertors(final Map<Short, Convertor<org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.FlowModFlags, ?>> conversionMapping) {
+    public static void addFlowFlagsConvertors(final Map<Short, Convertor<org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.FlowModFlags, ?, ?>> conversionMapping) {
         conversionMapping.put(OFConstants.OFP_VERSION_1_3, new FlowFlagsConvertorImpl());
         conversionMapping.put(OFConstants.OFP_VERSION_1_0, new FlowFlagsConvertorV10Impl());
     }
index 2524e64e12bac251c2f79fb1fe4ca5e91d4dbafc..61877093634c13c7b49664186f0ed09ec093dada 100644 (file)
@@ -9,23 +9,30 @@
 package org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.match;
 
 import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.common.Convertor;
+import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.data.VersionConvertorData;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.Match;
+import org.opendaylight.yangtools.yang.binding.DataContainer;
 
 /**
  * converting from MD-SAL match model into appropriate OF-API match model
  *
  * @param <E> type of converted match
  */
-public interface MatchConvertor<E> extends Convertor<Match, E> {
+public interface MatchConvertor<E> extends Convertor<Match, E, VersionConvertorData> {
 
-    default Class<?> getType() {
+    @Override
+    default Class<? extends DataContainer> getType() {
         return Match.class;
     }
+
+    @Override
+    default E convert(Match source, VersionConvertorData data) {
+        return convert(source);
+    }
     
     /**
      * @param source match input
      * @return converted match (into OF-API model)
      */
-    @Override
     E convert(Match source);
 }
index 3f285cd0dffdf71719fef4d6fa34ec62465e84cc..28203dff183d358698ba0af04867596ab0c72b44 100644 (file)
@@ -34,7 +34,7 @@ public class MatchReactor extends ConvertReactor<Match> {
     }
 
     @Override
-    protected void initMappings(final Map<Short, Convertor<Match, ?>> conversions,
+    protected void initMappings(final Map<Short, Convertor<Match, ?, ?>> conversions,
                                 final Map<InjectionKey, ResultInjector<?, ?>> injections) {
         MatchReactorMappingFactory.addMatchConvertors(conversions);
         MatchReactorMappingFactory.addMatchIjectors(injections);
index 6dfeeb3b5f252327bedd7c2f5814a927ec0b323d..5cc91b37487a0f04273614bb7f17fd41c8ff91fa 100644 (file)
@@ -34,7 +34,7 @@ public class MatchReactorMappingFactory {
     /**
      * @param conversionMapping conversion mapping
      */
-    public static void addMatchConvertors(final Map<Short, Convertor<Match, ?>> conversionMapping) {
+    public static void addMatchConvertors(final Map<Short, Convertor<Match, ?, ?>> conversionMapping) {
         conversionMapping.put(OFConstants.OFP_VERSION_1_3, new MatchConvertorImpl());
         conversionMapping.put(OFConstants.OFP_VERSION_1_0, new MatchConvertorV10Impl());
     }
index 1ba9bdc7716a1a1f93512605e84f8e2f07796acc..d40f70811ce7ebcf705b3ff0eda53d6f77ba7573 100644 (file)
@@ -8,8 +8,8 @@
 
 package org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.match;
 
+import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.common.Convertor;
 import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.common.ConvertorProcessor;
-import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.common.ParametrizedConvertor;
 import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.data.VersionDatapathIdConvertorData;
 import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.match.cases.OfToSalArpOpCase;
 import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.match.cases.OfToSalArpShaCase;
@@ -77,6 +77,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.matc
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.MatchEntryValue;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.TunnelIpv4Dst;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.TunnelIpv4Src;
+import org.opendaylight.yangtools.yang.binding.DataContainer;
 
 /**
  * Converts Openflow 1.3+ specific flow match to MD-SAL format flow
@@ -91,7 +92,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.Tunne
  * }
  * </pre>
  */
-public class MatchResponseConvertor implements ParametrizedConvertor<MatchEntriesGrouping, MatchBuilder, VersionDatapathIdConvertorData> {
+public class MatchResponseConvertor implements Convertor<MatchEntriesGrouping, MatchBuilder, VersionDatapathIdConvertorData> {
     private static final ConvertorProcessor<MatchEntryValue, MatchBuilder, MatchResponseConvertorData> OF_TO_SAL_PROCESSOR = new ConvertorProcessor<MatchEntryValue, MatchBuilder, MatchResponseConvertorData>()
             .addCase(new OfToSalInPortCase())
             .addCase(new OfToSalInPhyPortCase())
@@ -140,7 +141,7 @@ public class MatchResponseConvertor implements ParametrizedConvertor<MatchEntrie
             .addCase(new OfToSalTunnelIpv4DstCase());
 
     @Override
-    public Class<?> getType() {
+    public Class<? extends DataContainer> getType() {
         return MatchEntriesGrouping.class;
     }
 
index b47be384b922655d9db8031eae6d0eb37755e6b4..9e8b707cc828178406038bf338779a0cee6c0700 100644 (file)
@@ -10,7 +10,7 @@ package org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.match;
 
 import java.math.BigInteger;
 import org.opendaylight.openflowplugin.api.openflow.md.util.OpenflowVersion;
-import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.common.ParametrizedConvertor;
+import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.common.Convertor;
 import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.data.VersionDatapathIdConvertorData;
 import org.opendaylight.openflowplugin.openflow.md.util.ActionUtil;
 import org.opendaylight.openflowplugin.openflow.md.util.InventoryDataServiceUtil;
@@ -30,6 +30,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026
 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.layer._4.match.UdpMatchBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.vlan.match.fields.VlanIdBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.v10.grouping.MatchV10;
+import org.opendaylight.yangtools.yang.binding.DataContainer;
 
 /**
  * Converts Openflow 1.0 specific flow match to MD-SAL format flow
@@ -44,14 +45,14 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.matc
  * }
  * </pre>
  */
-public class MatchV10ResponseConvertor implements ParametrizedConvertor<MatchV10, MatchBuilder, VersionDatapathIdConvertorData> {
+public class MatchV10ResponseConvertor implements Convertor<MatchV10, MatchBuilder, VersionDatapathIdConvertorData> {
     private static final short PROTO_TCP = 6;
     private static final short PROTO_UDP = 17;
     private static final short PROTO_ICMPV4 = 1;
     private static final String NO_IP = "0.0.0.0/0";
 
     @Override
-    public Class<?> getType() {
+    public Class<? extends DataContainer> getType() {
         return MatchV10.class;
     }
 
diff --git a/openflowplugin/src/test/java/org/opendaylight/openflowplugin/openflow/md/core/sal/convertor/ConvertorManagerTest.java b/openflowplugin/src/test/java/org/opendaylight/openflowplugin/openflow/md/core/sal/convertor/ConvertorManagerTest.java
deleted file mode 100644 (file)
index a35f085..0000000
+++ /dev/null
@@ -1,161 +0,0 @@
-/*
- * 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.assertNotNull;
-import static org.junit.Assert.assertTrue;
-
-import java.util.Collections;
-import java.util.List;
-import java.util.Optional;
-import org.junit.Before;
-import org.junit.Test;
-import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.common.Convertor;
-import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.common.ConvertorData;
-import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.common.ParametrizedConvertor;
-
-public class ConvertorManagerTest {
-    private static final String CONVERT_INPUT = "10";
-    private static final Integer CONVERT_EXPECTED_RESULT = 10;
-    private static final Short P_CONVERT_INPUT = 0x01;
-    private static final String P_CONVERT_RESULT = "12";
-    private static final Short P_CONVERT_VERSION = 0x02;
-
-    private Convertor<CharSequence, Integer> convertor;
-    private ParametrizedConvertor<Number, String, TestConvertorData> parametrizedConvertor;
-
-    @Before
-    public void setUp() throws Exception {
-        convertor = new Convertor<CharSequence, Integer>() {
-            @Override
-            public Class<?> getType() {
-                return CharSequence.class;
-            }
-
-            @Override
-            public Integer convert(CharSequence source) {
-                return Integer.valueOf(source.toString());
-            }
-        };
-
-        parametrizedConvertor = new ParametrizedConvertor<Number, String, TestConvertorData>() {
-            @Override
-            public Class<?> getType() {
-                return Number.class;
-            }
-
-            @Override
-            public String convert(Number source, TestConvertorData testConvertorData) {
-                return String.valueOf(source) + String.valueOf(testConvertorData.getVersion());
-            }
-        };
-
-        ConvertorManager.getInstance().registerConvertor(convertor);
-        ConvertorManager.getInstance().registerConvertor(parametrizedConvertor);
-    }
-
-    @Test
-    public void testRegisterConvertor() throws Exception {
-        Convertor result = ConvertorManager.getInstance().registerConvertor(convertor);
-        assertNotNull("Convertor should be already registered", result);
-    }
-
-    @Test
-    public void testRegisterParametrizedConvertor() throws Exception {
-        ParametrizedConvertor result = ConvertorManager.getInstance().registerConvertor(parametrizedConvertor);
-        assertNotNull("Parametrized convertor should be already registered", result);
-    }
-
-    @Test
-    public void testConvert() throws Exception {
-        final Optional<Integer> result = ConvertorManager.getInstance().convert(CONVERT_INPUT);
-
-        assertTrue("Failed to convert string to integer", result.isPresent());
-        assertEquals("Wrong conversion between string and integer", CONVERT_EXPECTED_RESULT, result.get());
-    }
-
-    @Test
-    public void testCollectionConvert() throws Exception {
-        final Optional<List<Boolean>> result = ConvertorManager.getInstance().convert(
-                Collections.singletonList(Boolean.TRUE));
-
-        assertFalse("Convertor result should be empty on wrong convertor", result.isPresent());
-    }
-
-    @Test
-    public void testEmptyCollectionConvert() throws Exception {
-        final Optional<List<Boolean>> result = ConvertorManager.getInstance().convert(Collections.emptyList());
-
-        assertFalse("Convertor result should be empty on empty collection", result.isPresent());
-    }
-
-    @Test
-    public void testFailedConvert() throws Exception {
-        final Optional<Integer> result = ConvertorManager.getInstance().convert(null);
-
-        assertFalse("Convertor result should be empty on null input", result.isPresent());
-    }
-
-    @Test
-    public void testNotFoundConvert() throws Exception {
-        final Optional<Boolean> result = ConvertorManager.getInstance().convert(Boolean.TRUE);
-
-        assertFalse("Convertor result should be empty on wrong input", result.isPresent());
-    }
-
-    @Test
-    public void testParametrizedConvert() throws Exception {
-        final TestConvertorData data = new TestConvertorData(P_CONVERT_VERSION);
-        final Optional<String> result = ConvertorManager.getInstance().convert(P_CONVERT_INPUT, data);
-
-        assertTrue("Failed to convert short with data to string", result.isPresent());
-        assertEquals("Wrong conversion between short with data and string", P_CONVERT_RESULT, result.get());
-    }
-
-    @Test
-    public void testCollectionParametrizedConvert() throws Exception {
-        final TestConvertorData data = new TestConvertorData(P_CONVERT_VERSION);
-        final Optional<List<Boolean>> result = ConvertorManager.getInstance().convert(
-                Collections.singletonList(Boolean.TRUE), data);
-
-        assertFalse("Convertor result should be empty on wrong convertor", result.isPresent());
-    }
-
-    @Test
-    public void testEmptyCollectionParametrizedConvert() throws Exception {
-        final TestConvertorData data = new TestConvertorData(P_CONVERT_VERSION);
-        final Optional<List<Boolean>> result = ConvertorManager.getInstance().convert(Collections.emptyList(), data);
-
-        assertFalse("Convertor result should be empty on empty collection", result.isPresent());
-    }
-
-    @Test
-    public void testFailedParametrizedConvert() throws Exception {
-        final TestConvertorData data = new TestConvertorData(P_CONVERT_VERSION);
-        final Optional<String> result = ConvertorManager.getInstance().convert(null, data);
-
-        assertFalse("Parametrized convertor result should be empty on null input", result.isPresent());
-    }
-
-    @Test
-    public void testNotFoundParametrizedConvert() throws Exception {
-        final TestConvertorData data = new TestConvertorData(P_CONVERT_VERSION);
-        final Optional<Boolean> result = ConvertorManager.getInstance().convert(Boolean.TRUE, data);
-
-        assertFalse("Parametrized convertor result should be empty on wrong input", result.isPresent());
-    }
-
-    private class TestConvertorData extends ConvertorData {
-        TestConvertorData(short version) {
-            super(version);
-        }
-    }
-}
\ No newline at end of file
index 73174ede7086bec593202ddccdd0aabe0449b4a9..778e87e5d5951264673af4dd5b7bcd3bc0c735c1 100644 (file)
@@ -49,7 +49,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731
 public class GroupConvertorTest {
 
     /**
-     * test of {@link org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.GroupConvertor#convert(org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.Group, org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.data.VersionDatapathIdConvertorData)} }
+     * test of {@link GroupConvertor#convert(org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.Group, org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.data.VersionDatapathIdConvertorData)} }
      */
     @Test
     public void testGroupModConvertorwithallParameters() {
@@ -172,7 +172,7 @@ public class GroupConvertorTest {
     }
 
     /**
-     * test of {@link org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.GroupConvertor#convert(org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.Group, org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.data.VersionDatapathIdConvertorData)} }
+     * test of {@link GroupConvertor#convert(org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.Group, org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.data.VersionDatapathIdConvertorData)} }
      */
     @Test
     public void testGroupModConvertorNoBucket() {
@@ -191,7 +191,7 @@ public class GroupConvertorTest {
     }
 
     /**
-     * test of {@link org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.GroupConvertor#convert(org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.Group, org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.data.VersionDatapathIdConvertorData)} }
+     * test of {@link GroupConvertor#convert(org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.Group, org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.data.VersionDatapathIdConvertorData)} }
      */
     @Test
     public void testGroupModConvertorBucketwithNOWieghtValuesForGroupTypeFastFailure() {
@@ -271,7 +271,7 @@ public class GroupConvertorTest {
     }
 
     /**
-     * test of {@link org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.GroupConvertor#convert(org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.Group, org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.data.VersionDatapathIdConvertorData)} }
+     * test of {@link GroupConvertor#convert(org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.Group, org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.data.VersionDatapathIdConvertorData)} }
      */
     @Test
     public void testGroupModConvertSortedBuckets() {
@@ -426,7 +426,7 @@ public class GroupConvertorTest {
     }
 
     /**
-     * test of {@link org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.GroupConvertor#convert(org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.Group, org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.data.VersionDatapathIdConvertorData)} }
+     * test of {@link GroupConvertor#convert(org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.Group, org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.data.VersionDatapathIdConvertorData)} }
      */
     @Test
     public void testGroupModConvertorBucketwithNOWieghtValuesForGroupTypeAll() {
index fb3c14babb15c18ea54ae602f18170dae5d2b133..4b2f64f5ed6bea7dbe3cd1dabe3a4098664c5c70 100644 (file)
@@ -8,8 +8,6 @@
 
 package org.opendaylight.openflowplugin.openflow.md.core.sal.convertor;
 
-import static org.mockito.Mockito.when;
-
 import java.math.BigInteger;
 import java.util.ArrayList;
 import java.util.Collections;
@@ -22,7 +20,6 @@ import junit.framework.TestCase;
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
-import org.mockito.Mock;
 import org.mockito.runners.MockitoJUnitRunner;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.CopyTtlInCaseBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.CopyTtlOutCaseBuilder;
@@ -49,6 +46,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instru
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.instruction.WriteMetadataCaseBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.list.Instruction;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.list.InstructionBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.table.service.rev131026.table.update.UpdatedTableBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.TableConfig;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.TableFeatures;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.set.field.match.SetFieldMatchBuilder;
@@ -88,9 +86,6 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table
 
 @RunWith(MockitoJUnitRunner.class)
 public class TableFeaturesConvertorTest extends TestCase {
-
-    @Mock
-    private TableFeatures tableFeatures;
     private static final TablePropertiesBuilder tablePropertiesBuilder = new TablePropertiesBuilder();
     private static final Map<Class<? extends TableFeaturePropType>, TableFeaturePropType> augmentationsMap = new HashMap<>();
     private static final List<org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.Instruction> instructionsList = new ArrayList<>();
@@ -334,7 +329,11 @@ public class TableFeaturesConvertorTest extends TestCase {
             tableFeaturesBuilder.setTableProperties(getTableProperties());
             tableFeaturesList.add(tableFeaturesBuilder.build());
         }
-        when(tableFeatures.getTableFeatures()).thenReturn(tableFeaturesList);
+
+        TableFeatures tableFeatures = new UpdatedTableBuilder()
+                .setTableFeatures(tableFeaturesList)
+                .build();
+
         Optional<List<org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.multipart.request.table.features._case.multipart.request.table.features.TableFeatures>> tableFeaturesesOptional =
                 ConvertorManager.getInstance().convert(tableFeatures);
 
index e51a13ca9b19ccfff4c667dabc7c9e0480e809e2..5cf33ef4091c4811486365c494b861e7230896a2 100644 (file)
@@ -421,7 +421,7 @@ public class FlowConvertorTest {
 \r
         @Override\r
         public Class<? extends DataContainer> getImplementedInterface() {\r
-            return null;\r
+            return Flow.class;\r
         }\r
     }\r
 }
\ No newline at end of file