*/
package org.opendaylight.openflowplugin.openflow.md.core.translator;
-import java.math.BigInteger;
import java.util.Collections;
import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList;
import org.opendaylight.openflowplugin.openflow.md.core.IMDMessageTranslator;
import org.opendaylight.openflowplugin.openflow.md.core.SwitchConnectionDistinguisher;
import org.opendaylight.openflowplugin.openflow.md.core.session.SessionContext;
-import org.opendaylight.openflowplugin.openflow.md.core.session.TransactionKey;
import org.opendaylight.openflowplugin.openflow.md.util.ByteUtil;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.NodeErrorNotification;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.NodeErrorNotificationBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.NodeFlow;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.node.error.notification.object.reference.FlowRefBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.node.error.notification.object.reference.GroupRefBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.node.error.notification.object.reference.MeterRefBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.transaction.rev131103.TransactionId;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.transaction.rev131103.TransactionMetadata;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.group.service.rev130918.NodeGroup;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.service.rev130918.NodeMeter;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.errors.rev131116.ErrorType;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.ErrorMessage;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.OfHeader;
import org.opendaylight.yangtools.yang.binding.DataObject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+/**
+ * general support for errorMessage OF-API to MD-SAL translation
+ */
public abstract class AbstractErrorTranslator implements IMDMessageTranslator<OfHeader, List<DataObject>> {
protected static final Logger LOG = LoggerFactory.getLogger(AbstractErrorTranslator.class);
hexData);
}
- // create a Node Error Notification event builder
- NodeErrorNotificationBuilder nodeErrBuilder = new NodeErrorNotificationBuilder();
-
- // Fill in the Node Error Notification Builder object from the Error
- // Message
-
- nodeErrBuilder.setTransactionId(new TransactionId(BigInteger.valueOf(message.getXid())));
-
- Object object = sc.getbulkTransactionCache().getIfPresent(new TransactionKey(message.getXid()));
- if (object != null) {
- nodeErrBuilder.setTransactionUri(((TransactionMetadata) object).getTransactionUri());
- FlowRefBuilder flowRef = new FlowRefBuilder();
- GroupRefBuilder groupRef = new GroupRefBuilder();
- MeterRefBuilder meterRef = new MeterRefBuilder();
- if (object instanceof NodeFlow) {
- FlowEntityData flowEntry = new FlowEntityData();
- flowRef = flowEntry.getBuilder(object);
- nodeErrBuilder.setObjectReference(flowRef.build());
- } else if (object instanceof NodeGroup) {
- GroupEntityData groupEntry = new GroupEntityData();
- groupRef = groupEntry.getBuilder(object);
- nodeErrBuilder.setObjectReference(groupRef.build());
-
- } else if (object instanceof NodeMeter) {
- MeterEntityData meterEntry = new MeterEntityData();
- meterRef = meterEntry.getBuilder(object);
- nodeErrBuilder.setObjectReference(meterRef.build());
-
- }
-
- }
-
- decodeErrorType(nodeErrBuilder, message.getType());
-
- nodeErrBuilder.setCode(message.getCode());
-
- if (message.getData() != null) {
- nodeErrBuilder.setData(new String(message.getData()));
- }
// TODO -- Augmentation is not handled
-
- NodeErrorNotification nodeErrorEvent = nodeErrBuilder.build();
- list.add(nodeErrorEvent);
+ ErrorType type = decodeErrorType(message.getType());
+
+ list.add(getGranularNodeErrors(message, type));
return list;
} else {
LOG.error("Message is not of Error Message ");
return Collections.emptyList();
}
}
+
+ /**
+ * @param message
+ * @param errorType
+ * @return
+ */
+ protected abstract org.opendaylight.yang.gen.v1.urn.opendaylight.flow.errors.rev131116.ErrorMessage getGranularNodeErrors(ErrorMessage message, ErrorType errorType);
/**
- * @param nodeErrBuilder translated error message
* @param type error type in source message
+ * @return enum for errorType
*/
- public abstract void decodeErrorType(NodeErrorNotificationBuilder nodeErrBuilder, int type);
+ public abstract ErrorType decodeErrorType(int type);
}