155fccf8e63d3eb50800f81ca1211b2205fe15060Ruben Brunk/*
255fccf8e63d3eb50800f81ca1211b2205fe15060Ruben Brunk * Copyright (C) 2013 The Android Open Source Project
355fccf8e63d3eb50800f81ca1211b2205fe15060Ruben Brunk *
455fccf8e63d3eb50800f81ca1211b2205fe15060Ruben Brunk * Licensed under the Apache License, Version 2.0 (the "License");
555fccf8e63d3eb50800f81ca1211b2205fe15060Ruben Brunk * you may not use this file except in compliance with the License.
655fccf8e63d3eb50800f81ca1211b2205fe15060Ruben Brunk * You may obtain a copy of the License at
755fccf8e63d3eb50800f81ca1211b2205fe15060Ruben Brunk *
855fccf8e63d3eb50800f81ca1211b2205fe15060Ruben Brunk *      http://www.apache.org/licenses/LICENSE-2.0
955fccf8e63d3eb50800f81ca1211b2205fe15060Ruben Brunk *
1055fccf8e63d3eb50800f81ca1211b2205fe15060Ruben Brunk * Unless required by applicable law or agreed to in writing, software
1155fccf8e63d3eb50800f81ca1211b2205fe15060Ruben Brunk * distributed under the License is distributed on an "AS IS" BASIS,
1255fccf8e63d3eb50800f81ca1211b2205fe15060Ruben Brunk * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1355fccf8e63d3eb50800f81ca1211b2205fe15060Ruben Brunk * See the License for the specific language governing permissions and
1455fccf8e63d3eb50800f81ca1211b2205fe15060Ruben Brunk * limitations under the License.
1555fccf8e63d3eb50800f81ca1211b2205fe15060Ruben Brunk */
1655fccf8e63d3eb50800f81ca1211b2205fe15060Ruben Brunk
1755fccf8e63d3eb50800f81ca1211b2205fe15060Ruben Brunkpackage com.android.gallery3d.filtershow.data;
1855fccf8e63d3eb50800f81ca1211b2205fe15060Ruben Brunk
1955fccf8e63d3eb50800f81ca1211b2205fe15060Ruben Brunkimport android.content.Context;
2055fccf8e63d3eb50800f81ca1211b2205fe15060Ruben Brunkimport android.database.sqlite.SQLiteDatabase;
2155fccf8e63d3eb50800f81ca1211b2205fe15060Ruben Brunkimport android.database.sqlite.SQLiteOpenHelper;
2255fccf8e63d3eb50800f81ca1211b2205fe15060Ruben Brunk
2355fccf8e63d3eb50800f81ca1211b2205fe15060Ruben Brunkpublic class FilterStackDBHelper extends SQLiteOpenHelper {
2455fccf8e63d3eb50800f81ca1211b2205fe15060Ruben Brunk
2555fccf8e63d3eb50800f81ca1211b2205fe15060Ruben Brunk    public static final int DATABASE_VERSION = 1;
2655fccf8e63d3eb50800f81ca1211b2205fe15060Ruben Brunk    public static final String DATABASE_NAME = "filterstacks.db";
2755fccf8e63d3eb50800f81ca1211b2205fe15060Ruben Brunk    private static final String SQL_CREATE_TABLE = "CREATE TABLE ";
2855fccf8e63d3eb50800f81ca1211b2205fe15060Ruben Brunk
2955fccf8e63d3eb50800f81ca1211b2205fe15060Ruben Brunk    public static interface FilterStack {
3055fccf8e63d3eb50800f81ca1211b2205fe15060Ruben Brunk        /** The row uid */
3155fccf8e63d3eb50800f81ca1211b2205fe15060Ruben Brunk        public static final String _ID = "_id";
3255fccf8e63d3eb50800f81ca1211b2205fe15060Ruben Brunk        /** The table name */
3355fccf8e63d3eb50800f81ca1211b2205fe15060Ruben Brunk        public static final String TABLE = "filterstack";
3455fccf8e63d3eb50800f81ca1211b2205fe15060Ruben Brunk        /** The stack name */
3555fccf8e63d3eb50800f81ca1211b2205fe15060Ruben Brunk        public static final String STACK_ID = "stack_id";
3655fccf8e63d3eb50800f81ca1211b2205fe15060Ruben Brunk        /** A serialized stack of filters. */
3755fccf8e63d3eb50800f81ca1211b2205fe15060Ruben Brunk        public static final String FILTER_STACK= "stack";
3855fccf8e63d3eb50800f81ca1211b2205fe15060Ruben Brunk    }
3955fccf8e63d3eb50800f81ca1211b2205fe15060Ruben Brunk
4055fccf8e63d3eb50800f81ca1211b2205fe15060Ruben Brunk    private static final String[][] CREATE_FILTER_STACK = {
4155fccf8e63d3eb50800f81ca1211b2205fe15060Ruben Brunk            { FilterStack._ID, "INTEGER PRIMARY KEY AUTOINCREMENT" },
4255fccf8e63d3eb50800f81ca1211b2205fe15060Ruben Brunk            { FilterStack.STACK_ID, "TEXT" },
4355fccf8e63d3eb50800f81ca1211b2205fe15060Ruben Brunk            { FilterStack.FILTER_STACK, "BLOB" },
4455fccf8e63d3eb50800f81ca1211b2205fe15060Ruben Brunk    };
4555fccf8e63d3eb50800f81ca1211b2205fe15060Ruben Brunk
4655fccf8e63d3eb50800f81ca1211b2205fe15060Ruben Brunk    public FilterStackDBHelper(Context context, String name, int version) {
4755fccf8e63d3eb50800f81ca1211b2205fe15060Ruben Brunk        super(context, name, null, version);
4855fccf8e63d3eb50800f81ca1211b2205fe15060Ruben Brunk    }
4955fccf8e63d3eb50800f81ca1211b2205fe15060Ruben Brunk
5055fccf8e63d3eb50800f81ca1211b2205fe15060Ruben Brunk    public FilterStackDBHelper(Context context, String name) {
5155fccf8e63d3eb50800f81ca1211b2205fe15060Ruben Brunk        this(context, name, DATABASE_VERSION);
5255fccf8e63d3eb50800f81ca1211b2205fe15060Ruben Brunk    }
5355fccf8e63d3eb50800f81ca1211b2205fe15060Ruben Brunk
5455fccf8e63d3eb50800f81ca1211b2205fe15060Ruben Brunk    public FilterStackDBHelper(Context context) {
5555fccf8e63d3eb50800f81ca1211b2205fe15060Ruben Brunk        this(context, DATABASE_NAME);
5655fccf8e63d3eb50800f81ca1211b2205fe15060Ruben Brunk    }
5755fccf8e63d3eb50800f81ca1211b2205fe15060Ruben Brunk
5855fccf8e63d3eb50800f81ca1211b2205fe15060Ruben Brunk    @Override
5955fccf8e63d3eb50800f81ca1211b2205fe15060Ruben Brunk    public void onCreate(SQLiteDatabase db) {
6055fccf8e63d3eb50800f81ca1211b2205fe15060Ruben Brunk        createTable(db, FilterStack.TABLE, CREATE_FILTER_STACK);
6155fccf8e63d3eb50800f81ca1211b2205fe15060Ruben Brunk    }
6255fccf8e63d3eb50800f81ca1211b2205fe15060Ruben Brunk
6355fccf8e63d3eb50800f81ca1211b2205fe15060Ruben Brunk    @Override
6455fccf8e63d3eb50800f81ca1211b2205fe15060Ruben Brunk    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
6555fccf8e63d3eb50800f81ca1211b2205fe15060Ruben Brunk        dropTable(db, FilterStack.TABLE);
6655fccf8e63d3eb50800f81ca1211b2205fe15060Ruben Brunk        onCreate(db);
6755fccf8e63d3eb50800f81ca1211b2205fe15060Ruben Brunk    }
6855fccf8e63d3eb50800f81ca1211b2205fe15060Ruben Brunk
6955fccf8e63d3eb50800f81ca1211b2205fe15060Ruben Brunk    protected static void createTable(SQLiteDatabase db, String table, String[][] columns) {
7055fccf8e63d3eb50800f81ca1211b2205fe15060Ruben Brunk        StringBuilder create = new StringBuilder(SQL_CREATE_TABLE);
7155fccf8e63d3eb50800f81ca1211b2205fe15060Ruben Brunk        create.append(table).append('(');
7255fccf8e63d3eb50800f81ca1211b2205fe15060Ruben Brunk        boolean first = true;
7355fccf8e63d3eb50800f81ca1211b2205fe15060Ruben Brunk        for (String[] column : columns) {
7455fccf8e63d3eb50800f81ca1211b2205fe15060Ruben Brunk            if (!first) {
7555fccf8e63d3eb50800f81ca1211b2205fe15060Ruben Brunk                create.append(',');
7655fccf8e63d3eb50800f81ca1211b2205fe15060Ruben Brunk            }
7755fccf8e63d3eb50800f81ca1211b2205fe15060Ruben Brunk            first = false;
7855fccf8e63d3eb50800f81ca1211b2205fe15060Ruben Brunk            for (String val : column) {
7955fccf8e63d3eb50800f81ca1211b2205fe15060Ruben Brunk                create.append(val).append(' ');
8055fccf8e63d3eb50800f81ca1211b2205fe15060Ruben Brunk            }
8155fccf8e63d3eb50800f81ca1211b2205fe15060Ruben Brunk        }
8255fccf8e63d3eb50800f81ca1211b2205fe15060Ruben Brunk        create.append(')');
8355fccf8e63d3eb50800f81ca1211b2205fe15060Ruben Brunk        db.beginTransaction();
8455fccf8e63d3eb50800f81ca1211b2205fe15060Ruben Brunk        try {
8555fccf8e63d3eb50800f81ca1211b2205fe15060Ruben Brunk            db.execSQL(create.toString());
8655fccf8e63d3eb50800f81ca1211b2205fe15060Ruben Brunk            db.setTransactionSuccessful();
8755fccf8e63d3eb50800f81ca1211b2205fe15060Ruben Brunk        } finally {
8855fccf8e63d3eb50800f81ca1211b2205fe15060Ruben Brunk            db.endTransaction();
8955fccf8e63d3eb50800f81ca1211b2205fe15060Ruben Brunk        }
9055fccf8e63d3eb50800f81ca1211b2205fe15060Ruben Brunk    }
9155fccf8e63d3eb50800f81ca1211b2205fe15060Ruben Brunk
9255fccf8e63d3eb50800f81ca1211b2205fe15060Ruben Brunk    protected static void dropTable(SQLiteDatabase db, String table) {
9355fccf8e63d3eb50800f81ca1211b2205fe15060Ruben Brunk        db.beginTransaction();
9455fccf8e63d3eb50800f81ca1211b2205fe15060Ruben Brunk        try {
9555fccf8e63d3eb50800f81ca1211b2205fe15060Ruben Brunk            db.execSQL("drop table if exists " + table);
9655fccf8e63d3eb50800f81ca1211b2205fe15060Ruben Brunk            db.setTransactionSuccessful();
9755fccf8e63d3eb50800f81ca1211b2205fe15060Ruben Brunk        } finally {
9855fccf8e63d3eb50800f81ca1211b2205fe15060Ruben Brunk            db.endTransaction();
9955fccf8e63d3eb50800f81ca1211b2205fe15060Ruben Brunk        }
10055fccf8e63d3eb50800f81ca1211b2205fe15060Ruben Brunk    }
10155fccf8e63d3eb50800f81ca1211b2205fe15060Ruben Brunk}
102