001 /*
002 * Copyright 2011-2012 UnboundID Corp.
003 *
004 * This program is free software; you can redistribute it and/or modify
005 * it under the terms of the GNU General Public License (GPLv2 only)
006 * or the terms of the GNU Lesser General Public License (LGPLv2.1 only)
007 * as published by the Free Software Foundation.
008 *
009 * This program is distributed in the hope that it will be useful,
010 * but WITHOUT ANY WARRANTY; without even the implied warranty of
011 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
012 * GNU General Public License for more details.
013 *
014 * You should have received a copy of the GNU General Public License
015 * along with this program; if not, see <http://www.gnu.org/licenses>.
016 */
017
018 package com.unboundid.scim.data;
019
020 import com.unboundid.scim.schema.AttributeDescriptor;
021 import com.unboundid.scim.sdk.InvalidResourceException;
022 import com.unboundid.scim.sdk.SCIMAttribute;
023 import com.unboundid.scim.sdk.SCIMAttributeValue;
024
025 import java.util.ArrayList;
026 import java.util.List;
027
028 /**
029 * A complex type containing the components of the User's real name.
030 */
031 public class Name
032 {
033 /**
034 * The <code>AttributeValueResolver</code> that resolves SCIM attribute values
035 * to/from <code>Name</code> instances.
036 */
037 public static final AttributeValueResolver<Name> NAME_RESOLVER =
038 new AttributeValueResolver<Name>()
039 {
040 /**
041 * {@inheritDoc}
042 */
043 @Override
044 public Name toInstance(final SCIMAttributeValue value) {
045 return new Name(
046 value.getSubAttributeValue("formatted",
047 STRING_RESOLVER),
048 value.getSubAttributeValue("familyName",
049 STRING_RESOLVER),
050 value.getSubAttributeValue("middleName",
051 STRING_RESOLVER),
052 value.getSubAttributeValue("givenName",
053 STRING_RESOLVER),
054 value.getSubAttributeValue("honorificPrefix",
055 STRING_RESOLVER),
056 value.getSubAttributeValue("honorificSuffix",
057 STRING_RESOLVER));
058 }
059
060 /**
061 * {@inheritDoc}
062 */
063 @Override
064 public SCIMAttributeValue fromInstance(
065 final AttributeDescriptor attributeDescriptor, final Name value)
066 throws InvalidResourceException {
067 final List<SCIMAttribute> subAttributes =
068 new ArrayList<SCIMAttribute>(6);
069
070 if (value.formatted != null)
071 {
072 subAttributes.add(
073 SCIMAttribute.create(
074 attributeDescriptor.getSubAttribute("formatted"),
075 SCIMAttributeValue.createStringValue(value.formatted)));
076 }
077
078 if (value.givenName != null)
079 {
080 subAttributes.add(
081 SCIMAttribute.create(
082 attributeDescriptor.getSubAttribute("givenName"),
083 SCIMAttributeValue.createStringValue(value.givenName)));
084 }
085
086 if (value.familyName != null)
087 {
088 subAttributes.add(
089 SCIMAttribute.create(
090 attributeDescriptor.getSubAttribute("familyName"),
091 SCIMAttributeValue.createStringValue(value.familyName)));
092 }
093
094 if (value.middleName != null)
095 {
096 subAttributes.add(
097 SCIMAttribute.create(
098 attributeDescriptor.getSubAttribute("middleName"),
099 SCIMAttributeValue.createStringValue(value.middleName)));
100 }
101
102 if (value.honorificPrefix != null)
103 {
104 subAttributes.add(
105 SCIMAttribute.create(
106 attributeDescriptor.getSubAttribute("honorificPrefix"),
107 SCIMAttributeValue.createStringValue(
108 value.honorificPrefix)));
109 }
110
111 if (value.honorificSuffix != null)
112 {
113 subAttributes.add(
114 SCIMAttribute.create(
115 attributeDescriptor.getSubAttribute("honorificSuffix"),
116 SCIMAttributeValue.createStringValue(
117 value.honorificSuffix)));
118 }
119
120 return SCIMAttributeValue.createComplexValue(subAttributes);
121 }
122 };
123
124 private String formatted;
125 private String familyName;
126 private String middleName;
127 private String givenName;
128 private String honorificPrefix;
129 private String honorificSuffix;
130
131 /**
132 * Creates a SCIM core user 'name' attribute. Any of the arguments may be
133 * {@code null} if they are not to be included.
134 *
135 * @param formatted The The full name, including all middle names,
136 * titles, and suffixes as appropriate, formatted
137 * for display.
138 * @param familyName The family name of the User, or "Last Name" in
139 * most Western languages.
140 * @param givenName The given name of the User, or "First Name" in
141 * most Western languages.
142 * @param middleName The middle name(s) of the User.
143 * @param honorificPrefix The honorific prefix(es) of the User, or "Title"
144 * in most Western languages.
145 * @param honorificSuffix The honorifix suffix(es) of the User, or "Suffix"
146 * in most Western languages.
147 */
148 public Name(final String formatted, final String familyName,
149 final String middleName, final String givenName,
150 final String honorificPrefix, final String honorificSuffix) {
151 this.formatted = formatted;
152 this.familyName = familyName;
153 this.middleName = middleName;
154 this.givenName = givenName;
155 this.honorificPrefix = honorificPrefix;
156 this.honorificSuffix = honorificSuffix;
157 }
158
159 /**
160 * Retrieves the family name of the User, or "Last Name" in most Western
161 * languages.
162 *
163 * @return The family name of the User, or "Last Name" in most Western
164 * languages.
165 */
166 public String getFamilyName() {
167 return familyName;
168 }
169
170 /**
171 * Sets the family name of the User, or "Last Name" in most Western
172 * languages.
173 *
174 * @param familyName The family name of the User, or "Last Name" in most
175 * Western languages.
176 */
177 public void setFamilyName(final String familyName) {
178 this.familyName = familyName;
179 }
180
181 /**
182 * Retrieves the full name, including all middle names, titles, and
183 * suffixes as appropriate, formatted for display.
184 *
185 * @return The full name, including all middle names, titles, and
186 * suffixes as appropriate, formatted for display.
187 */
188 public String getFormatted() {
189 return formatted;
190 }
191
192 /**
193 * Sets the full name, including all middle names, titles, and
194 * suffixes as appropriate, formatted for display.
195 *
196 * @param formatted The full name, including all middle names, titles, and
197 * suffixes as appropriate, formatted for display.
198 */
199 public void setFormatted(final String formatted) {
200 this.formatted = formatted;
201 }
202
203 /**
204 * Retrieves the given name of the User, or "First Name" in most Western
205 * languages.
206 *
207 * @return The given name of the User, or "First Name" in most Western
208 * languages.
209 */
210 public String getGivenName() {
211 return givenName;
212 }
213
214 /**
215 * Sets the given name of the User, or "First Name" in most Western
216 * languages.
217 *
218 * @param givenName The given name of the User, or "First Name" in most
219 * Western languages.
220 */
221 public void setGivenName(final String givenName) {
222 this.givenName = givenName;
223 }
224
225 /**
226 * Retrieves the honorific prefix(es) of the User, or "Title" in most Western
227 * languages.
228 *
229 * @return The honorific prefix(es) of the User, or "Title" in most Western
230 * languages.
231 */
232 public String getHonorificPrefix() {
233 return honorificPrefix;
234 }
235
236 /**
237 * Sets the honorific prefix(es) of the User, or "Title" in most Western
238 * languages.
239 *
240 * @param honorificPrefix The honorific prefix(es) of the User, or "Title"
241 * in most Western languages.
242 */
243 public void setHonorificPrefix(final String honorificPrefix) {
244 this.honorificPrefix = honorificPrefix;
245 }
246
247 /**
248 * Retrieves the honorific suffix(es) of the User, or "Suffix" in most
249 * Western languages.
250 *
251 * @return The honorific suffix(es) of the User, or "Suffix" in most
252 * Western languages.
253 */
254 public String getHonorificSuffix() {
255 return honorificSuffix;
256 }
257
258 /**
259 * Sets the honorific suffix(es) of the User, or "Suffix" in most
260 * Western languages.
261 *
262 * @param honorificSuffix The honorific suffix(es) of the User, or "Suffix"
263 * in most Western languages.
264 */
265 public void setHonorificSuffix(final String honorificSuffix) {
266 this.honorificSuffix = honorificSuffix;
267 }
268
269 /**
270 * Retrieves the middle name(s) of the User.
271 *
272 * @return The middle name(s) of the User.
273 */
274 public String getMiddleName() {
275 return middleName;
276 }
277
278 /**
279 * Retrieves the middle name(s) of the User.
280 *
281 * @param middleName The middle name(s) of the User.
282 */
283 public void setMiddleName(final String middleName) {
284 this.middleName = middleName;
285 }
286
287 /**
288 * {@inheritDoc}
289 */
290 @Override
291 public boolean equals(final Object o) {
292 if (this == o) {
293 return true;
294 }
295 if (o == null || getClass() != o.getClass()) {
296 return false;
297 }
298
299 Name name = (Name) o;
300
301 if (familyName != null ? !familyName.equals(name.familyName) :
302 name.familyName != null) {
303 return false;
304 }
305 if (formatted != null ? !formatted.equals(name.formatted) :
306 name.formatted != null) {
307 return false;
308 }
309 if (givenName != null ? !givenName.equals(name.givenName) :
310 name.givenName != null) {
311 return false;
312 }
313 if (honorificPrefix != null ?
314 !honorificPrefix.equals(name.honorificPrefix) :
315 name.honorificPrefix != null) {
316 return false;
317 }
318 if (honorificSuffix != null ?
319 !honorificSuffix.equals(name.honorificSuffix) :
320 name.honorificSuffix != null) {
321 return false;
322 }
323 if (middleName != null ? !middleName.equals(name.middleName) :
324 name.middleName != null) {
325 return false;
326 }
327
328 return true;
329 }
330
331 /**
332 * {@inheritDoc}
333 */
334 @Override
335 public int hashCode() {
336 int result = formatted != null ? formatted.hashCode() : 0;
337 result = 31 * result + (familyName != null ? familyName.hashCode() : 0);
338 result = 31 * result + (middleName != null ? middleName.hashCode() : 0);
339 result = 31 * result + (givenName != null ? givenName.hashCode() : 0);
340 result = 31 * result + (honorificPrefix != null ?
341 honorificPrefix.hashCode() : 0);
342 result = 31 * result + (honorificSuffix != null ?
343 honorificSuffix.hashCode() : 0);
344 return result;
345 }
346
347 @Override
348 public String toString() {
349 return "Name{" +
350 "formatted='" + formatted + '\'' +
351 ", familyName='" + familyName + '\'' +
352 ", middleName='" + middleName + '\'' +
353 ", givenName='" + givenName + '\'' +
354 ", honorificPrefix='" + honorificPrefix + '\'' +
355 ", honorificSuffix='" + honorificSuffix + '\'' +
356 '}';
357 }
358 }