package com.jm.db;\r
\r
+import java.io.ByteArrayOutputStream;\r
+import java.io.IOException;\r
+import java.io.InputStream;\r
+import java.util.ArrayList;\r
+import java.util.List;\r
+\r
+import android.content.ContentValues;\r
+import android.content.Context;\r
import android.database.Cursor;\r
import android.database.SQLException;\r
import android.database.sqlite.SQLiteDatabase;\r
import android.database.sqlite.SQLiteStatement;\r
\r
import com.jm.JmPattern;\r
+import com.jm.R;\r
+import com.jm.common.Constant;\r
+import com.jm.pref.EditPrefUtil;\r
+import com.jm.utility.Debug;\r
import com.jm.utility.JmException;\r
\r
-public class Dao {\r
+public class Dao implements IDao<SQLiteDatabase> {\r
private static Dao instance = new Dao();\r
private SQLiteStatement insertStmt = null;\r
private SQLiteStatement updateStmt = null;\r
private SQLiteStatement deleteStmt = null;\r
+ private SQLiteStatement patternFileDeleteStmt = null;\r
+\r
+ private Context context;\r
\r
public static Dao getInstance() {\r
return instance;\r
\r
}\r
\r
- public void init(SQLiteDatabase db) {\r
+ public void setContext(Context context) {\r
+ this.context = context;\r
+ }\r
+\r
+ public void init(SQLiteDatabase db, Context context) {\r
+ this.context = context;\r
+\r
db.execSQL("create table pattern (" + "id integer primary key, "\r
+ "type integer not null, " + "siteswap text not null, "\r
+ "height integer, " + "dwell integer, " + "name integer, "\r
+ "motion text," + "lang integer," + "idx integer);");\r
+ init2to3(db);\r
start(db);\r
+ initData2to3(db, context);\r
+ }\r
+\r
+ public void initData2to3(SQLiteDatabase db, Context context) {\r
+ long id;\r
+ id = initPatternList(db, "pattern.jm", false);\r
+ initPatternList(db, "pattern_ja.jm", false);\r
+\r
+ EditPrefUtil pref = new EditPrefUtil(context);\r
+ pref.put(Constant.PREF_SELECTED_PATTERN_INDEX, id);\r
+ pref.update();\r
+ }\r
+\r
+ public void init2to3(SQLiteDatabase db) {\r
+ db.execSQL("create table pattern_file ("\r
+ + android.provider.BaseColumns._ID\r
+ + " integer primary key autoincrement, "\r
+ + "name text not null, " + "value blob not null, "\r
+ + "iswritable integer not null);");\r
}\r
\r
public void start(SQLiteDatabase db) {\r
+ "where id = ? and lang = ?;");\r
deleteStmt = db\r
.compileStatement("delete from pattern where id = ? and lang = ?;");\r
+ patternFileDeleteStmt = db\r
+ .compileStatement("delete from pattern_file where "\r
+ + android.provider.BaseColumns._ID + " = ?;");\r
}\r
\r
public void add(JmPattern jp, int index) throws JmException {\r
\r
public JmPattern[] get(SQLiteDatabase db, String selection, String orderBy)\r
throws JmException {\r
- DatabaseHelper helper = DatabaseHelper.getInstance();\r
+ //DatabaseHelper helper = DatabaseHelper.getInstance();\r
JmPattern[] list = null;\r
Cursor c = db.query("pattern", new String[] { "id", "type", "siteswap",\r
"height", "dwell", "name", "motion" }, selection, null, null,\r
return list;\r
}\r
\r
- public JmPattern[] getFromId(int id) throws JmException {\r
+ public JmPattern[] getFromId(long id) throws JmException {\r
JmPattern[] list = null;\r
try {\r
DatabaseHelper helper = DatabaseHelper.getInstance();\r
}\r
return count;\r
}\r
+\r
+ public PatternFile getPatternFile(long id) {\r
+ DatabaseHelper helper = DatabaseHelper.getInstance();\r
+ SQLiteDatabase db = helper.getReadableDatabase();\r
+\r
+ String selection = android.provider.BaseColumns._ID + " = ?";\r
+ String[] selectionArgs = { String.valueOf(id) };\r
+ String orderBy = null;\r
+ List<PatternFile> list = getPatternFile(db, selection, selectionArgs,\r
+ orderBy, true);\r
+ if (list.size() <= 0) {\r
+ return null;\r
+ }\r
+ return list.get(0);\r
+ }\r
+\r
+ public List<PatternFile> getPatternFile() {\r
+ DatabaseHelper helper = DatabaseHelper.getInstance();\r
+ SQLiteDatabase db = helper.getReadableDatabase();\r
+ String orderBy = "name";\r
+ return getPatternFile(db, null, null, orderBy, false);\r
+ }\r
+\r
+ public List<PatternFile> getPatternFile(SQLiteDatabase db) {\r
+ return getPatternFile(db, null, null, null, false);\r
+ }\r
+\r
+ private List<PatternFile> getPatternFile(SQLiteDatabase db,\r
+ String selection, String[] selectionArgs, String orderBy,\r
+ boolean isBlob) {\r
+ List<PatternFile> list = new ArrayList<PatternFile>();\r
+ Cursor cursor = null;\r
+ try {\r
+ cursor = db.query("pattern_file", new String[] {\r
+ android.provider.BaseColumns._ID, "name", "value",\r
+ "iswritable" }, selection, selectionArgs, null, null,\r
+ orderBy);\r
+ cursor.moveToFirst();\r
+ int size = cursor.getCount();\r
+ for (int i = 0; i < size; i++) {\r
+ PatternFile pf = new PatternFile(cursor.getLong(0),\r
+ cursor.getString(1), (isBlob) ? cursor.getBlob(2)\r
+ : null, cursor.getInt(3) != 0);\r
+ list.add(pf);\r
+ cursor.moveToNext();\r
+ }\r
+ } catch (SQLException e) {\r
+ Debug.d(this, null, e);\r
+ list = null;\r
+ } catch (Exception e) {\r
+ Debug.d(this, null, e);\r
+ list = null;\r
+ } finally {\r
+ if (cursor != null) {\r
+ cursor.close();\r
+ cursor = null;\r
+ }\r
+ }\r
+ return list;\r
+ }\r
+\r
+ // public PatternFile[] getPatternFile(SQLiteDatabase db) throws JmException\r
+ // {\r
+ // String selection = null;\r
+ // String orderBy = "name";\r
+ // return getPatternFile(db, selection, orderBy);\r
+ // }\r
+ //\r
+ // public PatternFile[] getPatternFile(SQLiteDatabase db, String selection,\r
+ // String orderBy) throws JmException {\r
+ // PatternFile[] list = null;\r
+ // Cursor c = db.query("pattern_file", new String[] { "id", "name" },\r
+ // selection, null, null, null, orderBy);\r
+ // c.moveToFirst();\r
+ // list = new PatternFile[c.getCount()];\r
+ // for (int i = 0; i < list.length; i++) {\r
+ // PatternFile pf = new PatternFile(c.getInt(0), // id\r
+ // c.getString(1)); // name\r
+ // list[i] = pf;\r
+ // c.moveToNext();\r
+ // }\r
+ // c.close();\r
+ // return list;\r
+ // }\r
+ //\r
+ // public PatternFile getPatternFile(long id) {\r
+ // String selection = android.provider.BaseColumns._ID + " = ?";\r
+ // String[] selectionArgs = { String.valueOf(id) };\r
+ // String orderBy = null;\r
+ // List<PatternFile> list = getPatternFile(selection, selectionArgs,\r
+ // orderBy);\r
+ // if (list.size() <= 0) {\r
+ // return null;\r
+ // }\r
+ // return list.get(0);\r
+ // }\r
+\r
+ public long addPatternFile(String name, byte[] blob, boolean isWritable) {\r
+ DatabaseHelper helper = DatabaseHelper.getInstance();\r
+ SQLiteDatabase db = helper.getWritableDatabase();\r
+ return addPatternFile(db, name, blob, isWritable);\r
+ }\r
+\r
+ public long addPatternFile(SQLiteDatabase db, String name, byte[] blob,\r
+ boolean isWritable) {\r
+ ContentValues values = new ContentValues();\r
+ values.put("name", name);\r
+ values.put("value", blob);\r
+ values.put("iswritable", isWritable ? 1 : 0);\r
+\r
+ return db.insert("pattern_file", null, values);\r
+ }\r
+\r
+ public void deletePatternFile(long id) throws JmException {\r
+ DatabaseHelper helper = DatabaseHelper.getInstance();\r
+ SQLiteDatabase db = helper.getWritableDatabase();\r
+ db.beginTransaction();\r
+ try {\r
+ int i = 1;\r
+ SQLiteStatement stmt = patternFileDeleteStmt;\r
+ stmt.bindLong(i++, id);\r
+ stmt.execute();\r
+ db.setTransactionSuccessful();\r
+ } catch (SQLException e) {\r
+ throw new JmException(e);\r
+ } finally {\r
+ db.endTransaction();\r
+ }\r
+ }\r
+\r
+ public String[] getMenu() {\r
+ String[] list = { context.getString(R.string.list0_1),\r
+ context.getString(R.string.list0_2),\r
+ context.getString(R.string.list0_3),\r
+ context.getString(R.string.list0_4),\r
+ context.getString(R.string.list0_5),\r
+ context.getString(R.string.list0_6),\r
+ context.getString(R.string.list0_7),\r
+ context.getString(R.string.list0_8) };\r
+ return list;\r
+\r
+ }\r
+\r
+ public long initPatternList(SQLiteDatabase db, String filename,\r
+ boolean isWritable) {\r
+ InputStream is = null;\r
+ try {\r
+ is = getClass().getClassLoader().getResourceAsStream(filename);\r
+ return insertPatternList(db, is, filename, isWritable);\r
+ } finally {\r
+ if (is != null) {\r
+ try {\r
+ is.close();\r
+ } catch (IOException e) {\r
+ Debug.d(this, e.getMessage());\r
+ }\r
+ is = null;\r
+ }\r
+ }\r
+ }\r
+\r
+ public long insertPatternList(InputStream is, String name,\r
+ boolean isWritable) {\r
+ DatabaseHelper helper = DatabaseHelper.getInstance();\r
+ SQLiteDatabase db = helper.getWritableDatabase();\r
+ return insertPatternList(db, is, name, isWritable);\r
+ }\r
+\r
+ public long insertPatternList(SQLiteDatabase db, InputStream is,\r
+ String name, boolean isWritable) {\r
+ long id = -1;\r
+ try {\r
+ byte[] b = toByteArray(is);\r
+ if (b == null) {\r
+ return id;\r
+ }\r
+ Dao dao = Dao.getInstance();\r
+ id = dao.addPatternFile(db, name, b, isWritable);\r
+ } finally {\r
+ close(is);\r
+ }\r
+ return id;\r
+ }\r
+\r
+ private void close(InputStream is) {\r
+ if (is != null) {\r
+ try {\r
+ is.close();\r
+ } catch (IOException e) {\r
+ Debug.d(this, e.getMessage());\r
+ }\r
+ }\r
+ }\r
+\r
+ private byte[] toByteArray(InputStream inputStream) {\r
+ ByteArrayOutputStream bout = new ByteArrayOutputStream();\r
+ byte[] buffer = new byte[1024];\r
+ try {\r
+ while (true) {\r
+ int len;\r
+ len = inputStream.read(buffer);\r
+ if (len < 0) {\r
+ break;\r
+ }\r
+ bout.write(buffer, 0, len);\r
+ }\r
+ return bout.toByteArray();\r
+ } catch (IOException e) {\r
+ Debug.d(this, e.getMessage());\r
+ return null;\r
+ }\r
+ }\r
+\r
+ @Override\r
+ public boolean isWritable() {\r
+ return true;\r
+ }\r
}\r