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