* 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.impl.services.multilayer;
import com.google.common.annotations.VisibleForTesting;
import com.google.common.util.concurrent.SettableFuture;
import java.util.ArrayList;
import java.util.List;
-import java.util.Objects;
-import java.util.concurrent.Future;
import org.opendaylight.openflowjava.protocol.api.keys.MessageTypeKey;
import org.opendaylight.openflowplugin.api.openflow.device.DeviceContext;
import org.opendaylight.openflowplugin.api.openflow.device.RequestContextStack;
import org.opendaylight.openflowplugin.api.openflow.device.Xid;
import org.opendaylight.openflowplugin.extension.api.ConverterMessageToOFJava;
+import org.opendaylight.openflowplugin.extension.api.ConvertorData;
import org.opendaylight.openflowplugin.extension.api.ConvertorMessageFromOFJava;
import org.opendaylight.openflowplugin.extension.api.TypeVersionKey;
import org.opendaylight.openflowplugin.extension.api.core.extension.ExtensionConverterProvider;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestExperimenterCaseBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.multipart.request.experimenter._case.MultipartRequestExperimenterBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.experimenter.types.rev151020.experimenter.core.message.ExperimenterMessageOfChoice;
-import org.opendaylight.yangtools.yang.common.RpcError.ErrorType;
+import org.opendaylight.yangtools.yang.common.ErrorType;
import org.opendaylight.yangtools.yang.common.RpcResult;
import org.opendaylight.yangtools.yang.common.RpcResultBuilder;
import org.slf4j.Logger;
@SuppressWarnings("unchecked")
protected OfHeader buildRequest(Xid xid, SendExperimenterMpRequestInput input) throws ServiceException {
final TypeVersionKey key = new TypeVersionKey<>(
- input.getExperimenterMessageOfChoice().getImplementedInterface(),
+ input.getExperimenterMessageOfChoice().implementedInterface(),
getVersion());
- final ConverterMessageToOFJava<ExperimenterMessageOfChoice, ExperimenterDataOfChoice> messageConverter =
- getExtensionConverterProvider().getMessageConverter(key);
+ final ConverterMessageToOFJava<ExperimenterMessageOfChoice, ExperimenterDataOfChoice,
+ ConvertorData> messageConverter = getExtensionConverterProvider().getMessageConverter(key);
- if (Objects.isNull(messageConverter)) {
+ if (messageConverter == null) {
throw new ServiceException(new ConverterNotFoundException(key.toString()));
}
.setExperimenter(messageConverter.getExperimenterId())
.setExpType(messageConverter.getType())
.setExperimenterDataOfChoice(messageConverter
- .convert(input.getExperimenterMessageOfChoice()))
+ .convert(input.getExperimenterMessageOfChoice(), null))
.build())
.build())
.build();
@Override
@SuppressWarnings("unchecked")
- public Future<RpcResult<SendExperimenterMpRequestOutput>> handleAndReply(SendExperimenterMpRequestInput input) {
+ public ListenableFuture<RpcResult<SendExperimenterMpRequestOutput>> handleAndReply(
+ SendExperimenterMpRequestInput input) {
final ListenableFuture<RpcResult<List<MultipartReply>>> multipartFuture = handleServiceCall(input);
final SettableFuture<RpcResult<SendExperimenterMpRequestOutput>> finalFuture = SettableFuture.create();
final ExperimenterDataOfChoice vendorData = replyBody.getExperimenterDataOfChoice();
final MessageTypeKey<? extends ExperimenterDataOfChoice> key = new MessageTypeKey<>(
getVersion(),
- (Class<? extends ExperimenterDataOfChoice>) vendorData.getImplementedInterface());
+ (Class<? extends ExperimenterDataOfChoice>) vendorData.implementedInterface());
final ConvertorMessageFromOFJava<ExperimenterDataOfChoice, MessagePath> messageConverter =
getExtensionConverterProvider().getMessageConverter(key);
if (messageConverter == null) {
LOG.warn("Custom converter for {}[OF:{}] not found",
- vendorData.getImplementedInterface(),
+ vendorData.implementedInterface(),
getVersion());
finalFuture.set(RpcResultBuilder.<SendExperimenterMpRequestOutput>failed()
.withError(ErrorType.RPC, "Custom converter not found.").build());
return;
}
- try {
- final ExperimenterMessageOfChoice messageOfChoice =
- messageConverter.convert(vendorData, MessagePath.MPMESSAGE_RPC_OUTPUT);
- final ExperimenterCoreMessageItemBuilder expCoreMessageItemBuilder =
- new ExperimenterCoreMessageItemBuilder();
- expCoreMessageItemBuilder.setExperimenterMessageOfChoice(messageOfChoice);
- expCoreMessageItem.add(expCoreMessageItemBuilder.build());
- } catch (final ConversionException e) {
- LOG.error("Conversion of experimenter message reply failed. Exception: {}", e);
- finalFuture.set(RpcResultBuilder.<SendExperimenterMpRequestOutput>failed()
- .withError(ErrorType.RPC,
- "Conversion of experimenter rpc output failed.").build());
- return;
- }
+ final ExperimenterMessageOfChoice messageOfChoice =
+ messageConverter.convert(vendorData, MessagePath.MPMESSAGE_RPC_OUTPUT);
+ final ExperimenterCoreMessageItemBuilder expCoreMessageItemBuilder =
+ new ExperimenterCoreMessageItemBuilder();
+ expCoreMessageItemBuilder.setExperimenterMessageOfChoice(messageOfChoice);
+ expCoreMessageItem.add(expCoreMessageItemBuilder.build());
}
sendExpMpReqOutputBuilder.setExperimenterCoreMessageItem(expCoreMessageItem);
finalFuture.set(RpcResultBuilder.success(sendExpMpReqOutputBuilder.build()).build());
@Override
public void onFailure(final Throwable throwable) {
- LOG.warn("Failure multipart response for Experimenter-Mp request. Exception: {}", throwable);
+ LOG.warn("Failure multipart response for Experimenter-Mp request", throwable);
finalFuture.set(RpcResultBuilder.<SendExperimenterMpRequestOutput>failed()
.withError(ErrorType.RPC, "Future error", throwable).build());
}