001// Generated by delombok at Wed May 21 13:11:24 UTC 2025
002/*
003 * Copyright (c) 2010-2025 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 java.util.Collections.unmodifiableList;
026import java.util.ArrayList;
027import java.util.Date;
028import java.util.List;
029import com.restfb.Connection;
030import com.restfb.Facebook;
031import com.restfb.annotation.GraphAPI;
032import com.restfb.types.features.HasComments;
033import com.restfb.types.features.HasCreatedTime;
034import com.restfb.types.features.HasMessage;
035
036/**
037 * Represents the <a href="https://developers.facebook.com/docs/reference/api/video">Video Graph API type</a>.
038 * 
039 * @author <a href="http://restfb.com">Mark Allen</a>
040 * @since 1.5
041 */
042public class Video extends NamedFacebookType implements HasComments, HasCreatedTime, HasMessage {
043  /**
044   * An object containing the name and ID of the user who posted the video.
045   * 
046   */
047  @Facebook
048  private From from;
049  /**
050   * The video title / caption.
051   * 
052   * @deprecated FB seems to have removed this field.
053   */
054  @Facebook
055  @Deprecated
056  private String message;
057  /**
058   * The comments for this video.
059   */
060  @Facebook
061  private Comments comments;
062  /**
063   * The long-form HTML description of the video.
064   * 
065   */
066  @Facebook
067  private String description;
068  /**
069   * URL to the permalink page of the video
070   */
071  @Facebook("permalink_url")
072  private String permalinkUrl;
073  /**
074   * The video title or caption
075   */
076  @Facebook("title")
077  @GraphAPI(since = "2.5")
078  private String title;
079  @Facebook("is_crosspost_video")
080  private Boolean isCrosspostVideo;
081  /**
082   * Specifies if the video is eligible for crossposting.
083   */
084  @Facebook("is_crossposting_eligible")
085  @GraphAPI(since = "2.6")
086  private Boolean isCrosspostingEligible;
087  /**
088   * Whether this video is episode or not.
089   */
090  @Facebook("is_episode")
091  private Boolean isEpisode;
092  /**
093   * Whether the video is eligible to be promoted on Instagram
094   */
095  @Facebook("is_instagram_eligible")
096  private Boolean isInstagramEligible;
097  /**
098   * Whether the video is exclusively used for copyright monitoring.
099   */
100  @Facebook("is_reference_only")
101  private Boolean isReferenceOnly;
102  /**
103   * The music video copyright of this video
104   *
105   * because of a missing object description in the graph reference, we use a Map here
106   */
107  @Facebook("music_video_copyright")
108  private MusicVideoCopyright musicVideoCopyright;
109  /**
110   * The public view count of the video post, not aggregated with any other crossposts of the video.
111   */
112  @Facebook("post_views")
113  private Integer postViews;
114  /**
115   * The reactions for this video.
116   */
117  @Facebook
118  private Reactions reactions;
119  /**
120   * Whether the video is embeddable.
121   */
122  @Facebook
123  @GraphAPI(since = "2.4")
124  private Boolean embeddable;
125  @Facebook("content_tags")
126  private List<String> contentTags = new ArrayList<>();
127  /**
128   * If this object has a place, the event associated with the place.
129   * 
130   */
131  @Facebook
132  @GraphAPI(since = "2.3")
133  private Event event;
134  /**
135   * Whether or not the video is highlighted in Video Channel.
136   */
137  @Facebook("feed_type")
138  @GraphAPI(since = "2.7")
139  private String feedType;
140  /**
141   * The publishers asset management code for this video.
142   */
143  @Facebook("universal_video_id")
144  private String universalVideoId;
145  /**
146   * The public view count of the video.
147   */
148  @Facebook
149  private Integer views;
150  @Facebook
151  private List<VideoFormat> format = new ArrayList<>();
152  /**
153   * People who like this.
154   * 
155   * you need to add the field to the fields query parameter to get the likes list otherwise null is returned
156   * 
157   */
158  @Facebook
159  private Likes likes;
160  /**
161   * Location associated with the video, if any.
162   * 
163   */
164  @Facebook
165  private Place place;
166  /**
167   * identifier of the post this video belongs to
168   */
169  @Facebook("post_id")
170  private String postId;
171  /**
172   * The content category of this video.
173   * 
174   */
175  @Facebook("content_category")
176  @GraphAPI(since = "2.4")
177  private String contentCategory;
178  /**
179   * A URL for the thumbnail picture of the video.
180   * 
181   */
182  @Facebook
183  private String picture;
184  /**
185   * An icon URL which represents the video.
186   * 
187   */
188  @Facebook
189  private String icon;
190  /**
191   * A URL to the raw, playable video file.
192   * 
193   * @since 1.6.5
194   */
195  @Facebook
196  private String source;
197  /**
198   * HTML that may be used to embed the video on another website.
199   * 
200   */
201  @Facebook("embed_html")
202  private String embedHtml;
203  /**
204   * The length of the video, in seconds.
205   * 
206   */
207  @Facebook
208  private Double length;
209  /**
210   * Number of unique people who watched the video broadcast when it was live.
211   */
212  @Facebook("live_audience_count")
213  @GraphAPI(since = "2.6")
214  private Integer liveAudienceCount;
215  /**
216   * The live status of the video.
217   *
218   * Possible values contain LIVE, LIVE_STOPPED, VOD
219   */
220  @Facebook("live_status")
221  @GraphAPI(since = "2.6")
222  private String liveStatus;
223  /**
224   * Privacy setting for the video.
225   * 
226   */
227  @Facebook
228  private Privacy privacy;
229  /**
230   * The status of the Premiere Watch Party, if any
231   */
232  @Facebook("premiere_living_room_status")
233  private String premiereLivingRoomStatus;
234  /**
235   * Object describing the status attributes of a video.
236   * 
237   */
238  @Facebook
239  private VideoStatus status;
240  /**
241   * Whether a post about this video is published.
242   * 
243   * This field is only accessible in Graph API 2.3 or later.
244   *
245   * @since 1.10.0
246   */
247  @Facebook
248  @GraphAPI(since = "2.3")
249  private Boolean published;
250  /**
251   * Back dated time
252   *
253   * @since 1.10.0
254   */
255  @Facebook("backdated_time")
256  private Date backdatedTime;
257  /**
258   * String that represents the back dated time granularity
259   *
260   * @since 1.10.0
261   */
262  @Facebook("backdated_time_granularity")
263  private String backdatedTimeGranularity;
264  /**
265   * Shows whether the video is eligible to be boosted or not
266   */
267  @Facebook("boost_eligibility_info")
268  private VideoBoostEligibilityInfo boostEligibilityInfo;
269  /**
270   * The time the video was initially published.
271   * 
272   */
273  @Facebook("created_time")
274  private Date createdTime;
275  /**
276   * The last time the video or its caption were updated.
277   * 
278   */
279  @Facebook("updated_time")
280  private Date updatedTime;
281  /**
282   * The time that the video is scheduled to be published.
283   * 
284   * This field is only accessible in Graph API 2.3 or later.
285   * 
286   * @since 1.10.0
287   */
288  @Facebook("scheduled_publish_time")
289  @GraphAPI(since = "2.3")
290  private Date scheduledPublishTime;
291  @Facebook
292  private List<VideoCaption> captions = new ArrayList<>();
293  @Facebook
294  private List<NamedFacebookType> tags = new ArrayList<>();
295  @Facebook("ad_breaks")
296  private List<Integer> adBreaks = new ArrayList<>();
297  @Facebook("custom_labels")
298  private List<String> customLabels = new ArrayList<>();
299  @Facebook("video_insights")
300  private Connection<Insight> videoInsights;
301  @Facebook
302  private Connection<Thumbnail> thumbnails;
303  private static final long serialVersionUID = 1L;
304
305  public List<VideoCaption> getCaptions() {
306    return unmodifiableList(captions);
307  }
308
309  public boolean addCaption(VideoCaption caption) {
310    return captions.add(caption);
311  }
312
313  public boolean removeCaption(VideoCaption caption) {
314    return captions.remove(caption);
315  }
316
317  /**
318   * The different formats of the video.
319   * 
320   * @return The different formats of the video.
321   */
322  public List<VideoFormat> getFormat() {
323    return unmodifiableList(format);
324  }
325
326  public boolean addFormat(VideoFormat videoFormat) {
327    return format.add(videoFormat);
328  }
329
330  public boolean removeFormat(VideoFormat videoFormat) {
331    return format.remove(videoFormat);
332  }
333
334  /**
335   * Tags for the video.
336   * 
337   * @return Tags for the video.
338   * @since 1.6.5
339   */
340  public List<NamedFacebookType> getTags() {
341    return unmodifiableList(tags);
342  }
343
344  public boolean addTag(NamedFacebookType tag) {
345    return tags.add(tag);
346  }
347
348  public boolean removeTag(NamedFacebookType tag) {
349    return tags.remove(tag);
350  }
351
352  /**
353   * Tags that describe the contents of the video.
354   *
355   * @return Tags that describe the contents of the video.
356   */
357  public List<String> getContentTags() {
358    return unmodifiableList(contentTags);
359  }
360
361  public boolean addContentTag(String contentTag) {
362    return contentTags.add(contentTag);
363  }
364
365  public boolean removeContentTag(String contentTag) {
366    return contentTags.remove(contentTag);
367  }
368
369  /**
370   * Time offsets of ad breaks in milliseconds. Ad breaks are short ads that play within a video.
371   *
372   * @return Time offsets of ad breaks in milliseconds. Ad breaks are short ads that play within a video.
373   */
374  public List<Integer> getAdBreaks() {
375    return unmodifiableList(adBreaks);
376  }
377
378  public boolean addAdBreak(Integer adBreak) {
379    return adBreaks.add(adBreak);
380  }
381
382  public boolean removeAdBreak(Integer adBreak) {
383    return adBreaks.remove(adBreak);
384  }
385
386  /**
387   * Labels used to describe the video.
388   *
389   * Unlike content tags, custom labels are not published and only appear in insights data.
390   *
391   * @return Labels used to describe the video.
392   */
393  public List<String> getCustomLabels() {
394    return unmodifiableList(customLabels);
395  }
396
397  public boolean addCustomLabel(String customLabel) {
398    return customLabels.add(customLabel);
399  }
400
401  public boolean removeCustomLabel(String customLabel) {
402    return customLabels.remove(customLabel);
403  }
404
405  /**
406   * The number of likes on this video.
407   * 
408   * you have to fetch the video id with <code>?fields=likes.summary(true)</code> in order to speed up the likes count
409   * generation, you may use <code>?fields=likes.limit(1).summary(true)</code>, so only 1 like is fetched, but the
410   * complete summary
411   *
412   * @return The number of likes on this video.
413   */
414  public Long getLikesCount() {
415    if (getLikes() != null) {
416      return getLikes().getTotalCount();
417    }
418    return 0L;
419  }
420
421  /**
422   * The number of comments of this video.
423   * 
424   * you have to fetch the video id with <code>?fields=comments.summary(true)</code> in order to speed up the comments
425   * count generation, you may use <code>?fields=comments.limit(1).summary(true)</code>, so only 1 comment is fetched,
426   * but the complete summary
427   *
428   * @return The number of comments of this video.
429   */
430  public Long getCommentsCount() {
431    if (getComments() != null) {
432      return getComments().getTotalCount();
433    }
434    return 0L;
435  }
436
437
438  /**
439   * Represents the <a href="https://developers.facebook.com/docs/graph-api/reference/video-thumbnail/">Video Thumbnail
440   * Graph API type</a>.
441   * 
442   * @since 1.10.0
443   */
444  public static class Thumbnail extends NamedFacebookType {
445    private static final long serialVersionUID = 1L;
446    /**
447     * The height of the thumbnail
448     */
449    @Facebook
450    private Integer height;
451    /**
452     * The width of the thumbnail
453     */
454    @Facebook
455    private Integer width;
456    /**
457     * The scale of the thumbnail
458     */
459    @Facebook
460    private Float scale;
461    /**
462     * The uri of the thumbnail
463     */
464    @Facebook
465    private String uri;
466    /**
467     * Whether this is the preferred thumbnail for the video
468     */
469    @Facebook("is_preferred")
470    private Boolean isPreferred;
471
472    /**
473     * The height of the thumbnail
474     */
475    @java.lang.SuppressWarnings("all")
476    public Integer getHeight() {
477      return this.height;
478    }
479
480    /**
481     * The height of the thumbnail
482     */
483    @java.lang.SuppressWarnings("all")
484    public void setHeight(final Integer height) {
485      this.height = height;
486    }
487
488    /**
489     * The width of the thumbnail
490     */
491    @java.lang.SuppressWarnings("all")
492    public Integer getWidth() {
493      return this.width;
494    }
495
496    /**
497     * The width of the thumbnail
498     */
499    @java.lang.SuppressWarnings("all")
500    public void setWidth(final Integer width) {
501      this.width = width;
502    }
503
504    /**
505     * The scale of the thumbnail
506     */
507    @java.lang.SuppressWarnings("all")
508    public Float getScale() {
509      return this.scale;
510    }
511
512    /**
513     * The scale of the thumbnail
514     */
515    @java.lang.SuppressWarnings("all")
516    public void setScale(final Float scale) {
517      this.scale = scale;
518    }
519
520    /**
521     * The uri of the thumbnail
522     */
523    @java.lang.SuppressWarnings("all")
524    public String getUri() {
525      return this.uri;
526    }
527
528    /**
529     * The uri of the thumbnail
530     */
531    @java.lang.SuppressWarnings("all")
532    public void setUri(final String uri) {
533      this.uri = uri;
534    }
535
536    /**
537     * Whether this is the preferred thumbnail for the video
538     */
539    @java.lang.SuppressWarnings("all")
540    public Boolean getIsPreferred() {
541      return this.isPreferred;
542    }
543
544    /**
545     * Whether this is the preferred thumbnail for the video
546     */
547    @java.lang.SuppressWarnings("all")
548    public void setIsPreferred(final Boolean isPreferred) {
549      this.isPreferred = isPreferred;
550    }
551  }
552
553
554  /**
555   * Represents the <a href="https://developers.facebook.com/docs/graph-api/reference/video-format/">Video Format Graph
556   * API type</a>.
557   */
558  public static class VideoFormat extends AbstractFacebookType {
559    private static final long serialVersionUID = 1L;
560    /**
561     * HTML to embed the video in this format.
562     * 
563     */
564    @Facebook("embed_html")
565    private String embedHtml;
566    /**
567     * The filter applied to this video format.
568     * 
569     */
570    @Facebook
571    private String filter;
572    /**
573     * The thumbnail for the video in this format.
574     * 
575     */
576    @Facebook
577    private String picture;
578    /**
579     * The width of the video in this format.
580     * 
581     */
582    @Facebook
583    private Integer width;
584    /**
585     * The height of the video in this format.
586     * 
587     */
588    @Facebook
589    private Integer height;
590
591    /**
592     * HTML to embed the video in this format.
593     * 
594     * @return HTML to embed the video in this format.
595     */
596    @java.lang.SuppressWarnings("all")
597    public String getEmbedHtml() {
598      return this.embedHtml;
599    }
600
601    /**
602     * HTML to embed the video in this format.
603     * 
604     */
605    @java.lang.SuppressWarnings("all")
606    public void setEmbedHtml(final String embedHtml) {
607      this.embedHtml = embedHtml;
608    }
609
610    /**
611     * The filter applied to this video format.
612     * 
613     * @return The filter applied to this video format.
614     */
615    @java.lang.SuppressWarnings("all")
616    public String getFilter() {
617      return this.filter;
618    }
619
620    /**
621     * The filter applied to this video format.
622     * 
623     */
624    @java.lang.SuppressWarnings("all")
625    public void setFilter(final String filter) {
626      this.filter = filter;
627    }
628
629    /**
630     * The thumbnail for the video in this format.
631     * 
632     * @return The thumbnail for the video in this format.
633     */
634    @java.lang.SuppressWarnings("all")
635    public String getPicture() {
636      return this.picture;
637    }
638
639    /**
640     * The thumbnail for the video in this format.
641     * 
642     */
643    @java.lang.SuppressWarnings("all")
644    public void setPicture(final String picture) {
645      this.picture = picture;
646    }
647
648    /**
649     * The width of the video in this format.
650     * 
651     * @return The width of the video in this format.
652     */
653    @java.lang.SuppressWarnings("all")
654    public Integer getWidth() {
655      return this.width;
656    }
657
658    /**
659     * The width of the video in this format.
660     * 
661     */
662    @java.lang.SuppressWarnings("all")
663    public void setWidth(final Integer width) {
664      this.width = width;
665    }
666
667    /**
668     * The height of the video in this format.
669     * 
670     * @return The height of the video in this format.
671     */
672    @java.lang.SuppressWarnings("all")
673    public Integer getHeight() {
674      return this.height;
675    }
676
677    /**
678     * The height of the video in this format.
679     * 
680     */
681    @java.lang.SuppressWarnings("all")
682    public void setHeight(final Integer height) {
683      this.height = height;
684    }
685  }
686
687
688  /**
689   * Represents the <a href="https://developers.facebook.com/docs/graph-api/reference/video-status/">Video Status Graph
690   * API type</a>.
691   */
692  public static class VideoStatus extends AbstractFacebookType {
693    private static final long serialVersionUID = 1L;
694    /**
695     * Status of a video.
696     * 
697     * Either "ready" (uploaded, encoded, thumbnails extracted), "processing" (not ready yet) or "error" (processing
698     * failed).
699     * 
700     */
701    @Facebook("video_status")
702    private String videoStatus;
703    /**
704     * Video processing progress in percent [int 0 to 100].
705     * 
706     */
707    @Facebook("processing_progress")
708    private Integer processingProgress;
709    /**
710     * This structure contains information about progress through the uploading phase.
711     * The bytes_transferred field can be used in conjunction with the upload endpoint
712     * to resume an interrupted upload.
713     */
714    @Facebook("uploading_phase")
715    private VideoPhase uploadingVideoPhase;
716    /**
717     * This structure contains information about progress through the processing phase.
718     * This phase encompasses generating alternate media encodings, thumbnails, and other
719     * assets necessary for publishing.
720     */
721    @Facebook("processing_phase")
722    private VideoPhase processingVideoPhase;
723    /**
724     * This structure contains information about progress through the publishing phase.
725     * This phase encompasses adding the video to the page, and if scheduled, will describe
726     * when the video is intended to be published.
727     */
728    @Facebook("publishing_phase")
729    private VideoPhase publishingVideoPhase;
730
731    /**
732     * Status of a video.
733     * 
734     * Either "ready" (uploaded, encoded, thumbnails extracted), "processing" (not ready yet) or "error" (processing
735     * failed).
736     * 
737     * @return Status of a video
738     */
739    @java.lang.SuppressWarnings("all")
740    public String getVideoStatus() {
741      return this.videoStatus;
742    }
743
744    /**
745     * Status of a video.
746     * 
747     * Either "ready" (uploaded, encoded, thumbnails extracted), "processing" (not ready yet) or "error" (processing
748     * failed).
749     * 
750     */
751    @java.lang.SuppressWarnings("all")
752    public void setVideoStatus(final String videoStatus) {
753      this.videoStatus = videoStatus;
754    }
755
756    /**
757     * Video processing progress in percent [int 0 to 100].
758     * 
759     * @return Video processing progress in percent [int 0 to 100].
760     */
761    @java.lang.SuppressWarnings("all")
762    public Integer getProcessingProgress() {
763      return this.processingProgress;
764    }
765
766    /**
767     * Video processing progress in percent [int 0 to 100].
768     * 
769     */
770    @java.lang.SuppressWarnings("all")
771    public void setProcessingProgress(final Integer processingProgress) {
772      this.processingProgress = processingProgress;
773    }
774
775    /**
776     * This structure contains information about progress through the uploading phase.
777     * The bytes_transferred field can be used in conjunction with the upload endpoint
778     * to resume an interrupted upload.
779     */
780    @java.lang.SuppressWarnings("all")
781    public VideoPhase getUploadingVideoPhase() {
782      return this.uploadingVideoPhase;
783    }
784
785    /**
786     * This structure contains information about progress through the uploading phase.
787     * The bytes_transferred field can be used in conjunction with the upload endpoint
788     * to resume an interrupted upload.
789     */
790    @java.lang.SuppressWarnings("all")
791    public void setUploadingVideoPhase(final VideoPhase uploadingVideoPhase) {
792      this.uploadingVideoPhase = uploadingVideoPhase;
793    }
794
795    /**
796     * This structure contains information about progress through the processing phase.
797     * This phase encompasses generating alternate media encodings, thumbnails, and other
798     * assets necessary for publishing.
799     */
800    @java.lang.SuppressWarnings("all")
801    public VideoPhase getProcessingVideoPhase() {
802      return this.processingVideoPhase;
803    }
804
805    /**
806     * This structure contains information about progress through the processing phase.
807     * This phase encompasses generating alternate media encodings, thumbnails, and other
808     * assets necessary for publishing.
809     */
810    @java.lang.SuppressWarnings("all")
811    public void setProcessingVideoPhase(final VideoPhase processingVideoPhase) {
812      this.processingVideoPhase = processingVideoPhase;
813    }
814
815    /**
816     * This structure contains information about progress through the publishing phase.
817     * This phase encompasses adding the video to the page, and if scheduled, will describe
818     * when the video is intended to be published.
819     */
820    @java.lang.SuppressWarnings("all")
821    public VideoPhase getPublishingVideoPhase() {
822      return this.publishingVideoPhase;
823    }
824
825    /**
826     * This structure contains information about progress through the publishing phase.
827     * This phase encompasses adding the video to the page, and if scheduled, will describe
828     * when the video is intended to be published.
829     */
830    @java.lang.SuppressWarnings("all")
831    public void setPublishingVideoPhase(final VideoPhase publishingVideoPhase) {
832      this.publishingVideoPhase = publishingVideoPhase;
833    }
834  }
835
836
837  public static class VideoPhase extends AbstractFacebookType {
838    private static final long serialVersionUID = 1L;
839    /**
840     * Status of a videoPahse.
841     *
842     * not_started, in_progress, complete, error
843     */
844    @Facebook("status")
845    private String status;
846    @Facebook("bytes_transfered")
847    private Long bytesTransfered;
848    @Facebook("publish_status")
849    private String publishStatus;
850    @Facebook("publish_time")
851    private Date publishTime;
852    @Facebook("errors")
853    private List<VideoPhaseError> errors;
854
855    /**
856     * Status of a videoPahse.
857     *
858     * not_started, in_progress, complete, error
859     *
860     * @return Status of a videoPhase
861     */
862    @java.lang.SuppressWarnings("all")
863    public String getStatus() {
864      return this.status;
865    }
866
867    /**
868     * Status of a videoPahse.
869     *
870     * not_started, in_progress, complete, error
871     */
872    @java.lang.SuppressWarnings("all")
873    public void setStatus(final String status) {
874      this.status = status;
875    }
876
877    @java.lang.SuppressWarnings("all")
878    public Long getBytesTransfered() {
879      return this.bytesTransfered;
880    }
881
882    @java.lang.SuppressWarnings("all")
883    public void setBytesTransfered(final Long bytesTransfered) {
884      this.bytesTransfered = bytesTransfered;
885    }
886
887    @java.lang.SuppressWarnings("all")
888    public String getPublishStatus() {
889      return this.publishStatus;
890    }
891
892    @java.lang.SuppressWarnings("all")
893    public void setPublishStatus(final String publishStatus) {
894      this.publishStatus = publishStatus;
895    }
896
897    @java.lang.SuppressWarnings("all")
898    public Date getPublishTime() {
899      return this.publishTime;
900    }
901
902    @java.lang.SuppressWarnings("all")
903    public void setPublishTime(final Date publishTime) {
904      this.publishTime = publishTime;
905    }
906
907    @java.lang.SuppressWarnings("all")
908    public List<VideoPhaseError> getErrors() {
909      return this.errors;
910    }
911
912    @java.lang.SuppressWarnings("all")
913    public void setErrors(final List<VideoPhaseError> errors) {
914      this.errors = errors;
915    }
916  }
917
918
919  public static class VideoPhaseError extends AbstractFacebookType {
920    private static final long serialVersionUID = 1L;
921    @Facebook("code")
922    private Long code; // error code
923    @Facebook("message")
924    private String message; // error message
925
926    @java.lang.SuppressWarnings("all")
927    public Long getCode() {
928      return this.code;
929    }
930
931    @java.lang.SuppressWarnings("all")
932    public void setCode(final Long code) {
933      this.code = code;
934    }
935
936    @java.lang.SuppressWarnings("all")
937    public String getMessage() {
938      return this.message;
939    }
940
941    @java.lang.SuppressWarnings("all")
942    public void setMessage(final String message) {
943      this.message = message;
944    }
945  }
946
947  /**
948   * An object containing the name and ID of the user who posted the video.
949   * 
950   * @return An object containing the name and ID of the user who posted the video.
951   */
952  @java.lang.SuppressWarnings("all")
953  public From getFrom() {
954    return this.from;
955  }
956
957  /**
958   * An object containing the name and ID of the user who posted the video.
959   * 
960   */
961  @java.lang.SuppressWarnings("all")
962  public void setFrom(final From from) {
963    this.from = from;
964  }
965
966  /**
967   * The video title / caption.
968   * 
969   * @return The video title / caption.
970   * @deprecated FB seems to have removed this field.
971   */
972  @java.lang.Deprecated
973  @Override
974  @java.lang.SuppressWarnings("all")
975  public String getMessage() {
976    return this.message;
977  }
978
979  /**
980   * The video title / caption.
981   * 
982   * @deprecated FB seems to have removed this field.
983   */
984  @java.lang.Deprecated
985  @java.lang.SuppressWarnings("all")
986  public void setMessage(final String message) {
987    this.message = message;
988  }
989
990  /**
991   * The comments for this video.
992   *
993   * @return The comments for this video.
994   */
995  @Override
996  @java.lang.SuppressWarnings("all")
997  public Comments getComments() {
998    return this.comments;
999  }
1000
1001  /**
1002   * The comments for this video.
1003   */
1004  @java.lang.SuppressWarnings("all")
1005  public void setComments(final Comments comments) {
1006    this.comments = comments;
1007  }
1008
1009  /**
1010   * The long-form HTML description of the video.
1011   * 
1012   * @return The long-form HTML description of the video.
1013   */
1014  @java.lang.SuppressWarnings("all")
1015  public String getDescription() {
1016    return this.description;
1017  }
1018
1019  /**
1020   * The long-form HTML description of the video.
1021   * 
1022   */
1023  @java.lang.SuppressWarnings("all")
1024  public void setDescription(final String description) {
1025    this.description = description;
1026  }
1027
1028  /**
1029   * URL to the permalink page of the video
1030   *
1031   * @return URL to the permalink page of the video
1032   */
1033  @java.lang.SuppressWarnings("all")
1034  public String getPermalinkUrl() {
1035    return this.permalinkUrl;
1036  }
1037
1038  /**
1039   * URL to the permalink page of the video
1040   */
1041  @java.lang.SuppressWarnings("all")
1042  public void setPermalinkUrl(final String permalinkUrl) {
1043    this.permalinkUrl = permalinkUrl;
1044  }
1045
1046  /**
1047   * The video title or caption
1048   *
1049   * @return the video title or caption
1050   */
1051  @GraphAPI(since = "2.5")
1052  @java.lang.SuppressWarnings("all")
1053  public String getTitle() {
1054    return this.title;
1055  }
1056
1057  /**
1058   * The video title or caption
1059   */
1060  @java.lang.SuppressWarnings("all")
1061  public void setTitle(final String title) {
1062    this.title = title;
1063  }
1064
1065  @java.lang.SuppressWarnings("all")
1066  public Boolean getIsCrosspostVideo() {
1067    return this.isCrosspostVideo;
1068  }
1069
1070  @java.lang.SuppressWarnings("all")
1071  public void setIsCrosspostVideo(final Boolean isCrosspostVideo) {
1072    this.isCrosspostVideo = isCrosspostVideo;
1073  }
1074
1075  /**
1076   * Specifies if the video is eligible for crossposting.
1077   *
1078   * @return Specifies if the video is eligible for crossposting
1079   */
1080  @GraphAPI(since = "2.6")
1081  @java.lang.SuppressWarnings("all")
1082  public Boolean getIsCrosspostingEligible() {
1083    return this.isCrosspostingEligible;
1084  }
1085
1086  /**
1087   * Specifies if the video is eligible for crossposting.
1088   */
1089  @java.lang.SuppressWarnings("all")
1090  public void setIsCrosspostingEligible(final Boolean isCrosspostingEligible) {
1091    this.isCrosspostingEligible = isCrosspostingEligible;
1092  }
1093
1094  /**
1095   * Whether this video is episode or not.
1096   *
1097   * @return Whether this video is episode or not.
1098   */
1099  @java.lang.SuppressWarnings("all")
1100  public Boolean getIsEpisode() {
1101    return this.isEpisode;
1102  }
1103
1104  /**
1105   * Whether this video is episode or not.
1106   */
1107  @java.lang.SuppressWarnings("all")
1108  public void setIsEpisode(final Boolean isEpisode) {
1109    this.isEpisode = isEpisode;
1110  }
1111
1112  /**
1113   * Whether the video is eligible to be promoted on Instagram
1114   *
1115   * @return Whether the video is eligible to be promoted on Instagram
1116   */
1117  @java.lang.SuppressWarnings("all")
1118  public Boolean getIsInstagramEligible() {
1119    return this.isInstagramEligible;
1120  }
1121
1122  /**
1123   * Whether the video is eligible to be promoted on Instagram
1124   */
1125  @java.lang.SuppressWarnings("all")
1126  public void setIsInstagramEligible(final Boolean isInstagramEligible) {
1127    this.isInstagramEligible = isInstagramEligible;
1128  }
1129
1130  /**
1131   * Whether the video is exclusively used for copyright monitoring.
1132   *
1133   * @return Whether the video is exclusively used for copyright monitoring
1134   */
1135  @java.lang.SuppressWarnings("all")
1136  public Boolean getIsReferenceOnly() {
1137    return this.isReferenceOnly;
1138  }
1139
1140  /**
1141   * Whether the video is exclusively used for copyright monitoring.
1142   */
1143  @java.lang.SuppressWarnings("all")
1144  public void setIsReferenceOnly(final Boolean isReferenceOnly) {
1145    this.isReferenceOnly = isReferenceOnly;
1146  }
1147
1148  /**
1149   * The music video copyright of this video
1150   *
1151   * because of a missing object description in the graph reference, we use a Map here
1152   */
1153  @java.lang.SuppressWarnings("all")
1154  public MusicVideoCopyright getMusicVideoCopyright() {
1155    return this.musicVideoCopyright;
1156  }
1157
1158  /**
1159   * The music video copyright of this video
1160   *
1161   * because of a missing object description in the graph reference, we use a Map here
1162   */
1163  @java.lang.SuppressWarnings("all")
1164  public void setMusicVideoCopyright(final MusicVideoCopyright musicVideoCopyright) {
1165    this.musicVideoCopyright = musicVideoCopyright;
1166  }
1167
1168  /**
1169   * The public view count of the video post, not aggregated with any other crossposts of the video.
1170   */
1171  @java.lang.SuppressWarnings("all")
1172  public Integer getPostViews() {
1173    return this.postViews;
1174  }
1175
1176  /**
1177   * The public view count of the video post, not aggregated with any other crossposts of the video.
1178   */
1179  @java.lang.SuppressWarnings("all")
1180  public void setPostViews(final Integer postViews) {
1181    this.postViews = postViews;
1182  }
1183
1184  /**
1185   * The reactions for this video.
1186   *
1187   * @return The reactions for this video.
1188   */
1189  @java.lang.SuppressWarnings("all")
1190  public Reactions getReactions() {
1191    return this.reactions;
1192  }
1193
1194  /**
1195   * The reactions for this video.
1196   */
1197  @java.lang.SuppressWarnings("all")
1198  public void setReactions(final Reactions reactions) {
1199    this.reactions = reactions;
1200  }
1201
1202  /**
1203   * Whether the video is embeddable.
1204   *
1205   * @return Whether the video is embeddable.
1206   */
1207  @GraphAPI(since = "2.4")
1208  @java.lang.SuppressWarnings("all")
1209  public Boolean getEmbeddable() {
1210    return this.embeddable;
1211  }
1212
1213  /**
1214   * Whether the video is embeddable.
1215   */
1216  @java.lang.SuppressWarnings("all")
1217  public void setEmbeddable(final Boolean embeddable) {
1218    this.embeddable = embeddable;
1219  }
1220
1221  /**
1222   * If this object has a place, the event associated with the place.
1223   * 
1224   * @return the event associated with the place
1225   */
1226  @GraphAPI(since = "2.3")
1227  @java.lang.SuppressWarnings("all")
1228  public Event getEvent() {
1229    return this.event;
1230  }
1231
1232  /**
1233   * If this object has a place, the event associated with the place.
1234   * 
1235   */
1236  @java.lang.SuppressWarnings("all")
1237  public void setEvent(final Event event) {
1238    this.event = event;
1239  }
1240
1241  /**
1242   * Whether or not the video is highlighted in Video Channel.
1243   *
1244   * @return Whether or not the video is highlighted in Video Channel.
1245   */
1246  @GraphAPI(since = "2.7")
1247  @java.lang.SuppressWarnings("all")
1248  public String getFeedType() {
1249    return this.feedType;
1250  }
1251
1252  /**
1253   * Whether or not the video is highlighted in Video Channel.
1254   */
1255  @java.lang.SuppressWarnings("all")
1256  public void setFeedType(final String feedType) {
1257    this.feedType = feedType;
1258  }
1259
1260  /**
1261   * The publishers asset management code for this video.
1262   */
1263  @java.lang.SuppressWarnings("all")
1264  public String getUniversalVideoId() {
1265    return this.universalVideoId;
1266  }
1267
1268  /**
1269   * The publishers asset management code for this video.
1270   */
1271  @java.lang.SuppressWarnings("all")
1272  public void setUniversalVideoId(final String universalVideoId) {
1273    this.universalVideoId = universalVideoId;
1274  }
1275
1276  /**
1277   * The public view count of the video.
1278   */
1279  @java.lang.SuppressWarnings("all")
1280  public Integer getViews() {
1281    return this.views;
1282  }
1283
1284  /**
1285   * The public view count of the video.
1286   */
1287  @java.lang.SuppressWarnings("all")
1288  public void setViews(final Integer views) {
1289    this.views = views;
1290  }
1291
1292  /**
1293   * People who like this.
1294   * 
1295   * you need to add the field to the fields query parameter to get the likes list otherwise null is returned
1296   * 
1297   * @return People who like this
1298   */
1299  @java.lang.SuppressWarnings("all")
1300  public Likes getLikes() {
1301    return this.likes;
1302  }
1303
1304  /**
1305   * People who like this.
1306   * 
1307   * you need to add the field to the fields query parameter to get the likes list otherwise null is returned
1308   * 
1309   */
1310  @java.lang.SuppressWarnings("all")
1311  public void setLikes(final Likes likes) {
1312    this.likes = likes;
1313  }
1314
1315  /**
1316   * Location associated with the video, if any.
1317   * 
1318   * @return Location associated with the video, if any.
1319   */
1320  @java.lang.SuppressWarnings("all")
1321  public Place getPlace() {
1322    return this.place;
1323  }
1324
1325  /**
1326   * Location associated with the video, if any.
1327   * 
1328   */
1329  @java.lang.SuppressWarnings("all")
1330  public void setPlace(final Place place) {
1331    this.place = place;
1332  }
1333
1334  /**
1335   * identifier of the post this video belongs to
1336   */
1337  @java.lang.SuppressWarnings("all")
1338  public String getPostId() {
1339    return this.postId;
1340  }
1341
1342  /**
1343   * identifier of the post this video belongs to
1344   */
1345  @java.lang.SuppressWarnings("all")
1346  public void setPostId(final String postId) {
1347    this.postId = postId;
1348  }
1349
1350  /**
1351   * The content category of this video.
1352   * 
1353   * @return The content category of this video.
1354   */
1355  @GraphAPI(since = "2.4")
1356  @java.lang.SuppressWarnings("all")
1357  public String getContentCategory() {
1358    return this.contentCategory;
1359  }
1360
1361  /**
1362   * The content category of this video.
1363   * 
1364   */
1365  @java.lang.SuppressWarnings("all")
1366  public void setContentCategory(final String contentCategory) {
1367    this.contentCategory = contentCategory;
1368  }
1369
1370  /**
1371   * A URL for the thumbnail picture of the video.
1372   * 
1373   * @return A URL for the thumbnail picture of the video.
1374   */
1375  @java.lang.SuppressWarnings("all")
1376  public String getPicture() {
1377    return this.picture;
1378  }
1379
1380  /**
1381   * A URL for the thumbnail picture of the video.
1382   * 
1383   */
1384  @java.lang.SuppressWarnings("all")
1385  public void setPicture(final String picture) {
1386    this.picture = picture;
1387  }
1388
1389  /**
1390   * An icon URL which represents the video.
1391   * 
1392   * @return An icon URL which represents the video.
1393   */
1394  @java.lang.SuppressWarnings("all")
1395  public String getIcon() {
1396    return this.icon;
1397  }
1398
1399  /**
1400   * An icon URL which represents the video.
1401   * 
1402   */
1403  @java.lang.SuppressWarnings("all")
1404  public void setIcon(final String icon) {
1405    this.icon = icon;
1406  }
1407
1408  /**
1409   * A URL to the raw, playable video file.
1410   * 
1411   * @return A URL to the raw, playable video file.
1412   * @since 1.6.5
1413   */
1414  @java.lang.SuppressWarnings("all")
1415  public String getSource() {
1416    return this.source;
1417  }
1418
1419  /**
1420   * A URL to the raw, playable video file.
1421   * 
1422   * @since 1.6.5
1423   */
1424  @java.lang.SuppressWarnings("all")
1425  public void setSource(final String source) {
1426    this.source = source;
1427  }
1428
1429  /**
1430   * HTML that may be used to embed the video on another website.
1431   * 
1432   * @return HTML that may be used to embed the video on another website.
1433   */
1434  @java.lang.SuppressWarnings("all")
1435  public String getEmbedHtml() {
1436    return this.embedHtml;
1437  }
1438
1439  /**
1440   * HTML that may be used to embed the video on another website.
1441   * 
1442   */
1443  @java.lang.SuppressWarnings("all")
1444  public void setEmbedHtml(final String embedHtml) {
1445    this.embedHtml = embedHtml;
1446  }
1447
1448  /**
1449   * The length of the video, in seconds.
1450   * 
1451   * @return The length of the video, in seconds.
1452   */
1453  @java.lang.SuppressWarnings("all")
1454  public Double getLength() {
1455    return this.length;
1456  }
1457
1458  /**
1459   * The length of the video, in seconds.
1460   * 
1461   */
1462  @java.lang.SuppressWarnings("all")
1463  public void setLength(final Double length) {
1464    this.length = length;
1465  }
1466
1467  /**
1468   * Number of unique people who watched the video broadcast when it was live.
1469   *
1470   * @return Number of unique people who watched the video broadcast when it was live.
1471   */
1472  @GraphAPI(since = "2.6")
1473  @java.lang.SuppressWarnings("all")
1474  public Integer getLiveAudienceCount() {
1475    return this.liveAudienceCount;
1476  }
1477
1478  /**
1479   * Number of unique people who watched the video broadcast when it was live.
1480   */
1481  @java.lang.SuppressWarnings("all")
1482  public void setLiveAudienceCount(final Integer liveAudienceCount) {
1483    this.liveAudienceCount = liveAudienceCount;
1484  }
1485
1486  /**
1487   * The live status of the video.
1488   *
1489   * Possible values contain LIVE, LIVE_STOPPED, VOD
1490   *
1491   * @return The live status of the video
1492   */
1493  @GraphAPI(since = "2.6")
1494  @java.lang.SuppressWarnings("all")
1495  public String getLiveStatus() {
1496    return this.liveStatus;
1497  }
1498
1499  /**
1500   * The live status of the video.
1501   *
1502   * Possible values contain LIVE, LIVE_STOPPED, VOD
1503   */
1504  @java.lang.SuppressWarnings("all")
1505  public void setLiveStatus(final String liveStatus) {
1506    this.liveStatus = liveStatus;
1507  }
1508
1509  /**
1510   * Privacy setting for the video.
1511   * 
1512   * @return Privacy setting for the video.
1513   */
1514  @java.lang.SuppressWarnings("all")
1515  public Privacy getPrivacy() {
1516    return this.privacy;
1517  }
1518
1519  /**
1520   * Privacy setting for the video.
1521   * 
1522   */
1523  @java.lang.SuppressWarnings("all")
1524  public void setPrivacy(final Privacy privacy) {
1525    this.privacy = privacy;
1526  }
1527
1528  /**
1529   * The status of the Premiere Watch Party, if any
1530   */
1531  @java.lang.SuppressWarnings("all")
1532  public String getPremiereLivingRoomStatus() {
1533    return this.premiereLivingRoomStatus;
1534  }
1535
1536  /**
1537   * The status of the Premiere Watch Party, if any
1538   */
1539  @java.lang.SuppressWarnings("all")
1540  public void setPremiereLivingRoomStatus(final String premiereLivingRoomStatus) {
1541    this.premiereLivingRoomStatus = premiereLivingRoomStatus;
1542  }
1543
1544  /**
1545   * Object describing the status attributes of a video.
1546   * 
1547   * @return Object describing the status attributes of a video.
1548   */
1549  @java.lang.SuppressWarnings("all")
1550  public VideoStatus getStatus() {
1551    return this.status;
1552  }
1553
1554  /**
1555   * Object describing the status attributes of a video.
1556   * 
1557   */
1558  @java.lang.SuppressWarnings("all")
1559  public void setStatus(final VideoStatus status) {
1560    this.status = status;
1561  }
1562
1563  /**
1564   * Whether a post about this video is published.
1565   * 
1566   * This field is only accessible in Graph API 2.3 or later.
1567   *
1568   * @return whether a post about this video is published.
1569   * @since 1.10.0
1570   */
1571  @GraphAPI(since = "2.3")
1572  @java.lang.SuppressWarnings("all")
1573  public Boolean getPublished() {
1574    return this.published;
1575  }
1576
1577  /**
1578   * Whether a post about this video is published.
1579   * 
1580   * This field is only accessible in Graph API 2.3 or later.
1581   *
1582   * @since 1.10.0
1583   */
1584  @java.lang.SuppressWarnings("all")
1585  public void setPublished(final Boolean published) {
1586    this.published = published;
1587  }
1588
1589  /**
1590   * Back dated time
1591   *
1592   * @since 1.10.0
1593   */
1594  @java.lang.SuppressWarnings("all")
1595  public Date getBackdatedTime() {
1596    return this.backdatedTime;
1597  }
1598
1599  /**
1600   * Back dated time
1601   *
1602   * @since 1.10.0
1603   */
1604  @java.lang.SuppressWarnings("all")
1605  public void setBackdatedTime(final Date backdatedTime) {
1606    this.backdatedTime = backdatedTime;
1607  }
1608
1609  /**
1610   * String that represents the back dated time granularity
1611   *
1612   * @since 1.10.0
1613   */
1614  @java.lang.SuppressWarnings("all")
1615  public String getBackdatedTimeGranularity() {
1616    return this.backdatedTimeGranularity;
1617  }
1618
1619  /**
1620   * String that represents the back dated time granularity
1621   *
1622   * @since 1.10.0
1623   */
1624  @java.lang.SuppressWarnings("all")
1625  public void setBackdatedTimeGranularity(final String backdatedTimeGranularity) {
1626    this.backdatedTimeGranularity = backdatedTimeGranularity;
1627  }
1628
1629  /**
1630   * Shows whether the video is eligible to be boosted or not
1631   */
1632  @java.lang.SuppressWarnings("all")
1633  public VideoBoostEligibilityInfo getBoostEligibilityInfo() {
1634    return this.boostEligibilityInfo;
1635  }
1636
1637  /**
1638   * Shows whether the video is eligible to be boosted or not
1639   */
1640  @java.lang.SuppressWarnings("all")
1641  public void setBoostEligibilityInfo(final VideoBoostEligibilityInfo boostEligibilityInfo) {
1642    this.boostEligibilityInfo = boostEligibilityInfo;
1643  }
1644
1645  /**
1646   * The time the video was initially published.
1647   * 
1648   * @return The time the video was initially published.
1649   */
1650  @Override
1651  @java.lang.SuppressWarnings("all")
1652  public Date getCreatedTime() {
1653    return this.createdTime;
1654  }
1655
1656  /**
1657   * The time the video was initially published.
1658   * 
1659   */
1660  @java.lang.SuppressWarnings("all")
1661  public void setCreatedTime(final Date createdTime) {
1662    this.createdTime = createdTime;
1663  }
1664
1665  /**
1666   * The last time the video or its caption were updated.
1667   * 
1668   * @return The last time the video or its caption were updated.
1669   */
1670  @java.lang.SuppressWarnings("all")
1671  public Date getUpdatedTime() {
1672    return this.updatedTime;
1673  }
1674
1675  /**
1676   * The last time the video or its caption were updated.
1677   * 
1678   */
1679  @java.lang.SuppressWarnings("all")
1680  public void setUpdatedTime(final Date updatedTime) {
1681    this.updatedTime = updatedTime;
1682  }
1683
1684  /**
1685   * The time that the video is scheduled to be published.
1686   * 
1687   * This field is only accessible in Graph API 2.3 or later.
1688   * 
1689   * @return The time that the video is scheduled to be published.
1690   * @since 1.10.0
1691   */
1692  @GraphAPI(since = "2.3")
1693  @java.lang.SuppressWarnings("all")
1694  public Date getScheduledPublishTime() {
1695    return this.scheduledPublishTime;
1696  }
1697
1698  /**
1699   * The time that the video is scheduled to be published.
1700   * 
1701   * This field is only accessible in Graph API 2.3 or later.
1702   * 
1703   * @since 1.10.0
1704   */
1705  @java.lang.SuppressWarnings("all")
1706  public void setScheduledPublishTime(final Date scheduledPublishTime) {
1707    this.scheduledPublishTime = scheduledPublishTime;
1708  }
1709
1710  @java.lang.SuppressWarnings("all")
1711  public Connection<Insight> getVideoInsights() {
1712    return this.videoInsights;
1713  }
1714
1715  @java.lang.SuppressWarnings("all")
1716  public void setVideoInsights(final Connection<Insight> videoInsights) {
1717    this.videoInsights = videoInsights;
1718  }
1719
1720  @java.lang.SuppressWarnings("all")
1721  public Connection<Thumbnail> getThumbnails() {
1722    return this.thumbnails;
1723  }
1724
1725  @java.lang.SuppressWarnings("all")
1726  public void setThumbnails(final Connection<Thumbnail> thumbnails) {
1727    this.thumbnails = thumbnails;
1728  }
1729}