001/* 002 * Copyright 2011-2016 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 018package com.unboundid.scim.data; 019 020import com.unboundid.scim.schema.ResourceDescriptor; 021import com.unboundid.scim.sdk.InvalidResourceException; 022import com.unboundid.scim.sdk.SCIMConstants; 023import com.unboundid.scim.sdk.SCIMObject; 024 025import java.util.Collection; 026 027/** 028 * This class represents a User resource. 029 */ 030public class UserResource extends BaseResource 031{ 032 /** 033 * A <code>ResourceFactory</code> for creating <code>UserResource</code> 034 * instances. 035 */ 036 public static final ResourceFactory<UserResource> USER_RESOURCE_FACTORY = 037 new ResourceFactory<UserResource>() { 038 /** 039 * {@inheritDoc} 040 */ 041 public UserResource createResource( 042 final ResourceDescriptor resourceDescriptor, 043 final SCIMObject scimObject) { 044 return new UserResource(resourceDescriptor, scimObject); 045 } 046 }; 047 048 /** 049 * Construct an empty <code>UserResource</code> with the specified 050 * <code>ResourceDescriptor</code>. 051 * 052 * @param resourceDescriptor The resource descriptor for this SCIM resource. 053 */ 054 public UserResource(final ResourceDescriptor resourceDescriptor) { 055 super(resourceDescriptor); 056 } 057 058 /** 059 * Construct a <code>UserResource</code> with the specified 060 * <code>ResourceDescriptor</code> and backed by the given 061 * <code>SCIMObject</code>. 062 * 063 * @param resourceDescriptor The resource descriptor for this SCIM resource. 064 * @param scimObject The <code>SCIMObject</code> containing all the 065 * SCIM attributes and their values. 066 */ 067 public UserResource(final ResourceDescriptor resourceDescriptor, 068 final SCIMObject scimObject) { 069 super(resourceDescriptor, scimObject); 070 } 071 072 /** 073 * Retrieves the Unique identifier for the User, typically used by the user 074 * to directly authenticate to the service provider. Often displayed to the 075 * user as their unique identifier within the system (as opposed to id o 076 * r externalId, which are generally opaque and not user-friendly 077 * identifiers). 078 * 079 * @return The Unique identifier for the User. 080 */ 081 public String getUserName() 082 { 083 return getSingularAttributeValue(SCIMConstants.SCHEMA_URI_CORE, 084 "userName", AttributeValueResolver.STRING_RESOLVER); 085 } 086 087 /** 088 * Sets the Unique identifier for the User. 089 * 090 * @param userName The Unique identifier for the User 091 * @return this resource instance. 092 */ 093 public UserResource setUserName(final String userName) 094 { 095 try { 096 setSingularAttributeValue(SCIMConstants.SCHEMA_URI_CORE, 097 "userName", AttributeValueResolver.STRING_RESOLVER, userName); 098 } catch (InvalidResourceException e) { 099 // This should never happen as these are core attributes... 100 throw new RuntimeException(e); 101 } 102 return this; 103 } 104 105 /** 106 * Retrieves the components of the User's real name. 107 * 108 * @return The components of the User's real name or <code>null</code> if 109 * it is not specified. 110 */ 111 public Name getName() 112 { 113 return getSingularAttributeValue(SCIMConstants.SCHEMA_URI_CORE, 114 "name", Name.NAME_RESOLVER); 115 } 116 117 /** 118 * Sets the components of the User's real name. 119 * 120 * @param name The components of the User's real name. 121 * @return this resource instance. 122 */ 123 public UserResource setName(final Name name) 124 { 125 try { 126 setSingularAttributeValue(SCIMConstants.SCHEMA_URI_CORE, 127 "name", Name.NAME_RESOLVER, name); 128 } catch (InvalidResourceException e) { 129 // This should never happen as these are core attributes... 130 throw new RuntimeException(e); 131 } 132 return this; 133 } 134 135 /** 136 * Retrieves the name of the User, suitable for display to end-users. 137 * 138 * @return The name of the User, suitable for display to end-users or 139 * <code>null</code> if it is not specified. 140 */ 141 public String getDisplayName() 142 { 143 return getSingularAttributeValue(SCIMConstants.SCHEMA_URI_CORE, 144 "displayName", AttributeValueResolver.STRING_RESOLVER); 145 } 146 147 /** 148 * Sets the name of the User, suitable for display to end-users. 149 * 150 * @param displayName The name of the User, suitable for display to end-users. 151 * @return this resource instance. 152 */ 153 public UserResource setDisplayName(final String displayName) 154 { 155 try { 156 setSingularAttributeValue(SCIMConstants.SCHEMA_URI_CORE, 157 "displayName", AttributeValueResolver.STRING_RESOLVER, displayName); 158 } catch (InvalidResourceException e) { 159 // This should never happen as these are core attributes... 160 throw new RuntimeException(e); 161 } 162 return this; 163 } 164 165 /** 166 * Retrieves the casual way to address the user in real life, e.g. "Bob" or 167 * "Bobby" instead of "Robert". 168 * 169 * @return The casual way to address the user in real life. 170 */ 171 public String getNickName() 172 { 173 return getSingularAttributeValue(SCIMConstants.SCHEMA_URI_CORE, 174 "nickName", AttributeValueResolver.STRING_RESOLVER); 175 } 176 177 /** 178 * Sets the casual way to address the user in real life, e.g. "Bob" or 179 * "Bobby" instead of "Robert". 180 * 181 * @param nickName The casual way to address the user in real life. 182 * @return this resource instance. 183 */ 184 public UserResource setNickName(final String nickName) 185 { 186 try { 187 setSingularAttributeValue(SCIMConstants.SCHEMA_URI_CORE, 188 "nickName", AttributeValueResolver.STRING_RESOLVER, nickName); 189 } catch (InvalidResourceException e) { 190 // This should never happen as these are core attributes... 191 throw new RuntimeException(e); 192 } 193 return this; 194 } 195 196 /** 197 * Retrieves the URL to a page representing the User's online profile. 198 * 199 * @return The URL to a page representing the User's online profile or 200 * <code>null</code> if it is not specified. 201 */ 202 public String getProfileUrl() 203 { 204 return getSingularAttributeValue(SCIMConstants.SCHEMA_URI_CORE, 205 "profileUrl", AttributeValueResolver.STRING_RESOLVER); 206 } 207 208 /** 209 * Sets the URL to a page representing the User's online profile. 210 * 211 * @param url The URL to a page representing the User's online profile. 212 * @return this resource instance. 213 */ 214 public UserResource setProfileUrl(final String url) 215 { 216 try { 217 setSingularAttributeValue(SCIMConstants.SCHEMA_URI_CORE, 218 "profileUrl", AttributeValueResolver.STRING_RESOLVER, url); 219 } catch (InvalidResourceException e) { 220 // This should never happen as these are core attributes... 221 throw new RuntimeException(e); 222 } 223 return this; 224 } 225 226 /** 227 * Retrieves the user's title, such as "Vice President". 228 * 229 * @return The user's title or <code>null</code> if it is not specified. 230 */ 231 public String getTitle() 232 { 233 return getSingularAttributeValue(SCIMConstants.SCHEMA_URI_CORE, 234 "title", AttributeValueResolver.STRING_RESOLVER); 235 } 236 237 /** 238 * Sets the user's title, such as "Vice President". 239 * 240 * @param title The user's title. 241 * @return this resource instance. 242 */ 243 public UserResource setTitle(final String title) 244 { 245 try { 246 setSingularAttributeValue(SCIMConstants.SCHEMA_URI_CORE, 247 "title", AttributeValueResolver.STRING_RESOLVER, title); 248 } catch (InvalidResourceException e) { 249 // This should never happen as these are core attributes... 250 throw new RuntimeException(e); 251 } 252 return this; 253 } 254 255 /** 256 * Retrieves the the organization to user relationship. Typical values used 257 * might be "Contractor", "Employee", "Intern", "Temp", "External", and 258 * "Unknown" but any value may be used. 259 * 260 * @return The the organization to user relationship or <code>null</code> 261 * if it is not specified. 262 */ 263 public String getUserType() 264 { 265 return getSingularAttributeValue(SCIMConstants.SCHEMA_URI_CORE, 266 "userType", AttributeValueResolver.STRING_RESOLVER); 267 } 268 269 /** 270 * Sets the the organization to user relationship. 271 * 272 * @param userType The the organization to user relationship. 273 * @return this resource instance. 274 */ 275 public UserResource setUserType(final String userType) 276 { 277 try { 278 setSingularAttributeValue(SCIMConstants.SCHEMA_URI_CORE, 279 "userType", AttributeValueResolver.STRING_RESOLVER, userType); 280 } catch (InvalidResourceException e) { 281 // This should never happen as these are core attributes... 282 throw new RuntimeException(e); 283 } 284 return this; 285 } 286 287 /** 288 * Retrieves the User's preferred written or spoken language. Generally 289 * used for localizing the interface presented to the user. 290 * 291 * @return The User's preferred written or spoken language or 292 * <code>null</code> if it is not specified. 293 */ 294 public String getPreferredLanguage() 295 { 296 return getSingularAttributeValue(SCIMConstants.SCHEMA_URI_CORE, 297 "preferredLanguage", AttributeValueResolver.STRING_RESOLVER); 298 } 299 300 /** 301 * Sets the User's preferred written or spoken language. 302 * 303 * @param language The User's preferred written or spoken language. 304 * @return this resource instance. 305 */ 306 public UserResource setPreferredLanguage(final String language) 307 { 308 try { 309 setSingularAttributeValue(SCIMConstants.SCHEMA_URI_CORE, 310 "preferredLanguage", AttributeValueResolver.STRING_RESOLVER, 311 language); 312 } catch (InvalidResourceException e) { 313 // This should never happen as these are core attributes... 314 throw new RuntimeException(e); 315 } 316 return this; 317 } 318 319 /** 320 * Retrieves the User's default location for purposes of localizing items 321 * such as currency, date time format, numerical representations, etc. 322 * 323 * @return The User's default location for purposes of localizing items or 324 * <code>null</code> if it is not specified. 325 */ 326 public String getLocale() 327 { 328 return getSingularAttributeValue(SCIMConstants.SCHEMA_URI_CORE, 329 "locale", AttributeValueResolver.STRING_RESOLVER); 330 } 331 332 /** 333 * Sets the User's default location for purposes of localizing items. 334 * 335 * @param locale The User's default location for purposes of localizing items. 336 * @return this resource instance. 337 */ 338 public UserResource setLocale(final String locale) 339 { 340 try { 341 setSingularAttributeValue(SCIMConstants.SCHEMA_URI_CORE, 342 "locale", AttributeValueResolver.STRING_RESOLVER, locale); 343 } catch (InvalidResourceException e) { 344 // This should never happen as these are core attributes... 345 throw new RuntimeException(e); 346 } 347 return this; 348 } 349 350 /** 351 * Retrieves the User's time zone in the public-domain time zone database 352 * format; e.g.,'America/Denver'. 353 * 354 * @return The User's time zone or <code>null</code> if it is not specified. 355 */ 356 public String getTimeZone() 357 { 358 return getSingularAttributeValue(SCIMConstants.SCHEMA_URI_CORE, 359 "timezone", AttributeValueResolver.STRING_RESOLVER); 360 } 361 362 /** 363 * Sets the User's time zone in the public-domain time zone database 364 * format; e.g.,'America/Denver'. 365 * 366 * @param timeZone The User's time zone 367 * @return this resource instance. 368 */ 369 public UserResource setTimeZone(final String timeZone) 370 { 371 try { 372 setSingularAttributeValue(SCIMConstants.SCHEMA_URI_CORE, 373 "timezone", AttributeValueResolver.STRING_RESOLVER, timeZone); 374 } catch (InvalidResourceException e) { 375 // This should never happen as these are core attributes... 376 throw new RuntimeException(e); 377 } 378 return this; 379 } 380 381 /** 382 * Retrieves the User's administrative status. 383 * 384 * @return <code>true</code> if the User's administrative status is active or 385 * <code>false</code> otherwise or <code>null</code> if it is not 386 * specified. 387 */ 388 public Boolean isActive() 389 { 390 return getSingularAttributeValue(SCIMConstants.SCHEMA_URI_CORE, 391 "active", AttributeValueResolver.BOOLEAN_RESOLVER); 392 } 393 394 /** 395 * Sets the User's administrative status. 396 * 397 * @param active The User's administrative status. 398 * @return this resource instance. 399 */ 400 public UserResource setActive(final Boolean active) 401 { 402 try { 403 setSingularAttributeValue(SCIMConstants.SCHEMA_URI_CORE, 404 "active", AttributeValueResolver.BOOLEAN_RESOLVER, active); 405 } catch (InvalidResourceException e) { 406 // This should never happen as these are core attributes... 407 throw new RuntimeException(e); 408 } 409 return this; 410 } 411 412 /** 413 * Retrieves the User's clear text password. This is intended to be used as a 414 * means to specify an initial password when creating a new User or to reset 415 * an existing User's password. This will never be returned by the service 416 * provider. 417 * 418 * @return The User's clear text password. 419 */ 420 public String getPassword() 421 { 422 return getSingularAttributeValue(SCIMConstants.SCHEMA_URI_CORE, 423 "password", AttributeValueResolver.STRING_RESOLVER); 424 } 425 426 /** 427 * Sets the User's clear text password. 428 * 429 * @param password The User's clear text password 430 * @return this resource instance. 431 */ 432 public UserResource setPassword(final String password) 433 { 434 try { 435 setSingularAttributeValue(SCIMConstants.SCHEMA_URI_CORE, 436 "password", AttributeValueResolver.STRING_RESOLVER, password); 437 } catch (InvalidResourceException e) { 438 // This should never happen as these are core attributes... 439 throw new RuntimeException(e); 440 } 441 return this; 442 } 443 444 /** 445 * Retrieves the E-mail addresses for the User. 446 * 447 * @return The E-mail addresses for the User or <code>null</code> if it is 448 * not specified. 449 */ 450 public Collection<Entry<String>> getEmails() 451 { 452 return getAttributeValues(SCIMConstants.SCHEMA_URI_CORE, 453 "emails", Entry.STRINGS_RESOLVER); 454 } 455 456 /** 457 * Sets the E-mail addresses for the User. 458 * 459 * @param emails The E-mail addresses for the User. 460 * @return this resource instance. 461 */ 462 public UserResource setEmails(final Collection<Entry<String>> emails) 463 { 464 try { 465 setAttributeValues(SCIMConstants.SCHEMA_URI_CORE, 466 "emails", Entry.STRINGS_RESOLVER, emails); 467 } catch (InvalidResourceException e) { 468 // This should never happen as these are core attributes... 469 throw new RuntimeException(e); 470 } 471 return this; 472 } 473 474 /** 475 * Retrieves the Phone numbers for the User. 476 * 477 * @return The Phone numbers for the User or <code>null</code> 478 * if it is not specified. 479 */ 480 public Collection<Entry<String>> getPhoneNumbers() 481 { 482 return getAttributeValues(SCIMConstants.SCHEMA_URI_CORE, 483 "phoneNumbers", Entry.STRINGS_RESOLVER); 484 } 485 486 /** 487 * Sets the Phone numbers for the User. 488 * 489 * @param phoneNumbers The Phone numbers for the User. 490 * @return this resource instance. 491 */ 492 public UserResource setPhoneNumbers( 493 final Collection<Entry<String>> phoneNumbers) 494 { 495 try { 496 setAttributeValues(SCIMConstants.SCHEMA_URI_CORE, 497 "phoneNumbers", Entry.STRINGS_RESOLVER, phoneNumbers); 498 } catch (InvalidResourceException e) { 499 // This should never happen as these are core attributes... 500 throw new RuntimeException(e); 501 } 502 return this; 503 } 504 505 /** 506 * Retrieves the Instant messaging address for the User. 507 * 508 * @return The Instant messaging address for the User or <code>null</code> 509 * if it is not specified. 510 */ 511 public Collection<Entry<String>> getIms() 512 { 513 return getAttributeValues(SCIMConstants.SCHEMA_URI_CORE, 514 "ims", Entry.STRINGS_RESOLVER); 515 } 516 517 /** 518 * Sets the Instant messaging address for the User. 519 * 520 * @param ims The Instant messaging address for the User. 521 * @return this resource instance. 522 */ 523 public UserResource setIms(final Collection<Entry<String>> ims) 524 { 525 try { 526 setAttributeValues(SCIMConstants.SCHEMA_URI_CORE, 527 "ims", Entry.STRINGS_RESOLVER, ims); 528 } catch (InvalidResourceException e) { 529 // This should never happen as these are core attributes... 530 throw new RuntimeException(e); 531 } 532 return this; 533 } 534 535 /** 536 * Retrieves the URL of a photo of the User. 537 * 538 * @return The URL of a photo of the User or <code>null</code> if 539 * it is not specified. 540 */ 541 public Collection<Entry<String>> getPhotos() 542 { 543 return getAttributeValues(SCIMConstants.SCHEMA_URI_CORE, 544 "photos", Entry.STRINGS_RESOLVER); 545 } 546 547 /** 548 * Sets the URL of a photo of the User. 549 * 550 * @param photos The URL of a photo of the User. 551 * @return this resource instance. 552 */ 553 public UserResource setPhotos(final Collection<Entry<String>> photos) 554 { 555 try { 556 setAttributeValues(SCIMConstants.SCHEMA_URI_CORE, 557 "photos", Entry.STRINGS_RESOLVER, photos); 558 } catch (InvalidResourceException e) { 559 // This should never happen as these are core attributes... 560 throw new RuntimeException(e); 561 } 562 return this; 563 } 564 565 /** 566 * Retrieves the physical mailing address for this User. 567 * 568 * @return The physical mailing address for this User or <code>null</code> if 569 * it is not specified. 570 */ 571 public Collection<Address> getAddresses() 572 { 573 return getAttributeValues(SCIMConstants.SCHEMA_URI_CORE, 574 "addresses", Address.ADDRESS_RESOLVER); 575 } 576 577 /** 578 * Sets the physical mailing address for this User. 579 * 580 * @param addresses The physical mailing address for this User. 581 * @return this resource instance. 582 */ 583 public UserResource setAddresses(final Collection<Address> addresses) 584 { 585 try { 586 setAttributeValues(SCIMConstants.SCHEMA_URI_CORE, 587 "addresses", Address.ADDRESS_RESOLVER, addresses); 588 } catch (InvalidResourceException e) { 589 // This should never happen as these are core attributes... 590 throw new RuntimeException(e); 591 } 592 return this; 593 } 594 595 /** 596 * Retrieves the list of groups that the user belongs to. 597 * 598 * @return The list of groups that the user belongs to or <code>null</code> if 599 * it is not specified. 600 */ 601 public Collection<Entry<String>> getGroups() 602 { 603 return getAttributeValues(SCIMConstants.SCHEMA_URI_CORE, 604 "groups", Entry.STRINGS_RESOLVER); 605 } 606 607 /** 608 * Sets the list of groups that the user belongs to. 609 * 610 * @param groups The list of groups that the user belongs to. 611 * @return this resource instance. 612 */ 613 public UserResource setGroups(final Collection<Entry<String>> groups) 614 { 615 try { 616 setAttributeValues(SCIMConstants.SCHEMA_URI_CORE, 617 "groups", Entry.STRINGS_RESOLVER, groups); 618 } catch (InvalidResourceException e) { 619 // This should never happen as these are core attributes... 620 throw new RuntimeException(e); 621 } 622 return this; 623 } 624 625 /** 626 * Retrieves the list of entitlements for the User that represent a thing 627 * the User has. That is, an entitlement is an additional right to a thing, 628 * object or service. 629 * 630 * @return The list of entitlements for the User or <code>null</code> if 631 * it is not specified. 632 */ 633 public Collection<Entry<String>> getEntitlements() 634 { 635 return getAttributeValues(SCIMConstants.SCHEMA_URI_CORE, 636 "entitlements", Entry.STRINGS_RESOLVER); 637 } 638 639 /** 640 * Sets the list of entitlements for the User. 641 * 642 * @param entitlements The list of entitlements for the User 643 * @return this resource instance. 644 */ 645 public UserResource setEntitlements( 646 final Collection<Entry<String>> entitlements) 647 { 648 try { 649 setAttributeValues(SCIMConstants.SCHEMA_URI_CORE, 650 "entitlements", Entry.STRINGS_RESOLVER, entitlements); 651 } catch (InvalidResourceException e) { 652 // This should never happen as these are core attributes... 653 throw new RuntimeException(e); 654 } 655 return this; 656 } 657 658 /** 659 * Retrieves the list of roles for the User that collectively represent who 660 * the User is; e.g., 'Student', "Faculty". 661 * 662 * @return The list of roles for the User or <code>null</code> if 663 * it is not specified. 664 */ 665 public Collection<Entry<String>> getRoles() 666 { 667 return getAttributeValues(SCIMConstants.SCHEMA_URI_CORE, 668 "roles", Entry.STRINGS_RESOLVER); 669 } 670 671 /** 672 * Sets the list of roles for the User. 673 * 674 * @param roles The list of roles for the User. 675 * @return this resource instance. 676 */ 677 public UserResource setRoles(final Collection<Entry<String>> roles) 678 { 679 try { 680 setAttributeValues(SCIMConstants.SCHEMA_URI_CORE, 681 "roles", Entry.STRINGS_RESOLVER, roles); 682 } catch (InvalidResourceException e) { 683 // This should never happen as these are core attributes... 684 throw new RuntimeException(e); 685 } 686 return this; 687 } 688}