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