001/******************************************************************************* 002 * Copyright 2014 The MITRE Corporation 003 * and the MIT Kerberos and Internet Trust Consortium 004 * 005 * Licensed under the Apache License, Version 2.0 (the "License"); 006 * you may not use this file except in compliance with the License. 007 * You may obtain a copy of the License at 008 * 009 * http://www.apache.org/licenses/LICENSE-2.0 010 * 011 * Unless required by applicable law or agreed to in writing, software 012 * distributed under the License is distributed on an "AS IS" BASIS, 013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 014 * See the License for the specific language governing permissions and 015 * limitations under the License. 016 ******************************************************************************/ 017package org.mitre.openid.connect.model; 018 019import javax.persistence.Basic; 020import javax.persistence.Column; 021import javax.persistence.Entity; 022import javax.persistence.GeneratedValue; 023import javax.persistence.GenerationType; 024import javax.persistence.Id; 025import javax.persistence.JoinColumn; 026import javax.persistence.NamedQueries; 027import javax.persistence.NamedQuery; 028import javax.persistence.OneToOne; 029import javax.persistence.Table; 030 031import com.google.gson.JsonObject; 032 033@Entity 034@Table(name="user_info") 035@NamedQueries({ 036 @NamedQuery(name="DefaultUserInfo.getAll", query = "select u from DefaultUserInfo u"), 037 @NamedQuery(name="DefaultUserInfo.getByUsername", query = "select u from DefaultUserInfo u WHERE u.preferredUsername = :username"), 038 @NamedQuery(name="DefaultUserInfo.getBySubject", query = "select u from DefaultUserInfo u WHERE u.sub = :sub") 039}) 040public class DefaultUserInfo implements UserInfo { 041 042 private Long id; 043 private String sub; 044 private String preferredUsername; 045 private String name; 046 private String givenName; 047 private String familyName; 048 private String middleName; 049 private String nickname; 050 private String profile; 051 private String picture; 052 private String website; 053 private String email; 054 private Boolean emailVerified; 055 private String gender; 056 private String zoneinfo; 057 private String locale; 058 private String phoneNumber; 059 private Boolean phoneNumberVerified; 060 private Address address; 061 private String updatedTime; 062 private String birthdate; 063 064 065 /** 066 * @return the id 067 */ 068 @Id 069 @GeneratedValue(strategy=GenerationType.IDENTITY) 070 @Column(name = "id") 071 public Long getId() { 072 return id; 073 } 074 /** 075 * @param id the id to set 076 */ 077 public void setId(Long id) { 078 this.id = id; 079 } 080 /* (non-Javadoc) 081 * @see org.mitre.openid.connect.model.UserInfo#getUserId() 082 */ 083 @Override 084 @Basic 085 @Column(name="sub") 086 public String getSub() { 087 return sub; 088 } 089 /* (non-Javadoc) 090 * @see org.mitre.openid.connect.model.UserInfo#setUserId(java.lang.String) 091 */ 092 @Override 093 public void setSub(String sub) { 094 this.sub = sub; 095 } 096 /* (non-Javadoc) 097 * @see org.mitre.openid.connect.model.UserInfo#getPreferredUsername 098 */ 099 @Override 100 @Basic 101 @Column(name="preferred_username") 102 public String getPreferredUsername() { 103 return this.preferredUsername; 104 } 105 /* (non-Javadoc) 106 * @see org.mitre.openid.connect.model.UserInfo#setPreferredUsername(java.lang.String) 107 */ 108 @Override 109 public void setPreferredUsername(String preferredUsername) { 110 this.preferredUsername = preferredUsername; 111 } 112 /* (non-Javadoc) 113 * @see org.mitre.openid.connect.model.UserInfo#getName() 114 */ 115 @Override 116 @Basic 117 @Column(name = "name") 118 public String getName() { 119 return name; 120 } 121 /* (non-Javadoc) 122 * @see org.mitre.openid.connect.model.UserInfo#setName(java.lang.String) 123 */ 124 @Override 125 public void setName(String name) { 126 this.name = name; 127 } 128 /* (non-Javadoc) 129 * @see org.mitre.openid.connect.model.UserInfo#getGivenName() 130 */ 131 @Override 132 @Basic 133 @Column(name="given_name") 134 public String getGivenName() { 135 return givenName; 136 } 137 /* (non-Javadoc) 138 * @see org.mitre.openid.connect.model.UserInfo#setGivenName(java.lang.String) 139 */ 140 @Override 141 public void setGivenName(String givenName) { 142 this.givenName = givenName; 143 } 144 /* (non-Javadoc) 145 * @see org.mitre.openid.connect.model.UserInfo#getFamilyName() 146 */ 147 @Override 148 @Basic 149 @Column(name="family_name") 150 public String getFamilyName() { 151 return familyName; 152 } 153 /* (non-Javadoc) 154 * @see org.mitre.openid.connect.model.UserInfo#setFamilyName(java.lang.String) 155 */ 156 @Override 157 public void setFamilyName(String familyName) { 158 this.familyName = familyName; 159 } 160 /* (non-Javadoc) 161 * @see org.mitre.openid.connect.model.UserInfo#getMiddleName() 162 */ 163 @Override 164 @Basic 165 @Column(name="middle_name") 166 public String getMiddleName() { 167 return middleName; 168 } 169 /* (non-Javadoc) 170 * @see org.mitre.openid.connect.model.UserInfo#setMiddleName(java.lang.String) 171 */ 172 @Override 173 public void setMiddleName(String middleName) { 174 this.middleName = middleName; 175 } 176 /* (non-Javadoc) 177 * @see org.mitre.openid.connect.model.UserInfo#getNickname() 178 */ 179 @Override 180 @Basic 181 @Column(name = "nickname") 182 public String getNickname() { 183 return nickname; 184 } 185 /* (non-Javadoc) 186 * @see org.mitre.openid.connect.model.UserInfo#setNickname(java.lang.String) 187 */ 188 @Override 189 public void setNickname(String nickname) { 190 this.nickname = nickname; 191 } 192 /* (non-Javadoc) 193 * @see org.mitre.openid.connect.model.UserInfo#getProfile() 194 */ 195 @Override 196 @Basic 197 @Column(name = "profile") 198 public String getProfile() { 199 return profile; 200 } 201 /* (non-Javadoc) 202 * @see org.mitre.openid.connect.model.UserInfo#setProfile(java.lang.String) 203 */ 204 @Override 205 public void setProfile(String profile) { 206 this.profile = profile; 207 } 208 /* (non-Javadoc) 209 * @see org.mitre.openid.connect.model.UserInfo#getPicture() 210 */ 211 @Override 212 @Basic 213 @Column(name = "picture") 214 public String getPicture() { 215 return picture; 216 } 217 /* (non-Javadoc) 218 * @see org.mitre.openid.connect.model.UserInfo#setPicture(java.lang.String) 219 */ 220 @Override 221 public void setPicture(String picture) { 222 this.picture = picture; 223 } 224 /* (non-Javadoc) 225 * @see org.mitre.openid.connect.model.UserInfo#getWebsite() 226 */ 227 @Override 228 @Basic 229 @Column(name = "website") 230 public String getWebsite() { 231 return website; 232 } 233 /* (non-Javadoc) 234 * @see org.mitre.openid.connect.model.UserInfo#setWebsite(java.lang.String) 235 */ 236 @Override 237 public void setWebsite(String website) { 238 this.website = website; 239 } 240 /* (non-Javadoc) 241 * @see org.mitre.openid.connect.model.UserInfo#getEmail() 242 */ 243 @Override 244 @Basic 245 @Column(name = "email") 246 public String getEmail() { 247 return email; 248 } 249 /* (non-Javadoc) 250 * @see org.mitre.openid.connect.model.UserInfo#setEmail(java.lang.String) 251 */ 252 @Override 253 public void setEmail(String email) { 254 this.email = email; 255 } 256 /* (non-Javadoc) 257 * @see org.mitre.openid.connect.model.UserInfo#getVerified() 258 */ 259 @Override 260 @Basic 261 @Column(name="email_verified") 262 public Boolean getEmailVerified() { 263 return emailVerified; 264 } 265 /* (non-Javadoc) 266 * @see org.mitre.openid.connect.model.UserInfo#setVerified(java.lang.boolean) 267 */ 268 @Override 269 public void setEmailVerified(Boolean emailVerified) { 270 this.emailVerified = emailVerified; 271 } 272 /* (non-Javadoc) 273 * @see org.mitre.openid.connect.model.UserInfo#getGender() 274 */ 275 @Override 276 @Basic 277 @Column(name = "gender") 278 public String getGender() { 279 return gender; 280 } 281 /* (non-Javadoc) 282 * @see org.mitre.openid.connect.model.UserInfo#setGender(java.lang.String) 283 */ 284 @Override 285 public void setGender(String gender) { 286 this.gender = gender; 287 } 288 /* (non-Javadoc) 289 * @see org.mitre.openid.connect.model.UserInfo#getZoneinfo() 290 */ 291 @Override 292 @Basic 293 @Column(name="zone_info") 294 public String getZoneinfo() { 295 return zoneinfo; 296 } 297 /* (non-Javadoc) 298 * @see org.mitre.openid.connect.model.UserInfo#setZoneinfo(java.lang.String) 299 */ 300 @Override 301 public void setZoneinfo(String zoneinfo) { 302 this.zoneinfo = zoneinfo; 303 } 304 /* (non-Javadoc) 305 * @see org.mitre.openid.connect.model.UserInfo#getLocale() 306 */ 307 @Override 308 @Basic 309 @Column(name = "locale") 310 public String getLocale() { 311 return locale; 312 } 313 /* (non-Javadoc) 314 * @see org.mitre.openid.connect.model.UserInfo#setLocale(java.lang.String) 315 */ 316 @Override 317 public void setLocale(String locale) { 318 this.locale = locale; 319 } 320 /* (non-Javadoc) 321 * @see org.mitre.openid.connect.model.UserInfo#getPhoneNumber() 322 */ 323 @Override 324 @Basic 325 @Column(name="phone_number") 326 public String getPhoneNumber() { 327 return phoneNumber; 328 } 329 /* (non-Javadoc) 330 * @see org.mitre.openid.connect.model.UserInfo#setPhoneNumber(java.lang.String) 331 */ 332 @Override 333 public void setPhoneNumber(String phoneNumber) { 334 this.phoneNumber = phoneNumber; 335 } 336 /* (non-Javadoc) 337 * @see org.mitre.openid.connect.model.UserInfo#getPhoneNumberVerified() 338 */ 339 @Override 340 @Basic 341 @Column(name="phone_number_verified") 342 public Boolean getPhoneNumberVerified() { 343 return phoneNumberVerified; 344 } 345 /* (non-Javadoc) 346 * @see org.mitre.openid.connect.model.UserInfo#setPhoneNumberVerified(java.lang.Boolean) 347 */ 348 @Override 349 public void setPhoneNumberVerified(Boolean phoneNumberVerified) { 350 this.phoneNumberVerified = phoneNumberVerified; 351 } 352 /* (non-Javadoc) 353 * @see org.mitre.openid.connect.model.UserInfo#getAddress() 354 */ 355 @Override 356 @OneToOne 357 @JoinColumn(name="address_id") 358 public Address getAddress() { 359 return address; 360 } 361 /* (non-Javadoc) 362 * @see org.mitre.openid.connect.model.UserInfo#setAddress(org.mitre.openid.connect.model.Address) 363 */ 364 @Override 365 public void setAddress(Address address) { 366 this.address = address; 367 } 368 /* (non-Javadoc) 369 * @see org.mitre.openid.connect.model.UserInfo#getUpdatedTime() 370 */ 371 @Override 372 @Basic 373 @Column(name="updated_time") 374 public String getUpdatedTime() { 375 return updatedTime; 376 } 377 /* (non-Javadoc) 378 * @see org.mitre.openid.connect.model.UserInfo#setUpdatedTime(java.lang.String) 379 */ 380 @Override 381 public void setUpdatedTime(String updatedTime) { 382 this.updatedTime = updatedTime; 383 } 384 385 /** 386 * @return the birthdate 387 */ 388 @Override 389 @Basic 390 @Column(name="birthdate") 391 public String getBirthdate() { 392 return birthdate; 393 } 394 /** 395 * @param birthdate the birthdate to set 396 */ 397 @Override 398 public void setBirthdate(String birthdate) { 399 this.birthdate = birthdate; 400 } 401 402 @Override 403 public JsonObject toJson() { 404 JsonObject obj = new JsonObject(); 405 406 obj.addProperty("sub", this.getSub()); 407 408 obj.addProperty("name", this.getName()); 409 obj.addProperty("preferred_username", this.getPreferredUsername()); 410 obj.addProperty("given_name", this.getGivenName()); 411 obj.addProperty("family_name", this.getFamilyName()); 412 obj.addProperty("middle_name", this.getMiddleName()); 413 obj.addProperty("nickname", this.getNickname()); 414 obj.addProperty("profile", this.getProfile()); 415 obj.addProperty("picture", this.getPicture()); 416 obj.addProperty("website", this.getWebsite()); 417 obj.addProperty("gender", this.getGender()); 418 obj.addProperty("zone_info", this.getZoneinfo()); 419 obj.addProperty("locale", this.getLocale()); 420 obj.addProperty("updated_time", this.getUpdatedTime()); 421 obj.addProperty("birthdate", this.getBirthdate()); 422 423 obj.addProperty("email", this.getEmail()); 424 obj.addProperty("email_verified", this.getEmailVerified()); 425 426 obj.addProperty("phone_number", this.getPhoneNumber()); 427 obj.addProperty("phone_number_verified", this.getPhoneNumberVerified()); 428 429 if (this.getAddress() != null) { 430 431 JsonObject addr = new JsonObject(); 432 addr.addProperty("formatted", this.getAddress().getFormatted()); 433 addr.addProperty("street_address", this.getAddress().getStreetAddress()); 434 addr.addProperty("locality", this.getAddress().getLocality()); 435 addr.addProperty("region", this.getAddress().getRegion()); 436 addr.addProperty("postal_code", this.getAddress().getPostalCode()); 437 addr.addProperty("country", this.getAddress().getCountry()); 438 439 obj.add("address", addr); 440 } 441 442 return obj; 443 } 444 445 /** 446 * Parse a JsonObject into a UserInfo. 447 * @param o 448 * @return 449 */ 450 public static UserInfo fromJson(JsonObject obj) { 451 DefaultUserInfo ui = new DefaultUserInfo(); 452 453 ui.setSub(obj.has("sub") ? obj.get("sub").getAsString() : null); 454 455 ui.setName(obj.has("name") ? obj.get("name").getAsString() : null); 456 ui.setPreferredUsername(obj.has("preferred_username") ? obj.get("preferred_username").getAsString() : null); 457 ui.setGivenName(obj.has("given_name") ? obj.get("given_name").getAsString() : null); 458 ui.setFamilyName(obj.has("family_name") ? obj.get("family_name").getAsString() : null); 459 ui.setMiddleName(obj.has("middle_name") ? obj.get("middle_name").getAsString() : null); 460 ui.setNickname(obj.has("nickname") ? obj.get("nickname").getAsString() : null); 461 ui.setProfile(obj.has("profile") ? obj.get("profile").getAsString() : null); 462 ui.setPicture(obj.has("picture") ? obj.get("picture").getAsString() : null); 463 ui.setWebsite(obj.has("website") ? obj.get("website").getAsString() : null); 464 ui.setGender(obj.has("gender") ? obj.get("gender").getAsString() : null); 465 ui.setZoneinfo(obj.has("zone_info") ? obj.get("zone_info").getAsString() : null); 466 ui.setLocale(obj.has("locale") ? obj.get("locale").getAsString() : null); 467 ui.setUpdatedTime(obj.has("updated_time") ? obj.get("updated_time").getAsString() : null); 468 ui.setBirthdate(obj.has("birthdate") ? obj.get("birthdate").getAsString() : null); 469 470 ui.setEmail(obj.has("email") ? obj.get("email").getAsString() : null); 471 ui.setEmailVerified(obj.has("email_verified") ? obj.get("email_verified").getAsBoolean() : null); 472 473 ui.setPhoneNumber(obj.has("phone_number") ? obj.get("phone_number").getAsString() : null); 474 ui.setPhoneNumberVerified(obj.has("phone_number_verified") ? obj.get("phone_number_verified").getAsBoolean() : null); 475 476 if (obj.has("address") && obj.get("address").isJsonObject()) { 477 JsonObject addr = obj.get("address").getAsJsonObject(); 478 ui.setAddress(new Address()); 479 480 ui.getAddress().setFormatted(addr.has("formatted") ? addr.get("formatted").getAsString() : null); 481 ui.getAddress().setStreetAddress(addr.has("street_address") ? addr.get("street_address").getAsString() : null); 482 ui.getAddress().setLocality(addr.has("locality") ? addr.get("locality").getAsString() : null); 483 ui.getAddress().setRegion(addr.has("region") ? addr.get("region").getAsString() : null); 484 ui.getAddress().setPostalCode(addr.has("postal_code") ? addr.get("postal_code").getAsString() : null); 485 ui.getAddress().setCountry(addr.has("country") ? addr.get("country").getAsString() : null); 486 487 } 488 489 490 return ui; 491 492 } 493 494 /* (non-Javadoc) 495 * @see java.lang.Object#hashCode() 496 */ 497 @Override 498 public int hashCode() { 499 final int prime = 31; 500 int result = 1; 501 result = prime * result + ((address == null) ? 0 : address.hashCode()); 502 result = prime * result + ((birthdate == null) ? 0 : birthdate.hashCode()); 503 result = prime * result + ((email == null) ? 0 : email.hashCode()); 504 result = prime * result + ((emailVerified == null) ? 0 : emailVerified.hashCode()); 505 result = prime * result + ((familyName == null) ? 0 : familyName.hashCode()); 506 result = prime * result + ((gender == null) ? 0 : gender.hashCode()); 507 result = prime * result + ((givenName == null) ? 0 : givenName.hashCode()); 508 result = prime * result + ((id == null) ? 0 : id.hashCode()); 509 result = prime * result + ((locale == null) ? 0 : locale.hashCode()); 510 result = prime * result + ((middleName == null) ? 0 : middleName.hashCode()); 511 result = prime * result + ((name == null) ? 0 : name.hashCode()); 512 result = prime * result + ((nickname == null) ? 0 : nickname.hashCode()); 513 result = prime * result + ((phoneNumber == null) ? 0 : phoneNumber.hashCode()); 514 result = prime * result + ((phoneNumberVerified == null) ? 0 : phoneNumberVerified.hashCode()); 515 result = prime * result + ((picture == null) ? 0 : picture.hashCode()); 516 result = prime * result + ((preferredUsername == null) ? 0 : preferredUsername.hashCode()); 517 result = prime * result + ((profile == null) ? 0 : profile.hashCode()); 518 result = prime * result + ((sub == null) ? 0 : sub.hashCode()); 519 result = prime * result + ((updatedTime == null) ? 0 : updatedTime.hashCode()); 520 result = prime * result + ((website == null) ? 0 : website.hashCode()); 521 result = prime * result + ((zoneinfo == null) ? 0 : zoneinfo.hashCode()); 522 return result; 523 } 524 525 /* (non-Javadoc) 526 * @see java.lang.Object#equals(java.lang.Object) 527 */ 528 @Override 529 public boolean equals(Object obj) { 530 if (this == obj) { 531 return true; 532 } 533 if (obj == null) { 534 return false; 535 } 536 if (!(obj instanceof DefaultUserInfo)) { 537 return false; 538 } 539 DefaultUserInfo other = (DefaultUserInfo) obj; 540 if (address == null) { 541 if (other.address != null) { 542 return false; 543 } 544 } else if (!address.equals(other.address)) { 545 return false; 546 } 547 if (birthdate == null) { 548 if (other.birthdate != null) { 549 return false; 550 } 551 } else if (!birthdate.equals(other.birthdate)) { 552 return false; 553 } 554 if (email == null) { 555 if (other.email != null) { 556 return false; 557 } 558 } else if (!email.equals(other.email)) { 559 return false; 560 } 561 if (emailVerified == null) { 562 if (other.emailVerified != null) { 563 return false; 564 } 565 } else if (!emailVerified.equals(other.emailVerified)) { 566 return false; 567 } 568 if (familyName == null) { 569 if (other.familyName != null) { 570 return false; 571 } 572 } else if (!familyName.equals(other.familyName)) { 573 return false; 574 } 575 if (gender == null) { 576 if (other.gender != null) { 577 return false; 578 } 579 } else if (!gender.equals(other.gender)) { 580 return false; 581 } 582 if (givenName == null) { 583 if (other.givenName != null) { 584 return false; 585 } 586 } else if (!givenName.equals(other.givenName)) { 587 return false; 588 } 589 if (id == null) { 590 if (other.id != null) { 591 return false; 592 } 593 } else if (!id.equals(other.id)) { 594 return false; 595 } 596 if (locale == null) { 597 if (other.locale != null) { 598 return false; 599 } 600 } else if (!locale.equals(other.locale)) { 601 return false; 602 } 603 if (middleName == null) { 604 if (other.middleName != null) { 605 return false; 606 } 607 } else if (!middleName.equals(other.middleName)) { 608 return false; 609 } 610 if (name == null) { 611 if (other.name != null) { 612 return false; 613 } 614 } else if (!name.equals(other.name)) { 615 return false; 616 } 617 if (nickname == null) { 618 if (other.nickname != null) { 619 return false; 620 } 621 } else if (!nickname.equals(other.nickname)) { 622 return false; 623 } 624 if (phoneNumber == null) { 625 if (other.phoneNumber != null) { 626 return false; 627 } 628 } else if (!phoneNumber.equals(other.phoneNumber)) { 629 return false; 630 } 631 if (phoneNumberVerified == null) { 632 if (other.phoneNumberVerified != null) { 633 return false; 634 } 635 } else if (!phoneNumberVerified.equals(other.phoneNumberVerified)) { 636 return false; 637 } 638 if (picture == null) { 639 if (other.picture != null) { 640 return false; 641 } 642 } else if (!picture.equals(other.picture)) { 643 return false; 644 } 645 if (preferredUsername == null) { 646 if (other.preferredUsername != null) { 647 return false; 648 } 649 } else if (!preferredUsername.equals(other.preferredUsername)) { 650 return false; 651 } 652 if (profile == null) { 653 if (other.profile != null) { 654 return false; 655 } 656 } else if (!profile.equals(other.profile)) { 657 return false; 658 } 659 if (sub == null) { 660 if (other.sub != null) { 661 return false; 662 } 663 } else if (!sub.equals(other.sub)) { 664 return false; 665 } 666 if (updatedTime == null) { 667 if (other.updatedTime != null) { 668 return false; 669 } 670 } else if (!updatedTime.equals(other.updatedTime)) { 671 return false; 672 } 673 if (website == null) { 674 if (other.website != null) { 675 return false; 676 } 677 } else if (!website.equals(other.website)) { 678 return false; 679 } 680 if (zoneinfo == null) { 681 if (other.zoneinfo != null) { 682 return false; 683 } 684 } else if (!zoneinfo.equals(other.zoneinfo)) { 685 return false; 686 } 687 return true; 688 } 689 690}