Bug-835 - Reserve Ports should be logical ports
[openflowplugin.git] / openflowplugin / src / main / java / org / opendaylight / openflowplugin / openflow / md / core / translator / AbstractErrorTranslator.java
index 1f76f2a7dd0849ff45c8caaa8f55cc4a54484ea0..ecb420ecd3a0db5fff40699ddb8f1059fdc4699a 100644 (file)
@@ -7,7 +7,6 @@
  */
 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;
@@ -15,24 +14,17 @@ 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);
@@ -52,61 +44,29 @@ public abstract class AbstractErrorTranslator implements IMDMessageTranslator<Of
                         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);
 
 }