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}