OSDN Git Service

T29347
authorYuji Konishi <yuji.k64613@gmail.com>
Sat, 1 Sep 2012 04:19:43 +0000 (13:19 +0900)
committerYuji Konishi <yuji.k64613@gmail.com>
Sat, 1 Sep 2012 04:19:43 +0000 (13:19 +0900)
source/workspace/EverFolder/src/com/yuji/ef/EverFolderActivity.java
source/workspace/EverFolder/src/com/yuji/ef/dao/LockDao.java

index dad2936..1bdd167 100644 (file)
@@ -377,12 +377,13 @@ public class EverFolderActivity extends BaseActivity implements LockListener {
                try {
                        b = dao.lock(this, "key");
                        b = dao.lock(this, "key");
-                       dao.unlock(new Object(), "key");
-                       b = dao.lock(this, "key");
+                       b = dao.lock(new Object(), "key");
                        dao.unlock(this, "key");
+                       b = dao.lock(new Object(), "key");
                        b = dao.lock(this, "key");
                        b = dao.lock(this, "key");
                        b = dao.lock(this, "key");
+                       dao.unlock(new Object(), "key");
 
                } catch (Exception e) {
                        e.printStackTrace();
index 31ed8d8..93eb7f6 100644 (file)
@@ -1,6 +1,7 @@
 package com.yuji.ef.dao;
 
 import java.util.ArrayList;
+import java.util.Calendar;
 import java.util.List;
 
 import com.yuji.ef.utility.Debug;
@@ -12,9 +13,12 @@ import android.database.sqlite.SQLiteDatabase;
 import android.database.sqlite.SQLiteStatement;
 
 public class LockDao implements IDao<Lock> {
+       private static final int DEFAULT_PERIOD = 60 * 60; // 1時間
+       
        private static IDao<Lock> instance = null;
        private SQLiteStatement insertStmt = null;
        private SQLiteStatement deleteIdStmt = null;
+       private SQLiteStatement deleteUpdatedStmt = null;
 
        public static IDao<Lock> getInstance() {
                if (instance == null) {
@@ -40,7 +44,10 @@ public class LockDao implements IDao<Lock> {
                // + android.provider.BaseColumns._ID + " = ?");
                deleteIdStmt = db.compileStatement("DELETE FROM LOCK WHERE "
                                + "KEY = ? AND CLASS = ?");
-       }
+               deleteUpdatedStmt = db.compileStatement("DELETE FROM LOCK WHERE "
+                               + "KEY = ? AND UPDATED < ?");
+               
+               }
 
        @Override
        public void start(SQLiteDatabase db) {
@@ -117,6 +124,11 @@ public class LockDao implements IDao<Lock> {
                long id = -1;
                db.beginTransaction();
                try {
+                       Calendar cal = Calendar.getInstance();
+                       long updated = cal.getTimeInMillis();
+                       updated -= DEFAULT_PERIOD * 1000;
+                       
+                       deleteUpdatedNT(lock.getKey(), updated);
                        deleteNT(lock.getKey(), lock.getClazz());
                        id = addNT(lock);
                        db.setTransactionSuccessful();
@@ -178,15 +190,29 @@ public class LockDao implements IDao<Lock> {
                return id;
        }
 
+       public long deleteUpdatedNT(String key, long updated) {
+               long id = -1; // TODO
+               int i = 1;
+
+               SQLiteStatement stmt = deleteUpdatedStmt;
+               stmt.bindString(i++, key);
+               stmt.bindLong(i++, updated);
+               stmt.execute();
+               return id;
+       }
+
        private String getClazz(Object obj) {
                return obj.getClass().getName();
        }
 
        public boolean lock(Object obj, String key) {
+               Calendar cal = Calendar.getInstance();
+               long updated = cal.getTimeInMillis();
+               
                Lock lock = new Lock();
                lock.setKey(key);
-               lock.setClazz(getClazz(obj));
-               // lock.setUpdated(updated); // TODO
+               lock.setClazz(getClazz(obj));           
+               lock.setUpdated(updated);
                if (this.add(lock) > 0) {
                        return true;
                } else {