package com.worklight.jsonstore.database;

import android.content.Context;
import com.worklight.jsonstore.jackson.JacksonSerializedJSONArray;
import com.worklight.jsonstore.jackson.JacksonSerializedJSONObject;
import com.worklight.jsonstore.util.JSONStoreUtil;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

public class DatabaseSchema
{
  private TreeMap<String, SearchFieldType> internalNodes;
  private String name;
  private TreeMap<String, SearchFieldType> nodes;
  private TreeMap<String, SearchFieldType> safeNodes;

  public DatabaseSchema(String paramString)
  {
    this.name = paramString;
    this.nodes = new TreeMap();
    this.safeNodes = new TreeMap();
    this.internalNodes = new TreeMap();
    try
    {
      this.internalNodes.put("_deleted", SearchFieldType.BOOLEAN);
      this.internalNodes.put("_dirty", SearchFieldType.NUMBER);
      this.internalNodes.put("_id", SearchFieldType.INTEGER);
      this.internalNodes.put("json", SearchFieldType.STRING);
      this.internalNodes.put("_operation", SearchFieldType.STRING);
      return;
    }
    catch (Throwable localThrowable)
    {
    }
  }

  public DatabaseSchema(String paramString, Map<String, SearchFieldType> paramMap)
    throws Throwable
  {
    this(paramString);
    Iterator localIterator = paramMap.keySet().iterator();
    while (localIterator.hasNext())
    {
      String str = (String)localIterator.next();
      addSearchField(str, (SearchFieldType)paramMap.get(str));
    }
  }

  private void addSearchField(String paramString, SearchFieldType paramSearchFieldType)
    throws Throwable
  {
    if (paramString == null)
      throw new Throwable("invalid search field (null) specified");
    String str1 = paramString.trim();
    if ((str1.equals("")) || (str1.indexOf("..") != -1) || (str1.startsWith(".")) || (str1.endsWith(".")))
      throw new Throwable("invalid search field (\"" + str1 + "\") " + "specified");
    String str2 = str1.toLowerCase();
    if ((this.nodes.containsKey(str2)) || (this.internalNodes.containsKey(str2)))
      throw new Throwable("search field with name \"" + str1 + "\" " + " is used internally and cannot be reused");
    this.nodes.put(str2, paramSearchFieldType);
    this.safeNodes.put(JSONStoreUtil.getDatabaseSafeSearchFieldName(str2), paramSearchFieldType);
  }

  private String encodeJSONArrayAsString(JSONArray paramJSONArray, String paramString)
    throws JSONException
  {
    int i = paramJSONArray.length();
    StringBuilder localStringBuilder = new StringBuilder();
    for (int j = 0; j < i; j++)
    {
      Object localObject = paramJSONArray.get(j);
      if ((localObject instanceof JSONObject))
        localObject = locateChildInObject((JSONObject)localObject, paramString);
      if (localObject != null)
      {
        localStringBuilder.append(localObject.toString());
        if (j < i - 1)
          localStringBuilder.append("-@-");
      }
    }
    return localStringBuilder.toString();
  }

  private Object getValueFromObjectCaseInsensitive(JSONObject paramJSONObject, String paramString)
  {
    JSONArray localJSONArray = paramJSONObject.names();
    if (localJSONArray == null);
    while (true)
    {
      return null;
      int i = localJSONArray.length();
      for (int j = 0; j < i; j++)
      {
        String str = localJSONArray.optString(j);
        if ((str != null) && (str.toLowerCase().equals(paramString)))
          return paramJSONObject.opt(str);
      }
    }
  }

  private Object locateChildInObject(JSONObject paramJSONObject, String paramString)
  {
    int i = paramString.indexOf('.');
    if (i == -1)
    {
      Object localObject2 = paramJSONObject.opt(paramString);
      if (localObject2 == null)
        localObject2 = getValueFromObjectCaseInsensitive(paramJSONObject, paramString);
      while (!(localObject2 instanceof JSONArray))
        return localObject2;
      try
      {
        String str2 = encodeJSONArrayAsString((JSONArray)localObject2, paramString);
        return str2;
      }
      catch (JSONException localJSONException2)
      {
        return null;
      }
    }
    try
    {
      Object localObject1 = paramJSONObject.get(paramString.substring(0, i));
      if ((localObject1 instanceof JSONObject))
        return locateChildInObject((JSONObject)localObject1, paramString.substring(i + 1));
      if ((localObject1 instanceof JSONArray))
      {
        String str1 = encodeJSONArrayAsString((JSONArray)localObject1, paramString.substring(i + 1));
        return str1;
      }
      return null;
    }
    catch (JSONException localJSONException1)
    {
    }
    return null;
  }

  private void mergeIntoObject(JSONObject paramJSONObject, String paramString, Object paramObject)
    throws Throwable
  {
    int i = paramString.indexOf('.');
    if (i == -1)
    {
      mergeValues(paramJSONObject, paramString, paramObject);
      return;
    }
    String str = paramString.substring(0, i);
    Object localObject = paramJSONObject.optJSONObject(str);
    if (localObject == null)
    {
      localObject = new JacksonSerializedJSONObject();
      paramJSONObject.put(str, localObject);
    }
    mergeIntoObject((JSONObject)localObject, paramString.substring(i + 1), paramObject);
  }

