/*
 * Copyright (C) 2013 Red Hat, Inc.
 *
 * 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
 *
 * Authors : Madhu Venugopal, Brent Salisbury
 */
package org.opendaylight.ovsdb.openstack.netvirt;

import org.opendaylight.ovsdb.lib.notation.Row;
import org.opendaylight.ovsdb.openstack.netvirt.api.Action;
import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.Node;

public class SouthboundEvent extends AbstractEvent {
    public enum Type { NODE, ROW }
    private Type type;
    private Node node;
    private String tableName;
    private String uuid;
    private Row row;
    private Object context;
    public SouthboundEvent(Node node, Action action) {
        super(HandlerType.SOUTHBOUND, action);
        this.type = Type.NODE;
        this.node = node;
    }
    public SouthboundEvent(Node node, String tableName, String uuid, Row row, Action action) {
        super(HandlerType.SOUTHBOUND, action);
        this.type = Type.ROW;
        this.node = node;
        this.tableName = tableName;
        this.uuid = uuid;
        this.row = row;
    }
    public SouthboundEvent(Node node, String tableName, String uuid, Row row, Object context, Action action) {
        super(HandlerType.SOUTHBOUND, action);
        this.type = Type.ROW;
        this.node = node;
        this.tableName = tableName;
        this.uuid = uuid;
        this.row = row;
        this.context = context;
    }
    public Type getType() {
        return type;
    }
    public Node getNode() {
        return node;
    }
    public String getTableName() {
        return tableName;
    }
    public String getUuid() {
        return uuid;
    }
    public Row getRow() {
        return row;
    }
    public Object getContext() {
        return context;
    }
    @Override
    public String toString() {
        return "SouthboundEvent [type=" + type + ", action=" + super.getAction() + ", node=" + node + ", tableName=" + tableName
                + ", uuid=" + uuid + ", row=" + row + ", context=" + context.toString() + "]";
    }
    @Override
    public int hashCode() {
        final int prime = 31;
        int result = super.hashCode();
        result = prime * result + ((node == null) ? 0 : node.hashCode());
        result = prime * result + ((tableName == null) ? 0 : tableName.hashCode());
        result = prime * result + ((type == null) ? 0 : type.hashCode());
        result = prime * result + ((uuid == null) ? 0 : uuid.hashCode());
        return result;
    }
    @Override
    public boolean equals(Object obj) {
        if (this == obj) {
            return true;
        }
        if (obj == null) {
            return false;
        }
        if (getClass() != obj.getClass()) {
            return false;
        }
        if (!super.equals(obj)) {
            return false;
        }
        SouthboundEvent other = (SouthboundEvent) obj;
        if (node == null) {
            if (other.node != null) {
                return false;
            }
        } else if (!node.equals(other.node)) {
            return false;
        }
        if (tableName == null) {
            if (other.tableName != null) {
                return false;
            }
        } else if (!tableName.equals(other.tableName)) {
            return false;
        }
        if (type == null) {
            if (other.type != null) {
                return false;
            }
        } else if (!type.equals(other.type)) {
            return false;
        }
        if (uuid == null) {
            if (other.uuid != null) {
                return false;
            }
        } else if (!uuid.equals(other.uuid)) {
            return false;
        }
        return true;
    }
}

@@ -1976,24 +1976,61 @@
 oString() %7B%0A
+        if (type == Type.NODE) %7B%0A    
         retu
@@ -2063,16 +2063,36 @@
 %22 + type
+%0A                   
  + %22, ac
@@ -2117,16 +2117,36 @@
 Action()
+%0A                   
  + %22, no
@@ -2158,16 +2158,226 @@
 + node +
+ %22%5D%22;%0A        %7D else if (type == Type.ROW) %7B%0A            return %22SouthboundEvent %5Btype=%22 + type%0A                    + %22, action=%22 + super.getAction()%0A                    + %22, node=%22 + node%0A                    +
  %22, tabl
@@ -2408,24 +2408,28 @@
             
+  
+  
 + %22, uuid=%22 
@@ -2438,74 +2438,189 @@
 uuid
- + %22, row=%22 + row + %22, context=%22 + context.toString() + %22%5D%22;%0A    %7D
+%0A                    + %22, row=%22 + row%0A                    + %22, context=%22 + context + %22%5D%22;%0A        %7D else %7B%0A            return %22SouthboundEvent %5Btype=%22 + type + %22%5D%22;%0A        %7D%0A    %7D%0A
 %0A   

Fix toString for different events to avoid NPE