128dd1fc86f58b35b79e2fedc13f5b26f600a9a6aMichael Portuesipackage com.xtremelabs.robolectric.shadows;
228dd1fc86f58b35b79e2fedc13f5b26f600a9a6aMichael Portuesi
328dd1fc86f58b35b79e2fedc13f5b26f600a9a6aMichael Portuesiimport android.content.Context;
428dd1fc86f58b35b79e2fedc13f5b26f600a9a6aMichael Portuesiimport android.database.sqlite.SQLiteDatabase;
528dd1fc86f58b35b79e2fedc13f5b26f600a9a6aMichael Portuesiimport android.database.sqlite.SQLiteDatabase.CursorFactory;
622c22c9aa4ca68c2deac6164edc1d82bc9645310Christian Williams & Phil Goodwinimport android.database.sqlite.SQLiteOpenHelper;
722c22c9aa4ca68c2deac6164edc1d82bc9645310Christian Williams & Phil Goodwinimport com.xtremelabs.robolectric.internal.Implementation;
822c22c9aa4ca68c2deac6164edc1d82bc9645310Christian Williams & Phil Goodwinimport com.xtremelabs.robolectric.internal.Implements;
922c22c9aa4ca68c2deac6164edc1d82bc9645310Christian Williams & Phil Goodwinimport com.xtremelabs.robolectric.internal.RealObject;
1028dd1fc86f58b35b79e2fedc13f5b26f600a9a6aMichael Portuesi
1128dd1fc86f58b35b79e2fedc13f5b26f600a9a6aMichael Portuesi/**
1228dd1fc86f58b35b79e2fedc13f5b26f600a9a6aMichael Portuesi * Shadow for {@code SQLiteOpenHelper}.  Provides basic support for retrieving
1328dd1fc86f58b35b79e2fedc13f5b26f600a9a6aMichael Portuesi * databases and partially implements the subclass contract.  (Currently,
1428dd1fc86f58b35b79e2fedc13f5b26f600a9a6aMichael Portuesi * support for {@code #onUpgrade} is missing).
1528dd1fc86f58b35b79e2fedc13f5b26f600a9a6aMichael Portuesi */
1628dd1fc86f58b35b79e2fedc13f5b26f600a9a6aMichael Portuesi@Implements(SQLiteOpenHelper.class)
1728dd1fc86f58b35b79e2fedc13f5b26f600a9a6aMichael Portuesipublic class ShadowSQLiteOpenHelper {
1828dd1fc86f58b35b79e2fedc13f5b26f600a9a6aMichael Portuesi
193f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz    @RealObject private SQLiteOpenHelper realHelper;
203f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz    private static SQLiteDatabase database;
213f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz
223f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz    public void __constructor__(Context context, String name, CursorFactory factory, int version) {
233f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz        if (database != null) {
243f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz            database.close();
253f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz        }
263f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz        database = null;
273f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz    }
283f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz
293f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz    @Implementation
303f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz    public synchronized void close() {
313f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz        if (database != null) {
323f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz            database.close();
333f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz        }
343f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz        database = null;
353f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz    }
363f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz
373f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz    @Implementation
383f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz    public synchronized SQLiteDatabase getReadableDatabase() {
393f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz        if (database == null) {
403f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz            database = SQLiteDatabase.openDatabase("path", null, 0);
413f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz            realHelper.onCreate(database);
423f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz        }
433f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz
443f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz        realHelper.onOpen(database);
453f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz        return database;
463f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz    }
473f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz
483f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz    @Implementation
493f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz    public synchronized SQLiteDatabase getWritableDatabase() {
503f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz        if (database == null) {
513f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz            database = SQLiteDatabase.openDatabase("path", null, 0);
523f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz            realHelper.onCreate(database);
533f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz        }
543f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz
553f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz        realHelper.onOpen(database);
563f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz        return database;
573f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz    }
5828dd1fc86f58b35b79e2fedc13f5b26f600a9a6aMichael Portuesi}
59