Author: michiel
Date: 2009-06-05 19:18:35 +0200 (Fri, 05 Jun 2009)
New Revision: 35797

Modified:
   
speeltuin/mihxil/streams/src/main/java/org/mmbase/streams/CreateCachesFunction.java
   
speeltuin/mihxil/streams/src/main/java/org/mmbase/streams/CreateCachesProcessor.java
   
speeltuin/mihxil/streams/src/main/resources/org/mmbase/config/components/streams.xml
Log:
Made it possible to retrigger trancodings

Modified: 
speeltuin/mihxil/streams/src/main/java/org/mmbase/streams/CreateCachesFunction.java
===================================================================
--- 
speeltuin/mihxil/streams/src/main/java/org/mmbase/streams/CreateCachesFunction.java
 2009-06-05 17:17:32 UTC (rev 35796)
+++ 
speeltuin/mihxil/streams/src/main/java/org/mmbase/streams/CreateCachesFunction.java
 2009-06-05 17:18:35 UTC (rev 35797)
@@ -11,7 +11,9 @@
 
 import org.mmbase.util.functions.*;
 import org.mmbase.bridge.*;
-import org.mmbase.datatypes.processors.CommitProcessor;
+import org.mmbase.security.ActionRepository;
+import org.mmbase.datatypes.processors.*;
+import org.mmbase.util.logging.*;
 
 /**
  * Retriggers creation of the caches.
@@ -22,20 +24,58 @@
 
 public class CreateCachesFunction  extends NodeFunction<Boolean> {
 
+    private static final Logger LOG = 
Logging.getLoggerInstance(CreateCachesFunction.class);
     public CreateCachesFunction() {
         super("createcaches");
     }
 
+
+    CreateCachesProcessor getCacheCreator(final Field url) {
+        CommitProcessor commitProcessor = 
url.getDataType().getCommitProcessor();
+        if (commitProcessor instanceof ChainedCommitProcessor) {
+            ChainedCommitProcessor chain = (ChainedCommitProcessor) 
commitProcessor;
+            LOG.info("Lookin in " + chain.getProcessors());
+            for (CommitProcessor cp : chain.getProcessors()) {
+                if (cp instanceof CreateCachesProcessor) {
+                    return (CreateCachesProcessor) cp;
+                }
+            }
+            return null;
+        } else {
+            if (commitProcessor instanceof CreateCachesProcessor) {
+                return (CreateCachesProcessor) commitProcessor;
+            } else {
+                return null;
+            }
+        }
+    }
+
     @Override
-    protected Boolean getFunctionValue(Node node, Parameters parameters) {
-        Field url = node.getNodeManager().getField("url");
+    protected Boolean getFunctionValue(final Node node, final Parameters 
parameters) {
+        if (node.getCloud().may(ActionRepository.getInstance().get("streams", 
"retrigger_jobs"), null)) {
+            LOG.info("Recreating caches for " + node.getNumber());
+            final Field url = node.getNodeManager().getField("url");
 
-        CommitProcessor deleteCaches = url.getDataType().getDeleteProcessor();
-        deleteCaches.commit(node, url);
+            {
+                final CommitProcessor deleteCaches = 
url.getDataType().getDeleteProcessor();
+                LOG.info("Calling " + deleteCaches);
+                deleteCaches.commit(node, url);
+            }
 
-        CommitProcessor createCaches = url.getDataType().getCommitProcessor();
-        createCaches.commit(node, url);
-        return true;
+            {
+                final CreateCachesProcessor cc = getCacheCreator(url);
+                if (cc != null) {
+                    LOG.info("Calling " + cc);
+                    
cc.createCaches(node.getCloud().getNonTransactionalCloud(), node);
+                    return true;
+                } else {
+                    LOG.error("No CreateCachesProcessor in " + url);
+                    return false;
+                }
+            }
+        } else {
+            return false;
+        }
     }
 
 }

Modified: 
speeltuin/mihxil/streams/src/main/java/org/mmbase/streams/CreateCachesProcessor.java
===================================================================
--- 
speeltuin/mihxil/streams/src/main/java/org/mmbase/streams/CreateCachesProcessor.java
        2009-06-05 17:17:32 UTC (rev 35796)
+++ 
speeltuin/mihxil/streams/src/main/java/org/mmbase/streams/CreateCachesProcessor.java
        2009-06-05 17:18:35 UTC (rev 35797)
@@ -15,6 +15,7 @@
 import org.mmbase.bridge.NodeList;
 import org.mmbase.storage.search.*;
 import org.mmbase.security.UserContext;
+import org.mmbase.security.ActionRepository;
 import org.mmbase.bridge.util.Queries;
 import org.mmbase.util.*;
 import org.mmbase.util.xml.*;
@@ -216,19 +217,23 @@
     }
 
     public static String cancelJob(Node node) {
-        Job job = runningJobs.get(node.getNumber());
-        if (job == null) {
-            return "No such job";
-        } else {
-            if (job.future.cancel(true)) {
+        if (node.getCloud().may(ActionRepository.getInstance().get("streams", 
"cancel_jobs"), null)) {
+            Job job = runningJobs.get(node.getNumber());
+            if (job == null) {
+                return "No such job";
+            } else {
+                if (job.future.cancel(true)) {
                 String message = "Canceled " + job.future;
                 job.logger.info(message);
                 runningJobs.remove(node.getNumber());
                 return message;
-            } else {
-                return "Could not cancel " + job;
+                } else {
+                    return "Could not cancel " + job;
+                }
+
             }
-
+        } else {
+            return "You may not cancel jobs";
         }
     }
 
@@ -340,6 +345,42 @@
 
     }
 
+    void createCaches(final Cloud ntCloud, final Node node) {
+        if (ntCloud.hasNode(node.getNumber())) {
+            final ChainedLogger logger = new ChainedLogger(LOG);
+            final Node ntNode = ntCloud.getNode(node.getNumber());
+            ntNode.getStringValue("title"); // This triggers 
RelatedField$Creator to create a
+            // mediafragment if it does not yet exist
+            final Node mediafragment = 
ntCloud.getNode(ntNode.getNodeValue("mediafragment").getNumber());
+            final Node mediaprovider = 
ntCloud.getNode(ntNode.getNodeValue("mediaprovider").getNumber());
+
+            LOG.info("Triggering caches for " + list + " Mediaframent " + 
mediafragment);
+
+            final Job thisJob = createJob(ntNode,
+                                          mediaprovider,
+                                          mediafragment, logger);
+            if (thisJob != null) {
+
+                // If the node happens to be deleted before the future with 
cache creations is ready, cancel the future
+                EventManager.getInstance().addEventListener(new 
WeakNodeEventListener() {
+                        public void notify(NodeEvent event) {
+                            if (event.getNodeNumber() == ntNode.getNumber() && 
event.getType() == Event.TYPE_DELETE) {
+                                if (thisJob.future.cancel(true)) {
+                                    logger.info("Canceled " + thisJob.future + 
" for " + event.getBuilderName() + " " + event.getNodeNumber());
+                                }
+                            }
+                        }
+                        public String toString() {
+                            return "Job canceler for " + node.getNumber();
+                        }
+                    });
+            }
+        } else {
+            LOG.warn("Node " + node.getNumber() + " is not real.");
+        }
+    }
+
+
     public void commit(final Node node, final Field field) {
         if (node.getNumber() > 0) {
             if (node.isChanged(field.getName())) {
@@ -347,38 +388,7 @@
                 final Cloud ntCloud = 
node.getCloud().getNonTransactionalCloud();
                 ThreadPools.scheduler.schedule(new Runnable() {
                         public void run() {
-                            if (ntCloud.hasNode(node.getNumber())) {
-                                final ChainedLogger logger = new 
ChainedLogger(LOG);
-                                final Node ntNode = 
ntCloud.getNode(node.getNumber());
-                                ntNode.getStringValue("title"); // This 
triggers RelatedField$Creator to create a
-                                // mediafragment if it does not yet exist
-                                final Node mediafragment = 
ntCloud.getNode(ntNode.getNodeValue("mediafragment").getNumber());
-                                final Node mediaprovider = 
ntCloud.getNode(ntNode.getNodeValue("mediaprovider").getNumber());
-
-                                LOG.info("Field '" + field.getName() + " was 
changed. Triggering caches for " + list + " Mediaframent " + mediafragment);
-
-                                final Job thisJob = createJob(ntNode,
-                                                        mediaprovider,
-                                                        mediafragment, logger);
-                                if (thisJob != null) {
-
-                                    // If the node happens to be deleted 
before the future with cache creations is ready, cancel the future
-                                    
EventManager.getInstance().addEventListener(new WeakNodeEventListener() {
-                                            public void notify(NodeEvent 
event) {
-                                                if (event.getNodeNumber() == 
ntNode.getNumber() && event.getType() == Event.TYPE_DELETE) {
-                                                    if 
(thisJob.future.cancel(true)) {
-                                                        logger.info("Canceled 
" + thisJob.future + " for " + event.getBuilderName() + " " + 
event.getNodeNumber());
-                                                    }
-                                                }
-                                            }
-                                            public String toString() {
-                                                return "Job canceler for " + 
node.getNumber();
-                                            }
-                                        });
-                                }
-                            } else {
-                                LOG.warn("Node " + node.getNumber() + " is not 
real.");
-                            }
+                            createCaches(ntCloud, node);
                         }
                     }, 2, TimeUnit.SECONDS);
             } else {

Modified: 
speeltuin/mihxil/streams/src/main/resources/org/mmbase/config/components/streams.xml
===================================================================
--- 
speeltuin/mihxil/streams/src/main/resources/org/mmbase/config/components/streams.xml
        2009-06-05 17:17:32 UTC (rev 35796)
+++ 
speeltuin/mihxil/streams/src/main/resources/org/mmbase/config/components/streams.xml
        2009-06-05 17:18:35 UTC (rev 35797)
@@ -18,6 +18,10 @@
     <description xml:lang="en">Whether you may cancel jobs</description>
   </action>
 
+  <action name="retrigger_jobs" rank="administrator">
+    <description xml:lang="en">Whether you may cancel jobs</description>
+  </action>
+
   <block name="recent"
          classification="mmbase.examples:90 mmbase.streams"
          mimetype="text/html">

_______________________________________________
Cvs mailing list
[email protected]
http://lists.mmbase.org/mailman/listinfo/cvs

Reply via email to