Revision: 4184
Author: janne.t.harkonen
Date: Wed Sep 29 15:37:24 2010
Log: Notice outside changes to db file
http://code.google.com/p/robotframework/source/detail?r=4184
Modified:
/trunk/proto/atdd-tutorial-berlin-2010/src/vacalc/employeestore.py
/trunk/proto/atdd-tutorial-berlin-2010/src/vacalc/ui.py
/trunk/proto/atdd-tutorial-berlin-2010/src/vacalc/vacalcapp.py
=======================================
--- /trunk/proto/atdd-tutorial-berlin-2010/src/vacalc/employeestore.py Wed
Sep 29 14:48:01 2010
+++ /trunk/proto/atdd-tutorial-berlin-2010/src/vacalc/employeestore.py Wed
Sep 29 15:37:24 2010
@@ -7,6 +7,7 @@
class VacalcError(RuntimeError): pass
+
class EmployeeStore(object):
def __init__(self, db_file):
@@ -24,6 +25,9 @@
employees[employee.name] = employee
return employees
+ def refresh(self):
+ self.__init__(self._db_file)
+
def get_employee(self, name):
try:
return self._employees[name]
=======================================
--- /trunk/proto/atdd-tutorial-berlin-2010/src/vacalc/ui.py Wed Sep 29
14:48:01 2010
+++ /trunk/proto/atdd-tutorial-berlin-2010/src/vacalc/ui.py Wed Sep 29
15:37:24 2010
@@ -40,6 +40,9 @@
def show(self):
self._frame.setVisible(True)
+ def employees_changed(self):
+ self._employee_list.refresh()
+
class EmployeeList(object):
@@ -65,6 +68,12 @@
def adding_employee_failed(self, error):
pass
+ def refresh(self):
+ idx = self._list.getSelectedIndex()
+ self._populate_list()
+ if idx < self._list.getModel().getSize():
+ self._list.setSelectedIndex(idx)
+
@property
def widget(self):
return self._list
=======================================
--- /trunk/proto/atdd-tutorial-berlin-2010/src/vacalc/vacalcapp.py Wed Sep
29 14:48:01 2010
+++ /trunk/proto/atdd-tutorial-berlin-2010/src/vacalc/vacalcapp.py Wed Sep
29 15:37:24 2010
@@ -1,5 +1,8 @@
import os
import tempfile
+from java.util import Timer, TimerTask
+from java.lang import Runnable
+from javax.swing import SwingUtilities
from org.robotframework.vacalc import VacationCalculator
@@ -11,11 +14,33 @@
def create(self):
default_db = os.path.join(tempfile.gettempdir(), 'vacalcdb.csv')
- db_file = os.environ.get('VACALC_DB', default_db)
- store = EmployeeStore(db_file)
- self._frame = VacalcFrame(EmployeeController(store))
+ self._db_file= os.environ.get('VACALC_DB', default_db)
+ self._size = os.stat(self._db_file).st_size if
os.path.exists(self._db_file) else 0
+ self._store = EmployeeStore(self._db_file)
+ self._frame = VacalcFrame(EmployeeController(self._store))
+ self._timer = Timer()
+ self._timer.scheduleAtFixedRate(DbModificationTask(self), 0, 500)
self._frame.show()
+ def check_modified_time(self):
+ if not os.path.exists(self._db_file) or
os.stat(self._db_file).st_size != self._size:
+ self._store.refresh()
+
SwingUtilities.invokeLater(UpdateAction(self._frame.employees_changed))
+
+
+class UpdateAction(Runnable):
+ def __init__(self, action):
+ self._action = action
+ def run(self):
+ self._action()
+
+
+class DbModificationTask(TimerTask):
+ def __init__(self, app):
+ self._app = app
+ def run(self):
+ self._app.check_modified_time()
+
class EmployeeController(object):