001package com.box.sdkgen.schemas.webhook;
002
003import com.box.sdkgen.internal.utils.DateTimeUtils;
004import com.box.sdkgen.schemas.usermini.UserMini;
005import com.box.sdkgen.schemas.webhookmini.WebhookMini;
006import com.box.sdkgen.schemas.webhookmini.WebhookMiniTargetField;
007import com.box.sdkgen.schemas.webhookmini.WebhookMiniTypeField;
008import com.box.sdkgen.serialization.json.EnumWrapper;
009import com.box.sdkgen.serialization.json.Valuable;
010import com.fasterxml.jackson.annotation.JsonFilter;
011import com.fasterxml.jackson.annotation.JsonProperty;
012import com.fasterxml.jackson.core.JsonGenerator;
013import com.fasterxml.jackson.core.JsonParser;
014import com.fasterxml.jackson.databind.DeserializationContext;
015import com.fasterxml.jackson.databind.JsonDeserializer;
016import com.fasterxml.jackson.databind.JsonNode;
017import com.fasterxml.jackson.databind.JsonSerializer;
018import com.fasterxml.jackson.databind.SerializerProvider;
019import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
020import com.fasterxml.jackson.databind.annotation.JsonSerialize;
021import java.io.IOException;
022import java.time.OffsetDateTime;
023import java.util.ArrayList;
024import java.util.List;
025import java.util.Objects;
026
027/** Represents a configured webhook. */
028@JsonFilter("nullablePropertyFilter")
029public class Webhook extends WebhookMini {
030
031  @JsonProperty("created_by")
032  protected UserMini createdBy;
033
034  /** A timestamp identifying the time that the webhook was created. */
035  @JsonProperty("created_at")
036  @JsonSerialize(using = DateTimeUtils.DateTimeSerializer.class)
037  @JsonDeserialize(using = DateTimeUtils.DateTimeDeserializer.class)
038  protected OffsetDateTime createdAt;
039
040  /** The URL that is notified by this webhook. */
041  protected String address;
042
043  /** An array of event names that this webhook is to be triggered for. */
044  @JsonDeserialize(using = TriggersDeserializer.class)
045  @JsonSerialize(using = TriggersSerializer.class)
046  protected List<EnumWrapper<WebhookTriggersField>> triggers;
047
048  public Webhook() {
049    super();
050  }
051
052  protected Webhook(Builder builder) {
053    super(builder);
054    this.createdBy = builder.createdBy;
055    this.createdAt = builder.createdAt;
056    this.address = builder.address;
057    this.triggers = builder.triggers;
058    markNullableFieldsAsSet(builder.getExplicitlySetNullableFields());
059  }
060
061  public UserMini getCreatedBy() {
062    return createdBy;
063  }
064
065  public OffsetDateTime getCreatedAt() {
066    return createdAt;
067  }
068
069  public String getAddress() {
070    return address;
071  }
072
073  public List<EnumWrapper<WebhookTriggersField>> getTriggers() {
074    return triggers;
075  }
076
077  @Override
078  public boolean equals(Object o) {
079    if (this == o) {
080      return true;
081    }
082    if (o == null || getClass() != o.getClass()) {
083      return false;
084    }
085    Webhook casted = (Webhook) o;
086    return Objects.equals(id, casted.id)
087        && Objects.equals(type, casted.type)
088        && Objects.equals(target, casted.target)
089        && Objects.equals(createdBy, casted.createdBy)
090        && Objects.equals(createdAt, casted.createdAt)
091        && Objects.equals(address, casted.address)
092        && Objects.equals(triggers, casted.triggers);
093  }
094
095  @Override
096  public int hashCode() {
097    return Objects.hash(id, type, target, createdBy, createdAt, address, triggers);
098  }
099
100  @Override
101  public String toString() {
102    return "Webhook{"
103        + "id='"
104        + id
105        + '\''
106        + ", "
107        + "type='"
108        + type
109        + '\''
110        + ", "
111        + "target='"
112        + target
113        + '\''
114        + ", "
115        + "createdBy='"
116        + createdBy
117        + '\''
118        + ", "
119        + "createdAt='"
120        + createdAt
121        + '\''
122        + ", "
123        + "address='"
124        + address
125        + '\''
126        + ", "
127        + "triggers='"
128        + triggers
129        + '\''
130        + "}";
131  }
132
133  public static class Builder extends WebhookMini.Builder {
134
135    protected UserMini createdBy;
136
137    protected OffsetDateTime createdAt;
138
139    protected String address;
140
141    protected List<EnumWrapper<WebhookTriggersField>> triggers;
142
143    public Builder createdBy(UserMini createdBy) {
144      this.createdBy = createdBy;
145      return this;
146    }
147
148    public Builder createdAt(OffsetDateTime createdAt) {
149      this.createdAt = createdAt;
150      return this;
151    }
152
153    public Builder address(String address) {
154      this.address = address;
155      return this;
156    }
157
158    public Builder triggers(List<? extends Valuable> triggers) {
159      this.triggers = EnumWrapper.wrapValuableEnumList(triggers, WebhookTriggersField.class);
160      return this;
161    }
162
163    @Override
164    public Builder id(String id) {
165      this.id = id;
166      return this;
167    }
168
169    @Override
170    public Builder type(WebhookMiniTypeField type) {
171      this.type = new EnumWrapper<WebhookMiniTypeField>(type);
172      return this;
173    }
174
175    @Override
176    public Builder type(EnumWrapper<WebhookMiniTypeField> type) {
177      this.type = type;
178      return this;
179    }
180
181    @Override
182    public Builder target(WebhookMiniTargetField target) {
183      this.target = target;
184      return this;
185    }
186
187    public Webhook build() {
188      return new Webhook(this);
189    }
190  }
191
192  public static class TriggersDeserializer
193      extends JsonDeserializer<List<EnumWrapper<WebhookTriggersField>>> {
194
195    public final JsonDeserializer<EnumWrapper<WebhookTriggersField>> elementDeserializer;
196
197    public TriggersDeserializer() {
198      super();
199      this.elementDeserializer = new WebhookTriggersField.WebhookTriggersFieldDeserializer();
200    }
201
202    @Override
203    public List<EnumWrapper<WebhookTriggersField>> deserialize(
204        JsonParser p, DeserializationContext ctxt) throws IOException {
205      JsonNode node = p.getCodec().readTree(p);
206      List<EnumWrapper<WebhookTriggersField>> elements = new ArrayList<>();
207      for (JsonNode item : node) {
208        JsonParser pa = item.traverse(p.getCodec());
209        pa.nextToken();
210        elements.add(elementDeserializer.deserialize(pa, ctxt));
211      }
212      return elements;
213    }
214  }
215
216  public static class TriggersSerializer
217      extends JsonSerializer<List<EnumWrapper<WebhookTriggersField>>> {
218
219    public final JsonSerializer<EnumWrapper<WebhookTriggersField>> elementSerializer;
220
221    public TriggersSerializer() {
222      super();
223      this.elementSerializer = new WebhookTriggersField.WebhookTriggersFieldSerializer();
224    }
225
226    @Override
227    public void serialize(
228        List<EnumWrapper<WebhookTriggersField>> value,
229        JsonGenerator gen,
230        SerializerProvider serializers)
231        throws IOException {
232      gen.writeStartArray();
233      for (EnumWrapper<WebhookTriggersField> item : value) {
234        elementSerializer.serialize(item, gen, serializers);
235      }
236      gen.writeEndArray();
237    }
238  }
239}