001package com.box.sdkgen.schemas.skillcard;
002
003import com.box.sdkgen.internal.OneOfFour;
004import com.box.sdkgen.schemas.keywordskillcard.KeywordSkillCard;
005import com.box.sdkgen.schemas.statusskillcard.StatusSkillCard;
006import com.box.sdkgen.schemas.timelineskillcard.TimelineSkillCard;
007import com.box.sdkgen.schemas.transcriptskillcard.TranscriptSkillCard;
008import com.box.sdkgen.serialization.json.EnumWrapper;
009import com.box.sdkgen.serialization.json.JsonManager;
010import com.fasterxml.jackson.core.JsonParser;
011import com.fasterxml.jackson.databind.DeserializationContext;
012import com.fasterxml.jackson.databind.JsonDeserializer;
013import com.fasterxml.jackson.databind.JsonMappingException;
014import com.fasterxml.jackson.databind.JsonNode;
015import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
016import com.fasterxml.jackson.databind.annotation.JsonSerialize;
017import java.io.IOException;
018import java.time.OffsetDateTime;
019
020@JsonDeserialize(using = SkillCard.SkillCardDeserializer.class)
021@JsonSerialize(using = OneOfFour.OneOfFourSerializer.class)
022public class SkillCard
023    extends OneOfFour<KeywordSkillCard, TimelineSkillCard, TranscriptSkillCard, StatusSkillCard> {
024
025  protected final OffsetDateTime createdAt;
026
027  protected final String type;
028
029  protected final String skillCardType;
030
031  public SkillCard(KeywordSkillCard keywordSkillCard) {
032    super(keywordSkillCard, null, null, null);
033    this.createdAt = keywordSkillCard.getCreatedAt();
034    this.type = EnumWrapper.convertToString(keywordSkillCard.getType());
035    this.skillCardType = EnumWrapper.convertToString(keywordSkillCard.getSkillCardType());
036  }
037
038  public SkillCard(TimelineSkillCard timelineSkillCard) {
039    super(null, timelineSkillCard, null, null);
040    this.createdAt = timelineSkillCard.getCreatedAt();
041    this.type = EnumWrapper.convertToString(timelineSkillCard.getType());
042    this.skillCardType = EnumWrapper.convertToString(timelineSkillCard.getSkillCardType());
043  }
044
045  public SkillCard(TranscriptSkillCard transcriptSkillCard) {
046    super(null, null, transcriptSkillCard, null);
047    this.createdAt = transcriptSkillCard.getCreatedAt();
048    this.type = EnumWrapper.convertToString(transcriptSkillCard.getType());
049    this.skillCardType = EnumWrapper.convertToString(transcriptSkillCard.getSkillCardType());
050  }
051
052  public SkillCard(StatusSkillCard statusSkillCard) {
053    super(null, null, null, statusSkillCard);
054    this.createdAt = statusSkillCard.getCreatedAt();
055    this.type = EnumWrapper.convertToString(statusSkillCard.getType());
056    this.skillCardType = EnumWrapper.convertToString(statusSkillCard.getSkillCardType());
057  }
058
059  public boolean isKeywordSkillCard() {
060    return value0 != null;
061  }
062
063  public KeywordSkillCard getKeywordSkillCard() {
064    return value0;
065  }
066
067  public boolean isTimelineSkillCard() {
068    return value1 != null;
069  }
070
071  public TimelineSkillCard getTimelineSkillCard() {
072    return value1;
073  }
074
075  public boolean isTranscriptSkillCard() {
076    return value2 != null;
077  }
078
079  public TranscriptSkillCard getTranscriptSkillCard() {
080    return value2;
081  }
082
083  public boolean isStatusSkillCard() {
084    return value3 != null;
085  }
086
087  public StatusSkillCard getStatusSkillCard() {
088    return value3;
089  }
090
091  public OffsetDateTime getCreatedAt() {
092    return createdAt;
093  }
094
095  public String getType() {
096    return type;
097  }
098
099  public String getSkillCardType() {
100    return skillCardType;
101  }
102
103  static class SkillCardDeserializer extends JsonDeserializer<SkillCard> {
104
105    public SkillCardDeserializer() {
106      super();
107    }
108
109    @Override
110    public SkillCard deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException {
111      JsonNode node = JsonManager.jsonToSerializedData(jp);
112      JsonNode discriminant0 = node.get("skill_card_type");
113      if (!(discriminant0 == null)) {
114        switch (discriminant0.asText()) {
115          case "keyword":
116            return new SkillCard(JsonManager.deserialize(node, KeywordSkillCard.class));
117          case "timeline":
118            return new SkillCard(JsonManager.deserialize(node, TimelineSkillCard.class));
119          case "transcript":
120            return new SkillCard(JsonManager.deserialize(node, TranscriptSkillCard.class));
121          case "status":
122            return new SkillCard(JsonManager.deserialize(node, StatusSkillCard.class));
123        }
124      }
125      throw new JsonMappingException(jp, "Unable to deserialize SkillCard");
126    }
127  }
128}