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