001package com.box.sdk; 002 003import java.util.ArrayList; 004import java.util.HashMap; 005 006import com.eclipsesource.json.JsonObject; 007import com.eclipsesource.json.JsonValue; 008 009/** 010 * Represents an individual item returned by a metadata query item. 011 * 012 * <p>Unless otherwise noted, the methods in this class can throw an unchecked {@link BoxAPIException} (unchecked 013 * meaning that the compiler won't force you to handle it) if an error occurs. If you wish to implement custom error 014 * handling for errors related to the Box REST API, you should capture this exception explicitly. 015 */ 016public class BoxMetadataQueryItem extends BoxJSONObject { 017 private BoxItem.Info item; 018 private HashMap<String, ArrayList<Metadata>> metadata; 019 private BoxAPIConnection api; 020 021 /** 022 * Construct a BoxMetadataQueryItem. 023 * 024 * @param jsonObject the parsed JSON object. 025 * @param api the API connection to be used to fetch interacted item 026 */ 027 public BoxMetadataQueryItem(JsonObject jsonObject, BoxAPIConnection api) { 028 super(jsonObject); 029 this.api = api; 030 } 031 032 @Override 033 protected void parseJSONMember(JsonObject.Member member) { 034 super.parseJSONMember(member); 035 036 String memberName = member.getName(); 037 JsonValue value = member.getValue(); 038 if (memberName.equals("item")) { 039 String id = value.asObject().get("id").asString(); 040 String type = value.asObject().get("type").asString(); 041 this.item = new BoxFile(this.api, id).new Info(value.asObject()); 042 if (type.equals("folder")) { 043 BoxFolder folder = new BoxFolder(this.api, id); 044 this.item = folder.new Info(value.asObject()); 045 } else if (type.equals("file")) { 046 BoxFile file = new BoxFile(this.api, id); 047 this.item = file.new Info(value.asObject()); 048 } else if (type.equals("web_link")) { 049 BoxWebLink link = new BoxWebLink(this.api, id); 050 this.item = link.new Info(value.asObject()); 051 } else { 052 assert false : "Unsupported item type: " + type; 053 throw new BoxAPIException("Unsupported item type: " + type); 054 } 055 } else if (memberName.equals("metadata")) { 056 this.metadata = new HashMap<String, ArrayList<Metadata>>(); 057 JsonObject metadataObject = value.asObject(); 058 for (JsonObject.Member enterprise : metadataObject) { 059 String enterpriseName = enterprise.getName(); 060 JsonObject templates = enterprise.getValue().asObject(); 061 ArrayList<Metadata> enterpriseMetadataArray = new ArrayList<Metadata>(); 062 for (JsonObject.Member template : templates) { 063 String templateName = template.getName(); 064 JsonObject templateValue = template.getValue().asObject(); 065 Metadata metadataOfTemplate = new Metadata(templateValue); 066 metadataOfTemplate.add("/$scope", enterpriseName); 067 metadataOfTemplate.add("/$template", templateName); 068 enterpriseMetadataArray.add(metadataOfTemplate); 069 } 070 this.metadata.put(enterpriseName, enterpriseMetadataArray); 071 } 072 } 073 } 074 075 /** 076 * Get the item which was interacted with. 077 * 078 * @return box item 079 */ 080 public BoxItem.Info getItem() { 081 return this.item; 082 } 083 084 /** 085 * Get the metadata on the item. 086 * 087 * @return HashMap of metadata 088 */ 089 public HashMap<String, ArrayList<Metadata>> getMetadata() { 090 return this.metadata; 091 } 092 093}