package jasync;

import java.io.Serializable;

/**
 * Simple implementation of Peer interface
 * @see Peer
 */
public class PeerImpl implements Serializable, Peer {
    /**
     * major version number
     */
    public final int versionMajor;

    /**
     * minor version number
     */
    public final int versionMinor;

    /**
     * revision number
     */
    public final int versionRevision;
    
    /**
     * SERVER or CLIENT
     * @see PeerType
     */
    public final PeerType peerType;

    /**
     * Freeform String for the name of this peer.
     */
    public final String peerName;

    /**
     * Constructor
     * @param versionMajor major version number
     * @param versionMinor minor version number
     * @param versionRevision revision number
     * @param peerType SERVER or CLIENT, as defined in the PeerType enum
     * @param peerName name of this peer
     * @see PeerType
     */
    public PeerImpl (int versionMajor, int versionMinor, int versionRevision,
		     PeerType peerType, String peerName) {
	this.versionMajor = versionMajor;
	this.versionMinor = versionMinor;
	this.versionRevision = versionRevision;
	this.peerType = peerType;
	this.peerName = peerName;
    }

    /**
     * Copy constructor.
     */
    public PeerImpl (Peer in) {
	versionMajor = in.getVersionMajor();
	versionMinor = in.getVersionMinor();
	versionRevision = in.getVersionRevision();
	peerType = in.getPeerType();
	peerName = in.getPeerName();
    }

    /**
     * Return the major version.
     * @return the major version number
     */
    public int getVersionMajor () {
	return versionMajor;
    }

    /**
     * Return the minor version.
     * @return the major minor number
     */
    public int getVersionMinor () {
	return versionMinor;
    }

    /**
     * Return the revision.
     * @return the revision number
     */
    public int getVersionRevision () {
	return versionRevision;
    }

    /**
     * Return the peer type.
     * @return the peer type.
     * @see PeerType
     */
    public PeerType getPeerType () {
	return peerType;
    }

    /**
     * Return the name.
     * @return the name.
     */
    public String getPeerName () {
	return peerName;
    }

    /**
     * Returns a string of the format
     * "versionMajor:versionMinor:versionRevision:peerType:peerName"
     * @return String representation of this Peer.
     */
    public String toString () {
	return versionMajor + ":" + versionMinor + ":" + versionRevision
	    + ":" + peerType + ":" + peerName;
    }
}

