/** * Copyright (c) 2013, 2015 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.translator; import java.math.BigInteger; import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.errors.rev131116.ErrorType; import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.transaction.rev150304.TransactionId; import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeRef; import org.opendaylight.yang.gen.v1.urn.opendaylight.node.error.service.rev140410.BadActionErrorNotificationBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.node.error.service.rev140410.BadInstructionErrorNotificationBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.node.error.service.rev140410.BadMatchErrorNotificationBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.node.error.service.rev140410.BadRequestErrorNotificationBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.node.error.service.rev140410.ExperimenterErrorNotificationBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.node.error.service.rev140410.FlowModErrorNotificationBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.node.error.service.rev140410.GroupModErrorNotificationBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.node.error.service.rev140410.HelloFailedErrorNotificationBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.node.error.service.rev140410.MeterModErrorNotificationBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.node.error.service.rev140410.PortModErrorNotificationBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.node.error.service.rev140410.QueueOpErrorNotificationBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.node.error.service.rev140410.RoleRequestErrorNotificationBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.node.error.service.rev140410.SwitchConfigErrorNotificationBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.node.error.service.rev140410.TableFeaturesErrorNotificationBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.node.error.service.rev140410.TableModErrorNotificationBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.ErrorMessage; /** * OF-1.3 errorMessage support */ public class ErrorTranslator extends AbstractErrorTranslator { @Override public ErrorType decodeErrorType(int type) { return ErrorType.forValue(type); } @Override public org.opendaylight.yang.gen.v1.urn.opendaylight.flow.errors.rev131116.ErrorMessage getGranularNodeErrors(ErrorMessage message, ErrorType errorType, NodeRef node){ org.opendaylight.yang.gen.v1.urn.opendaylight.flow.errors.rev131116.ErrorMessage outErrorMessage = null; TransactionId txnId = new TransactionId(BigInteger.valueOf(message.getXid())); //currently in yang , generation of builders does not support an interface //so each notification is put in a separate if-else if (errorType == ErrorType.HelloFailed) { HelloFailedErrorNotificationBuilder builder = new HelloFailedErrorNotificationBuilder(); builder.setTransactionId(txnId); builder.setType(errorType); builder.setCode(message.getCode()); builder.setNode(node); if (message.getData() != null) { builder.setData(new String(message.getData())); } outErrorMessage = builder.build(); } else if (errorType == ErrorType.BadRequest) { BadRequestErrorNotificationBuilder builder = new BadRequestErrorNotificationBuilder (); builder.setTransactionId(txnId); builder.setType(errorType); builder.setCode(message.getCode()); builder.setNode(node); if (message.getData() != null) { builder.setData(new String(message.getData())); } outErrorMessage = builder.build(); } else if (errorType == ErrorType.BadAction) { BadActionErrorNotificationBuilder builder = new BadActionErrorNotificationBuilder(); builder.setTransactionId(txnId); builder.setType(errorType); builder.setCode(message.getCode()); builder.setNode(node); if (message.getData() != null) { builder.setData(new String(message.getData())); } outErrorMessage = builder.build(); } else if (errorType == ErrorType.BadInstruction) { BadInstructionErrorNotificationBuilder builder = new BadInstructionErrorNotificationBuilder(); builder.setTransactionId(txnId); builder.setType(errorType); builder.setCode(message.getCode()); builder.setNode(node); if (message.getData() != null) { builder.setData(new String(message.getData())); } outErrorMessage = builder.build(); } else if (errorType == ErrorType.BadMatch) { BadMatchErrorNotificationBuilder builder = new BadMatchErrorNotificationBuilder(); builder.setTransactionId(txnId); builder.setType(errorType); builder.setCode(message.getCode()); builder.setNode(node); if (message.getData() != null) { builder.setData(new String(message.getData())); } outErrorMessage = builder.build(); } else if (errorType == ErrorType.FlowModFailed) { FlowModErrorNotificationBuilder builder = new FlowModErrorNotificationBuilder(); builder.setTransactionId(txnId); builder.setType(errorType); builder.setCode(message.getCode()); builder.setNode(node); if (message.getData() != null) { builder.setData(new String(message.getData())); } outErrorMessage = builder.build(); } else if (errorType == ErrorType.GroupModFailed) { GroupModErrorNotificationBuilder builder = new GroupModErrorNotificationBuilder(); builder.setTransactionId(txnId); builder.setType(errorType); builder.setCode(message.getCode()); builder.setNode(node); if (message.getData() != null) { builder.setData(new String(message.getData())); } outErrorMessage = builder.build(); } else if (errorType == ErrorType.PortModFailed) { PortModErrorNotificationBuilder builder = new PortModErrorNotificationBuilder(); builder.setTransactionId(txnId); builder.setType(errorType); builder.setCode(message.getCode()); builder.setNode(node); if (message.getData() != null) { builder.setData(new String(message.getData())); } outErrorMessage = builder.build(); } else if (errorType == ErrorType.QueueOpFailed) { QueueOpErrorNotificationBuilder builder = new QueueOpErrorNotificationBuilder(); builder.setTransactionId(txnId); builder.setType(errorType); builder.setCode(message.getCode()); builder.setNode(node); if (message.getData() != null) { builder.setData(new String(message.getData())); } outErrorMessage = builder.build(); } else if (errorType == ErrorType.SwitchConfigFailed) { SwitchConfigErrorNotificationBuilder builder = new SwitchConfigErrorNotificationBuilder(); builder.setTransactionId(txnId); builder.setType(errorType); builder.setCode(message.getCode()); builder.setNode(node); if (message.getData() != null) { builder.setData(new String(message.getData())); } outErrorMessage = builder.build(); } else if (errorType == ErrorType.RoleRequestFailed) { RoleRequestErrorNotificationBuilder builder = new RoleRequestErrorNotificationBuilder(); builder.setTransactionId(txnId); builder.setType(errorType); builder.setCode(message.getCode()); builder.setNode(node); if (message.getData() != null) { builder.setData(new String(message.getData())); } outErrorMessage = builder.build(); } else if (errorType == ErrorType.MeterModFailed) { MeterModErrorNotificationBuilder builder = new MeterModErrorNotificationBuilder(); builder.setTransactionId(txnId); builder.setType(errorType); builder.setCode(message.getCode()); builder.setNode(node); if (message.getData() != null) { builder.setData(new String(message.getData())); } outErrorMessage = builder.build(); } else if (errorType == ErrorType.TableModFailed) { TableModErrorNotificationBuilder builder = new TableModErrorNotificationBuilder(); builder.setTransactionId(txnId); builder.setType(errorType); builder.setCode(message.getCode()); builder.setNode(node); if (message.getData() != null) { builder.setData(new String(message.getData())); } outErrorMessage = builder.build(); } else if (errorType == ErrorType.TableFeaturesFailed) { TableFeaturesErrorNotificationBuilder builder = new TableFeaturesErrorNotificationBuilder(); builder.setTransactionId(txnId); builder.setType(errorType); builder.setCode(message.getCode()); builder.setNode(node); if (message.getData() != null) { builder.setData(new String(message.getData())); } outErrorMessage = builder.build(); } else if (errorType == ErrorType.Experimenter) { ExperimenterErrorNotificationBuilder builder = new ExperimenterErrorNotificationBuilder(); builder.setTransactionId(txnId); builder.setType(errorType); builder.setCode(message.getCode()); builder.setNode(node); if (message.getData() != null) { builder.setData(new String(message.getData())); } outErrorMessage = builder.build(); } return outErrorMessage; } }