Author: andre
Date: 2010-02-02 16:08:11 +0100 (Tue, 02 Feb 2010)
New Revision: 40803

Added:
   
mmbase/branches/MMBase-1_9/applications/streams/src/main/java/org/mmbase/streams/RecreateCacheFunction.java
Modified:
   
mmbase/branches/MMBase-1_9/applications/streams/src/main/config/builders/streams/streamsources.functions.xml
   
mmbase/branches/MMBase-1_9/applications/streams/src/main/config/builders/streams/streamsourcescaches.fields.xml
   
mmbase/branches/MMBase-1_9/applications/streams/src/main/config/components/streams.xml
   
mmbase/branches/MMBase-1_9/applications/streams/src/main/java/org/mmbase/streams/CreateCachesFunction.java
   
mmbase/branches/MMBase-1_9/applications/streams/src/main/java/org/mmbase/streams/createcaches/Job.java
   
mmbase/branches/MMBase-1_9/applications/streams/src/main/webapp/mmbase/components/streams/admin.jspx
   
mmbase/branches/MMBase-1_9/applications/streams/src/main/webapp/mmbase/components/streams/fragment.trs.jspx
Log:
working on recreating just one streamcache node MMB-1878, allmost there

Modified: 
mmbase/branches/MMBase-1_9/applications/streams/src/main/config/builders/streams/streamsources.functions.xml
===================================================================
--- 
mmbase/branches/MMBase-1_9/applications/streams/src/main/config/builders/streams/streamsources.functions.xml
        2010-02-02 14:28:53 UTC (rev 40802)
+++ 
mmbase/branches/MMBase-1_9/applications/streams/src/main/config/builders/streams/streamsources.functions.xml
        2010-02-02 15:08:11 UTC (rev 40803)
@@ -5,10 +5,15 @@
                         http://www.mmbase.org/xmlns/builder.xsd";
     xmlns:xi="http://www.w3.org/2001/XInclude";
     >
-  <function name="trigger">
+  
+  <function name="triggerCaches">
     <class>org.mmbase.streams.CreateCachesFunction</class>
   </function>
 
+  <function name="triggerRecache">
+    <class>org.mmbase.streams.RecreateCacheFunction</class>
+  </function>
+
   <function name="waitUntilRecognized">
     <class>org.mmbase.streams.createcaches.WaitUntilRecognizedFunction</class>
   </function>

Modified: 
mmbase/branches/MMBase-1_9/applications/streams/src/main/config/builders/streams/streamsourcescaches.fields.xml
===================================================================
--- 
mmbase/branches/MMBase-1_9/applications/streams/src/main/config/builders/streams/streamsourcescaches.fields.xml
     2010-02-02 14:28:53 UTC (rev 40802)
+++ 
mmbase/branches/MMBase-1_9/applications/streams/src/main/config/builders/streams/streamsourcescaches.fields.xml
     2010-02-02 15:08:11 UTC (rev 40803)
@@ -24,8 +24,8 @@
 
   <field name="id">
     <descriptions>
-      <description xml:lang="en">Reference to the original stream</description>
-      <description xml:lang="nl">Referentie naar de originel 
stream</description>
+      <description xml:lang="en">Reference to the original this cache was 
transcoded from.</description>
+      <description xml:lang="nl">Referentie naar het origineele waarvan deze 
cache getranscodeerd is.</description>
     </descriptions>
     <gui>
       <guiname xml:lang="en">ID</guiname>
@@ -39,9 +39,11 @@
     </editor>
     <datatype base="nodenumber" xmlns="http://www.mmbase.org/xmlns/datatypes";>
       <required value="true" enforce="never" />
-      <enumeration enforce="never"> <!-- enforcing is very bad for performance 
-->
+      <!-- <enumeration enforce="never"> --> <!-- enforcing is very bad for 
performance -->
+<!-- 
         <query type="mediasources" 
xmlns="http://www.mmbase.org/xmlns/searchquery"; />
       </enumeration>
+ -->
     </datatype>
   </field>
 

Modified: 
mmbase/branches/MMBase-1_9/applications/streams/src/main/config/components/streams.xml
===================================================================
--- 
mmbase/branches/MMBase-1_9/applications/streams/src/main/config/components/streams.xml
      2010-02-02 14:28:53 UTC (rev 40802)
