/*
LocalOAuthOpenHelper.java
Copyright (c) 2014 NTT DOCOMO,INC.
Released under the MIT license
http://opensource.org/licenses/mit-license.php
*/
package org.deviceconnect.android.localoauth.oauthserver.db;
import java.util.Locale;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
/**
* LocalOAuth用SQLiteOpenHelper.
* @author NTT DOCOMO, INC.
*/
public class LocalOAuthOpenHelper extends SQLiteOpenHelper {
/** DB名. */
static final String DB = "localoauth.db";
/** DBバージョン. */
static final int DB_VERSION = 6;
/** テーブル名(profiles). */
static final String PROFILES_TABLE = "profiles";
/** テーブル名(clients). */
static final String CLIENTS_TABLE = "clients";
/** テーブル作成コマンド(tokens). */
static final String TOKENS_TABLE = "tokens";
/** テーブル作成コマンド(scopes). */
static final String SCOPES_TABLE = "scopes";
/** userテーブルのuser_id(usersは今回作らないので、useridに格納する値を定義する). */
static final int USERS_USER_ID = 0;
/** DBに格納する日付を文字列で読み書きする際のフォーマット. */
static final String DATETIME_FORMAT = "yyyy-MM-dd HH:mm:ss";
/** DBに格納する日付を文字列で読み書きする際のLocale. */
static final Locale DATETIME_LOCALE = Locale.JAPANESE;
/** テーブル作成コマンド(profiles). */
static final String CREATE_PROFILES_TABLE =
"CREATE TABLE profiles ( "
+ "id INTEGER PRIMARY KEY AUTOINCREMENT, "
+ "profile_name VARCHAR(40), "
+ "description VARCHAR(40) "
+ ")";
/** テーブル作成コマンド(clients). */
static final String CREATE_CLIENTS_TABLE =
"CREATE TABLE clients ( "
+ "id INTEGER PRIMARY KEY AUTOINCREMENT, " /* ID */
+ "client_id VARCHAR(100), " /* クライアントID */
+ "package_name VARCHAR(2000), " /* パッケージ名 */
+ "service_id VARCHAR(100), " /* サービスID(無しのときはnull) */
+ "client_secret VARCHAR(100), " /* クライアントシークレット */
+ "client_type INTEGER, " /* クライアントタイプ */
+ "registration_date INTEGER " /* 登録日時(System.currentTimeMillis()で取得した値を格納する) */
+ ")";
/** テーブル作成コマンド(tokens). */
static final String CREATE_TOKENS_TABLE =
"CREATE TABLE tokens ( "
+ "id INTEGER PRIMARY KEY AUTOINCREMENT, " /* ID */
+ "access_token VARCHAR(100), " /* アクセストークン */
+ "token_type VARCHAR(20), " /* トークンタイプ */
+ "client_id VARCHAR(100), " /* clients.id(FK) */
+ "users_userid INTEGER, " /* ユーザーID */
+ "registration_date INTEGER, " /* レコード登録時間(System.currentTimeMills()で取得した時間) */
+ "access_date INTEGER, " /* [Ver3で追加]最終アクセス時間(System.currentTimeMills()で取得した時間) */
+ "application_name VARCHAR(100) " /* [Ver4で追加]アプリケーション名 */
+ ")";
/** テーブル作成コマンド(scopes). */
static final String CREATE_SCOPES_TABLE =
"CREATE TABLE scopes ( "
+ "tokens_tokenid INTEGER, " /* ID */
+ "profiles_profileid INTEGER, " /* profiles.id(FK) */
+ "timestamp INTEGER, " /* アクセス承認時間(System.currentTimeMills()で取得した時間) */
+ "expire_period INTEGER " /* [Ver5で単位変更]有効期限[sec]({timestamp + expire_period * 1000} が有効期限が切れる時間) */
+ ")";
/** テーブル削除コマンド(profiles). */
static final String DROP_PROFILES_TABLE = "DROP TABLE profiles";
/** テーブル削除コマンド(clients). */
static final String DROP_CLIENTS_TABLE = "DROP TABLE clients ";
/** テーブル削除コマンド(tokens). */
static final String DROP_TOKENS_TABLE = "DROP TABLE tokens";
/** テーブル削除コマンド(scopes). */
static final String DROP_SCOPES_TABLE = "DROP TABLE scopes";
/**
* コンストラクタ.
* @param c コンストラクタ
*/
public LocalOAuthOpenHelper(final Context c) {
super(c, DB, null, DB_VERSION);
}
/**
* データベースが存在しないときにDBを構築する処理.
* @param db データベース
*/
@Override
public void onCreate(final SQLiteDatabase db) {
createAllTables(db);
}
/**
* アップグレード処理.
* @param db データベース
* @param oldVersion 旧バージョン
* @param newVersion 新バージョン
*/
@Override
public void onUpgrade(final SQLiteDatabase db, final int oldVersion, final int newVersion) {
/* テーブル削除 */
db.execSQL(DROP_CLIENTS_TABLE);
db.execSQL(DROP_PROFILES_TABLE);
db.execSQL(DROP_SCOPES_TABLE);
db.execSQL(DROP_TOKENS_TABLE);
createAllTables(db);
}
/**
* 必要なテーブルをすべて作成する.
* @param db データベース
*/
private void createAllTables(final SQLiteDatabase db) {
db.execSQL(CREATE_CLIENTS_TABLE);
db.execSQL(CREATE_PROFILES_TABLE);
db.execSQL(CREATE_SCOPES_TABLE);
db.execSQL(CREATE_TOKENS_TABLE);
}
}