content: /**
   * Copyright 2010-present Facebook.
   *
   * Licensed under the Apache License, Version 2.0 (the "License");
   * you may not use this file except in compliance with the License.
   * You may obtain a copy of the License at
   *
   *    http://www.apache.org/licenses/LICENSE-2.0
   *
   * Unless required by applicable law or agreed to in writing, software
   * distributed under the License is distributed on an "AS IS" BASIS,
   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   * See the License for the specific language governing permissions and
   * limitations under the License.
   */
  
  package com.facebook.model;
  
  import android.annotation.SuppressLint;
  import org.json.JSONException;
  import org.json.JSONObject;
  
  import java.util.*;
  
  class JsonUtil {
      static void jsonObjectClear(JSONObject jsonObject) {
          @SuppressWarnings("unchecked")
          Iterator<String> keys = (Iterator<String>) jsonObject.keys();
          while (keys.hasNext()) {
              keys.next();
              keys.remove();
          }
      }
  
      static boolean jsonObjectContainsValue(JSONObject jsonObject, Object value) {
          @SuppressWarnings("unchecked")
          Iterator<String> keys = (Iterator<String>) jsonObject.keys();
          while (keys.hasNext()) {
              Object thisValue = jsonObject.opt(keys.next());
              if (thisValue != null && thisValue.equals(value)) {
                  return true;
              }
          }
          return false;
      }
  
      private final static class JSONObjectEntry implements Map.Entry<String, Object> {
          private final String key;
          private final Object value;
  
          JSONObjectEntry(String key, Object value) {
              this.key = key;
              this.value = value;
          }
  
          @SuppressLint("FieldGetter")
          @Override
          public String getKey() {
              return this.key;
          }
  
          @Override
          public Object getValue() {
              return this.value;
          }
  
          @Override
          public Object setValue(Object object) {
              throw new UnsupportedOperationException("JSONObjectEntry is immutable");
          }
  
      }
  
      static Set<Map.Entry<String, Object>> jsonObjectEntrySet(JSONObject jsonObject) {
          HashSet<Map.Entry<String, Object>> result = new HashSet<Map.Entry<String, Object>>();
  
          @SuppressWarnings("unchecked")
          Iterator<String> keys = (Iterator<String>) jsonObject.keys();
          while (keys.hasNext()) {
              String key = keys.next();
              Object value = jsonObject.opt(key);
              result.add(new JSONObjectEntry(key, value));
          }
  
          return result;
      }
  
      static Set<String> jsonObjectKeySet(JSONObject jsonObject) {
          HashSet<String> result = new HashSet<String>();
  
          @SuppressWarnings("unchecked")
          Iterator<String> keys = (Iterator<String>) jsonObject.keys();
          while (keys.hasNext()) {
              result.add(keys.next());
          }
  
          return result;
      }
  
      static void jsonObjectPutAll(JSONObject jsonObject, Map<String, Object> map) {
          Set<Map.Entry<String, Object>> entrySet = map.entrySet();
          for (Map.Entry<String, Object> entry : entrySet) {
              try {
                  jsonObject.putOpt(entry.getKey(), entry.getValue());
              } catch (JSONException e) {
                  throw new IllegalArgumentException(e);
              }
          }
      }
  
      static Collection<Object> jsonObjectValues(JSONObject jsonObject) {
          ArrayList<Object> result = new ArrayList<Object>();
  
          @SuppressWarnings("unchecked")
          Iterator<String> keys = (Iterator<String>) jsonObject.keys();
          while (keys.hasNext()) {
              result.add(jsonObject.opt(keys.next()));
          }
  
          return result;
      }
  }
  