package dgm; import java.io.Serializable; public class ID implements Serializable { static final long serialVersionUID = 1; private final String index; private final String type; private final String id; private final long version; public ID(String index, String type, String id, long version) { this.index = index; this.type = type; this.id = id; this.version = version; } public final String index() { return index; } public final String type() { return type; } public final String id() { return id; } public final long version() { return version; } public final boolean isSymbolic() { return version == 0; } public ID type(String newType) { return new ID(index, newType, id, version); } public ID index(String newIndex) { return new ID(newIndex, type, id, version); } public ID id(String newId) { return new ID(index, type, newId, version); } public ID version(long newVersion) { return new ID(index, type, id, newVersion); } @Override public final String toString() { return "(" + index + "," + type + "," + id + "," + version + ")"; } @Override public final boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; ID id1 = (ID) o; if (version != id1.version) return false; if (id != null ? !id.equals(id1.id) : id1.id != null) return false; if (index != null ? !index.equals(id1.index) : id1.index != null) return false; if (type != null ? !type.equals(id1.type) : id1.type != null) return false; return true; } @Override public final int hashCode() { int result = index != null ? index.hashCode() : 0; result = 31 * result + (type != null ? type.hashCode() : 0); result = 31 * result + (id != null ? id.hashCode() : 0); result = 31 * result + (int) (version ^ (version >>> 32)); return result; } }