1
2
3
4 package de.powerstat.validation.values;
5
6
7 import java.util.Objects;
8
9 import de.powerstat.validation.interfaces.IValueObject;
10 import de.powerstat.validation.values.strategies.IUsernameStrategy;
11 import de.powerstat.validation.values.strategies.UsernameDefaultStrategy;
12
13
14
15
16
17
18
19
20
21
22
23 public final class Username implements Comparable<Username>, IValueObject
24 {
25
26
27
28
29
30
31
32
33 private final String username;
34
35
36
37
38 private final boolean conformsToEMailAddressFormat;
39
40
41
42
43
44
45
46
47
48
49
50 private Username(final IUsernameStrategy validationStrategy, final String username)
51 {
52 super();
53 Objects.requireNonNull(validationStrategy, "validationStrategy");
54 Objects.requireNonNull(username, "username");
55 this.conformsToEMailAddressFormat = validationStrategy.validationStrategy(username);
56 this.username = username;
57 }
58
59
60
61
62
63
64
65
66
67 public static Username of(final IUsernameStrategy validationStrategy, final String username)
68 {
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83 return new Username(validationStrategy, username);
84 }
85
86
87
88
89
90
91
92
93 public static Username of(final String username)
94 {
95 return new Username(UsernameDefaultStrategy.of(), username);
96 }
97
98
99
100
101
102
103
104 @Override
105 public String stringValue()
106 {
107 return this.username;
108 }
109
110
111
112
113
114
115
116 public boolean isEMail()
117 {
118 return this.conformsToEMailAddressFormat;
119 }
120
121
122
123
124
125
126
127
128 @Override
129 public int hashCode()
130 {
131 return this.username.hashCode();
132 }
133
134
135
136
137
138
139
140
141
142 @Override
143 public boolean equals(final Object obj)
144 {
145 if (this == obj)
146 {
147 return true;
148 }
149 if (!(obj instanceof Username))
150 {
151 return false;
152 }
153 final Username other = (Username)obj;
154 return this.username.equals(other.username);
155 }
156
157
158
159
160
161
162
163
164
165
166
167
168 @Override
169 public String toString()
170 {
171 final var builder = new StringBuilder(19);
172 builder.append("Username[username=").append(this.username).append(']');
173 return builder.toString();
174 }
175
176
177
178
179
180
181
182
183
184 @Override
185 public int compareTo(final Username obj)
186 {
187 Objects.requireNonNull(obj, "obj");
188 return this.username.compareTo(obj.username);
189 }
190
191 }