package com.linkedin.common.urn;

public class VersionedUrn {

    private final String _urn;
    private final String _versionStamp;

    public VersionedUrn(String urn, String versionStamp) {
      _urn = urn;
      _versionStamp = versionStamp;
    }

    public String getUrn() {
      return _urn;
    }

    public String getVersionStamp() {
      return _versionStamp;
    }

    @SuppressWarnings("unchecked")
    @Override
    public boolean equals(Object obj) {
      if (obj instanceof VersionedUrn) {
        VersionedUrn other = (VersionedUrn) obj;
        return equals(_urn, other._urn) && equals(_versionStamp, other._versionStamp);
      }
      return false;
    }

    @Override
    public int hashCode() {
      int h1 = _urn != null ? _urn.hashCode() : 0;
      int h2 = _versionStamp != null ? _versionStamp.hashCode() : 0;
      return 31 * h1 + h2;
    }

    @Override
    public String toString() {
      return "(" + _urn + " , " + _versionStamp + ")";
    }

    private static boolean equals(Object o1, Object o2) {
      if (o1 != null) {
        return o1.equals(o2);
      }
      return o2 == null;
    }

    /*convenient method*/
    public static VersionedUrn of(String urn, String versionStamp) {
      return new VersionedUrn(urn, versionStamp);
    }

}