+++ 
mmbase/branches/MMBase-1_9/applications/streams/src/main/config/components/streams.xml
      2010-02-02 15:08:11 UTC (rev 40803)
@@ -45,6 +45,7 @@
     <body jsp="admin.jspx">
       <param name="trigger" />
       <param name="interrupt" />
+      <param name="recache" />
       <param name="page"  type="java.lang.Integer" />
     </body>
   </block>
@@ -59,6 +60,7 @@
     <body jsp="myfragments.jspx">
       <param name="trigger" />
       <param name="interrupt" />
+      <param name="recache" />
       <param name="page"  type="java.lang.Integer" />
     </body>
   </block>

Modified: 
mmbase/branches/MMBase-1_9/applications/streams/src/main/java/org/mmbase/streams/CreateCachesFunction.java
===================================================================
--- 
mmbase/branches/MMBase-1_9/applications/streams/src/main/java/org/mmbase/streams/CreateCachesFunction.java
  2010-02-02 14:28:53 UTC (rev 40802)
+++ 
mmbase/branches/MMBase-1_9/applications/streams/src/main/java/org/mmbase/streams/CreateCachesFunction.java
  2010-02-02 15:08:11 UTC (rev 40803)
@@ -42,12 +42,11 @@
 
     private static final Logger LOG = 
Logging.getLoggerInstance(CreateCachesFunction.class);
     public CreateCachesFunction() {
-        //super("createcaches");
-        super("createcaches", new Parameter<Boolean>("retrigger_jobs", 
Boolean.class, Boolean.FALSE));
+        super("createcaches");
     }
 
 
