/** * Global Sensor Networks (GSN) Source Code * Copyright (c) 2006-2014, Ecole Polytechnique Federale de Lausanne (EPFL) * * This file is part of GSN. * * GSN is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSN is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSN. If not, see <http://www.gnu.org/licenses/>. * * File: gsn-tiny/src/tinygsn/storage/db/SQLiteDatabaseOpenHelper.java * * @author Do Ngoc Hoan */ package tinygsn.storage.db; import java.io.Serializable; import java.util.ArrayList; import android.content.Context; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteDatabase.CursorFactory; import android.database.sqlite.SQLiteOpenHelper; import android.os.Environment; public class SQLiteDatabaseOpenHelper extends SQLiteOpenHelper implements Serializable { /** * */ private static final long serialVersionUID = -4345330326921532L; public SQLiteDatabaseOpenHelper(Context context, String name, CursorFactory factory, int version) { super(context, name, factory, version); } @Override public void onCreate(SQLiteDatabase db) { String createQuery = "CREATE TABLE vsList (_id integer primary key autoincrement," + "running, vsname, vstype " + ");"; db.execSQL(createQuery); createQuery = "CREATE TABLE sourcesList (_id integer primary key autoincrement," + "vsname, sswindowsize, ssstep, sstimebased, ssaggregator, wrappername " + ");"; db.execSQL(createQuery); createQuery = "CREATE TABLE publishDestination (_id integer primary key autoincrement," + "url text, vsname text, clientId text, clientSecret text, mode integer, lastTime bigint, iterationTime bigint, active int" + ");"; db.execSQL(createQuery); createQuery = "CREATE TABLE subscribeSource (_id integer primary key autoincrement," + "url text, vsname text, mode integer, lastTime bigint, iterationTime bigint, active int, username text, password text" + ");"; db.execSQL(createQuery); createQuery = "CREATE TABLE wrapperList (_id integer primary key, wrappername text," + "dcinterval integer, dcduration integer" + ");"; db.execSQL(createQuery); createQuery = "CREATE TABLE WifiFrequency (_id integer primary key," + "frequency integer, mac text" + ");"; db.execSQL(createQuery); createQuery = "CREATE TABLE Samples (_id integer primary key, time bigint, " + "sample integer," + "reason integer" + ");"; db.execSQL(createQuery); createQuery = "CREATE TABLE settings (key text primary key, value text);"; db.execSQL(createQuery); } @Override public void onOpen(SQLiteDatabase db) { //clean the database if any virtual sensor is not completely defined String query = "Select * from vsList;"; Cursor cursor = db.rawQuery(query, new String[] {}); ArrayList<String> toRemove = new ArrayList<String>(); while (cursor.moveToNext()){ String name = cursor.getString(cursor.getColumnIndex("vsname")); //check if it has a data table query = "SELECT * FROM sqlite_master WHERE type = 'table' AND name = ?;"; Cursor cursor0 = db.rawQuery(query, new String[] {"vs_"+name}); if (!cursor0.moveToNext()){ toRemove.add(name); } cursor0.close(); //check if it has at least one stream source query = "Select * from sourcesList where vsname = ?;"; cursor0 = db.rawQuery(query, new String[] {name}); if (!cursor0.moveToNext()){ toRemove.add(name); } cursor0.close(); } cursor.close(); for (String s: toRemove){ db.delete("vsList", "vsname = ?", new String[] {s}); db.delete("sourcesList", "vsname = ?", new String[] {s}); } } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { db.execSQL("Drop table vsList"); db.execSQL("Drop table sourcesList"); db.execSQL("Drop table wrapperList"); db.execSQL("Drop table publishDestination"); db.execSQL("Drop table Samples"); db.execSQL("Drop table settings"); onCreate(db); } }