OSDN Git Service

ver1.3.0a
[jugglemaster/source.git] / workspace / JuggleMaster / src / com / jm / db / Dao.java
index ab134be..f0e1e1d 100644 (file)
@@ -1,18 +1,33 @@
 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
@@ -22,12 +37,38 @@ public class Dao {
 \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
@@ -39,6 +80,9 @@ public class Dao {
                                + "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
@@ -156,7 +200,7 @@ public class Dao {
 \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
@@ -178,7 +222,7 @@ public class Dao {
                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
@@ -274,4 +318,221 @@ public class Dao {
                }\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