]> nmode's Git Repositories - signal-cli/blobdiff - lib/src/main/java/org/asamk/signal/manager/api/RecipientIdentifier.java
Add RecipientIdentifier as external Manager interface
[signal-cli] / lib / src / main / java / org / asamk / signal / manager / api / RecipientIdentifier.java
diff --git a/lib/src/main/java/org/asamk/signal/manager/api/RecipientIdentifier.java b/lib/src/main/java/org/asamk/signal/manager/api/RecipientIdentifier.java
new file mode 100644 (file)
index 0000000..cbcf172
--- /dev/null
@@ -0,0 +1,112 @@
+package org.asamk.signal.manager.api;
+
+import org.asamk.signal.manager.groups.GroupId;
+import org.whispersystems.signalservice.api.push.SignalServiceAddress;
+import org.whispersystems.signalservice.api.util.InvalidNumberException;
+import org.whispersystems.signalservice.api.util.PhoneNumberFormatter;
+import org.whispersystems.signalservice.api.util.UuidUtil;
+
+import java.util.UUID;
+
+public abstract class RecipientIdentifier {
+
+    public static class NoteToSelf extends RecipientIdentifier {
+
+        @Override
+        public boolean equals(final Object obj) {
+            return obj instanceof NoteToSelf;
+        }
+
+        @Override
+        public int hashCode() {
+            return 5;
+        }
+    }
+
+    public abstract static class Single extends RecipientIdentifier {
+
+        public static Single fromString(String identifier, String localNumber) throws InvalidNumberException {
+            return UuidUtil.isUuid(identifier)
+                    ? new Uuid(UUID.fromString(identifier))
+                    : new Number(PhoneNumberFormatter.formatNumber(identifier, localNumber));
+        }
+
+        public static Single fromAddress(SignalServiceAddress address) {
+            return address.getUuid().isPresent()
+                    ? new Uuid(address.getUuid().get())
+                    : new Number(address.getNumber().get());
+        }
+    }
+
+    public static class Uuid extends Single {
+
+        public final UUID uuid;
+
+        public Uuid(final UUID uuid) {
+            this.uuid = uuid;
+        }
+
+        @Override
+        public boolean equals(final Object o) {
+            if (this == o) return true;
+            if (o == null || getClass() != o.getClass()) return false;
+
+            final Uuid uuid1 = (Uuid) o;
+
+            return uuid.equals(uuid1.uuid);
+        }
+
+        @Override
+        public int hashCode() {
+            return uuid.hashCode();
+        }
+    }
+
+    public static class Number extends Single {
+
+        public final String number;
+
+        public Number(final String number) {
+            this.number = number;
+        }
+
+        @Override
+        public boolean equals(final Object o) {
+            if (this == o) return true;
+            if (o == null || getClass() != o.getClass()) return false;
+
+            final Number number1 = (Number) o;
+
+            return number.equals(number1.number);
+        }
+
+        @Override
+        public int hashCode() {
+            return number.hashCode();
+        }
+    }
+
+    public static class Group extends RecipientIdentifier {
+
+        public final GroupId groupId;
+
+        public Group(final GroupId groupId) {
+            this.groupId = groupId;
+        }
+
+        @Override
+        public boolean equals(final Object o) {
+            if (this == o) return true;
+            if (o == null || getClass() != o.getClass()) return false;
+
+            final Group group = (Group) o;
+
+            return groupId.equals(group.groupId);
+        }
+
+        @Override
+        public int hashCode() {
+            return groupId.hashCode();
+        }
+    }
+}