]> nmode's Git Repositories - signal-cli/blob - lib/src/main/java/org/asamk/signal/manager/api/RecipientIdentifier.java
Use Java 17
[signal-cli] / lib / src / main / java / org / asamk / signal / manager / api / RecipientIdentifier.java
1 package org.asamk.signal.manager.api;
2
3 import org.asamk.signal.manager.groups.GroupId;
4 import org.asamk.signal.manager.storage.recipients.RecipientAddress;
5 import org.whispersystems.signalservice.api.push.SignalServiceAddress;
6 import org.whispersystems.signalservice.api.util.InvalidNumberException;
7 import org.whispersystems.signalservice.api.util.PhoneNumberFormatter;
8 import org.whispersystems.signalservice.api.util.UuidUtil;
9
10 import java.util.UUID;
11
12 public sealed abstract class RecipientIdentifier {
13
14 public static final class NoteToSelf extends RecipientIdentifier {
15
16 public static NoteToSelf INSTANCE = new NoteToSelf();
17
18 private NoteToSelf() {
19 }
20 }
21
22 public sealed static abstract class Single extends RecipientIdentifier {
23
24 public static Single fromString(String identifier, String localNumber) throws InvalidNumberException {
25 return UuidUtil.isUuid(identifier)
26 ? new Uuid(UUID.fromString(identifier))
27 : new Number(PhoneNumberFormatter.formatNumber(identifier, localNumber));
28 }
29
30 public static Single fromAddress(SignalServiceAddress address) {
31 return new Uuid(address.getUuid());
32 }
33
34 public static Single fromAddress(RecipientAddress address) {
35 if (address.getNumber().isPresent()) {
36 return new Number(address.getNumber().get());
37 } else if (address.getUuid().isPresent()) {
38 return new Uuid(address.getUuid().get());
39 }
40 throw new AssertionError("RecipientAddress without identifier");
41 }
42
43 public abstract String getIdentifier();
44 }
45
46 public static final class Uuid extends Single {
47
48 public final UUID uuid;
49
50 public Uuid(final UUID uuid) {
51 this.uuid = uuid;
52 }
53
54 @Override
55 public boolean equals(final Object o) {
56 if (this == o) return true;
57 if (o == null || getClass() != o.getClass()) return false;
58
59 final Uuid uuid1 = (Uuid) o;
60
61 return uuid.equals(uuid1.uuid);
62 }
63
64 @Override
65 public int hashCode() {
66 return uuid.hashCode();
67 }
68
69 @Override
70 public String getIdentifier() {
71 return uuid.toString();
72 }
73 }
74
75 public static final class Number extends Single {
76
77 public final String number;
78
79 public Number(final String number) {
80 this.number = number;
81 }
82
83 @Override
84 public boolean equals(final Object o) {
85 if (this == o) return true;
86 if (o == null || getClass() != o.getClass()) return false;
87
88 final Number number1 = (Number) o;
89
90 return number.equals(number1.number);
91 }
92
93 @Override
94 public int hashCode() {
95 return number.hashCode();
96 }
97
98 @Override
99 public String getIdentifier() {
100 return number;
101 }
102 }
103
104 public static final class Group extends RecipientIdentifier {
105
106 public final GroupId groupId;
107
108 public Group(final GroupId groupId) {
109 this.groupId = groupId;
110 }
111
112 @Override
113 public boolean equals(final Object o) {
114 if (this == o) return true;
115 if (o == null || getClass() != o.getClass()) return false;
116
117 final Group group = (Group) o;
118
119 return groupId.equals(group.groupId);
120 }
121
122 @Override
123 public int hashCode() {
124 return groupId.hashCode();
125 }
126 }
127 }