-    Processor getCacheCreator(final Field url) {
+    protected static Processor getCacheCreator(final Field url) {
         CommitProcessor commitProcessor = 
url.getDataType().getCommitProcessor();
         if (commitProcessor instanceof ChainedCommitProcessor) {
             ChainedCommitProcessor chain = (ChainedCommitProcessor) 
commitProcessor;

Added: 
mmbase/branches/MMBase-1_9/applications/streams/src/main/java/org/mmbase/streams/RecreateCacheFunction.java
===================================================================
--- 
mmbase/branches/MMBase-1_9/applications/streams/src/main/java/org/mmbase/streams/RecreateCacheFunction.java
                         (rev 0)
+++ 
mmbase/branches/MMBase-1_9/applications/streams/src/main/java/org/mmbase/streams/RecreateCacheFunction.java
 2010-02-02 15:08:11 UTC (rev 40803)
@@ -0,0 +1,118 @@
+/*
+
+This file is part of the MMBase Streams application, 
+which is part of MMBase - an open source content management system.
+    Copyright (C) 2009 André van Toly, Michiel Meeuwissen
+
+MMBase Streams is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+MMBase Streams is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with MMBase. If not, see <http://www.gnu.org/licenses/>.
+
+*/
+
+package org.mmbase.streams;
+
+import java.lang.reflect.InvocationTargetException;
+import java.util.*;
+
+
+import org.mmbase.streams.createcaches.*;
+import org.mmbase.streams.createcaches.Processor;
+import org.mmbase.streams.transcoders.*;
+
+import org.mmbase.applications.media.MimeType;
+import org.mmbase.util.functions.*;
+import org.mmbase.bridge.*;
+import org.mmbase.bridge.util.*;
+import org.mmbase.storage.search.FieldCompareConstraint;
+import org.mmbase.security.ActionRepository;
+import org.mmbase.datatypes.processors.*;
+import org.mmbase.util.logging.*;
+
+/**
+ * Triggers recreation of a certain streamsourcescaches belonging to this 
streamsources node.
+ *
+ * @author Michiel Meeuwissen
+ * @author André van Toly
+ * @version $Id$
+ */
+
+public class RecreateCacheFunction extends NodeFunction<Boolean> {
+
+    private static final Logger LOG = 
Logging.getLoggerInstance(RecreateCacheFunction.class);
+
+    // parameter definitions
+    public final static Parameter[] RECACHE_PARAMETERS = { new 
Parameter("recache", org.mmbase.bridge.Node.class) };
+
+    public RecreateCacheFunction() {
+        super("recache", RECACHE_PARAMETERS);
+    }
+
+    @Override
+    protected Boolean getFunctionValue(final Node node, final Parameters 
parameters) {
+        LOG.debug("params: " + parameters);
+        if (node.getNumber() > 0 
+                && 
node.getCloud().may(ActionRepository.getInstance().get("streams", 
"retrigger_jobs"), null)) {
+            
+            Node recache = (Node) parameters.get("recache");
+            LOG.info("Recreating cache #" + recache.getNumber() + " for node 
#" + node.getNumber());
+            final Field url = node.getNodeManager().getField("url");
+            
+            String key       = recache.getStringValue("key");
+            String mimetype  = recache.getStringValue("mimetype");
+            Transcoder transcoder = null;
+            try {
+                transcoder = AbstractTranscoder.getInstance(key);
+            } catch (ClassNotFoundException cnf) {
+                LOG.error("Class not found, transcoder in key '" + key + "' 
does not exist? - " + cnf);
+                return false;
+            } catch (InstantiationException ie) {
+                LOG.error("Exception while instantiating transcoder for key '" 
+ key + "' - " + ie);
+                return false;
+            } catch (Exception e) {
+                LOG.error("Exception while trying to (re)transcode - " + e);
+                return false;
+            }
+            
+            String in = null;
+            Node inNode = recache.getNodeValue("id");
+            if (inNode.getNumber() != node.getNumber()) {
+                in = "" + inNode.getNumber();
+            }
+            String id = "recache";
+            
+            // JobDefinition def = new JobDefinition(id, in, label, 
transcoder, mimeType, stage);
+            JobDefinition jd = new JobDefinition(id, in, null, transcoder, new 
MimeType(mimetype), Stage.TRANSCODER);
+            
+            Map<String, JobDefinition> jdlist = new LinkedHashMap<String, 
JobDefinition>();
+            jdlist.put(id, jd);
+        
+            {
+                final Processor cc = CreateCachesFunction.getCacheCreator(url);
+                
+                if (cc != null) {
+                    LOG.service("Calling " + cc);
+                    
cc.createCaches(node.getCloud().getNonTransactionalCloud(), node.getNumber(), 
jdlist);
+                    
//cc.createSingleCache(node.getCloud().getNonTransactionalCloud(), 
node.getNumber(), jd);
+                    return true;
+                } else {
+                    LOG.error("No CreateCacheProcessor in " + url);
+                    return false;
+                }
+            }
+
+        } else {
+            return false;
+        }
+    }
+
+}


Property changes on: 
mmbase/branches/MMBase-1_9/applications/streams/src/main/java/org/mmbase/streams/RecreateCacheFunction.java
___________________________________________________________________
Name: svn:keywords
   + Id

Modified: 
mmbase/branches/MMBase-1_9/applications/streams/src/main/java/org/mmbase/streams/createcaches/Job.java
===================================================================
--- 
mmbase/branches/MMBase-1_9/applications/streams/src/main/java/org/mmbase/streams/createcaches/Job.java
      2010-02-02 14:28:53 UTC (rev 40802)
+++ 
mmbase/branches/MMBase-1_9/applications/streams/src/main/java/org/mmbase/streams/createcaches/Job.java
      2010-02-02 15:08:11 UTC (rev 40803)
@@ -58,6 +58,7 @@
     private Node mediaprovider;
     private Node mediafragment;
     final BufferedLogger logger;
+    private static Map<String, JobDefinition> jobdefs = new 
LinkedHashMap<String, JobDefinition>();
     private final Map<String, Result> lookup = new LinkedHashMap<String, 
Result>();
     private final List<Result>        results = new ArrayList<Result>();
     private final long number = lastJobNumber++;
@@ -74,16 +75,21 @@
     final Processor processor;
 
     public Job(Processor processor, Cloud cloud, ChainedLogger chain) {
+        this(processor, processor.list, cloud, chain);
+    }
+    
+    public Job(Processor processor, Map<String, JobDefinition> list, Cloud 
cloud, ChainedLogger chain) {
         user = cloud.getUser().getIdentifier();
         logger = new BufferedLogger();
         logger.setLevel(Level.DEBUG);
         logger.setMaxSize(100);
         logger.setMaxAge(60000);
         chain.addLogger(logger);
-        for (Map.Entry<String, JobDefinition> dum : processor.list.entrySet()) 
{
+        for (Map.Entry<String, JobDefinition> dum : list.entrySet()) {
             results.add(null);
         }
         this.processor = processor;
+        this.jobdefs = list;
     }
 
     /**
@@ -93,14 +99,14 @@
      */
     protected void findResults() {
         int i = -1;
-        for (Map.Entry<String, JobDefinition> entry : 
processor.list.entrySet()) {
+        for (Map.Entry<String, JobDefinition> entry : jobdefs.entrySet()) {
             i++;
             if (results.get(i) == null) {
                 JobDefinition jd = entry.getValue();
                 URI inURI;
                 Node inNode; // inNode (input stream) to be used
 
-                if (jd.getInId() == null) {
+                if (jd.getInId() == null) { // using the original source node
                     String url = node.getStringValue("url");
                     if (url.length() < 0) LOG.error("No value for field url: " 
+ url);
                     assert url.length() > 0;
@@ -123,8 +129,9 @@
                     
                     inURI = f.toURI();
                     inNode = node;
-                } else {
-                    if (! processor.list.containsKey(jd.getInId())) {
+                
+                } else {    // using a previously cached node
+                    if (! jobdefs.containsKey(jd.getInId())) {
                         LOG.warn("Configuration error, no such job definition 
with id '" + jd.getInId());
                         continue;
                     }
@@ -145,7 +152,8 @@
                     }
                 }
 
-                // mimetype: skip when no match
+                // mimetype: skip when there is no match between current jd 
and inNode
+                LOG.debug("mt jd : " + jd.getMimeType() + " mt inNode: " + 
inNode.getStringValue("mimetype") );
                 if (! jd.getMimeType().matches(new 
MimeType(inNode.getStringValue("mimetype")))) {
                     LOG.debug("SKIPPING " + jd);
                     results.set(i, new SkippedResult(jd, inURI));
@@ -156,11 +164,11 @@
                 }
 
                 assert inURI != null;
-                // not a recognizer (it has a transcoder key)
-                if (jd.transcoder.getKey() != null) {
+               
+                if (jd.transcoder.getKey() != null) {  // not a recognizer (it 
has a transcoder key)
                     LOG.info(jd.getMimeType());
                     LOG.info("" + inNode);
-                    Node dest = getCacheNode(jd.transcoder.getKey());   // 
gets node (and creates when yet not present)
+                    Node dest = getCacheNode(inNode, jd.transcoder.getKey());  
 // gets node (and creates when yet not present)
                     if (dest == null) {
                         LOG.warn("Could not create cache node from " + 
node.getNodeManager().getName() + " " + node.getNumber() + " for " + 
jd.transcoder.getKey());
                         continue;
@@ -389,9 +397,9 @@
      * see the builder property 'org.mmbase.streams.cachestype'. It first 
looks if it already
      * exists in the cloud or otherwise will create one.
      *
-     * @param src   source node to create stream from
-     * @param key   representation of the way the stream was created from its 
source, f.e. trancoding parameters
-     * @return cached stream node
+     * @param src   source node to create cache stream from, can be another 
cache
+     * @param key   representation of the way the stream was created from its 
source, f.e. transcoding parameters
+     * @return cache stream node, in builder specified in 
'org.mmbase.streams.cachestype'.
      */
     protected Node getCacheNode(Node src, final String key) {
         String ct = 
src.getNodeManager().getProperty("org.mmbase.streams.cachestype");

Modified: 
mmbase/branches/MMBase-1_9/applications/streams/src/main/webapp/mmbase/components/streams/admin.jspx
===================================================================
--- 
mmbase/branches/MMBase-1_9/applications/streams/src/main/webapp/mmbase/components/streams/admin.jspx
        2010-02-02 14:28:53 UTC (rev 40802)
+++ 
mmbase/branches/MMBase-1_9/applications/streams/src/main/webapp/mmbase/components/streams/admin.jspx
        2010-02-02 15:08:11 UTC (rev 40803)
@@ -8,11 +8,13 @@
     xmlns:mm="http://www.mmbase.org/mmbase-taglib-2.0";>
   <jsp:output omit-xml-declaration="true" />
   <mm:cloud rank="basic user" jspvar="cloud">
+    
     
<h3>${mm:string(requestScope['org.mmbase.framework.state'].renderer.block.title)}</h3>
     
<p>${mm:string(requestScope['org.mmbase.framework.state'].renderer.block.description)}</p>
 
     <mm:import from="request" externid="trigger" />
     <mm:import from="request" externid="interrupt" vartype="integer" />
+    <mm:import from="request" externid="recache" />
     <mm:import from="request" externid="page">0</mm:import>
 
     <mm:import id="pagesize" vartype="integer">50</mm:import>
@@ -37,7 +39,6 @@
       </table>
     </mm:fieldlist>
 
-
     <table summary="mediafragments">
       <caption>Recent mediafragments</caption>
       <mm:listnodescontainer type="${type}">

Modified: 
mmbase/branches/MMBase-1_9/applications/streams/src/main/webapp/mmbase/components/streams/fragment.trs.jspx
===================================================================
--- 
mmbase/branches/MMBase-1_9/applications/streams/src/main/webapp/mmbase/components/streams/fragment.trs.jspx
 2010-02-02 14:28:53 UTC (rev 40802)
+++ 
mmbase/branches/MMBase-1_9/applications/streams/src/main/webapp/mmbase/components/streams/fragment.trs.jspx
 2010-02-02 15:08:11 UTC (rev 40803)
@@ -28,24 +28,26 @@
         </td>
         <c:choose>
           <c:when test="${_.main}">
-            <td colspan="2">
+            <td />
+            <td>
               <mm:function set="streams" name="getJob" referids="_n...@node">
-                JOB: ${_.class}
+                JOB: ${_.class}<br />
               </mm:function>
               <mm:function set="streams" name="runningJobs">
                 JOB: ${_.class}
               </mm:function>
+            </td><td>
               <mm:node number="${_.source.number}">
                 <c:set var="triggervalue" value="${fragment}:${_node}" />
                 <c:choose>
                   <c:when test="${trigger eq triggervalue}">
                     <mm:log> CALLING TRIGGER FOR ${trigger}</mm:log>
-                    <mm:voidfunction name="trigger" />
+                    <mm:voidfunction name="triggerCaches" />
                     <jsp:text>Triggered conversion</jsp:text>
                   </c:when>
                   <c:otherwise>
                     <mm:link referids="triggerva...@trigger">
-                      <a href="${_}">Trigger</a>
+                      <a href="${_}">Trigger all</a>
                     </mm:link>
                   </c:otherwise>
                 </c:choose>
@@ -64,17 +66,44 @@
             </td>
           </c:when>
           <c:otherwise>
-            <mm:node number="${_.source.number}" notfound="skip">
+            <mm:node number="${_.source.number}" notfound="skip" id="cache">
               <td>
+                <mm:hasfield name="label">
+                  <mm:field name="label" /><br />
+                </mm:hasfield>
                 <mm:hasfield name="id">
                   <mm:field name="id" />
                 </mm:hasfield>
               </td>
               <td>
-                <mm:hasfield name="id">
+                <mm:hasfield name="key">
                   <mm:field name="key" />
                 </mm:hasfield>
               </td>
+            
+              <td>
+                
+                <mm:hasfield name="id">
+                
+                  <c:set var="recachevalue" value="${fragment}:${cache}" />
+                  <c:choose>
+                    <c:when test="${recache eq recachevalue}">
+                      <mm:field name="id">
+                        <mm:node number="$_">
+                          <mm:booleanfunction name="triggerRecache" 
referids="ca...@recache" />
+                        </mm:node>
+                      </mm:field>
+                    </c:when>
+                    <c:otherwise>
+                      <mm:link referids="recacheva...@recache">
+                        <a href="${_}">Retrigger cache</a>
+                      </mm:link>
+                    </c:otherwise>
+                  </c:choose>
+                
+                </mm:hasfield>
+                
+              </td>
             </mm:node>
           </c:otherwise>
         </c:choose>

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

Reply via email to