package net.pterodactylus.sone.data;
+import static com.google.common.base.Preconditions.checkNotNull;
+
import com.google.common.base.Charsets;
import com.google.common.base.Objects;
+import com.google.common.base.Optional;
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.
+ * Container for a combined ID, originally computed from a {@link Sone}’s ID and an element’s ID.
*
* @author <a href="mailto:bombe@pterodactylus.net">David ‘Bombe’ Roden</a>
*/
public class Id {
- private static final HashFunction HASH_FUNCTION = Hashing.sha256();
- public static final int LENGTH = HASH_FUNCTION.bits() / 4;
+ private static final HashFunction sha256 = Hashing.sha256();
- private final HashFunction sha256 = HASH_FUNCTION;
private final String soneId;
private final String elementId;
+ private final String externalId;
+
+ private Id(String externalId) {
+ this(null, null, checkNotNull(externalId));
+ }
private Id(String soneId, String elementId) {
+ this(checkNotNull(soneId), checkNotNull(elementId), calculateExternalId(soneId, elementId));
+ }
+
+ private Id(String soneId, String elementId, String externalId) {
this.soneId = soneId;
this.elementId = elementId;
+ this.externalId = externalId;
}
- public String getSoneId() {
- return soneId;
+ public Optional<String> getSoneId() {
+ return Optional.fromNullable(soneId);
}
- public String getElementId() {
- return elementId;
+ public Optional<String> getElementId() {
+ return Optional.fromNullable(elementId);
}
public String getExternal() {
+ return externalId;
+ }
+
+ private static String calculateExternalId(String soneId, String elementId) {
return sha256.newHasher()
.putBytes(soneId.getBytes(Charsets.UTF_8))
.putBytes(elementId.getBytes(Charsets.UTF_8))
.hash().toString();
}
+ public static Id from(String externalId) {
+ return new Id(externalId);
+ }
+
public static Id from(String soneId, String elementId) {
return new Id(soneId, elementId);
}
return false;
}
Id id = (Id) o;
- return Objects.equal(soneId, id.soneId)
- && Objects.equal(elementId, id.elementId);
+ return Objects.equal(externalId, id.externalId);
}
@Override
public int hashCode() {
- return Objects.hashCode(soneId, elementId);
+ return Objects.hashCode(externalId);
}
@Override