X-Git-Url: https://git.pterodactylus.net/?p=Sone.git;a=blobdiff_plain;f=src%2Fmain%2Fjava%2Fnet%2Fpterodactylus%2Fsone%2Fdata%2FId.java;fp=src%2Fmain%2Fjava%2Fnet%2Fpterodactylus%2Fsone%2Fdata%2FId.java;h=bc875b9bca6b2dd97d510dde7f105025dee6e9f5;hp=0000000000000000000000000000000000000000;hb=25eccb52bf670342982c1f87c85b191cf4ae56cd;hpb=d945b492b95c370539a0b6d64c37e4b93b5be190 diff --git a/src/main/java/net/pterodactylus/sone/data/Id.java b/src/main/java/net/pterodactylus/sone/data/Id.java new file mode 100644 index 0000000..bc875b9 --- /dev/null +++ b/src/main/java/net/pterodactylus/sone/data/Id.java @@ -0,0 +1,66 @@ +package net.pterodactylus.sone.data; + +import com.google.common.base.Charsets; +import com.google.common.base.Objects; +import com.google.common.hash.HashFunction; +import com.google.common.hash.Hashing; + +/** + * Container for a new, combined ID, originally computed from a {@link Sone}’s ID and an element’s ID. + * + * @author David ‘Bombe’ Roden + */ +public class Id { + + private static final HashFunction HASH_FUNCTION = Hashing.sha256(); + public static final int LENGTH = HASH_FUNCTION.bits() / 4; + + private final HashFunction sha256 = HASH_FUNCTION; + private final String soneId; + private final String elementId; + + private Id(String soneId, String elementId) { + this.soneId = soneId; + this.elementId = elementId; + } + + public String getSoneId() { + return soneId; + } + + public String getElementId() { + return elementId; + } + + public String getExternal() { + return sha256.newHasher() + .putBytes(soneId.getBytes(Charsets.UTF_8)) + .putBytes(elementId.getBytes(Charsets.UTF_8)) + .hash().toString(); + } + + public static Id from(String soneId, String elementId) { + return new Id(soneId, elementId); + } + + @Override + public boolean equals(Object o) { + if (o == null || getClass() != o.getClass()) { + return false; + } + Id id = (Id) o; + return Objects.equal(soneId, id.soneId) + && Objects.equal(elementId, id.elementId); + } + + @Override + public int hashCode() { + return Objects.hashCode(soneId, elementId); + } + + @Override + public String toString() { + return getExternal(); + } + +}