- 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>
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;
@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();
@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();
}
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();
}
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);
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) {
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;
- }
}
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;
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);
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;
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;
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);
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;
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;
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);
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 {
/**
*
* @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
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;
}
// 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
}
@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)) {
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);
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;
}
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
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 {
/**
* @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
/*
- * 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,
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;
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;
* }
* </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.
}
@Override
- public Class<?> getType() {
+ public Class<? extends DataContainer> getType() {
return Group.class;
}
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;
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
* }
* </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);
}
@Override
- public Class<?> getType() {
+ public Class<? extends DataContainer> getType() {
return GroupDesc.class;
}
/*
- * 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,
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;
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.
*/
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();
}
@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
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;
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.
* }
* </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) {
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;
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;
* }
* </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);
/**
}
@Override
- public Class<?> getType() {
+ public Class<? extends DataContainer> getType() {
return Meter.class;
}
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;
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.
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.
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;
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;
* }
* </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);
/**
}
@Override
- public Class<?> getType() {
+ public Class<? extends DataContainer> getType() {
return TransmitPacketInput.class;
}
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;
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
* }
* </pre>
*/
-public class PortConvertor implements ParametrizedConvertor<Port, PortModInput, VersionConvertorData> {
+public class PortConvertor implements Convertor<Port, PortModInput, VersionConvertorData> {
/**
* Create default empty port mod input
}
@Override
- public Class<?> getType() {
+ public Class<? extends DataContainer> getType() {
return Port.class;
}
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;
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;
*/
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 =
}
@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();
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;
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;
* }
* </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;
}
@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();
}
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
* }
* </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> {
.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;
}
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.
* }
* </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> {
.addCase(new OfToSalStripVlanCase());
@Override
- public Class<?> getType() {
+ public Class<? extends DataContainer> getType() {
return Action.class;
}
*/
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);
* @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);
/**
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);
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
*
* @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);
}
+++ /dev/null
-/*
- * 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);
-}
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;
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.
* }
* </pre>
*/
-public class FlowConvertor implements ParametrizedConvertor<Flow, List<FlowModInputBuilder>, VersionDatapathIdConvertorData> {
+public class FlowConvertor implements Convertor<Flow, List<FlowModInputBuilder>, VersionDatapathIdConvertorData> {
/**
* Default idle timeout
*/
}
@Override
- public Class<?> getType() {
+ public Class<? extends DataContainer> getType() {
return Flow.class;
}
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;
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
* }
* </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;
}
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;
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.
* }
* </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
}
@Override
- public Class<?> getType() {
+ public Class<? extends DataContainer> getType() {
return FlowStats.class;
}
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);
}
}
@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);
/**
* @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());
}
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);
}
}
@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);
/**
* @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());
}
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;
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
* }
* </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())
.addCase(new OfToSalTunnelIpv4DstCase());
@Override
- public Class<?> getType() {
+ public Class<? extends DataContainer> getType() {
return MatchEntriesGrouping.class;
}
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;
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
* }
* </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;
}
+++ /dev/null
-/*
- * 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
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() {
}
/**
- * 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() {
}
/**
- * 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() {
}
/**
- * 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() {
}
/**
- * 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() {
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;
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;
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;
@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<>();
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);
\r
@Override\r
public Class<? extends DataContainer> getImplementedInterface() {\r
- return null;\r
+ return Flow.class;\r
}\r
}\r
}
\ No newline at end of file