package com.lts.jobtracker.channel;

import com.lts.core.cluster.NodeType;
import com.lts.remoting.Channel;

/**
 * @author Robert HG (254963746@qq.com) on 7/24/14.
 * 对channel的包装
 */
public class ChannelWrapper {

    private Channel channel;
    private NodeType nodeType;
    private String nodeGroup;
    // 节点的唯一标识
    private String identity;

    public ChannelWrapper(Channel channel, NodeType nodeType, String nodeGroup, String identity) {
        this.channel = channel;
        this.nodeType = nodeType;
        this.nodeGroup = nodeGroup;
        this.identity = identity;
    }

    public Channel getChannel() {
        return channel;
    }

    public void setChannel(Channel channel) {
        this.channel = channel;
    }

    public NodeType getNodeType() {
        return nodeType;
    }

    public void setNodeType(NodeType nodeType) {
        this.nodeType = nodeType;
    }

    public String getNodeGroup() {
        return nodeGroup;
    }

    public void setNodeGroup(String nodeGroup) {
        this.nodeGroup = nodeGroup;
    }

    public String getIdentity() {
        return identity;
    }

    public void setIdentity(String identity) {
        this.identity = identity;
    }

    public boolean isOpen() {
        return channel.isOpen();
    }

    public boolean isClosed() {
        return channel.isClosed();
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (!(o instanceof ChannelWrapper)) return false;

        ChannelWrapper that = (ChannelWrapper) o;

        if (channel != null ? !channel.equals(that.channel) : that.channel != null) return false;
        if (identity != null ? !identity.equals(that.identity) : that.identity != null) return false;
        if (nodeGroup != null ? !nodeGroup.equals(that.nodeGroup) : that.nodeGroup != null) return false;
        if (nodeType != that.nodeType) return false;

        return true;
    }

    @Override
    public int hashCode() {
        int result = channel != null ? channel.hashCode() : 0;
        result = 31 * result + (nodeType != null ? nodeType.hashCode() : 0);
        result = 31 * result + (nodeGroup != null ? nodeGroup.hashCode() : 0);
        result = 31 * result + (identity != null ? identity.hashCode() : 0);
        return result;
    }

    @Override
    public String toString() {
        return "ChannelWrapper{" +
                "channel=" + channel +
                ", nodeType=" + nodeType +
                ", nodeGroup='" + nodeGroup + '\'' +
                ", identity='" + identity + '\'' +
                '}';
    }
}
