001package com.box.sdkgen.schemas.signtemplate;
002
003import com.box.sdkgen.internal.NullableFieldTracker;
004import com.box.sdkgen.internal.SerializableObject;
005import com.box.sdkgen.serialization.json.EnumWrapper;
006import com.box.sdkgen.serialization.json.Valuable;
007import com.fasterxml.jackson.annotation.JsonFilter;
008import com.fasterxml.jackson.annotation.JsonProperty;
009import com.fasterxml.jackson.core.JsonGenerator;
010import com.fasterxml.jackson.core.JsonParser;
011import com.fasterxml.jackson.databind.DeserializationContext;
012import com.fasterxml.jackson.databind.JsonDeserializer;
013import com.fasterxml.jackson.databind.JsonNode;
014import com.fasterxml.jackson.databind.JsonSerializer;
015import com.fasterxml.jackson.databind.SerializerProvider;
016import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
017import com.fasterxml.jackson.databind.annotation.JsonSerialize;
018import java.io.IOException;
019import java.util.ArrayList;
020import java.util.List;
021import java.util.Objects;
022
023@JsonFilter("nullablePropertyFilter")
024public class SignTemplateAdditionalInfoField extends SerializableObject {
025
026  /** Non editable fields. */
027  @JsonDeserialize(using = NonEditableDeserializer.class)
028  @JsonSerialize(using = NonEditableSerializer.class)
029  @JsonProperty("non_editable")
030  protected List<EnumWrapper<SignTemplateAdditionalInfoNonEditableField>> nonEditable;
031
032  /** Required fields. */
033  protected SignTemplateAdditionalInfoRequiredField required;
034
035  public SignTemplateAdditionalInfoField() {
036    super();
037  }
038
039  protected SignTemplateAdditionalInfoField(Builder builder) {
040    super();
041    this.nonEditable = builder.nonEditable;
042    this.required = builder.required;
043    markNullableFieldsAsSet(builder.getExplicitlySetNullableFields());
044  }
045
046  public List<EnumWrapper<SignTemplateAdditionalInfoNonEditableField>> getNonEditable() {
047    return nonEditable;
048  }
049
050  public SignTemplateAdditionalInfoRequiredField getRequired() {
051    return required;
052  }
053
054  @Override
055  public boolean equals(Object o) {
056    if (this == o) {
057      return true;
058    }
059    if (o == null || getClass() != o.getClass()) {
060      return false;
061    }
062    SignTemplateAdditionalInfoField casted = (SignTemplateAdditionalInfoField) o;
063    return Objects.equals(nonEditable, casted.nonEditable)
064        && Objects.equals(required, casted.required);
065  }
066
067  @Override
068  public int hashCode() {
069    return Objects.hash(nonEditable, required);
070  }
071
072  @Override
073  public String toString() {
074    return "SignTemplateAdditionalInfoField{"
075        + "nonEditable='"
076        + nonEditable
077        + '\''
078        + ", "
079        + "required='"
080        + required
081        + '\''
082        + "}";
083  }
084
085  public static class Builder extends NullableFieldTracker {
086
087    protected List<EnumWrapper<SignTemplateAdditionalInfoNonEditableField>> nonEditable;
088
089    protected SignTemplateAdditionalInfoRequiredField required;
090
091    public Builder nonEditable(List<? extends Valuable> nonEditable) {
092      this.nonEditable =
093          EnumWrapper.wrapValuableEnumList(
094              nonEditable, SignTemplateAdditionalInfoNonEditableField.class);
095      return this;
096    }
097
098    public Builder required(SignTemplateAdditionalInfoRequiredField required) {
099      this.required = required;
100      return this;
101    }
102
103    public SignTemplateAdditionalInfoField build() {
104      return new SignTemplateAdditionalInfoField(this);
105    }
106  }
107
108  public static class NonEditableDeserializer
109      extends JsonDeserializer<List<EnumWrapper<SignTemplateAdditionalInfoNonEditableField>>> {
110
111    public final JsonDeserializer<EnumWrapper<SignTemplateAdditionalInfoNonEditableField>>
112        elementDeserializer;
113
114    public NonEditableDeserializer() {
115      super();
116      this.elementDeserializer =
117          new SignTemplateAdditionalInfoNonEditableField
118              .SignTemplateAdditionalInfoNonEditableFieldDeserializer();
119    }
120
121    @Override
122    public List<EnumWrapper<SignTemplateAdditionalInfoNonEditableField>> deserialize(
123        JsonParser p, DeserializationContext ctxt) throws IOException {
124      JsonNode node = p.getCodec().readTree(p);
125      List<EnumWrapper<SignTemplateAdditionalInfoNonEditableField>> elements = new ArrayList<>();
126      for (JsonNode item : node) {
127        JsonParser pa = item.traverse(p.getCodec());
128        pa.nextToken();
129        elements.add(elementDeserializer.deserialize(pa, ctxt));
130      }
131      return elements;
132    }
133  }
134
135  public static class NonEditableSerializer
136      extends JsonSerializer<List<EnumWrapper<SignTemplateAdditionalInfoNonEditableField>>> {
137
138    public final JsonSerializer<EnumWrapper<SignTemplateAdditionalInfoNonEditableField>>
139        elementSerializer;
140
141    public NonEditableSerializer() {
142      super();
143      this.elementSerializer =
144          new SignTemplateAdditionalInfoNonEditableField
145              .SignTemplateAdditionalInfoNonEditableFieldSerializer();
146    }
147
148    @Override
149    public void serialize(
150        List<EnumWrapper<SignTemplateAdditionalInfoNonEditableField>> value,
151        JsonGenerator gen,
152        SerializerProvider serializers)
153        throws IOException {
154      gen.writeStartArray();
155      for (EnumWrapper<SignTemplateAdditionalInfoNonEditableField> item : value) {
156        elementSerializer.serialize(item, gen, serializers);
157      }
158      gen.writeEndArray();
159    }
160  }
161}