Update of 
/var/cvs/applications/crontab/src/org/mmbase/applications/crontab/builders
In directory james.mmbase.org:/tmp/cvs-serv7427/builders

Modified Files:
        CronJobs.java 
Added Files:
        NodeCronEntry.java 
Log Message:
  MMB-1677


See also: 
http://cvs.mmbase.org/viewcvs/applications/crontab/src/org/mmbase/applications/crontab/builders
See also: http://www.mmbase.org/jira/browse/MMB-1677




Index: CronJobs.java
===================================================================
RCS file: 
/var/cvs/applications/crontab/src/org/mmbase/applications/crontab/builders/CronJobs.java,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -b -r1.5 -r1.6
--- CronJobs.java       5 Feb 2007 14:39:10 -0000       1.5
+++ CronJobs.java       14 Jul 2008 13:51:36 -0000      1.6
@@ -11,13 +11,14 @@
 import org.mmbase.bridge.*;
 import org.mmbase.module.core.*;
 import org.mmbase.util.logging.*;
+import java.util.*;
 
 /**
  * Builder that holds cronjobs and listens to changes.
  *  The builder also starts the CronDeamon. on startup the list of cronjobs is 
loaded into memory.
  *  <b>The builder uses the bridge to get a cloud using class security.</b> 
  * @author Kees Jongenburger
- * @version $Id: CronJobs.java,v 1.5 2007/02/05 14:39:10 michiel Exp $
+ * @version $Id: CronJobs.java,v 1.6 2008/07/14 13:51:36 michiel Exp $
  */
 public class CronJobs extends MMObjectBuilder implements Runnable {
 
@@ -50,7 +51,7 @@
             Node node = nodeIterator.nextNode();
             CronEntry entry = null;
             try {
-                entry = createCronEntry(node);
+                entry = new NodeCronEntry(node);
                 NodeList servers = node.getRelatedNodes("mmservers");
                 if (servers.size() > 0) {
                     String machineName = MMBase.getMMBase().getMachineName();
@@ -88,7 +89,7 @@
         try {
             if (cronDaemon != null) {
                        Node node = getCloud().getNode(number);
-            cronDaemon.add(createCronEntry(node));
+                cronDaemon.add(new NodeCronEntry(node));
             }
         } catch (Exception e) {
             throw new RuntimeException("error while creating cron entry with 
id " + number + " error " + e.getMessage(), e);
@@ -100,17 +101,32 @@
      * Commits a cronjob to the database.
      * On commit of a cronjob, the job is first removed from the cronDeamon 
and a new cronEntry is created and added to the CronDaemon.
      */
-    public boolean commit(MMObjectNode objectNodenode) {
-        boolean retval = super.commit(objectNodenode);
-        Node node = getCloud().getNode(objectNodenode.getNumber());
+    public boolean commit(MMObjectNode node) {
+        Set<String> changed = node.getChanged();
+        boolean retval = super.commit(node);
         CronEntry entry = cronDaemon.getCronEntry("" + node.getNumber());
         if (entry == null) {
             log.warn("cron entry with ID " + node.getNumber() + " was not 
found. this usualy means it was invalid");
         } else {
+            if (entry instanceof NodeCronEntry) {
+                if (changed.contains("classfile") ||
+                    changed.contains("name") ||
+                    changed.contains("type")) {
+                    log.debug("Changed fields " + changed);
             cronDaemon.remove(entry);
+                } else {
+                    log.debug("Ignored " + node);
+                    return retval;
+                }
+            } else {
+                log.warn("How come, " + entry + " is not a node-entry");
+                cronDaemon.remove(entry);
+            }
         }
         try {
-            cronDaemon.add(createCronEntry(node));
+            log.debug("Replacing cronentry " + entry);
+            Node n = getCloud().getNode(node.getNumber());
+            cronDaemon.add(new NodeCronEntry(n));
         } catch (Exception e) {
             throw new RuntimeException("error while creating cron entry with 
id " + node.getNumber() + " error " + e.getMessage());
         }
@@ -129,15 +145,6 @@
         }
     }
 
-    private CronEntry createCronEntry(Node node) throws Exception {
-        // should consider getRelatedNodes("mmservers") for the last argument 
of CronEntry        
-        return new CronEntry("" + node.getNumber(),
-                             node.getStringValue("crontime"), 
-                             node.getStringValue("name"), 
-                             node.getStringValue("classfile"), 
-                             node.getStringValue("config"),
-                             node.getIntValue("type"));
-    }
 
     private Cloud getCloud() {
         return LocalContext.getCloudContext().getCloud("mmbase");
_______________________________________________
Cvs mailing list
[email protected]
http://lists.mmbase.org/mailman/listinfo/cvs

Reply via email to