001// Generated by delombok at Wed Oct 13 22:31:21 CEST 2021
002/*
003 * Copyright (c) 2010-2021 Mark Allen, Norbert Bartels.
004 *
005 * Permission is hereby granted, free of charge, to any person obtaining a copy
006 * of this software and associated documentation files (the "Software"), to deal
007 * in the Software without restriction, including without limitation the rights
008 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
009 * copies of the Software, and to permit persons to whom the Software is
010 * furnished to do so, subject to the following conditions:
011 *
012 * The above copyright notice and this permission notice shall be included in
013 * all copies or substantial portions of the Software.
014 *
015 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
016 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
017 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
018 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
019 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
020 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
021 * THE SOFTWARE.
022 */
023package com.restfb.types;
024
025import static com.restfb.util.DateUtils.toDateFromShortFormat;
026import static com.restfb.util.StringUtils.isBlank;
027import static java.util.Collections.unmodifiableList;
028import java.math.BigDecimal;
029import java.util.ArrayList;
030import java.util.Date;
031import java.util.List;
032import com.restfb.Facebook;
033import com.restfb.JsonMapper;
034import com.restfb.JsonMapper.JsonMappingCompleted;
035import com.restfb.annotation.GraphAPI;
036import com.restfb.types.features.HasCover;
037import com.restfb.types.features.HasProfilePicture;
038
039/**
040 * Represents the <a href="https://developers.facebook.com/docs/graph-api/reference/user">User Graph API type</a>.
041 * 
042 * @author <a href="http://restfb.com">Mark Allen</a>
043 * @author Patrick Alberts
044 * @since 1.5
045 */
046public class User extends NamedFacebookType implements HasProfilePicture, HasCover {
047  /**
048   * Social context for this person
049   */
050  @Facebook
051  private FacebookType context;
052  /**
053   * The user's first name.
054   * 
055   */
056  @Facebook("first_name")
057  private String firstName;
058  /**
059   * The user's middle name.
060   * 
061   */
062  @Facebook("middle_name")
063  private String middleName;
064  /**
065   * The person's name formatted to correctly handle Chinese, Japanese, or Korean ordering.
066   */
067  @Facebook("name_format")
068  private String nameFormat;
069  /**
070   * The person's payment pricepoints
071   */
072  @Facebook("payment_pricepoints")
073  private PaymentPricepoints paymentPricepoints;
074  /**
075   * The user's last name.
076   * 
077   */
078  @Facebook("last_name")
079  private String lastName;
080  /**
081   * Shortened, locale-aware name for the person.
082   */
083  @Facebook("short_name")
084  @GraphAPI(since = "2.9")
085  private String shortName;
086  /**
087   * The person's cover photo
088   */
089  @Facebook
090  private CoverPhoto cover;
091  /**
092   * A link to the user's profile.
093   * 
094   */
095  @Facebook
096  private String link;
097  /**
098   * The user's biographical snippet.
099   */
100  @Facebook
101  @GraphAPI(until = "2.7")
102  private String bio;
103  /**
104   * The user's favorite quotes.
105   * 
106   */
107  @Facebook
108  private String quotes;
109  /**
110   * The user's blurb that appears under their profile picture.
111   *
112   * @deprecated since breaking change on 4 April, 2018
113   */
114  @Facebook
115  @Deprecated
116  private String about;
117  /**
118   * The user's relationship status.
119   * 
120   * @deprecated since breaking change on 4 April, 2018
121   */
122  @Facebook("relationship_status")
123  @Deprecated
124  private String relationshipStatus;
125  /**
126   * The user's religion.
127   * 
128   * @deprecated since breaking change on 4 April, 2018
129   */
130  @Facebook
131  @Deprecated
132  private String religion;
133  /**
134   * Unspecific age range that this person's age fits into.
135   * 
136   */
137  @Facebook("age_range")
138  private AgeRange ageRange;
139  /**
140   * A link to the user's personal website.
141   * 
142   * @deprecated since breaking change on 4 April, 2018
143   */
144  @Facebook
145  @Deprecated
146  private String website;
147  /**
148   * The user's birthday as a {@code String}.
149   * <p>
150   * Will always succeed, even if the user has specified month/year format only. If you'd like to use a typed version of
151   * this accessor, call {@link #getBirthdayAsDate()} instead.
152   * 
153   */
154  @Facebook
155  private String birthday;
156  /**
157   * The proxied or contact email address granted by the user.
158   * 
159   */
160  @Facebook
161  private String email;
162  /**
163   * The user's timezone offset.
164   * 
165   */
166  @Facebook
167  private Double timezone;
168  /**
169   * Indicates whether the account has been verified. This is distinct from the <code>is_verified</code> field. Someone
170   * is considered verified if they take any of the following actions:
171   * <ul>
172   * <li>Register for mobile</li>
173   * <li>Confirm their account via SMS</li>
174   * <li>Enter a valid credit card</li>
175   * </ul>
176   * 
177   */
178  @Facebook
179  private Boolean verified;
180  /**
181   * Video upload limits
182   */
183  @Facebook("video_upload_limits")
184  private VideoUploadLimits videoUploadLimits;
185  /**
186   * Can the viewer send a gift to this person?
187   *
188   * @deprecated Will be deprecated in all versions on Nov, 2020.
189   */
190  @Facebook("viewer_can_send_gift")
191  @Deprecated
192  private Boolean viewerCanSendGift;
193  /**
194   * The user's gender.
195   * 
196   */
197  @Facebook
198  private String gender;
199  /**
200   * The user's political affiliation.
201   * 
202   * @deprecated since breaking change on 4 April, 2018
203   */
204  @Facebook
205  @Deprecated
206  private String political;
207  /**
208   * The user's locale.
209   * 
210   */
211  @Facebook
212  private String locale;
213  /**
214   * The user's Facebook username.
215   *
216   * @since 1.6.5
217   * @deprecated since graph api 2.0
218   */
219  @Deprecated
220  @Facebook
221  private String username;
222  /**
223   * The person's PGP public key
224   */
225  @Facebook("public_key")
226  private String publicKey;
227  /**
228   * The user's Likes
229   */
230  @Facebook
231  private Likes likes;
232  @Facebook("picture")
233  private transient String rawPicture;
234  /**
235   * The user's picture, if provided.
236   * 
237   * To force Facebook to fill the <code>picture</code> field you have to fetch the user with the
238   * <code>fields=picture</code> parameter, otherwise the picture is <code>null</code>.
239   * 
240   * @since 1.6.16
241   */
242  private ProfilePictureSource picture;
243  /**
244   * Duplicate mapping for "hometown" since FB can return it differently in different situations.
245   * 
246   * -- GETTER -- The user's hometown.
247   * <p>
248   * Sometimes this can be {@code null} - check {@link #getHometownName()} instead in that case.
249   * 
250   */
251  @Facebook
252  private NamedFacebookType hometown;
253  /**
254   * Duplicate mapping for "hometown" since FB can return it differently in different situations.
255   */
256  @Facebook("hometown")
257  private String hometownAsString;
258  /**
259   * The user's current location.
260   * 
261   */
262  @Facebook
263  private NamedFacebookType location;
264  /**
265   * Security settings
266   *
267   * @deprecated Will be deprecated in all versions on Nov, 2020.
268   */
269  @Facebook("security_settings")
270  @Deprecated
271  private SecuritySettings securitySettings;
272  /**
273   * The time that the shared loginneeds to be upgraded to Business Manager by
274   */
275  @Facebook("shared_login_upgrade_required_by")
276  private Date sharedLoginUpgradeRequiredBy;
277  /**
278   * The user's significant other.
279   * 
280   */
281  @Facebook("significant_other")
282  private NamedFacebookType significantOther;
283  /**
284   * Platform test group
285   *
286   * @deprecated Will be deprecated in all versions on Nov, 2020.
287   */
288  @Facebook("test_group")
289  @Deprecated
290  private Long testGroup;
291  /**
292   * Date the user's profile was updated.
293   * 
294   */
295  @Facebook("updated_time")
296  private Date updatedTime;
297  /**
298   * An anonymous, but unique identifier for the user.
299   * 
300   */
301  @Facebook("third_party_id")
302  private String thirdPartyId;
303  /**
304   * The user's currency preferences.
305   * <p>
306   * Further documentation available on Facebook's
307   * <a href="https://developers.facebook.com/docs/payments/user_currency">Displaying prices in user's currency</a>
308   * page.
309   * 
310   * @since 1.6.12
311   */
312  @Facebook
313  private Currency currency;
314  /**
315   * This returns a string which is the same for this person across all the apps managed by the same Business Manager.
316   * 
317   * @since 1.7.0
318   */
319  @Facebook("token_for_business")
320  private String tokenForBusiness;
321  /**
322   * Install type.
323   */
324  @Facebook("install_type")
325  private String installType;
326  /**
327   * Is the app making the request installed?
328   */
329  @Facebook
330  private Boolean installed;
331  /**
332   * Is this a shared login (e.g. a gray user)
333   *
334   * @deprecated Will be deprecated in all versions on Nov, 2020.
335   */
336  @Facebook("is_shared_login")
337  @Deprecated
338  private Boolean isSharedLogin;
339  /**
340   * People with large numbers of followers can have the authenticity of their identity manually verified by Facebook.
341   * This field indicates whether the person's profile is verified in this way.
342   *
343   * This is distinct from the <code>verified</code> field
344   */
345  @Facebook("is_verified")
346  private Boolean isVerified;
347  /**
348   * if the current user is a guest user. should always return false.
349   */
350  @Facebook("is_guest_user")
351  private Boolean isGuestUser;
352  @Deprecated
353  @Facebook("interested_in")
354  private List<String> interestedIn = new ArrayList<>();
355  @Facebook("meeting_for")
356  private List<String> meetingFor = new ArrayList<>();
357  @Facebook
358  private List<UserDevice> devices = new ArrayList<>();
359  @Facebook
360  @Deprecated
361  private List<WorkExperience> work = new ArrayList<>();
362  @Facebook
363  @Deprecated
364  private List<Education> education = new ArrayList<>();
365  @Facebook
366  private List<Sport> sports = new ArrayList<>();
367  @Facebook("favorite_teams")
368  private List<Experience> favoriteTeams = new ArrayList<>();
369  @Facebook("favorite_athletes")
370  private List<Experience> favoriteAthletes = new ArrayList<>();
371  @Facebook("inspirational_people")
372  private List<Experience> inspirationalPeople = new ArrayList<>();
373  @Facebook
374  private List<Experience> languages = new ArrayList<>();
375  @Facebook
376  private List<PageLabel> labels = new ArrayList<>();
377  @Facebook("ids_for_apps")
378  private List<UserIDForApp> idsForApps = new ArrayList<>();
379  @Facebook("ids_for_business")
380  private List<UserIDForApp> idsForBusiness = new ArrayList<>();
381  @Facebook("ids_for_pages")
382  private List<UserIDForPage> idsForPages = new ArrayList<>();
383  @Facebook("invitable_friends")
384  private List<UserInvitableFriend> invitableFriends = new ArrayList<>();
385  private static final long serialVersionUID = 1L;
386
387
388  /**
389   * Represents the <a href="http://developers.facebook.com/docs/reference/api/user">Education Graph API type</a>.
390   * 
391   * @author <a href="http://restfb.com">Mark Allen</a>
392   * @author Patrick Alberts
393   * @deprecated since breaking change on 4 April, 2018
394   */
395  @Deprecated
396  public static class Education extends AbstractFacebookType {
397    /**
398     * The school name and ID.
399     * 
400     */
401    @Facebook
402    private NamedFacebookType school;
403    /**
404     * Graduation year.
405     * 
406     */
407    @Facebook
408    private NamedFacebookType year;
409    /**
410     * Description for this year.
411     * 
412     * It is possible for Facebook to return either this value or {@link #getYear()}. If {@link #getYear()} returns
413     * {@code null}, then check this method to see if it has data, e.g. {@code "1997"}.
414     * 
415     * @since 1.7.1
416     */
417    @Facebook("year")
418    private String yearAsString;
419    /**
420     * Degree acquired.
421     * 
422     */
423    @Facebook
424    private NamedFacebookType degree;
425    /**
426     * Type of school, e.g. {@code College}.
427     * 
428     */
429    @Facebook
430    private String type;
431    @Facebook
432    private List<NamedFacebookType> concentration = new ArrayList<>();
433    @Facebook
434    private List<NamedFacebookType> with = new ArrayList<>();
435    @Facebook
436    private List<EducationClass> classes = new ArrayList<>();
437    private static final long serialVersionUID = 2L;
438
439    /**
440     * Concentrations/minors.
441     * 
442     * @return Concentrations/minors.
443     */
444    public List<NamedFacebookType> getConcentration() {
445      return unmodifiableList(concentration);
446    }
447
448    public boolean addConcentration(NamedFacebookType minor) {
449      return concentration.add(minor);
450    }
451
452    public boolean removeConcentration(NamedFacebookType minor) {
453      return concentration.remove(minor);
454    }
455
456    /**
457     * Friends associated with this school.
458     * 
459     * @return Friends associated with this school.
460     * @since 1.6.3
461     */
462    public List<NamedFacebookType> getWith() {
463      return unmodifiableList(with);
464    }
465
466    public boolean addWith(NamedFacebookType friend) {
467      return with.add(friend);
468    }
469
470    public boolean removeWith(NamedFacebookType friend) {
471      return with.remove(friend);
472    }
473
474    /**
475     * Classes taken at this school.
476     * 
477     * @return Classes taken at this school.
478     * @since 1.6.8
479     */
480    public List<EducationClass> getClasses() {
481      return unmodifiableList(classes);
482    }
483
484    public boolean addClasses(EducationClass eduClass) {
485      return classes.add(eduClass);
486    }
487
488    public boolean removeClasses(EducationClass eduClass) {
489      return classes.remove(eduClass);
490    }
491
492    /**
493     * The school name and ID.
494     * 
495     * @return The school name and ID.
496     */
497    @java.lang.SuppressWarnings("all")
498    public NamedFacebookType getSchool() {
499      return this.school;
500    }
501
502    /**
503     * The school name and ID.
504     * 
505     */
506    @java.lang.SuppressWarnings("all")
507    public void setSchool(final NamedFacebookType school) {
508      this.school = school;
509    }
510
511    /**
512     * Graduation year.
513     * 
514     * @return Graduation year.
515     */
516    @java.lang.SuppressWarnings("all")
517    public NamedFacebookType getYear() {
518      return this.year;
519    }
520
521    /**
522     * Graduation year.
523     * 
524     */
525    @java.lang.SuppressWarnings("all")
526    public void setYear(final NamedFacebookType year) {
527      this.year = year;
528    }
529
530    /**
531     * Description for this year.
532     * 
533     * It is possible for Facebook to return either this value or {@link #getYear()}. If {@link #getYear()} returns
534     * {@code null}, then check this method to see if it has data, e.g. {@code "1997"}.
535     * 
536     * @return Description for this year.
537     * @since 1.7.1
538     */
539    @java.lang.SuppressWarnings("all")
540    public String getYearAsString() {
541      return this.yearAsString;
542    }
543
544    /**
545     * Description for this year.
546     * 
547     * It is possible for Facebook to return either this value or {@link #getYear()}. If {@link #getYear()} returns
548     * {@code null}, then check this method to see if it has data, e.g. {@code "1997"}.
549     * 
550     * @since 1.7.1
551     */
552    @java.lang.SuppressWarnings("all")
553    public void setYearAsString(final String yearAsString) {
554      this.yearAsString = yearAsString;
555    }
556
557    /**
558     * Degree acquired.
559     * 
560     * @return Degree acquired.
561     */
562    @java.lang.SuppressWarnings("all")
563    public NamedFacebookType getDegree() {
564      return this.degree;
565    }
566
567    /**
568     * Degree acquired.
569     * 
570     */
571    @java.lang.SuppressWarnings("all")
572    public void setDegree(final NamedFacebookType degree) {
573      this.degree = degree;
574    }
575
576    /**
577     * Type of school, e.g. {@code College}.
578     * 
579     * @return Type of school.
580     */
581    @java.lang.SuppressWarnings("all")
582    public String getType() {
583      return this.type;
584    }
585
586    /**
587     * Type of school, e.g. {@code College}.
588     * 
589     */
590    @java.lang.SuppressWarnings("all")
591    public void setType(final String type) {
592      this.type = type;
593    }
594  }
595
596
597  /**
598   * Represents the <a href="http://developers.facebook.com/docs/reference/api/user">Class Graph API type</a>.
599   * 
600   * @author Mark Allen
601   * @since 1.6.8
602   */
603  public static class EducationClass extends NamedFacebookType {
604    @Facebook
605    private List<NamedFacebookType> with = new ArrayList<>();
606    /**
607     * The description of this class.
608     * 
609     */
610    @Facebook
611    private String description;
612    private static final long serialVersionUID = 1L;
613
614    /**
615     * Friends associated with this class.
616     * 
617     * @return Friends associated with this class.
618     */
619    public List<NamedFacebookType> getWith() {
620      return unmodifiableList(with);
621    }
622
623    public boolean addWith(NamedFacebookType friend) {
624      return with.add(friend);
625    }
626
627    public boolean removeWith(NamedFacebookType friend) {
628      return with.remove(friend);
629    }
630
631    /**
632     * The description of this class.
633     * 
634     * @return The description of this class.
635     */
636    @java.lang.SuppressWarnings("all")
637    public String getDescription() {
638      return this.description;
639    }
640
641    /**
642     * The description of this class.
643     * 
644     */
645    @java.lang.SuppressWarnings("all")
646    public void setDescription(final String description) {
647      this.description = description;
648    }
649  }
650
651
652  /**
653   * Represents the <a href="http://developers.facebook.com/docs/reference/api/user">Sport Graph API type</a>.
654   * 
655   * @author Patrick Alberts
656   * @since 1.6.3
657   */
658  public static class Sport extends NamedFacebookType {
659    @Facebook
660    private List<NamedFacebookType> with = new ArrayList<>();
661    private static final long serialVersionUID = 1L;
662
663    /**
664     * Friends associated with this sport.
665     * 
666     * @return Friends associated with this sport.
667     */
668    public List<NamedFacebookType> getWith() {
669      return unmodifiableList(with);
670    }
671
672    public boolean addWith(NamedFacebookType withSport) {
673      return with.add(withSport);
674    }
675
676    public boolean removeWith(NamedFacebookType withSport) {
677      return with.remove(withSport);
678    }
679  }
680
681
682  /**
683   * Represents the <a href="https://developers.facebook.com/docs/payments/user_currency">Currency Graph API type</a>.
684   * 
685   * @author <a href="http://restfb.com">Mark Allen</a>
686   * @since 1.6.12
687   */
688  public static class Currency extends AbstractFacebookType {
689    /**
690     * The ISO-4217-3 code for the user's preferred currency (defaulting to USD if the user hasn't set one).
691     * 
692     */
693    @Facebook("user_currency")
694    private String userCurrency;
695    /**
696     * The number of Facebook Credits that equate in value to one unit of {@code user_currency}.
697     * 
698     */
699    @Facebook("currency_exchange")
700    private BigDecimal currencyExchange;
701    /**
702     * The number of units of {@code user_currency} that equate in value to one Credit.
703     * <p>
704     * To calculate the local currency amount based on the credits price, compute
705     * {@code credits_price * currency_exchange_inverse}.
706     * 
707     */
708    @Facebook("currency_exchange_inverse")
709    private BigDecimal currencyExchangeInverse;
710    /**
711     * The number by which a price should be divided for display in {@code user_currency} units.
712     * <p>
713     * For example, a price of $1.20 will be represented by the Facebook API as "120", which you should divide by the
714     * USD {@code currency_offset} of 100 to arrive back at 1.20.
715     * 
716     */
717    @Facebook("currency_offset")
718    private BigDecimal currencyOffset;
719    private static final long serialVersionUID = 1L;
720
721    /**
722     * The ISO-4217-3 code for the user's preferred currency (defaulting to USD if the user hasn't set one).
723     * 
724     * @return The ISO-4217-3 code for the user's preferred currency (defaulting to USD if the user hasn't set one).
725     */
726    @java.lang.SuppressWarnings("all")
727    public String getUserCurrency() {
728      return this.userCurrency;
729    }
730
731    /**
732     * The ISO-4217-3 code for the user's preferred currency (defaulting to USD if the user hasn't set one).
733     * 
734     */
735    @java.lang.SuppressWarnings("all")
736    public void setUserCurrency(final String userCurrency) {
737      this.userCurrency = userCurrency;
738    }
739
740    /**
741     * The number of Facebook Credits that equate in value to one unit of {@code user_currency}.
742     * 
743     * @return The number of Facebook Credits that equate in value to one unit of {@code user_currency}.
744     */
745    @java.lang.SuppressWarnings("all")
746    public BigDecimal getCurrencyExchange() {
747      return this.currencyExchange;
748    }
749
750    /**
751     * The number of Facebook Credits that equate in value to one unit of {@code user_currency}.
752     * 
753     */
754    @java.lang.SuppressWarnings("all")
755    public void setCurrencyExchange(final BigDecimal currencyExchange) {
756      this.currencyExchange = currencyExchange;
757    }
758
759    /**
760     * The number of units of {@code user_currency} that equate in value to one Credit.
761     * <p>
762     * To calculate the local currency amount based on the credits price, compute
763     * {@code credits_price * currency_exchange_inverse}.
764     * 
765     * @return The number of units of {@code user_currency} that equate in value to one Credit.
766     */
767    @java.lang.SuppressWarnings("all")
768    public BigDecimal getCurrencyExchangeInverse() {
769      return this.currencyExchangeInverse;
770    }
771
772    /**
773     * The number of units of {@code user_currency} that equate in value to one Credit.
774     * <p>
775     * To calculate the local currency amount based on the credits price, compute
776     * {@code credits_price * currency_exchange_inverse}.
777     * 
778     */
779    @java.lang.SuppressWarnings("all")
780    public void setCurrencyExchangeInverse(final BigDecimal currencyExchangeInverse) {
781      this.currencyExchangeInverse = currencyExchangeInverse;
782    }
783
784    /**
785     * The number by which a price should be divided for display in {@code user_currency} units.
786     * <p>
787     * For example, a price of $1.20 will be represented by the Facebook API as "120", which you should divide by the
788     * USD {@code currency_offset} of 100 to arrive back at 1.20.
789     * 
790     * @return The number by which a price should be divided for display in {@code user_currency} units.
791     */
792    @java.lang.SuppressWarnings("all")
793    public BigDecimal getCurrencyOffset() {
794      return this.currencyOffset;
795    }
796
797    /**
798     * The number by which a price should be divided for display in {@code user_currency} units.
799     * <p>
800     * For example, a price of $1.20 will be represented by the Facebook API as "120", which you should divide by the
801     * USD {@code currency_offset} of 100 to arrive back at 1.20.
802     * 
803     */
804    @java.lang.SuppressWarnings("all")
805    public void setCurrencyOffset(final BigDecimal currencyOffset) {
806      this.currencyOffset = currencyOffset;
807    }
808  }
809
810
811  /**
812   * Represents the <a href="https://developers.facebook.com/docs/graph-api/reference/user-device/">Use">User Device
813   * Graph API type</a>.
814   * 
815   * @author <a href="http://restfb.com">Norbert Bartels</a>
816   */
817  public static class UserDevice extends AbstractFacebookType {
818    private static final long serialVersionUID = 1L;
819    @Facebook
820    private String hardware;
821    @Facebook
822    private String os;
823
824    @java.lang.SuppressWarnings("all")
825    public String getHardware() {
826      return this.hardware;
827    }
828
829    @java.lang.SuppressWarnings("all")
830    public void setHardware(final String hardware) {
831      this.hardware = hardware;
832    }
833
834    @java.lang.SuppressWarnings("all")
835    public String getOs() {
836      return this.os;
837    }
838
839    @java.lang.SuppressWarnings("all")
840    public void setOs(final String os) {
841      this.os = os;
842    }
843  }
844
845
846  public static class AgeRange extends AbstractFacebookType {
847    private static final long serialVersionUID = 1L;
848    /**
849     * The lower bounds of the range for this person's age.
850     * 
851     */
852    @Facebook
853    private Integer min;
854    /**
855     * The upper bounds of the range for this person's age.
856     * 
857     */
858    @Facebook
859    private Integer max;
860
861    /**
862     * The lower bounds of the range for this person's age.
863     * 
864     * @return The lower bounds of the range for this person's age.
865     */
866    @java.lang.SuppressWarnings("all")
867    public Integer getMin() {
868      return this.min;
869    }
870
871    /**
872     * The lower bounds of the range for this person's age.
873     * 
874     */
875    @java.lang.SuppressWarnings("all")
876    public void setMin(final Integer min) {
877      this.min = min;
878    }
879
880    /**
881     * The upper bounds of the range for this person's age.
882     * 
883     * @return The upper bounds of the range for this person's age.
884     */
885    @java.lang.SuppressWarnings("all")
886    public Integer getMax() {
887      return this.max;
888    }
889
890    /**
891     * The upper bounds of the range for this person's age.
892     * 
893     */
894    @java.lang.SuppressWarnings("all")
895    public void setMax(final Integer max) {
896      this.max = max;
897    }
898  }
899
900  /**
901   * The user's birthday, typed to {@code java.util.Date} if possible.
902   * 
903   * @return The user's birthday, or {@code null} if unavailable or only available in month/year format.
904   */
905  public Date getBirthdayAsDate() {
906    if (isBlank(getBirthday()) || getBirthday().split("/").length < 2) {
907      return null;
908    }
909    return toDateFromShortFormat(birthday);
910  }
911
912  @JsonMappingCompleted
913  protected void jsonMappingCompleted(JsonMapper jsonMapper) {
914    picture = convertPicture(jsonMapper, rawPicture);
915  }
916
917  /**
918   * The user's hometown name.
919   * 
920   * @return The user's hometown name.
921   */
922  public String getHometownName() {
923    if (getHometown() != null) return getHometown().getName();
924    return hometownAsString;
925  }
926
927  /**
928   * Businesses can claim ownership of multiple apps using Business Manager.
929   *
930   * This method returns the list of IDs that this user has in any of those other apps
931   * 
932   * @return list of ids a user has in other apps
933   */
934  public List<UserIDForApp> getIdsForApps() {
935    return unmodifiableList(idsForApps);
936  }
937
938  public boolean addIdsForApps(UserIDForApp userId) {
939    return idsForApps.add(userId);
940  }
941
942  public boolean removeIdsForApps(UserIDForApp userId) {
943    return idsForApps.remove(userId);
944  }
945
946  /**
947   * Businesses can claim ownership of multiple apps using Business Manager.
948   *
949   * This edge returns the list of IDs that this user has in any of those other apps
950   *
951   * @return list of ids a user has in other apps
952   */
953  public List<UserIDForApp> getIdsForBusiness() {
954    return unmodifiableList(idsForBusiness);
955  }
956
957  public boolean addIdsForBusiness(UserIDForApp userId) {
958    return idsForBusiness.add(userId);
959  }
960
961  public boolean removeIdsForBusiness(UserIDForApp userId) {
962    return idsForBusiness.remove(userId);
963  }
964
965  /**
966   * Businesses can claim ownership of apps and pages using Business Manager.
967   *
968   * This edge returns the list of IDs that this user has in any of the pages owned by this business.
969   *
970   * @return list of ids a user has in other pages
971   */
972  public List<UserIDForPage> getIdsForPages() {
973    return unmodifiableList(idsForPages);
974  }
975
976  public boolean addIdsForPages(UserIDForPage userId) {
977    return idsForPages.add(userId);
978  }
979
980  public boolean removeIdsForPages(UserIDForPage userId) {
981    return idsForPages.remove(userId);
982  }
983
984  /**
985   * The genders the user is interested in.
986   * 
987   * @return The genders the user is interested in.
988   * @deprecated since breaking change on 4 April, 2018
989   */
990  @Deprecated
991  public List<String> getInterestedIn() {
992    return unmodifiableList(interestedIn);
993  }
994
995  /**
996   * Add a gender the user is interested in.
997   *
998   * @param gender
999   *          the gender that should be added
1000   * @deprecated since breaking change on 4 April, 2018
1001   * @return {@code true} if the gender could be added
1002   */
1003  @Deprecated
1004  public boolean addInterestedIn(String gender) {
1005    return interestedIn.add(gender);
1006  }
1007
1008  /**
1009   * Remove a gender the user is interested in.
1010   *
1011   * @param gender
1012   *          the gender that should be removed
1013   * @deprecated since breaking change on 4 April, 2018
1014   * @return {@code true} if the gender could be removed
1015   */
1016  @Deprecated
1017  public boolean removeInterestedIn(String gender) {
1018    return interestedIn.remove(gender);
1019  }
1020
1021  /**
1022   * What genders the user is interested in meeting.
1023   * 
1024   * @return What genders the user is interested in meeting.
1025   */
1026  public List<String> getMeetingFor() {
1027    return unmodifiableList(meetingFor);
1028  }
1029
1030  public boolean addMeetingFor(String gender) {
1031    return meetingFor.add(gender);
1032  }
1033
1034  public boolean removeMeetingFor(String gender) {
1035    return meetingFor.remove(gender);
1036  }
1037
1038  /**
1039   * A list of the work history from the user's profile.
1040   * 
1041   * @return A list of the work history from the user's profile.
1042   * @deprecated since breaking change on 4 April, 2018
1043   */
1044  @Deprecated
1045  public List<WorkExperience> getWork() {
1046    return unmodifiableList(work);
1047  }
1048
1049  /**
1050   * Adds the {@link WorkExperience} from the work experience list
1051   *
1052   * @param workHistoryItem
1053   *          the WorkExperience that should be added
1054   * @deprecated since breaking change on 4 April, 2018
1055   * @return {@code true} if the {@link WorkExperience} could be added
1056   */
1057  @Deprecated
1058  public boolean addWork(WorkExperience workHistoryItem) {
1059    return work.add(workHistoryItem);
1060  }
1061
1062  /**
1063   * Removes the {@link WorkExperience} from the work experience list
1064   *
1065   * @param workHistoryItem
1066   *          the WorkExperience that should be removed
1067   * @deprecated since breaking change on 4 April, 2018
1068   * @return {@code true} if the {@link WorkExperience} could be removed
1069   */
1070  @Deprecated
1071  public boolean removeWork(WorkExperience workHistoryItem) {
1072    return work.remove(workHistoryItem);
1073  }
1074
1075  /**
1076   * The list of devices the person is using.
1077   * 
1078   * This will return only iOS and Android devices
1079   * 
1080   * @return The list of devices the person is using.
1081   */
1082  public List<UserDevice> getDevices() {
1083    return unmodifiableList(devices);
1084  }
1085
1086  public boolean addDevice(UserDevice device) {
1087    return devices.add(device);
1088  }
1089
1090  public boolean removeDevice(UserDevice device) {
1091    return devices.remove(device);
1092  }
1093
1094  /**
1095   * A list of the education history from the user's profile.
1096   * 
1097   * @return A list of the education history from the user's profile.
1098   * @deprecated since breaking change on 4 April, 2018
1099   */
1100  @Deprecated
1101  public List<Education> getEducation() {
1102    return unmodifiableList(education);
1103  }
1104
1105  /**
1106   * Adds the {@link Education} from the education list
1107   *
1108   * @param educationHistoryItem
1109   *          the Education that should be added
1110   * @deprecated since breaking change on 4 April, 2018
1111   * @return {@code true} if the {@link Education} could be added
1112   */
1113  @Deprecated
1114  public boolean addEducation(Education educationHistoryItem) {
1115    return education.add(educationHistoryItem);
1116  }
1117
1118  /**
1119   * Removes the {@link Education} from the education list
1120   *
1121   * @param educationHistoryItem
1122   *          the Education that should be removed
1123   * @deprecated since breaking change on 4 April, 2018
1124   * @return {@code true} if the {@link Education} could be removed
1125   */
1126  @Deprecated
1127  public boolean removeEducation(Education educationHistoryItem) {
1128    return education.remove(educationHistoryItem);
1129  }
1130
1131  /**
1132   * A list of the sports from the user's profile.
1133   * 
1134   * @return A list of the sports from this user's profile.
1135   */
1136  public List<Sport> getSports() {
1137    return unmodifiableList(sports);
1138  }
1139
1140  public boolean addSport(Sport sportItem) {
1141    return sports.add(sportItem);
1142  }
1143
1144  public boolean removeSport(Sport sportItem) {
1145    return sports.remove(sportItem);
1146  }
1147
1148  /**
1149   * A list of the favorite sports teams from the user's profile.
1150   * 
1151   * @return A list of the favorite sports teams from the user's profile.
1152   */
1153  public List<Experience> getFavoriteTeams() {
1154    return unmodifiableList(favoriteTeams);
1155  }
1156
1157  public boolean addFavoriteTeam(Experience team) {
1158    return favoriteTeams.add(team);
1159  }
1160
1161  public boolean removeFavoriteTeam(Experience team) {
1162    return favoriteTeams.remove(team);
1163  }
1164
1165  /**
1166   * A list of the favorite athletes from the user's profile.
1167   * 
1168   * @return A list of the favorite athletes from the user's profile.
1169   */
1170  public List<Experience> getFavoriteAthletes() {
1171    return unmodifiableList(favoriteAthletes);
1172  }
1173
1174  public boolean addFavoriteAthlete(Experience athlet) {
1175    return favoriteAthletes.add(athlet);
1176  }
1177
1178  public boolean removeFavoriteAthlete(Experience athlet) {
1179    return favoriteAthletes.remove(athlet);
1180  }
1181
1182  /**
1183   * The person's inspirational people.
1184   *
1185   * @return The person's inspirational people.
1186   */
1187  public List<Experience> getInspirationalPeople() {
1188    return unmodifiableList(inspirationalPeople);
1189  }
1190
1191  public boolean addInspirationalPeople(Experience person) {
1192    return inspirationalPeople.add(person);
1193  }
1194
1195  public boolean removeInspirationalPeople(Experience person) {
1196    return inspirationalPeople.remove(person);
1197  }
1198
1199  /**
1200   * A list of the languages from the user's profile.
1201   * 
1202   * @return A list of the languages from the user's profile.
1203   */
1204  public List<Experience> getLanguages() {
1205    return unmodifiableList(languages);
1206  }
1207
1208  public boolean addLanguage(Experience language) {
1209    return languages.add(language);
1210  }
1211
1212  public boolean removeLanguage(Experience language) {
1213    return languages.remove(language);
1214  }
1215
1216  /**
1217   * Page labels of this user
1218   *
1219   * @return labels of this user
1220   */
1221  @GraphAPI(since = "2.6")
1222  public List<PageLabel> getLabels() {
1223    return unmodifiableList(labels);
1224  }
1225
1226  public boolean addLabel(PageLabel label) {
1227    return labels.add(label);
1228  }
1229
1230  public boolean removeLabels(PageLabel label) {
1231    return labels.remove(label);
1232  }
1233
1234  /**
1235   * A list of friends that can be invited to install a Facebook Canvas app
1236   * 
1237   * @return A list of friends that can be invited to install a Facebook Canvas app
1238   */
1239  public List<UserInvitableFriend> getInvitableFriends() {
1240    return unmodifiableList(invitableFriends);
1241  }
1242
1243  public boolean addInvitableFriend(UserInvitableFriend friend) {
1244    return invitableFriends.add(friend);
1245  }
1246
1247  public boolean removeInvitableFriend(UserInvitableFriend friend) {
1248    return invitableFriends.remove(friend);
1249  }
1250
1251
1252  /**
1253   * Represents the <a href="https://developers.facebook.com/docs/graph-api/reference/security-settings/">Security
1254   * Settings Graph API type</a>
1255   */
1256  public static class SecuritySettings extends AbstractFacebookType {
1257    /**
1258     * Secure browsing settings
1259     */
1260    @Facebook("secure_browsing")
1261    private SecureBrowsing secureBrowsing;
1262
1263    /**
1264     * Secure browsing settings
1265     *
1266     * @return Secure browsing settings
1267     */
1268    @java.lang.SuppressWarnings("all")
1269    public SecureBrowsing getSecureBrowsing() {
1270      return this.secureBrowsing;
1271    }
1272
1273    /**
1274     * Secure browsing settings
1275     */
1276    @java.lang.SuppressWarnings("all")
1277    public void setSecureBrowsing(final SecureBrowsing secureBrowsing) {
1278      this.secureBrowsing = secureBrowsing;
1279    }
1280  }
1281
1282
1283  /**
1284   * Represents the <a href="https://developers.facebook.com/docs/graph-api/reference/secure-browsing/">Secure Browsing
1285   * Graph API type</a>.
1286   */
1287  public static class SecureBrowsing extends AbstractFacebookType {
1288    /**
1289     * Enabled
1290     */
1291    @Facebook
1292    private Boolean enabled;
1293
1294    /**
1295     * Enabled
1296     *
1297     * @return Enabled
1298     */
1299    @java.lang.SuppressWarnings("all")
1300    public Boolean getEnabled() {
1301      return this.enabled;
1302    }
1303
1304    /**
1305     * Enabled
1306     */
1307    @java.lang.SuppressWarnings("all")
1308    public void setEnabled(final Boolean enabled) {
1309      this.enabled = enabled;
1310    }
1311  }
1312
1313
1314  /**
1315   * Represents the <a href="https://developers.facebook.com/docs/graph-api/reference/payment-pricepoints/">Payment
1316   * Pricepoints Graph API type</a>.
1317   */
1318  public static class PaymentPricepoints extends AbstractFacebookType {
1319    @Facebook
1320    private List<PaymentPricepoint> mobile = new ArrayList<>();
1321
1322    /**
1323     * Mobile payment pricepoints
1324     * 
1325     * @return Mobile payment pricepoints
1326     */
1327    public List<PaymentPricepoint> getMobile() {
1328      return unmodifiableList(mobile);
1329    }
1330
1331    public boolean addMobile(PaymentPricepoint language) {
1332      return mobile.add(language);
1333    }
1334
1335    public boolean removeMobile(PaymentPricepoint language) {
1336      return mobile.remove(language);
1337    }
1338  }
1339
1340
1341  /**
1342   * Represents the <a href="https://developers.facebook.com/docs/graph-api/reference/payment-pricepoint/">Payment
1343   * Pricepoint Graph API type</a>.
1344   */
1345  public static class PaymentPricepoint extends AbstractFacebookType {
1346    @Facebook
1347    private Double credits;
1348    @Facebook("local_currency")
1349    private String localCurrency;
1350    @Facebook("user_price")
1351    private String userPrice;
1352
1353    @java.lang.SuppressWarnings("all")
1354    public Double getCredits() {
1355      return this.credits;
1356    }
1357
1358    @java.lang.SuppressWarnings("all")
1359    public void setCredits(final Double credits) {
1360      this.credits = credits;
1361    }
1362
1363    @java.lang.SuppressWarnings("all")
1364    public String getLocalCurrency() {
1365      return this.localCurrency;
1366    }
1367
1368    @java.lang.SuppressWarnings("all")
1369    public void setLocalCurrency(final String localCurrency) {
1370      this.localCurrency = localCurrency;
1371    }
1372
1373    @java.lang.SuppressWarnings("all")
1374    public String getUserPrice() {
1375      return this.userPrice;
1376    }
1377
1378    @java.lang.SuppressWarnings("all")
1379    public void setUserPrice(final String userPrice) {
1380      this.userPrice = userPrice;
1381    }
1382  }
1383
1384
1385  /**
1386   * Represents the <a href="https://developers.facebook.com/docs/graph-api/reference/video-upload-limits/">Video Upload
1387   * Limits Graph API type</a>.
1388   */
1389  public static class VideoUploadLimits extends AbstractFacebookType {
1390    @Facebook
1391    private Long length;
1392    @Facebook
1393    private Long size;
1394
1395    @java.lang.SuppressWarnings("all")
1396    public Long getLength() {
1397      return this.length;
1398    }
1399
1400    @java.lang.SuppressWarnings("all")
1401    public void setLength(final Long length) {
1402      this.length = length;
1403    }
1404
1405    @java.lang.SuppressWarnings("all")
1406    public Long getSize() {
1407      return this.size;
1408    }
1409
1410    @java.lang.SuppressWarnings("all")
1411    public void setSize(final Long size) {
1412      this.size = size;
1413    }
1414  }
1415
1416
1417  public static class Experience extends NamedFacebookType {
1418    @Facebook
1419    private String description;
1420    @Facebook
1421    private User from;
1422    @Facebook
1423    private List<User> with = new ArrayList<>();
1424
1425    /**
1426     * Tagged users
1427     * 
1428     * @return Tagged users
1429     */
1430    public List<User> getWith() {
1431      return unmodifiableList(with);
1432    }
1433
1434    public boolean addWith(User with) {
1435      return this.with.add(with);
1436    }
1437
1438    public boolean removeWith(User with) {
1439      return this.with.remove(with);
1440    }
1441
1442    @java.lang.SuppressWarnings("all")
1443    public String getDescription() {
1444      return this.description;
1445    }
1446
1447    @java.lang.SuppressWarnings("all")
1448    public void setDescription(final String description) {
1449      this.description = description;
1450    }
1451
1452    @java.lang.SuppressWarnings("all")
1453    public User getFrom() {
1454      return this.from;
1455    }
1456
1457    @java.lang.SuppressWarnings("all")
1458    public void setFrom(final User from) {
1459      this.from = from;
1460    }
1461  }
1462
1463  /**
1464   * Social context for this person
1465   *
1466   * @return Social context for this person
1467   */
1468  @java.lang.SuppressWarnings("all")
1469  public FacebookType getContext() {
1470    return this.context;
1471  }
1472
1473  /**
1474   * Social context for this person
1475   */
1476  @java.lang.SuppressWarnings("all")
1477  public void setContext(final FacebookType context) {
1478    this.context = context;
1479  }
1480
1481  /**
1482   * The user's first name.
1483   * 
1484   * @return The user's first name.
1485   */
1486  @java.lang.SuppressWarnings("all")
1487  public String getFirstName() {
1488    return this.firstName;
1489  }
1490
1491  /**
1492   * The user's first name.
1493   * 
1494   */
1495  @java.lang.SuppressWarnings("all")
1496  public void setFirstName(final String firstName) {
1497    this.firstName = firstName;
1498  }
1499
1500  /**
1501   * The user's middle name.
1502   * 
1503   * @return The user's middle name.
1504   */
1505  @java.lang.SuppressWarnings("all")
1506  public String getMiddleName() {
1507    return this.middleName;
1508  }
1509
1510  /**
1511   * The user's middle name.
1512   * 
1513   */
1514  @java.lang.SuppressWarnings("all")
1515  public void setMiddleName(final String middleName) {
1516    this.middleName = middleName;
1517  }
1518
1519  /**
1520   * The person's name formatted to correctly handle Chinese, Japanese, or Korean ordering.
1521   *
1522   * @return The person's name formatted to correctly handle Chinese, Japanese, or Korean ordering
1523   */
1524  @java.lang.SuppressWarnings("all")
1525  public String getNameFormat() {
1526    return this.nameFormat;
1527  }
1528
1529  /**
1530   * The person's name formatted to correctly handle Chinese, Japanese, or Korean ordering.
1531   */
1532  @java.lang.SuppressWarnings("all")
1533  public void setNameFormat(final String nameFormat) {
1534    this.nameFormat = nameFormat;
1535  }
1536
1537  /**
1538   * The person's payment pricepoints
1539   *
1540   * @return The person's payment pricepoints
1541   */
1542  @java.lang.SuppressWarnings("all")
1543  public PaymentPricepoints getPaymentPricepoints() {
1544    return this.paymentPricepoints;
1545  }
1546
1547  /**
1548   * The person's payment pricepoints
1549   */
1550  @java.lang.SuppressWarnings("all")
1551  public void setPaymentPricepoints(final PaymentPricepoints paymentPricepoints) {
1552    this.paymentPricepoints = paymentPricepoints;
1553  }
1554
1555  /**
1556   * The user's last name.
1557   * 
1558   * @return The user's last name.
1559   */
1560  @java.lang.SuppressWarnings("all")
1561  public String getLastName() {
1562    return this.lastName;
1563  }
1564
1565  /**
1566   * The user's last name.
1567   * 
1568   */
1569  @java.lang.SuppressWarnings("all")
1570  public void setLastName(final String lastName) {
1571    this.lastName = lastName;
1572  }
1573
1574  /**
1575   * Shortened, locale-aware name for the person.
1576   *
1577   * @return Shortened, locale-aware name for the person
1578   */
1579  @GraphAPI(since = "2.9")
1580  @java.lang.SuppressWarnings("all")
1581  public String getShortName() {
1582    return this.shortName;
1583  }
1584
1585  /**
1586   * Shortened, locale-aware name for the person.
1587   */
1588  @java.lang.SuppressWarnings("all")
1589  public void setShortName(final String shortName) {
1590    this.shortName = shortName;
1591  }
1592
1593  /**
1594   * The person's cover photo
1595   *
1596   * @return The person's cover photo
1597   */
1598  @Override
1599  @java.lang.SuppressWarnings("all")
1600  public CoverPhoto getCover() {
1601    return this.cover;
1602  }
1603
1604  /**
1605   * The person's cover photo
1606   */
1607  @java.lang.SuppressWarnings("all")
1608  public void setCover(final CoverPhoto cover) {
1609    this.cover = cover;
1610  }
1611
1612  /**
1613   * A link to the user's profile.
1614   * 
1615   * @return A link to the user's profile.
1616   */
1617  @java.lang.SuppressWarnings("all")
1618  public String getLink() {
1619    return this.link;
1620  }
1621
1622  /**
1623   * A link to the user's profile.
1624   * 
1625   */
1626  @java.lang.SuppressWarnings("all")
1627  public void setLink(final String link) {
1628    this.link = link;
1629  }
1630
1631  /**
1632   * The user's biographical snippet.
1633   *
1634   * @return The user's biographical snippet.
1635   */
1636  @GraphAPI(until = "2.7")
1637  @java.lang.SuppressWarnings("all")
1638  public String getBio() {
1639    return this.bio;
1640  }
1641
1642  /**
1643   * The user's biographical snippet.
1644   */
1645  @java.lang.SuppressWarnings("all")
1646  public void setBio(final String bio) {
1647    this.bio = bio;
1648  }
1649
1650  /**
1651   * The user's favorite quotes.
1652   * 
1653   * @return The user's favorite quotes.
1654   */
1655  @java.lang.SuppressWarnings("all")
1656  public String getQuotes() {
1657    return this.quotes;
1658  }
1659
1660  /**
1661   * The user's favorite quotes.
1662   * 
1663   */
1664  @java.lang.SuppressWarnings("all")
1665  public void setQuotes(final String quotes) {
1666    this.quotes = quotes;
1667  }
1668
1669  /**
1670   * The user's blurb that appears under their profile picture.
1671   *
1672   * @deprecated since breaking change on 4 April, 2018
1673   *
1674   * @return The user's blurb that appears under their profile picture.
1675   */
1676  @java.lang.Deprecated
1677  @java.lang.SuppressWarnings("all")
1678  public String getAbout() {
1679    return this.about;
1680  }
1681
1682  /**
1683   * The user's blurb that appears under their profile picture.
1684   *
1685   * @deprecated since breaking change on 4 April, 2018
1686   */
1687  @java.lang.Deprecated
1688  @java.lang.SuppressWarnings("all")
1689  public void setAbout(final String about) {
1690    this.about = about;
1691  }
1692
1693  /**
1694   * The user's relationship status.
1695   * 
1696   * @return The user's relationship status.
1697   * @deprecated since breaking change on 4 April, 2018
1698   */
1699  @java.lang.Deprecated
1700  @java.lang.SuppressWarnings("all")
1701  public String getRelationshipStatus() {
1702    return this.relationshipStatus;
1703  }
1704
1705  /**
1706   * The user's relationship status.
1707   * 
1708   * @deprecated since breaking change on 4 April, 2018
1709   */
1710  @java.lang.Deprecated
1711  @java.lang.SuppressWarnings("all")
1712  public void setRelationshipStatus(final String relationshipStatus) {
1713    this.relationshipStatus = relationshipStatus;
1714  }
1715
1716  /**
1717   * The user's religion.
1718   * 
1719   * @return The user's religion.
1720   * @deprecated since breaking change on 4 April, 2018
1721   */
1722  @java.lang.Deprecated
1723  @java.lang.SuppressWarnings("all")
1724  public String getReligion() {
1725    return this.religion;
1726  }
1727
1728  /**
1729   * The user's religion.
1730   * 
1731   * @deprecated since breaking change on 4 April, 2018
1732   */
1733  @java.lang.Deprecated
1734  @java.lang.SuppressWarnings("all")
1735  public void setReligion(final String religion) {
1736    this.religion = religion;
1737  }
1738
1739  /**
1740   * Unspecific age range that this person's age fits into.
1741   * 
1742   * @return The user's age range
1743   */
1744  @java.lang.SuppressWarnings("all")
1745  public AgeRange getAgeRange() {
1746    return this.ageRange;
1747  }
1748
1749  /**
1750   * Unspecific age range that this person's age fits into.
1751   * 
1752   */
1753  @java.lang.SuppressWarnings("all")
1754  public void setAgeRange(final AgeRange ageRange) {
1755    this.ageRange = ageRange;
1756  }
1757
1758  /**
1759   * A link to the user's personal website.
1760   * 
1761   * @return A link to the user's personal website.
1762   * @deprecated since breaking change on 4 April, 2018
1763   */
1764  @java.lang.Deprecated
1765  @java.lang.SuppressWarnings("all")
1766  public String getWebsite() {
1767    return this.website;
1768  }
1769
1770  /**
1771   * A link to the user's personal website.
1772   * 
1773   * @deprecated since breaking change on 4 April, 2018
1774   */
1775  @java.lang.Deprecated
1776  @java.lang.SuppressWarnings("all")
1777  public void setWebsite(final String website) {
1778    this.website = website;
1779  }
1780
1781  /**
1782   * The user's birthday as a {@code String}.
1783   * <p>
1784   * Will always succeed, even if the user has specified month/year format only. If you'd like to use a typed version of
1785   * this accessor, call {@link #getBirthdayAsDate()} instead.
1786   * 
1787   * @return The user's birthday as a {@code String}.
1788   */
1789  @java.lang.SuppressWarnings("all")
1790  public String getBirthday() {
1791    return this.birthday;
1792  }
1793
1794  /**
1795   * The user's birthday as a {@code String}.
1796   * <p>
1797   * Will always succeed, even if the user has specified month/year format only. If you'd like to use a typed version of
1798   * this accessor, call {@link #getBirthdayAsDate()} instead.
1799   * 
1800   */
1801  @java.lang.SuppressWarnings("all")
1802  public void setBirthday(final String birthday) {
1803    this.birthday = birthday;
1804  }
1805
1806  /**
1807   * The proxied or contact email address granted by the user.
1808   * 
1809   * @return The proxied or contact email address granted by the user.
1810   */
1811  @java.lang.SuppressWarnings("all")
1812  public String getEmail() {
1813    return this.email;
1814  }
1815
1816  /**
1817   * The proxied or contact email address granted by the user.
1818   * 
1819   */
1820  @java.lang.SuppressWarnings("all")
1821  public void setEmail(final String email) {
1822    this.email = email;
1823  }
1824
1825  /**
1826   * The user's timezone offset.
1827   * 
1828   * @return The user's timezone offset.
1829   */
1830  @java.lang.SuppressWarnings("all")
1831  public Double getTimezone() {
1832    return this.timezone;
1833  }
1834
1835  /**
1836   * The user's timezone offset.
1837   * 
1838   */
1839  @java.lang.SuppressWarnings("all")
1840  public void setTimezone(final Double timezone) {
1841    this.timezone = timezone;
1842  }
1843
1844  /**
1845   * Indicates whether the account has been verified. This is distinct from the <code>is_verified</code> field. Someone
1846   * is considered verified if they take any of the following actions:
1847   * <ul>
1848   * <li>Register for mobile</li>
1849   * <li>Confirm their account via SMS</li>
1850   * <li>Enter a valid credit card</li>
1851   * </ul>
1852   * 
1853   * @return User verification status.
1854   */
1855  @java.lang.SuppressWarnings("all")
1856  public Boolean getVerified() {
1857    return this.verified;
1858  }
1859
1860  /**
1861   * Indicates whether the account has been verified. This is distinct from the <code>is_verified</code> field. Someone
1862   * is considered verified if they take any of the following actions:
1863   * <ul>
1864   * <li>Register for mobile</li>
1865   * <li>Confirm their account via SMS</li>
1866   * <li>Enter a valid credit card</li>
1867   * </ul>
1868   * 
1869   */
1870  @java.lang.SuppressWarnings("all")
1871  public void setVerified(final Boolean verified) {
1872    this.verified = verified;
1873  }
1874
1875  /**
1876   * Video upload limits
1877   *
1878   * @return Video upload limits
1879   */
1880  @java.lang.SuppressWarnings("all")
1881  public VideoUploadLimits getVideoUploadLimits() {
1882    return this.videoUploadLimits;
1883  }
1884
1885  /**
1886   * Video upload limits
1887   */
1888  @java.lang.SuppressWarnings("all")
1889  public void setVideoUploadLimits(final VideoUploadLimits videoUploadLimits) {
1890    this.videoUploadLimits = videoUploadLimits;
1891  }
1892
1893  /**
1894   * Can the viewer send a gift to this person?
1895   *
1896   * @deprecated Will be deprecated in all versions on Nov, 2020.
1897   * @return Can the viewer send a gift to this person?
1898   */
1899  @java.lang.Deprecated
1900  @java.lang.SuppressWarnings("all")
1901  public Boolean getViewerCanSendGift() {
1902    return this.viewerCanSendGift;
1903  }
1904
1905  /**
1906   * Can the viewer send a gift to this person?
1907   *
1908   * @deprecated Will be deprecated in all versions on Nov, 2020.
1909   */
1910  @java.lang.Deprecated
1911  @java.lang.SuppressWarnings("all")
1912  public void setViewerCanSendGift(final Boolean viewerCanSendGift) {
1913    this.viewerCanSendGift = viewerCanSendGift;
1914  }
1915
1916  /**
1917   * The user's gender.
1918   * 
1919   * @return The user's gender.
1920   */
1921  @java.lang.SuppressWarnings("all")
1922  public String getGender() {
1923    return this.gender;
1924  }
1925
1926  /**
1927   * The user's gender.
1928   * 
1929   */
1930  @java.lang.SuppressWarnings("all")
1931  public void setGender(final String gender) {
1932    this.gender = gender;
1933  }
1934
1935  /**
1936   * The user's political affiliation.
1937   * 
1938   * @return The user's political affiliation.
1939   * @deprecated since breaking change on 4 April, 2018
1940   */
1941  @java.lang.Deprecated
1942  @java.lang.SuppressWarnings("all")
1943  public String getPolitical() {
1944    return this.political;
1945  }
1946
1947  /**
1948   * The user's political affiliation.
1949   * 
1950   * @deprecated since breaking change on 4 April, 2018
1951   */
1952  @java.lang.Deprecated
1953  @java.lang.SuppressWarnings("all")
1954  public void setPolitical(final String political) {
1955    this.political = political;
1956  }
1957
1958  /**
1959   * The user's locale.
1960   * 
1961   * @return The user's locale.
1962   */
1963  @java.lang.SuppressWarnings("all")
1964  public String getLocale() {
1965    return this.locale;
1966  }
1967
1968  /**
1969   * The user's locale.
1970   * 
1971   */
1972  @java.lang.SuppressWarnings("all")
1973  public void setLocale(final String locale) {
1974    this.locale = locale;
1975  }
1976
1977  /**
1978   * The user's Facebook username.
1979   *
1980   * @return The user's Facebook username.
1981   * @since 1.6.5
1982   * @deprecated since graph api 2.0
1983   */
1984  @java.lang.Deprecated
1985  @java.lang.SuppressWarnings("all")
1986  public String getUsername() {
1987    return this.username;
1988  }
1989
1990  /**
1991   * The user's Facebook username.
1992   *
1993   * @since 1.6.5
1994   * @deprecated since graph api 2.0
1995   */
1996  @java.lang.Deprecated
1997  @java.lang.SuppressWarnings("all")
1998  public void setUsername(final String username) {
1999    this.username = username;
2000  }
2001
2002  /**
2003   * The person's PGP public key
2004   *
2005   * @return The person's PGP public key
2006   */
2007  @java.lang.SuppressWarnings("all")
2008  public String getPublicKey() {
2009    return this.publicKey;
2010  }
2011
2012  /**
2013   * The person's PGP public key
2014   */
2015  @java.lang.SuppressWarnings("all")
2016  public void setPublicKey(final String publicKey) {
2017    this.publicKey = publicKey;
2018  }
2019
2020  /**
2021   * The user's Likes
2022   *
2023   * @return the user's Likes
2024   */
2025  @java.lang.SuppressWarnings("all")
2026  public Likes getLikes() {
2027    return this.likes;
2028  }
2029
2030  /**
2031   * The user's Likes
2032   */
2033  @java.lang.SuppressWarnings("all")
2034  public void setLikes(final Likes likes) {
2035    this.likes = likes;
2036  }
2037
2038  /**
2039   * The user's picture, if provided.
2040   * 
2041   * To force Facebook to fill the <code>picture</code> field you have to fetch the user with the
2042   * <code>fields=picture</code> parameter, otherwise the picture is <code>null</code>.
2043   * 
2044   * @return the user's picture as ProfilePictureSource object
2045   * @since 1.6.16
2046   */
2047  @Override
2048  @java.lang.SuppressWarnings("all")
2049  public ProfilePictureSource getPicture() {
2050    return this.picture;
2051  }
2052
2053  /**
2054   * The user's picture, if provided.
2055   * 
2056   * To force Facebook to fill the <code>picture</code> field you have to fetch the user with the
2057   * <code>fields=picture</code> parameter, otherwise the picture is <code>null</code>.
2058   * 
2059   * @since 1.6.16
2060   */
2061  @java.lang.SuppressWarnings("all")
2062  public void setPicture(final ProfilePictureSource picture) {
2063    this.picture = picture;
2064  }
2065
2066  /**
2067   * Duplicate mapping for "hometown" since FB can return it differently in different situations.
2068   * 
2069   * -- GETTER -- The user's hometown.
2070   * <p>
2071   * Sometimes this can be {@code null} - check {@link #getHometownName()} instead in that case.
2072   * 
2073   * @return The user's hometown.
2074   */
2075  @java.lang.SuppressWarnings("all")
2076  public NamedFacebookType getHometown() {
2077    return this.hometown;
2078  }
2079
2080  /**
2081   * Duplicate mapping for "hometown" since FB can return it differently in different situations.
2082   * 
2083   * -- GETTER -- The user's hometown.
2084   * <p>
2085   * Sometimes this can be {@code null} - check {@link #getHometownName()} instead in that case.
2086   * 
2087   */
2088  @java.lang.SuppressWarnings("all")
2089  public void setHometown(final NamedFacebookType hometown) {
2090    this.hometown = hometown;
2091  }
2092
2093  /**
2094   * The user's current location.
2095   * 
2096   * @return The user's current location.
2097   */
2098  @java.lang.SuppressWarnings("all")
2099  public NamedFacebookType getLocation() {
2100    return this.location;
2101  }
2102
2103  /**
2104   * The user's current location.
2105   * 
2106   */
2107  @java.lang.SuppressWarnings("all")
2108  public void setLocation(final NamedFacebookType location) {
2109    this.location = location;
2110  }
2111
2112  /**
2113   * Security settings
2114   *
2115   * @deprecated Will be deprecated in all versions on Nov, 2020.
2116   * @return Security settings
2117   */
2118  @java.lang.Deprecated
2119  @java.lang.SuppressWarnings("all")
2120  public SecuritySettings getSecuritySettings() {
2121    return this.securitySettings;
2122  }
2123
2124  /**
2125   * Security settings
2126   *
2127   * @deprecated Will be deprecated in all versions on Nov, 2020.
2128   */
2129  @java.lang.Deprecated
2130  @java.lang.SuppressWarnings("all")
2131  public void setSecuritySettings(final SecuritySettings securitySettings) {
2132    this.securitySettings = securitySettings;
2133  }
2134
2135  /**
2136   * The time that the shared loginneeds to be upgraded to Business Manager by
2137   *
2138   * @return The time that the shared loginneeds to be upgraded to Business Manager by
2139   */
2140  @java.lang.SuppressWarnings("all")
2141  public Date getSharedLoginUpgradeRequiredBy() {
2142    return this.sharedLoginUpgradeRequiredBy;
2143  }
2144
2145  /**
2146   * The time that the shared loginneeds to be upgraded to Business Manager by
2147   */
2148  @java.lang.SuppressWarnings("all")
2149  public void setSharedLoginUpgradeRequiredBy(final Date sharedLoginUpgradeRequiredBy) {
2150    this.sharedLoginUpgradeRequiredBy = sharedLoginUpgradeRequiredBy;
2151  }
2152
2153  /**
2154   * The user's significant other.
2155   * 
2156   * @return The user's significant other.
2157   */
2158  @java.lang.SuppressWarnings("all")
2159  public NamedFacebookType getSignificantOther() {
2160    return this.significantOther;
2161  }
2162
2163  /**
2164   * The user's significant other.
2165   * 
2166   */
2167  @java.lang.SuppressWarnings("all")
2168  public void setSignificantOther(final NamedFacebookType significantOther) {
2169    this.significantOther = significantOther;
2170  }
2171
2172  /**
2173   * Platform test group
2174   *
2175   * @return Platform test group
2176   * @deprecated Will be deprecated in all versions on Nov, 2020.
2177   */
2178  @java.lang.Deprecated
2179  @java.lang.SuppressWarnings("all")
2180  public Long getTestGroup() {
2181    return this.testGroup;
2182  }
2183
2184  /**
2185   * Platform test group
2186   *
2187   * @deprecated Will be deprecated in all versions on Nov, 2020.
2188   */
2189  @java.lang.Deprecated
2190  @java.lang.SuppressWarnings("all")
2191  public void setTestGroup(final Long testGroup) {
2192    this.testGroup = testGroup;
2193  }
2194
2195  /**
2196   * Date the user's profile was updated.
2197   * 
2198   * @return Date the user's profile was updated.
2199   */
2200  @java.lang.SuppressWarnings("all")
2201  public Date getUpdatedTime() {
2202    return this.updatedTime;
2203  }
2204
2205  /**
2206   * Date the user's profile was updated.
2207   * 
2208   */
2209  @java.lang.SuppressWarnings("all")
2210  public void setUpdatedTime(final Date updatedTime) {
2211    this.updatedTime = updatedTime;
2212  }
2213
2214  /**
2215   * An anonymous, but unique identifier for the user.
2216   * 
2217   * @return An anonymous, but unique identifier for the user.
2218   */
2219  @java.lang.SuppressWarnings("all")
2220  public String getThirdPartyId() {
2221    return this.thirdPartyId;
2222  }
2223
2224  /**
2225   * An anonymous, but unique identifier for the user.
2226   * 
2227   */
2228  @java.lang.SuppressWarnings("all")
2229  public void setThirdPartyId(final String thirdPartyId) {
2230    this.thirdPartyId = thirdPartyId;
2231  }
2232
2233  /**
2234   * The user's currency preferences.
2235   * <p>
2236   * Further documentation available on Facebook's
2237   * <a href="https://developers.facebook.com/docs/payments/user_currency">Displaying prices in user's currency</a>
2238   * page.
2239   * 
2240   * @return The user's currency preferences.
2241   * @since 1.6.12
2242   */
2243  @java.lang.SuppressWarnings("all")
2244  public Currency getCurrency() {
2245    return this.currency;
2246  }
2247
2248  /**
2249   * The user's currency preferences.
2250   * <p>
2251   * Further documentation available on Facebook's
2252   * <a href="https://developers.facebook.com/docs/payments/user_currency">Displaying prices in user's currency</a>
2253   * page.
2254   * 
2255   * @since 1.6.12
2256   */
2257  @java.lang.SuppressWarnings("all")
2258  public void setCurrency(final Currency currency) {
2259    this.currency = currency;
2260  }
2261
2262  /**
2263   * This returns a string which is the same for this person across all the apps managed by the same Business Manager.
2264   * 
2265   * @return string which is the same for a person across all apps managed by one company
2266   * @since 1.7.0
2267   */
2268  @java.lang.SuppressWarnings("all")
2269  public String getTokenForBusiness() {
2270    return this.tokenForBusiness;
2271  }
2272
2273  /**
2274   * This returns a string which is the same for this person across all the apps managed by the same Business Manager.
2275   * 
2276   * @since 1.7.0
2277   */
2278  @java.lang.SuppressWarnings("all")
2279  public void setTokenForBusiness(final String tokenForBusiness) {
2280    this.tokenForBusiness = tokenForBusiness;
2281  }
2282
2283  /**
2284   * Install type.
2285   *
2286   * @return Install type.
2287   */
2288  @java.lang.SuppressWarnings("all")
2289  public String getInstallType() {
2290    return this.installType;
2291  }
2292
2293  /**
2294   * Install type.
2295   */
2296  @java.lang.SuppressWarnings("all")
2297  public void setInstallType(final String installType) {
2298    this.installType = installType;
2299  }
2300
2301  /**
2302   * Is the app making the request installed?
2303   *
2304   * @return Is the app making the request installed?
2305   */
2306  @java.lang.SuppressWarnings("all")
2307  public Boolean getInstalled() {
2308    return this.installed;
2309  }
2310
2311  /**
2312   * Is the app making the request installed?
2313   */
2314  @java.lang.SuppressWarnings("all")
2315  public void setInstalled(final Boolean installed) {
2316    this.installed = installed;
2317  }
2318
2319  /**
2320   * Is this a shared login (e.g. a gray user)
2321   *
2322   * @deprecated Will be deprecated in all versions on Nov, 2020.
2323   * @return Is this a shared login (e.g. a gray user)
2324   */
2325  @java.lang.Deprecated
2326  @java.lang.SuppressWarnings("all")
2327  public Boolean getIsSharedLogin() {
2328    return this.isSharedLogin;
2329  }
2330
2331  /**
2332   * Is this a shared login (e.g. a gray user)
2333   *
2334   * @deprecated Will be deprecated in all versions on Nov, 2020.
2335   */
2336  @java.lang.Deprecated
2337  @java.lang.SuppressWarnings("all")
2338  public void setIsSharedLogin(final Boolean isSharedLogin) {
2339    this.isSharedLogin = isSharedLogin;
2340  }
2341
2342  /**
2343   * People with large numbers of followers can have the authenticity of their identity manually verified by Facebook.
2344   * This field indicates whether the person's profile is verified in this way.
2345   *
2346   * This is distinct from the <code>verified</code> field
2347   *
2348   * @return Is the user verified
2349   */
2350  @java.lang.SuppressWarnings("all")
2351  public Boolean getIsVerified() {
2352    return this.isVerified;
2353  }
2354
2355  /**
2356   * People with large numbers of followers can have the authenticity of their identity manually verified by Facebook.
2357   * This field indicates whether the person's profile is verified in this way.
2358   *
2359   * This is distinct from the <code>verified</code> field
2360   */
2361  @java.lang.SuppressWarnings("all")
2362  public void setIsVerified(final Boolean isVerified) {
2363    this.isVerified = isVerified;
2364  }
2365
2366  /**
2367   * if the current user is a guest user. should always return false.
2368   */
2369  @java.lang.SuppressWarnings("all")
2370  public Boolean getIsGuestUser() {
2371    return this.isGuestUser;
2372  }
2373
2374  /**
2375   * if the current user is a guest user. should always return false.
2376   */
2377  @java.lang.SuppressWarnings("all")
2378  public void setIsGuestUser(final Boolean isGuestUser) {
2379    this.isGuestUser = isGuestUser;
2380  }
2381}