001// Generated by delombok at Fri Oct 04 16:05:59 CEST 2024
002/*
003 * Copyright (c) 2010-2024 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.webhook.messaging;
024
025import java.util.ArrayList;
026import java.util.Date;
027import java.util.List;
028import com.restfb.Facebook;
029import com.restfb.JsonMapper;
030import com.restfb.json.JsonObject;
031import com.restfb.json.JsonValue;
032
033public class MessagingItem {
034  @Facebook
035  private MessagingParticipant sender;
036  @Facebook
037  private MessagingParticipant recipient;
038  @Facebook("timestamp")
039  private Long rawTimestamp;
040  private Date timestamp;
041  @Facebook
042  private DeliveryItem delivery;
043  @Facebook
044  private ReadItem read;
045  @Facebook
046  private MessageItem message;
047  @Facebook("message_edit")
048  private MessageEditItem messageEdit;
049  @Facebook
050  private PostbackItem postback;
051  @Facebook
052  private OptinItem optin;
053  @Facebook("account_linking")
054  private AccountLinkingItem accountLinking;
055  @Facebook("checkout_update")
056  private CheckoutUpdateItem checkoutUpdate;
057  @Facebook
058  private PaymentItem payment;
059  @Facebook
060  private ReferralItem referral;
061  @Facebook("policy-enforcement")
062  private PolicyEnforcementItem policyEnforcement;
063  @Facebook("pass_thread_control")
064  private PassThreadControlItem passThreadControl;
065  @Facebook("take_thread_control")
066  private TakeThreadControlItem takeThreadControl;
067  @Facebook("request_thread_control")
068  private RequestThreadControlItem requestThreadControl;
069  private AppRoles appRoles;
070  @Facebook("prior_message")
071  private PriorMessage priorMessage;
072  @Facebook
073  private MessageReaction reaction;
074  @Facebook("app_roles")
075  private JsonObject rawAppRoles;
076
077  /**
078   * generic access to the inner item.
079   * 
080   * depending on the inner elements the corresponding element is returned. So you can get an {@link OptinItem},
081   * {@link PostbackItem}, {@link DeliveryItem}, {@link AccountLinkingItem} or {@link MessageItem}
082   * 
083   * @return the inner item.
084   */
085  public InnerMessagingItem getItem() {
086    if (optin != null) {
087      return optin;
088    }
089    if (postback != null) {
090      return postback;
091    }
092    if (delivery != null) {
093      return delivery;
094    }
095    if (read != null) {
096      return read;
097    }
098    if (accountLinking != null) {
099      return accountLinking;
100    }
101    if (message != null) {
102      return message;
103    }
104    if (checkoutUpdate != null) {
105      return checkoutUpdate;
106    }
107    if (payment != null) {
108      return payment;
109    }
110    if (referral != null) {
111      return referral;
112    }
113    if (policyEnforcement != null) {
114      return policyEnforcement;
115    }
116    if (passThreadControl != null) {
117      return passThreadControl;
118    }
119    if (takeThreadControl != null) {
120      return takeThreadControl;
121    }
122    if (requestThreadControl != null) {
123      return requestThreadControl;
124    }
125    if (appRoles != null) {
126      return appRoles;
127    }
128    if (reaction != null) {
129      return reaction;
130    }
131    return null;
132  }
133
134  public boolean isDelivery() {
135    return getItem() instanceof DeliveryItem;
136  }
137
138  public boolean isRead() {
139    return getItem() instanceof ReadItem;
140  }
141
142  public boolean isMessage() {
143    return getItem() instanceof MessageItem;
144  }
145
146  public boolean isPostback() {
147    return getItem() instanceof PostbackItem;
148  }
149
150  public boolean isOptin() {
151    return getItem() instanceof OptinItem;
152  }
153
154  public boolean isAccountLinking() {
155    return getItem() instanceof AccountLinkingItem;
156  }
157
158  public boolean isCheckoutUpdate() {
159    return getItem() instanceof CheckoutUpdateItem;
160  }
161
162  public boolean isPayment() {
163    return getItem() instanceof PaymentItem;
164  }
165
166  public boolean isReferral() {
167    return getItem() instanceof ReferralItem;
168  }
169
170  public boolean isPolicyEnforcement() {
171    return getItem() instanceof PolicyEnforcementItem;
172  }
173
174  public boolean isPassThreadControl() {
175    return getItem() instanceof PassThreadControlItem;
176  }
177
178  public boolean isTakeThreadControl() {
179    return getItem() instanceof TakeThreadControlItem;
180  }
181
182  public boolean isRequestThreadControl() {
183    return getItem() instanceof RequestThreadControlItem;
184  }
185
186  public boolean isAppRoles() {
187    return getItem() instanceof AppRoles;
188  }
189
190  public boolean hasPriorMessage() {
191    return priorMessage != null;
192  }
193
194  public boolean isReaction() {
195    return getItem() instanceof MessageReaction;
196  }
197
198  @JsonMapper.JsonMappingCompleted
199  private void convertDate() {
200    if (rawTimestamp != null) {
201      timestamp = new Date(rawTimestamp);
202    }
203  }
204
205  @JsonMapper.JsonMappingCompleted
206  private void convertAppRoles() {
207    if (rawAppRoles != null) {
208      AppRoles appRoles = new AppRoles();
209      for (String appId : rawAppRoles.names()) {
210        List<JsonValue> rawRoles = rawAppRoles.get(appId).asArray().values();
211        List<String> roles = new ArrayList<>();
212        for (JsonValue rawValue : rawRoles) {
213          roles.add(rawValue.asString());
214        }
215        appRoles.addRoles(appId, roles);
216      }
217      this.appRoles = appRoles;
218    }
219  }
220
221  @java.lang.Override
222  @java.lang.SuppressWarnings("all")
223  public java.lang.String toString() {
224    return "MessagingItem(sender=" + this.getSender() + ", recipient=" + this.getRecipient() + ", rawTimestamp=" + this.rawTimestamp + ", timestamp=" + this.getTimestamp() + ", delivery=" + this.getDelivery() + ", read=" + this.getRead() + ", message=" + this.getMessage() + ", messageEdit=" + this.getMessageEdit() + ", postback=" + this.getPostback() + ", optin=" + this.getOptin() + ", accountLinking=" + this.getAccountLinking() + ", checkoutUpdate=" + this.getCheckoutUpdate() + ", payment=" + this.getPayment() + ", referral=" + this.getReferral() + ", policyEnforcement=" + this.getPolicyEnforcement() + ", passThreadControl=" + this.getPassThreadControl() + ", takeThreadControl=" + this.getTakeThreadControl() + ", requestThreadControl=" + this.getRequestThreadControl() + ", appRoles=" + this.getAppRoles() + ", priorMessage=" + this.getPriorMessage() + ", reaction=" + this.getReaction() + ", rawAppRoles=" + this.rawAppRoles + ")";
225  }
226
227  @java.lang.SuppressWarnings("all")
228  public MessagingParticipant getSender() {
229    return this.sender;
230  }
231
232  @java.lang.SuppressWarnings("all")
233  public void setSender(final MessagingParticipant sender) {
234    this.sender = sender;
235  }
236
237  @java.lang.SuppressWarnings("all")
238  public MessagingParticipant getRecipient() {
239    return this.recipient;
240  }
241
242  @java.lang.SuppressWarnings("all")
243  public void setRecipient(final MessagingParticipant recipient) {
244    this.recipient = recipient;
245  }
246
247  @java.lang.SuppressWarnings("all")
248  public Date getTimestamp() {
249    return this.timestamp;
250  }
251
252  @java.lang.SuppressWarnings("all")
253  public void setTimestamp(final Date timestamp) {
254    this.timestamp = timestamp;
255  }
256
257  @java.lang.SuppressWarnings("all")
258  public DeliveryItem getDelivery() {
259    return this.delivery;
260  }
261
262  @java.lang.SuppressWarnings("all")
263  public void setDelivery(final DeliveryItem delivery) {
264    this.delivery = delivery;
265  }
266
267  @java.lang.SuppressWarnings("all")
268  public ReadItem getRead() {
269    return this.read;
270  }
271
272  @java.lang.SuppressWarnings("all")
273  public void setRead(final ReadItem read) {
274    this.read = read;
275  }
276
277  @java.lang.SuppressWarnings("all")
278  public MessageItem getMessage() {
279    return this.message;
280  }
281
282  @java.lang.SuppressWarnings("all")
283  public void setMessage(final MessageItem message) {
284    this.message = message;
285  }
286
287  @java.lang.SuppressWarnings("all")
288  public MessageEditItem getMessageEdit() {
289    return this.messageEdit;
290  }
291
292  @java.lang.SuppressWarnings("all")
293  public void setMessageEdit(final MessageEditItem messageEdit) {
294    this.messageEdit = messageEdit;
295  }
296
297  @java.lang.SuppressWarnings("all")
298  public PostbackItem getPostback() {
299    return this.postback;
300  }
301
302  @java.lang.SuppressWarnings("all")
303  public void setPostback(final PostbackItem postback) {
304    this.postback = postback;
305  }
306
307  @java.lang.SuppressWarnings("all")
308  public OptinItem getOptin() {
309    return this.optin;
310  }
311
312  @java.lang.SuppressWarnings("all")
313  public void setOptin(final OptinItem optin) {
314    this.optin = optin;
315  }
316
317  @java.lang.SuppressWarnings("all")
318  public AccountLinkingItem getAccountLinking() {
319    return this.accountLinking;
320  }
321
322  @java.lang.SuppressWarnings("all")
323  public void setAccountLinking(final AccountLinkingItem accountLinking) {
324    this.accountLinking = accountLinking;
325  }
326
327  @java.lang.SuppressWarnings("all")
328  public CheckoutUpdateItem getCheckoutUpdate() {
329    return this.checkoutUpdate;
330  }
331
332  @java.lang.SuppressWarnings("all")
333  public void setCheckoutUpdate(final CheckoutUpdateItem checkoutUpdate) {
334    this.checkoutUpdate = checkoutUpdate;
335  }
336
337  @java.lang.SuppressWarnings("all")
338  public PaymentItem getPayment() {
339    return this.payment;
340  }
341
342  @java.lang.SuppressWarnings("all")
343  public void setPayment(final PaymentItem payment) {
344    this.payment = payment;
345  }
346
347  @java.lang.SuppressWarnings("all")
348  public ReferralItem getReferral() {
349    return this.referral;
350  }
351
352  @java.lang.SuppressWarnings("all")
353  public void setReferral(final ReferralItem referral) {
354    this.referral = referral;
355  }
356
357  @java.lang.SuppressWarnings("all")
358  public PolicyEnforcementItem getPolicyEnforcement() {
359    return this.policyEnforcement;
360  }
361
362  @java.lang.SuppressWarnings("all")
363  public void setPolicyEnforcement(final PolicyEnforcementItem policyEnforcement) {
364    this.policyEnforcement = policyEnforcement;
365  }
366
367  @java.lang.SuppressWarnings("all")
368  public PassThreadControlItem getPassThreadControl() {
369    return this.passThreadControl;
370  }
371
372  @java.lang.SuppressWarnings("all")
373  public void setPassThreadControl(final PassThreadControlItem passThreadControl) {
374    this.passThreadControl = passThreadControl;
375  }
376
377  @java.lang.SuppressWarnings("all")
378  public TakeThreadControlItem getTakeThreadControl() {
379    return this.takeThreadControl;
380  }
381
382  @java.lang.SuppressWarnings("all")
383  public void setTakeThreadControl(final TakeThreadControlItem takeThreadControl) {
384    this.takeThreadControl = takeThreadControl;
385  }
386
387  @java.lang.SuppressWarnings("all")
388  public RequestThreadControlItem getRequestThreadControl() {
389    return this.requestThreadControl;
390  }
391
392  @java.lang.SuppressWarnings("all")
393  public void setRequestThreadControl(final RequestThreadControlItem requestThreadControl) {
394    this.requestThreadControl = requestThreadControl;
395  }
396
397  @java.lang.SuppressWarnings("all")
398  public AppRoles getAppRoles() {
399    return this.appRoles;
400  }
401
402  @java.lang.SuppressWarnings("all")
403  public void setAppRoles(final AppRoles appRoles) {
404    this.appRoles = appRoles;
405  }
406
407  @java.lang.SuppressWarnings("all")
408  public PriorMessage getPriorMessage() {
409    return this.priorMessage;
410  }
411
412  @java.lang.SuppressWarnings("all")
413  public void setPriorMessage(final PriorMessage priorMessage) {
414    this.priorMessage = priorMessage;
415  }
416
417  @java.lang.SuppressWarnings("all")
418  public MessageReaction getReaction() {
419    return this.reaction;
420  }
421
422  @java.lang.SuppressWarnings("all")
423  public void setReaction(final MessageReaction reaction) {
424    this.reaction = reaction;
425  }
426}