1 package net.pterodactylus.sone.data;
3 import com.google.common.base.Charsets;
4 import com.google.common.base.Objects;
5 import com.google.common.hash.HashFunction;
6 import com.google.common.hash.Hashing;
9 * Container for a combined ID, originally computed from a {@link Sone}’s ID and an element’s ID.
11 * @author <a href="mailto:bombe@pterodactylus.net">David ‘Bombe’ Roden</a>
15 private static final HashFunction HASH_FUNCTION = Hashing.sha256();
16 public static final int LENGTH = HASH_FUNCTION.bits() / 4;
18 private final HashFunction sha256 = HASH_FUNCTION;
19 private final String soneId;
20 private final String elementId;
22 private Id(String soneId, String elementId) {
24 this.elementId = elementId;
27 public String getSoneId() {
31 public String getElementId() {
35 public String getExternal() {
36 return sha256.newHasher()
37 .putBytes(soneId.getBytes(Charsets.UTF_8))
38 .putBytes(elementId.getBytes(Charsets.UTF_8))
42 public static Id from(String soneId, String elementId) {
43 return new Id(soneId, elementId);
47 public boolean equals(Object o) {
48 if (o == null || getClass() != o.getClass()) {
52 return Objects.equal(soneId, id.soneId)
53 && Objects.equal(elementId, id.elementId);
57 public int hashCode() {
58 return Objects.hashCode(soneId, elementId);
62 public String toString() {