]> nmode's Git Repositories - signal-cli/blob - lib/src/main/java/org/asamk/signal/manager/api/Contact.java
Convert Contact to record
[signal-cli] / lib / src / main / java / org / asamk / signal / manager / api / Contact.java
1 package org.asamk.signal.manager.api;
2
3 import org.whispersystems.signalservice.internal.util.Util;
4
5 public record Contact(
6 String givenName,
7 String familyName,
8 String color,
9 int messageExpirationTime,
10 boolean isBlocked,
11 boolean isArchived,
12 boolean isProfileSharingEnabled
13 ) {
14
15 private Contact(final Builder builder) {
16 this(builder.givenName,
17 builder.familyName,
18 builder.color,
19 builder.messageExpirationTime,
20 builder.blocked,
21 builder.archived,
22 builder.profileSharingEnabled);
23 }
24
25 public static Builder newBuilder() {
26 return new Builder();
27 }
28
29 public static Builder newBuilder(final Contact copy) {
30 Builder builder = new Builder();
31 builder.givenName = copy.givenName();
32 builder.familyName = copy.familyName();
33 builder.color = copy.color();
34 builder.messageExpirationTime = copy.messageExpirationTime();
35 builder.blocked = copy.isBlocked();
36 builder.archived = copy.isArchived();
37 builder.profileSharingEnabled = copy.isProfileSharingEnabled();
38 return builder;
39 }
40
41 public String getName() {
42 final var noGivenName = Util.isEmpty(givenName);
43 final var noFamilyName = Util.isEmpty(familyName);
44
45 if (noGivenName && noFamilyName) {
46 return "";
47 } else if (noGivenName) {
48 return familyName;
49 } else if (noFamilyName) {
50 return givenName;
51 }
52
53 return givenName + " " + familyName;
54 }
55
56 public static final class Builder {
57
58 private String givenName;
59 private String familyName;
60 private String color;
61 private int messageExpirationTime;
62 private boolean blocked;
63 private boolean archived;
64 private boolean profileSharingEnabled;
65
66 private Builder() {
67 }
68
69 public Builder withGivenName(final String val) {
70 givenName = val;
71 return this;
72 }
73
74 public Builder withFamilyName(final String val) {
75 familyName = val;
76 return this;
77 }
78
79 public Builder withColor(final String val) {
80 color = val;
81 return this;
82 }
83
84 public Builder withMessageExpirationTime(final int val) {
85 messageExpirationTime = val;
86 return this;
87 }
88
89 public Builder withBlocked(final boolean val) {
90 blocked = val;
91 return this;
92 }
93
94 public Builder withArchived(final boolean val) {
95 archived = val;
96 return this;
97 }
98
99 public Builder withProfileSharingEnabled(final boolean val) {
100 profileSharingEnabled = val;
101 return this;
102 }
103
104 public Contact build() {
105 return new Contact(this);
106 }
107 }
108 }