001package com.box.sdkgen.schemas.resource;
002
003import com.box.sdkgen.internal.OneOfTwo;
004import com.box.sdkgen.schemas.filemini.FileMini;
005import com.box.sdkgen.schemas.foldermini.FolderMini;
006import com.box.sdkgen.serialization.json.EnumWrapper;
007import com.box.sdkgen.serialization.json.JsonManager;
008import com.fasterxml.jackson.core.JsonParser;
009import com.fasterxml.jackson.databind.DeserializationContext;
010import com.fasterxml.jackson.databind.JsonDeserializer;
011import com.fasterxml.jackson.databind.JsonMappingException;
012import com.fasterxml.jackson.databind.JsonNode;
013import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
014import com.fasterxml.jackson.databind.annotation.JsonSerialize;
015import java.io.IOException;
016
017@JsonDeserialize(using = Resource.ResourceDeserializer.class)
018@JsonSerialize(using = OneOfTwo.OneOfTwoSerializer.class)
019public class Resource extends OneOfTwo<FolderMini, FileMini> {
020
021  protected final String sequenceId;
022
023  protected final String name;
024
025  protected final String id;
026
027  protected final String etag;
028
029  protected final String type;
030
031  public Resource(FolderMini folderMini) {
032    super(folderMini, null);
033    this.sequenceId = folderMini.getSequenceId();
034    this.name = folderMini.getName();
035    this.id = folderMini.getId();
036    this.etag = folderMini.getEtag();
037    this.type = EnumWrapper.convertToString(folderMini.getType());
038  }
039
040  public Resource(FileMini fileMini) {
041    super(null, fileMini);
042    this.sequenceId = fileMini.getSequenceId();
043    this.name = fileMini.getName();
044    this.id = fileMini.getId();
045    this.etag = fileMini.getEtag();
046    this.type = EnumWrapper.convertToString(fileMini.getType());
047  }
048
049  public boolean isFolderMini() {
050    return value0 != null;
051  }
052
053  public FolderMini getFolderMini() {
054    return value0;
055  }
056
057  public boolean isFileMini() {
058    return value1 != null;
059  }
060
061  public FileMini getFileMini() {
062    return value1;
063  }
064
065  public String getSequenceId() {
066    return sequenceId;
067  }
068
069  public String getName() {
070    return name;
071  }
072
073  public String getId() {
074    return id;
075  }
076
077  public String getEtag() {
078    return etag;
079  }
080
081  public String getType() {
082    return type;
083  }
084
085  static class ResourceDeserializer extends JsonDeserializer<Resource> {
086
087    public ResourceDeserializer() {
088      super();
089    }
090
091    @Override
092    public Resource deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException {
093      JsonNode node = JsonManager.jsonToSerializedData(jp);
094      JsonNode discriminant0 = node.get("type");
095      if (!(discriminant0 == null)) {
096        switch (discriminant0.asText()) {
097          case "folder":
098            return new Resource(JsonManager.deserialize(node, FolderMini.class));
099          case "file":
100            return new Resource(JsonManager.deserialize(node, FileMini.class));
101        }
102      }
103      throw new JsonMappingException(jp, "Unable to deserialize Resource");
104    }
105  }
106}