// Decompiled by Jad v1.5.8e. Copyright 2001 Pavel Kouznetsov. // Jad home page: http://www.geocities.com/kpdus/jad.html // Decompiler options: braces fieldsfirst space lnc package com.olio.olios.model.strategies; import android.content.ContentResolver; import android.content.ContentValues; import android.database.Cursor; import android.net.Uri; import com.olio.olios.model.OlioDatabaseHelper; import com.olio.olios.model.OlioDatabaseUtils; import com.olio.olios.model.record.DatabaseRecordMixins; import com.olio.olios.model.record.SerializedRecord; import com.olio.util.ALog; import java.util.ArrayList; import java.util.Iterator; import java.util.List; // Referenced classes of package com.olio.olios.model.strategies: // CacheStrategy, CacheStrategyUtils public class SerializedRecordCacheStrategy implements CacheStrategy { public static final String SERIALIZED_RECORD_OBJECT_ID = "objectId"; public static final String SERIALIZED_RECORD_TYPE = "type"; public static final String SERIALIZED_RECORD_UNIT_ID = "unitId"; public static final String SERIALIZED_RECORD_UNIT_ID_IS_NOT_NULL_PARAM = "unitIdNotNull"; private final List mCachedSerializedRecords = new ArrayList(); private ContentResolver mContentResolver; private OlioDatabaseHelper mDatabaseHelper; public SerializedRecordCacheStrategy(ContentResolver contentresolver, OlioDatabaseHelper oliodatabasehelper) { mContentResolver = contentresolver; mDatabaseHelper = oliodatabasehelper; } private void addSerializedRecordToContentValuesList(SerializedRecord serializedrecord, List list, boolean flag) { serializedrecord.setEncodeSerializedObjects(flag); ContentValues contentvalues = DatabaseRecordMixins.valuesForRecord(serializedrecord); contentvalues.put("_id", Integer.valueOf(serializedrecord.getDatabaseId())); list.add(contentvalues); } private int deleteSerializedRecordWithSpecificUri(Uri uri) { int j = Integer.parseInt(uri.getLastPathSegment()); int i = 0; _L5: if (i >= mCachedSerializedRecords.size()) goto _L2; else goto _L1 _L1: if (j != ((SerializedRecord)mCachedSerializedRecords.get(i)).getDatabaseId()) goto _L4; else goto _L3 _L3: mCachedSerializedRecords.remove(i); _L2: return OlioDatabaseUtils.delete(mContentResolver, uri, null, null, mDatabaseHelper); _L4: i++; goto _L5 NumberFormatException numberformatexception; numberformatexception; ALog.e("Error deleting item in the cache. Uri(%s) - Error: %s", new Object[] { uri, numberformatexception }); mCachedSerializedRecords.clear(); goto _L2 } private int deleteSerializedRecordWithUnitIdNotNull(Uri uri) { String s = String.format("%s is not null", new Object[] { "unit_id" }); for (int i = mCachedSerializedRecords.size() - 1; i >= 0; i--) { if (((SerializedRecord)mCachedSerializedRecords.get(i)).getUnitId() != null) { mCachedSerializedRecords.remove(i); } } return OlioDatabaseUtils.delete(mContentResolver, uri, s, null, mDatabaseHelper); } private int deleteSerializedRecordsWithType(String s, Uri uri) { for (int i = mCachedSerializedRecords.size() - 1; i >= 0; i--) { if (s.equals(((SerializedRecord)mCachedSerializedRecords.get(i)).getType())) { mCachedSerializedRecords.remove(i); } } String s1 = String.format("%s = ?", new Object[] { "type" }); ContentResolver contentresolver = mContentResolver; OlioDatabaseHelper oliodatabasehelper = mDatabaseHelper; return OlioDatabaseUtils.delete(contentresolver, uri, s1, new String[] { s }, oliodatabasehelper); } private ContentValues[] getContentValuesFromCache(String s, String s1, String s2, String s3, boolean flag) { ArrayList arraylist = new ArrayList(); Iterator iterator = mCachedSerializedRecords.iterator(); do { if (!iterator.hasNext()) { break; } SerializedRecord serializedrecord = (SerializedRecord)iterator.next(); if (s != null) { if (s.equals(String.valueOf(serializedrecord.getDatabaseId()))) { addSerializedRecordToContentValuesList(serializedrecord, arraylist, flag); } } else if (s2 != null) { if (s1 != null) { if (s2.equals(serializedrecord.getUnitId()) && s1.equals(serializedrecord.getObject().getObjectId())) { addSerializedRecordToContentValuesList(serializedrecord, arraylist, flag); } } else if (s3 != null) { if (s2.equals(serializedrecord.getUnitId()) && s3.equals(serializedrecord.getType())) { addSerializedRecordToContentValuesList(serializedrecord, arraylist, flag); } } else { throw new IllegalArgumentException("SerializedRecord Query doesn't support an operation where unitId isn't null and the others params are null."); } } else if (s1 != null) { if (s1.equals(serializedrecord.getObject().getObjectId())) { addSerializedRecordToContentValuesList(serializedrecord, arraylist, flag); } } else if (s3 != null) { if (s3.equals(serializedrecord.getType())) { addSerializedRecordToContentValuesList(serializedrecord, arraylist, flag); } } else { addSerializedRecordToContentValuesList(serializedrecord, arraylist, flag); } } while (true); return (ContentValues[])arraylist.toArray(new ContentValues[arraylist.size()]); } private void logCache() { ALog.d("------------------", new Object[0]); ALog.d("PRINTING CACHE", new Object[0]); for (Iterator iterator = mCachedSerializedRecords.iterator(); iterator.hasNext(); ALog.d(" %s", new Object[] { (SerializedRecord)iterator.next() })) { } ALog.d("------------------", new Object[0]); } private SerializedRecord serializedRecordFromCursor(Cursor cursor) { if (cursor != null && cursor.getCount() > 0) { cursor = DatabaseRecordMixins.recordsFromCursor(cursor, SerializedRecord.staticFactory()); if (cursor != null && cursor.size() > 0) { return (SerializedRecord)cursor.get(0); } } return null; } private List serializedRecordsFromCursor(Cursor cursor) { if (cursor != null && cursor.getCount() > 0) { return DatabaseRecordMixins.recordsFromCursor(cursor, SerializedRecord.staticFactory()); } else { return null; } } public void clearCache() { synchronized (mCachedSerializedRecords) { mCachedSerializedRecords.clear(); } return; exception; list; JVM INSTR monitorexit ; throw exception; } public int delete(Uri uri, String s, String as[]) { CacheStrategyUtils.assertNullParameters(uri, s, as, getClass().getSimpleName()); s = mCachedSerializedRecords; s; JVM INSTR monitorenter ; String s1; as = uri.getQueryParameter("unitId"); s1 = uri.getQueryParameter("type"); if (!"unitIdNotNull".equals(as)) goto _L2; else goto _L1 _L1: int i = deleteSerializedRecordWithUnitIdNotNull(uri); _L4: return i; _L2: if (s1 != null) { break MISSING_BLOCK_LABEL_71; } i = deleteSerializedRecordWithSpecificUri(uri); continue; /* Loop/switch isn't completed */ i = deleteSerializedRecordsWithType(s1, uri); if (true) goto _L4; else goto _L3 _L3: uri; s; JVM INSTR monitorexit ; throw uri; } public Uri insert(Uri uri, ContentValues contentvalues) { List list = mCachedSerializedRecords; list; JVM INSTR monitorenter ; Uri uri1 = OlioDatabaseUtils.insert(mContentResolver, uri, contentvalues, mDatabaseHelper); ContentValues contentvalues1; ContentValues contentvalues2; SerializedRecord serializedrecord; SerializedRecord serializedrecord1; serializedrecord1 = null; serializedrecord = null; contentvalues2 = serializedrecord; contentvalues1 = serializedrecord1; int j = Integer.parseInt(uri1.getLastPathSegment()); contentvalues2 = serializedrecord; contentvalues1 = serializedrecord1; contentvalues = OlioDatabaseUtils.cursorForContentValues(SerializedRecord.staticColumnProjection(), new ContentValues[] { contentvalues }); contentvalues2 = contentvalues; contentvalues1 = contentvalues; serializedrecord = serializedRecordFromCursor(contentvalues); contentvalues2 = contentvalues; contentvalues1 = contentvalues; serializedrecord.setDatabaseId(j); int i = 0; _L5: contentvalues2 = contentvalues; contentvalues1 = contentvalues; if (i >= mCachedSerializedRecords.size()) goto _L2; else goto _L1 _L1: contentvalues2 = contentvalues; contentvalues1 = contentvalues; serializedrecord1 = (SerializedRecord)mCachedSerializedRecords.get(i); contentvalues2 = contentvalues; contentvalues1 = contentvalues; if (serializedrecord1.getDatabaseId() != j) goto _L4; else goto _L3 _L3: contentvalues2 = contentvalues; contentvalues1 = contentvalues; mCachedSerializedRecords.remove(serializedrecord1); _L2: contentvalues2 = contentvalues; contentvalues1 = contentvalues; mCachedSerializedRecords.add(serializedrecord); if (contentvalues == null) { break MISSING_BLOCK_LABEL_195; } contentvalues.close(); _L7: list; JVM INSTR monitorexit ; return uri1; _L4: i++; goto _L5 contentvalues; contentvalues1 = contentvalues2; ALog.e("Error inserting item in the cache. Uri(%s) - Insert result uri(%s) - Error: %s", new Object[] { uri, uri1, contentvalues }); contentvalues1 = contentvalues2; mCachedSerializedRecords.clear(); if (contentvalues2 == null) goto _L7; else goto _L6 _L6: contentvalues2.close(); goto _L7 uri; list; JVM INSTR monitorexit ; throw uri; uri; if (contentvalues1 == null) { break MISSING_BLOCK_LABEL_281; } contentvalues1.close(); throw uri; goto _L5 } public Cursor query(Uri uri, String as[], String s, String as1[], String s1) { String s2; CacheStrategyUtils.assertNullParameters(uri, s, as1, getClass().getSimpleName()); s = uri.getQueryParameter("objectId"); as1 = uri.getQueryParameter("unitId"); s2 = uri.getQueryParameter("type"); s1 = mCachedSerializedRecords; s1; JVM INSTR monitorenter ; as = null; if (uri.getPathSegments().size() == 2) { as = uri.getLastPathSegment(); } if (mCachedSerializedRecords.size() <= 0) { break MISSING_BLOCK_LABEL_111; } ContentValues acontentvalues[] = getContentValuesFromCache(as, s, as1, s2, false); if (acontentvalues.length <= 0) { break MISSING_BLOCK_LABEL_111; } uri = OlioDatabaseUtils.cursorForContentValues(SerializedRecord.staticColumnProjection(), acontentvalues); s1; JVM INSTR monitorexit ; return uri; if (as == null) goto _L2; else goto _L1 _L1: as1 = String.format("%s = ?", new Object[] { "_id" }); s = (new String[] { as }); as = as1; _L4: uri = OlioDatabaseUtils.query(mContentResolver, uri, SerializedRecord.staticColumnProjection(), as, s, mDatabaseHelper); if (uri == null) { break MISSING_BLOCK_LABEL_199; } if (uri.getCount() > 0) { as = serializedRecordsFromCursor(uri); mCachedSerializedRecords.addAll(as); uri.moveToPosition(-1); } s1; JVM INSTR monitorexit ; return uri; uri; s1; JVM INSTR monitorexit ; throw uri; _L2: if (as1 == null) { break MISSING_BLOCK_LABEL_312; } if (s == null) { break MISSING_BLOCK_LABEL_258; } as = String.format("%s = ? AND %s = ?", new Object[] { "object_id", "unit_id" }); s = (new String[] { s, as1 }); continue; /* Loop/switch isn't completed */ if (s2 == null) { break MISSING_BLOCK_LABEL_302; } as = String.format("%s = ? AND %s = ?", new Object[] { "type", "unit_id" }); s = (new String[] { s2, as1 }); continue; /* Loop/switch isn't completed */ throw new IllegalArgumentException("SerializedRecord Query doesn't support an operation where unitId isn't null and the others params are null."); if (s == null) { break MISSING_BLOCK_LABEL_344; } as = String.format("%s = ?", new Object[] { "object_id" }); s = (new String[] { s }); continue; /* Loop/switch isn't completed */ if (s2 == null) { break MISSING_BLOCK_LABEL_377; } as = String.format("%s = ?", new Object[] { "type" }); s = (new String[] { s2 }); continue; /* Loop/switch isn't completed */ as = null; s = null; if (true) goto _L4; else goto _L3 _L3: } public int update(Uri uri, ContentValues contentvalues, String s, String as[]) { CacheStrategyUtils.assertNullParameters(uri, s, as, getClass().getSimpleName()); List list = mCachedSerializedRecords; list; JVM INSTR monitorenter ; Cursor cursor; SerializedRecord serializedrecord; serializedrecord = null; cursor = null; as = cursor; s = serializedrecord; int j = Integer.parseInt(uri.getLastPathSegment()); as = cursor; s = serializedrecord; cursor = OlioDatabaseUtils.cursorForContentValues(SerializedRecord.staticColumnProjection(), new ContentValues[] { contentvalues }); as = cursor; s = cursor; serializedrecord = serializedRecordFromCursor(cursor); as = cursor; s = cursor; serializedrecord.setDatabaseId(j); int i = 0; _L5: as = cursor; s = cursor; if (i >= mCachedSerializedRecords.size()) goto _L2; else goto _L1 _L1: as = cursor; s = cursor; SerializedRecord serializedrecord1 = (SerializedRecord)mCachedSerializedRecords.get(i); as = cursor; s = cursor; if (serializedrecord1.getDatabaseId() != j) goto _L4; else goto _L3 _L3: as = cursor; s = cursor; mCachedSerializedRecords.remove(serializedrecord1); as = cursor; s = cursor; mCachedSerializedRecords.add(i, serializedrecord); _L2: if (cursor == null) { break MISSING_BLOCK_LABEL_212; } cursor.close(); _L7: list; JVM INSTR monitorexit ; return OlioDatabaseUtils.update(mContentResolver, uri, contentvalues, null, null, mDatabaseHelper); _L4: i++; goto _L5 Exception exception; exception; s = as; ALog.e("Error updating item in the cache. Uri(%s) - Error: %s", new Object[] { uri, exception }); s = as; mCachedSerializedRecords.clear(); if (as == null) goto _L7; else goto _L6 _L6: as.close(); goto _L7 uri; list; JVM INSTR monitorexit ; throw uri; uri; if (s == null) { break MISSING_BLOCK_LABEL_308; } s.close(); throw uri; goto _L5 } }