001package com.box.sdk.internal.utils;
002
003import java.util.HashMap;
004import java.util.Map;
005
006import com.box.sdk.Metadata;
007import com.eclipsesource.json.JsonObject;
008
009/**
010 * Utility class for constructing metadata map from json object.
011 */
012public class MetadataUtils {
013
014    /**
015     * Only static members.
016     */
017    protected MetadataUtils() {
018    }
019
020    /**
021     * Creates a map of metadata from json.
022     * @param jsonObject metadata json object for metadata field in get /files?fileds=,etadata.scope.template response
023     * @return Map of String as key a value another Map with a String key and Metadata value
024     */
025    public static Map<String, Map<String, Metadata>> parseAndPopulateMetadataMap(JsonObject jsonObject) {
026        Map<String, Map<String, Metadata>> metadataMap = new HashMap<String, Map<String, Metadata>>();
027        //Parse all templates
028        for (JsonObject.Member templateMember : jsonObject) {
029            if (templateMember.getValue().isNull()) {
030                continue;
031            } else {
032                String templateName = templateMember.getName();
033                Map<String, Metadata> scopeMap = metadataMap.get(templateName);
034                //If templateName doesn't yet exist then create an entry with empty scope map
035                if (scopeMap == null) {
036                    scopeMap = new HashMap<String, Metadata>();
037                    metadataMap.put(templateName, scopeMap);
038                }
039                //Parse all scopes in a template
040                for (JsonObject.Member scopeMember : templateMember.getValue().asObject()) {
041                    String scope = scopeMember.getName();
042                    Metadata metadataObject = new Metadata(scopeMember.getValue().asObject());
043                    scopeMap.put(scope, metadataObject);
044                }
045            }
046
047        }
048        return metadataMap;
049    }
050}