package com.gettingmobile.google.reader.rest; import com.gettingmobile.google.reader.ElementId; import com.gettingmobile.rest.entity.JsonAdapter; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import java.util.Iterator; public final class SortOrderJsonAdapter implements JsonAdapter<StreamContentOrder> { private static final String ID_SUBSCRIPTION_ORDERING = "subscription-ordering"; private static final int SORT_ITEM_LENGTH = 8; @Override public StreamContentOrder create() { return new StreamContentOrder(); } @SuppressWarnings("unchecked") @Override public StreamContentOrder read(JSONObject json) throws JSONException { final StreamContentOrder sortOrder = create(); final JSONObject streamPrefs = json.optJSONObject("streamprefs"); if (streamPrefs != null) { for (Iterator<String> it = streamPrefs.keys(); it.hasNext(); ) { final String key = it.next(); final JSONArray streamValues = streamPrefs.optJSONArray(key); if (streamValues != null) { for (int i = 0; i < streamValues.length(); ++i) { final JSONObject value = streamValues.getJSONObject(i); final String id = value.optString("id"); if (ID_SUBSCRIPTION_ORDERING.equals(id)) { sortOrder.put(new ElementId(key), splitSortIds(value.getString("value"))); } } } } } return sortOrder; } protected String[] splitSortIds(String sortIdString) { assert (sortIdString.length() % SORT_ITEM_LENGTH) == 0; final int count = sortIdString.length() / SORT_ITEM_LENGTH; final String[] sortIds = new String[count]; for (int i = 0; i < count; ++i) { sortIds[i] = sortIdString.substring(i * SORT_ITEM_LENGTH, i * SORT_ITEM_LENGTH + SORT_ITEM_LENGTH); } return sortIds; } }