001package com.box.sdkgen.managers.webhooks;
002
003import com.box.sdkgen.internal.SerializableObject;
004import com.box.sdkgen.serialization.json.EnumWrapper;
005import com.box.sdkgen.serialization.json.Valuable;
006import com.fasterxml.jackson.annotation.JsonFilter;
007import com.fasterxml.jackson.annotation.JsonProperty;
008import com.fasterxml.jackson.core.JsonGenerator;
009import com.fasterxml.jackson.core.JsonParser;
010import com.fasterxml.jackson.databind.DeserializationContext;
011import com.fasterxml.jackson.databind.JsonDeserializer;
012import com.fasterxml.jackson.databind.JsonNode;
013import com.fasterxml.jackson.databind.JsonSerializer;
014import com.fasterxml.jackson.databind.SerializerProvider;
015import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
016import com.fasterxml.jackson.databind.annotation.JsonSerialize;
017import java.io.IOException;
018import java.util.ArrayList;
019import java.util.List;
020import java.util.Objects;
021
022@JsonFilter("nullablePropertyFilter")
023public class CreateWebhookRequestBody extends SerializableObject {
024
025  /** The item that will trigger the webhook. */
026  protected final CreateWebhookRequestBodyTargetField target;
027
028  /** The URL that is notified by this webhook. */
029  protected final String address;
030
031  /** An array of event names that this webhook is to be triggered for. */
032  @JsonDeserialize(using = TriggersDeserializer.class)
033  @JsonSerialize(using = TriggersSerializer.class)
034  protected final List<EnumWrapper<CreateWebhookRequestBodyTriggersField>> triggers;
035
036  public CreateWebhookRequestBody(
037      @JsonProperty("target") CreateWebhookRequestBodyTargetField target,
038      @JsonProperty("address") String address,
039      @JsonProperty("triggers") List<? extends Valuable> triggers) {
040    super();
041    this.target = target;
042    this.address = address;
043    this.triggers =
044        EnumWrapper.wrapValuableEnumList(triggers, CreateWebhookRequestBodyTriggersField.class);
045  }
046
047  public CreateWebhookRequestBodyTargetField getTarget() {
048    return target;
049  }
050
051  public String getAddress() {
052    return address;
053  }
054
055  public List<EnumWrapper<CreateWebhookRequestBodyTriggersField>> getTriggers() {
056    return triggers;
057  }
058
059  @Override
060  public boolean equals(Object o) {
061    if (this == o) {
062      return true;
063    }
064    if (o == null || getClass() != o.getClass()) {
065      return false;
066    }
067    CreateWebhookRequestBody casted = (CreateWebhookRequestBody) o;
068    return Objects.equals(target, casted.target)
069        && Objects.equals(address, casted.address)
070        && Objects.equals(triggers, casted.triggers);
071  }
072
073  @Override
074  public int hashCode() {
075    return Objects.hash(target, address, triggers);
076  }
077
078  @Override
079  public String toString() {
080    return "CreateWebhookRequestBody{"
081        + "target='"
082        + target
083        + '\''
084        + ", "
085        + "address='"
086        + address
087        + '\''
088        + ", "
089        + "triggers='"
090        + triggers
091        + '\''
092        + "}";
093  }
094
095  public static class TriggersDeserializer
096      extends JsonDeserializer<List<EnumWrapper<CreateWebhookRequestBodyTriggersField>>> {
097
098    public final JsonDeserializer<EnumWrapper<CreateWebhookRequestBodyTriggersField>>
099        elementDeserializer;
100
101    public TriggersDeserializer() {
102      super();
103      this.elementDeserializer =
104          new CreateWebhookRequestBodyTriggersField
105              .CreateWebhookRequestBodyTriggersFieldDeserializer();
106    }
107
108    @Override
109    public List<EnumWrapper<CreateWebhookRequestBodyTriggersField>> deserialize(
110        JsonParser p, DeserializationContext ctxt) throws IOException {
111      JsonNode node = p.getCodec().readTree(p);
112      List<EnumWrapper<CreateWebhookRequestBodyTriggersField>> elements = new ArrayList<>();
113      for (JsonNode item : node) {
114        JsonParser pa = item.traverse(p.getCodec());
115        pa.nextToken();
116        elements.add(elementDeserializer.deserialize(pa, ctxt));
117      }
118      return elements;
119    }
120  }
121
122  public static class TriggersSerializer
123      extends JsonSerializer<List<EnumWrapper<CreateWebhookRequestBodyTriggersField>>> {
124
125    public final JsonSerializer<EnumWrapper<CreateWebhookRequestBodyTriggersField>>
126        elementSerializer;
127
128    public TriggersSerializer() {
129      super();
130      this.elementSerializer =
131          new CreateWebhookRequestBodyTriggersField
132              .CreateWebhookRequestBodyTriggersFieldSerializer();
133    }
134
135    @Override
136    public void serialize(
137        List<EnumWrapper<CreateWebhookRequestBodyTriggersField>> value,
138        JsonGenerator gen,
139        SerializerProvider serializers)
140        throws IOException {
141      gen.writeStartArray();
142      for (EnumWrapper<CreateWebhookRequestBodyTriggersField> item : value) {
143        elementSerializer.serialize(item, gen, serializers);
144      }
145      gen.writeEndArray();
146    }
147  }
148}