Make Sone and element ID optional
[Sone.git] / src / main / java / net / pterodactylus / sone / data / Id.java
index 75f9bc6..2283447 100644 (file)
@@ -1,7 +1,10 @@
 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;
 
@@ -16,27 +19,45 @@ public class Id {
 
        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);
        }
@@ -47,13 +68,12 @@ public class Id {
                        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