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}