package by.istin.android.xcore.gson; import android.content.ContentValues; import com.google.gson.JsonElement; import com.google.gson.JsonParser; import by.istin.android.xcore.annotations.dbEntities; /** * Created by IstiN on 6.12.13. */ public class DefaultGsonEntitiesConverter implements IGsonEntitiesConverter { public static final String KEY_VALUE = "value"; @Override public void convert(IGsonEntitiesConverter.Params params) { DBContentValuesAdapter contentValuesAdapter = new DBContentValuesAdapter(params.getClazz(), params.getDataSourceRequest(), params.getDbConnection(), params.getDbHelper()); for (int i = 0; i < params.getJsonArray().size(); i++) { JsonElement item = params.getJsonArray().get(i); ContentValues subEntity; if (item.isJsonPrimitive()) { dbEntities entity = params.getEntity(); if (entity.ignorePrimitive()) continue; JsonParser parser = new JsonParser(); String itemAsString = item.getAsString(); if (itemAsString.contains("\"")) { itemAsString = itemAsString.replace("\"", """); } item = parser.parse("{\"value\": \"" + itemAsString + "\"}"); subEntity = contentValuesAdapter.deserializeContentValues(params.getContentValues(), i, item, params.getType(), params.getJsonDeserializationContext()); } else { subEntity = contentValuesAdapter.deserializeContentValues(params.getContentValues(), i, item, params.getType(), params.getJsonDeserializationContext()); } if (subEntity == null) { continue; } subEntity.put(params.getForeignKey(), params.getId()); if (params.getBeforeListUpdate() != null) { params.getBeforeListUpdate().onBeforeListUpdate(params.getDbHelper(), params.getDbConnection(), params.getDataSourceRequest(), i, subEntity); } params.getDbHelper().updateOrInsert(params.getDataSourceRequest(), params.getDbConnection(), params.getClazz(), subEntity); } } }