  private void mergeValues(JSONObject paramJSONObject, String paramString, Object paramObject)
    throws Throwable
  {
    Object localObject = paramJSONObject.opt(paramString);
    if (localObject == null)
    {
      paramJSONObject.put(paramString, paramObject);
      return;
    }
    if ((localObject instanceof JSONArray))
    {
      JSONArray localJSONArray = (JSONArray)localObject;
      int i = localJSONArray.length();
      for (int j = 0; ; j++)
      {
        if (j >= i)
          break label69;
        if (localJSONArray.opt(j) == paramObject)
          break;
      }
      label69: localJSONArray.put(paramObject);
      return;
    }
    JacksonSerializedJSONArray localJacksonSerializedJSONArray = new JacksonSerializedJSONArray();
    localJacksonSerializedJSONArray.put(localObject);
    localJacksonSerializedJSONArray.put(paramObject);
    paramJSONObject.put(paramString, localJacksonSerializedJSONArray);
  }

  private JSONObject normalizeObject(JSONObject paramJSONObject)
    throws Throwable
  {
    Iterator localIterator = paramJSONObject.keys();
    JacksonSerializedJSONObject localJacksonSerializedJSONObject = new JacksonSerializedJSONObject();
    if (localIterator == null);
    while (true)
    {
      return localJacksonSerializedJSONObject;
      while (localIterator.hasNext())
      {
        String str = (String)localIterator.next();
        mergeIntoObject(localJacksonSerializedJSONObject, str, normalizeOrCopyObject(paramJSONObject.get(str)));
      }
    }
  }

  private Object normalizeOrCopyObject(Object paramObject)
    throws Throwable
  {
    Object localObject;
    if ((paramObject instanceof JSONObject))
      localObject = normalizeObject((JSONObject)paramObject);
    while (true)
    {
      return localObject;
      if (!(paramObject instanceof JSONArray))
        break;
      localObject = new JacksonSerializedJSONArray();
      JSONArray localJSONArray = (JSONArray)paramObject;
      int i = localJSONArray.length();
      for (int j = 0; j < i; j++)
        ((JSONArray)localObject).put(normalizeOrCopyObject(localJSONArray.get(j)));
    }
    return paramObject;
  }

  public boolean equals(Object paramObject)
  {
    if (!(paramObject instanceof DatabaseSchema))
      return false;
    return ((DatabaseSchema)paramObject).nodes.equals(this.nodes);
  }

  public boolean equals(TreeMap<String, String> paramTreeMap)
  {
    if (paramTreeMap.size() != this.nodes.size() + this.internalNodes.size());
    label142: 
    while (true)
    {
      return false;
      Iterator localIterator = paramTreeMap.keySet().iterator();
      if (!localIterator.hasNext())
        break;
      String str1 = (String)localIterator.next();
      String str2 = JSONStoreUtil.getDatabaseSafeSearchFieldName(str1);
      if (this.safeNodes.containsKey(str2))
      {
        localSearchFieldType = (SearchFieldType)this.nodes.get(str2);
        if (localSearchFieldType != null);
      }
      for (SearchFieldType localSearchFieldType = (SearchFieldType)this.safeNodes.get(str2); ; localSearchFieldType = (SearchFieldType)this.internalNodes.get(str2))
      {
        if (localSearchFieldType == null)
          break label142;
        if (localSearchFieldType.getMappedType().equals(paramTreeMap.get(str1)))
          break;
        return false;
      }
    }
    return true;
  }

  public String getName()
  {
    return this.name;
  }

  public Iterator<String> getSearchFieldIterator()
  {
    return this.nodes.keySet().iterator();
  }

  public SearchFieldType getSearchFieldType(String paramString)
  {
    return (SearchFieldType)this.nodes.get(paramString);
  }

  public boolean isSchemaMismatched(String paramString, DatabaseSchema paramDatabaseSchema, Context paramContext)
  {
    DatabaseManager localDatabaseManager = DatabaseManager.getInstance();
    try
    {
      DatabaseAccessor localDatabaseAccessor = localDatabaseManager.getDatabase(paramString);
      if (!localDatabaseAccessor.getSchema().equals(paramDatabaseSchema))
        return true;
    }
    catch (Exception localException)
    {
      return localDatabaseManager.checkDatabaseAgainstSchema(paramContext, paramString, paramDatabaseSchema);
    }
    return false;
  }

  public Map<String, Object> mapObject(JSONObject paramJSONObject1, JSONObject paramJSONObject2)
    throws Throwable
  {
    Set localSet = this.nodes.keySet();
    TreeMap localTreeMap = new TreeMap();
    JSONObject localJSONObject = normalizeObject(paramJSONObject1);
    Iterator localIterator = localSet.iterator();
    while (localIterator.hasNext())
    {
      String str = (String)localIterator.next();
      Object localObject1 = locateChildInObject(localJSONObject, str);
      if (localObject1 != null)
        localTreeMap.put(str, localObject1);
      if (paramJSONObject2 != null)
      {
        Object localObject2 = locateChildInObject(paramJSONObject2, str);
        if (localObject2 != null)
          localTreeMap.put(str, localObject2);
      }
    }
    return localTreeMap;
  }
}

/* Location:           C:\Documents and Settings\Cesar Cabello Cea\Mis documentos\Downloads\apk-downloader\com.ikea.kompis-6_dex2jar.jar
 * Qualified Name:     com.worklight.jsonstore.database.DatabaseSchema
 * JD-Core Version:    0.6.2
 */