OSDN Git Service

ver1.3.0
[jugglemaster/source.git] / workspace / JuggleMaster / src / com / jm / db / DatabaseHelper.java
1 package com.jm.db;\r
2 \r
3 import android.content.Context;\r
4 import android.database.SQLException;\r
5 import android.database.sqlite.SQLiteDatabase;\r
6 import android.database.sqlite.SQLiteOpenHelper;\r
7 \r
8 import com.jm.JmPattern;\r
9 import com.jm.utility.Debug;\r
10 import com.jm.utility.JmException;\r
11 \r
12 public class DatabaseHelper extends SQLiteOpenHelper {\r
13         public final static int NONE_ID = -1;\r
14         public final static int ENGLISH_ID = 1;\r
15         public final static int JAPANEASE_ID = 2;\r
16         public final static int FRENCH_ID = 3;\r
17         private static int langId = NONE_ID;\r
18         private Context context;\r
19         private static boolean convFlag1to2 = false;\r
20         private static boolean convFlag2to3 = false;\r
21 \r
22         private static DatabaseHelper instance = null;\r
23 \r
24         public static DatabaseHelper getInstance() {\r
25                 return instance;\r
26         }\r
27 \r
28         public static void init(Context context) throws JmException {\r
29                 DaoFactory f = DaoFactory.getInstance();\r
30                 f.setContext(context.getApplicationContext());\r
31 \r
32                 if (instance != null) {\r
33                         return;\r
34                 }\r
35 \r
36                 DatabaseHelper helper = new DatabaseHelper(context);\r
37 \r
38                 // onCreate, onUpgradeを呼び出す\r
39                 SQLiteDatabase db = helper.getWritableDatabase();\r
40 \r
41                 // アップグレードで無ければ、SQL分を定義\r
42                 // アップデートの場合は、後で実行する\r
43                 if (!helper.getConvFlag()) {\r
44                         Dao.getInstance().start(db);\r
45                 }\r
46         }\r
47 \r
48         public DatabaseHelper(Context context) {\r
49                 // super(context, "JuggleMaster.db", null, 2);\r
50                 super(context, "JuggleMaster.db", null, 3);\r
51                 instance = this;\r
52 \r
53                 // setLangId(context);\r
54                 this.context = context;\r
55         }\r
56 \r
57         @Override\r
58         public void onCreate(SQLiteDatabase db) {\r
59                 db.beginTransaction();\r
60                 try {\r
61                         Dao dao = Dao.getInstance();\r
62                         dao.init(db, context);\r
63                         db.setTransactionSuccessful();\r
64                 } catch (SQLException e) {\r
65                         Debug.d(this, null, e);\r
66                         throw e;\r
67                 } finally {\r
68                         db.endTransaction();\r
69                 }\r
70         }\r
71 \r
72         @Override\r
73         public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {\r
74                 int v;\r
75 \r
76                 v = 1;\r
77                 if (oldVersion == v && newVersion > v) {\r
78                         convFlag1to2 = true;\r
79                 }\r
80 \r
81                 v = 2;\r
82                 if (oldVersion <= v && newVersion > v) {\r
83                         convFlag2to3 = true;\r
84                 }\r
85         }\r
86 \r
87         public void convert(SQLiteDatabase db, int langId) throws JmException {\r
88                 if (convFlag1to2) {\r
89                         convert1to2(db, langId);\r
90                 }\r
91                 if (convFlag2to3) {\r
92                         convert2to3(db);\r
93                 }\r
94 \r
95                 convFlag1to2 = false;\r
96                 convFlag2to3 = false;\r
97         }\r
98 \r
99         private void convert1to2(SQLiteDatabase db, int langId) throws JmException {\r
100                 db.execSQL("ALTER TABLE pattern ADD COLUMN lang integer;");\r
101                 db.execSQL("ALTER TABLE pattern ADD COLUMN idx integer;");\r
102 \r
103                 Dao dao = Dao.getInstance();\r
104                 for (int i = 0; i < 7; i++) {\r
105                         JmPattern[] list;\r
106                         list = dao.get(db, "type = " + i, null);\r
107                         int size = list.length;\r
108                         for (int j = 0; j < size; j++) {\r
109                                 JmPattern item = list[j];\r
110                                 int id = item.getId();\r
111                                 db.execSQL("UPDATE pattern set idx = " + j + " WHERE id = "\r
112                                                 + id + ";");\r
113                         }\r
114                 }\r
115 \r
116                 // 既存のデータは、日本語のデータに変換\r
117                 db.execSQL("UPDATE pattern set LANG = " + JAPANEASE_ID\r
118                                 + " WHERE TYPE <> 6;");\r
119                 db.execSQL("DELETE FROM pattern WHERE NAME = '[新規作成]';");\r
120                 // ただし、マイパターンは、システムの言語に\r
121                 db.execSQL("UPDATE pattern set LANG = " + langId + " WHERE TYPE = 6;");\r
122                 db.execSQL("create index langindex on pattern(lang);");\r
123                 db.execSQL("create index idxindex on pattern(idx);");\r
124         }\r
125 \r
126         private void convert2to3(SQLiteDatabase db) {\r
127                 Dao dao = Dao.getInstance();\r
128                 \r
129                 dao.init2to3(db);\r
130                 dao.start(db);          \r
131                 dao.initData2to3(db, context);\r
132                 \r
133                 JmDao jdao = JmDao.getInstance();\r
134                 jdao.init(null, context);\r
135         }\r
136 \r
137         public boolean getConvFlag() {\r
138                 return convFlag1to2 || convFlag2to3;\r
139         }\r
140 \r
141         public boolean getConvFlag1to2() {\r
142                 return convFlag1to2;\r
143         }\r
144 \r
145         public boolean getConvFlag2to3() {\r
146                 return convFlag2to3;\r
147         }\r
148 \r
149         public void setLangId(int id) {\r
150                 langId = id;\r
151         }\r
152 \r
153         public int getLangId() {\r
154                 if (langId != NONE_ID) {\r
155                         return langId;\r
156                 }\r
157                 String id = context.getString(com.jm.R.string.lang);\r
158                 return Integer.valueOf(id).intValue();\r
159         }\r
160 }\r