/**
* Copyright (c) 2013, Sana
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* * Neither the name of the Sana nor the
* names of its contributors may be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL Sana BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
package org.sana.android.db.impl;
import org.sana.android.db.BinaryProvider;
import org.sana.android.db.DatabaseOpenHelper;
import org.sana.android.db.ImageProvider;
import org.sana.android.db.SoundProvider;
import org.sana.android.db.TableHelper;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.util.Log;
/**
* @author Sana Development
*
*/
public class DatabaseOpenHelperImpl extends DatabaseOpenHelper{
public static final String TAG = DatabaseOpenHelperImpl.class
.getSimpleName();
private static DatabaseOpenHelperImpl instance = null;
public static synchronized DatabaseOpenHelperImpl getInstance(Context context, String name, int version){
if (instance == null)
instance = new DatabaseOpenHelperImpl(context, name, version);
return instance;
}
/**
* @param context
* @param name
* @param version
*/
public DatabaseOpenHelperImpl(Context context, String name, int version) {
super(context, name, version);
}
/* (non-Javadoc)
* @see android.database.sqlite.SQLiteOpenHelper#onCreate(android.database.sqlite.SQLiteDatabase)
*/
@Override
public void onCreate(SQLiteDatabase db) {
Log.i(TAG, "onCreate()");
String[] create = new String[]{
ConceptsHelper.getInstance().onCreate(),
EncountersHelper.getInstance().onCreate(),
EncounterTasksHelper.getInstance().onCreate(),
EventsHelper.getInstance().onCreate(),
InstructionsHelper.getInstance().onCreate(),
NotificationsHelper.getInstance().onCreate(),
ObservationsHelper.getInstance().onCreate(),
ObserversHelper.getInstance().onCreate(),
ProceduresHelper.getInstance().onCreate(),
SubjectsHelper.getInstance().onCreate()
};
//db.acquireReference();
for(String sql:create){
db.execSQL(sql);
}
// Deprecated
ImageProvider.onCreateDatabase(db);
SoundProvider.onCreateDatabase(db);
BinaryProvider.onCreateDatabase(db);
//db.releaseReference();
}
/* (non-Javadoc)
* @see android.database.sqlite.SQLiteOpenHelper#onUpgrade(android.database.sqlite.SQLiteDatabase, int, int)
*/
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
Log.i(TAG, String.format("onUpgrade(int,int) -> (%d, %d)",oldVersion, newVersion));
// No bump in version - return quietly
if(newVersion > oldVersion){
TableHelper<?>[] helpers = new TableHelper<?>[]{
ConceptsHelper.getInstance(),
EncountersHelper.getInstance(),
EncounterTasksHelper.getInstance(),
EventsHelper.getInstance(),
InstructionsHelper.getInstance(),
NotificationsHelper.getInstance(),
ObservationsHelper.getInstance(),
ObserversHelper.getInstance(),
ProceduresHelper.getInstance(),
SubjectsHelper.getInstance() };
for(TableHelper<?> helper:helpers){
if(oldVersion <= 2){
db.execSQL("DROP TABLE " + helper.getTable() + " IF EXISTS;");
db.execSQL(helper.onCreate());
} else {
String sql = helper.onUpgrade(oldVersion, newVersion);
Log.i(TAG, String.format("onUpgrade(int,int)", ((sql == null)?"NULL":sql)));
if(sql != null)
db.execSQL(helper.onUpgrade(oldVersion, newVersion));
}
}
}
}
}