added validation method to perform minimal check that message class implementation...
[vamsas.git] / src / uk / ac / vamsas / client / simpleclient / WatcherElement.java
index 54a31be..b3235d5 100644 (file)
@@ -10,7 +10,7 @@ public abstract class WatcherElement {
   /**\r
    * set this to false to stop the thread\r
    */\r
-  private boolean watchForChange = true;\r
+  protected boolean watchForChange = true;\r
   /**\r
    * true when the handler is being called for this watcher\r
    */\r
@@ -24,13 +24,13 @@ public abstract class WatcherElement {
    * before returning. If no thread is running then it returns immediately.\r
    */\r
   public void haltWatch() {\r
-    if (log.isDebugEnabled())\r
-      log.debug("haltWatch on "+watcher.getSubject());\r
     // set the flag to skip this watch element.\r
     watchForChange=false;\r
+    if (log.isDebugEnabled())\r
+      log.debug("haltWatch on "+watcher.getSubject());\r
     endWatch();\r
-    // watcher=null;\r
-    \r
+    if (log.isDebugEnabled())\r
+      log.debug("haltWatch completed on "+watcher.getSubject());\r
   }\r
   /**\r
    * called by haltWatch before \r
@@ -54,6 +54,8 @@ public abstract class WatcherElement {
    * enablewatch\r
    */\r
   protected void enableWatch() {\r
+    if (log.isDebugEnabled())\r
+      log.debug("enableWatch on "+getSubject());\r
     watchForChange=true;\r
     initWatch();\r
     if (log.isDebugEnabled())\r
@@ -78,7 +80,7 @@ public abstract class WatcherElement {
     }\r
     if (doclock==null)\r
       return false;\r
-    handlerCalled=true;\r
+   /* handlerCalled=true;\r
     if (log.isDebugEnabled())\r
       log.debug("Triggering watchEvent for change on "+watcher.getSubject());\r
       boolean finish=!handler.handleWatchEvent(this, doclock);\r
@@ -87,11 +89,30 @@ public abstract class WatcherElement {
       haltWatch();\r
     else\r
       enableWatch();\r
-    handlerCalled=false;\r
+    handlerCalled=false;*/\r
+    this.callHandler(doclock);\r
     return true;\r
   }\r
 \r
   /**\r
+   * Calls the current eventhandler\r
+   * \r
+   * @param doclock the lock on the watch file \r
+   */\r
+  protected void callHandler(Lock doclock)\r
+  {\r
+      if (log.isDebugEnabled())\r
+        log.debug("Triggering watchEvent for change on "+watcher.getSubject());\r
+      boolean finish=!handler.handleWatchEvent(this, doclock);\r
+      doclock=null; // TODO: check that lock should really be released rather than dereferenced\r
+      if (finish)\r
+        haltWatch();\r
+      else\r
+        enableWatch();\r
+      handlerCalled=false;\r
+  }\r
+  \r
+  /**\r
    * @return the handler\r
    */\r
   public WatcherCallBack getHandler() {\r