Author: andre
Date: 2010-05-26 16:03:33 +0200 (Wed, 26 May 2010)
New Revision: 42277

Modified:
   
mmbase/trunk/applications/streams/src/main/java/org/mmbase/streams/CreateCachesFunction.java
   
mmbase/trunk/applications/streams/src/main/java/org/mmbase/streams/createcaches/Job.java
   
mmbase/trunk/applications/streams/src/main/java/org/mmbase/streams/transcoders/AbstractTranscoder.java
   
mmbase/trunk/applications/streams/src/main/java/org/mmbase/streams/transcoders/AnalyzerUtils.java
   
mmbase/trunk/applications/streams/src/main/java/org/mmbase/streams/transcoders/FFMpeg2TheoraAnalyzer.java
   
mmbase/trunk/applications/streams/src/main/java/org/mmbase/streams/transcoders/FFMpeg2TheoraTranscoder.java
   
mmbase/trunk/applications/streams/src/main/java/org/mmbase/streams/transcoders/FFMpegAnalyzer.java
   
mmbase/trunk/applications/streams/src/main/java/org/mmbase/streams/transcoders/FFMpegTranscoder.java
   
mmbase/trunk/applications/streams/src/main/java/org/mmbase/streams/transcoders/RecognizerTranscoder.java
   
mmbase/trunk/applications/streams/src/main/java/org/mmbase/streams/transcoders/SegmenterAnalyzer.java
   
mmbase/trunk/applications/streams/src/main/java/org/mmbase/streams/transcoders/Transcoder.java
   
mmbase/trunk/applications/streams/src/main/webapp/mmbase/components/streams/admin.jspx
   
mmbase/trunk/applications/streams/src/main/webapp/mmbase/components/streams/fragment.trs.jspx
   
mmbase/trunk/applications/streams/src/main/webapp/mmbase/components/streams/myfragments.jspx
Log:
porting differences from 1.9

Modified: 
mmbase/trunk/applications/streams/src/main/java/org/mmbase/streams/CreateCachesFunction.java
===================================================================
--- 
mmbase/trunk/applications/streams/src/main/java/org/mmbase/streams/CreateCachesFunction.java
        2010-05-26 13:47:01 UTC (rev 42276)
+++ 
mmbase/trunk/applications/streams/src/main/java/org/mmbase/streams/CreateCachesFunction.java
        2010-05-26 14:03:33 UTC (rev 42277)
@@ -31,7 +31,7 @@
 import org.mmbase.util.logging.*;
 
 /**
- * Retriggers creation of the caches.
+ * Retriggers creation of (all) caches of a source node.
  *
  * @author Michiel Meeuwissen
  * @version $Id$
@@ -44,7 +44,11 @@
         super("createcaches");
     }
 
-
+    /**
+     * CommitProcessor is on url field of source node.
+     * @param url   field url of source node
+     * @return Processor to (re)create caches nodes
+     */
     protected static Processor getCacheCreator(final Field url) {
         CommitProcessor commitProcessor = 
url.getDataType().getCommitProcessor();
         if (commitProcessor instanceof ChainedCommitProcessor) {

Modified: 
mmbase/trunk/applications/streams/src/main/java/org/mmbase/streams/createcaches/Job.java
===================================================================
--- 
mmbase/trunk/applications/streams/src/main/java/org/mmbase/streams/createcaches/Job.java
    2010-05-26 13:47:01 UTC (rev 42276)
+++ 
mmbase/trunk/applications/streams/src/main/java/org/mmbase/streams/createcaches/Job.java
    2010-05-26 14:03:33 UTC (rev 42277)
@@ -200,15 +200,7 @@
                     dest.setNodeValue("mediaprovider", mediaprovider);
                     dest.setNodeValue("mediafragment", mediafragment);
 
-                    Format f = jd.transcoder.getFormat();
-                    dest.setIntValue("format", f.toInt());
-                    Codec c = jd.transcoder.getCodec();
-                    if (c == null || c == Codec.UNKNOWN) {
-                        dest.setValue("codec", null);
-                    } else {
-                        dest.setIntValue("codec", c.toInt());
-                    }
-                    //dest.setNodeValue("id", Job.this.node);
+                    jd.transcoder.init(dest);
 
                     File inFile  = new File(processor.getDirectory(), 
Job.this.node.getStringValue("url").replace("/", File.separator));
 
@@ -236,12 +228,6 @@
                     while (destFileName.length() < 1 && w < 10) {
                         LOG.warn("No value for field url: '" + destFileName + 
"' in #" + dest.getNumber() + ", committing it again and trying again in 5 sec. 
(" + w + ")");
                         
-                        if (c == null || c == Codec.UNKNOWN) {
-                            dest.setValue("codec", null);
-                        } else {
-                            dest.setIntValue("codec", c.toInt());
-                        }
-                        dest.setIntValue("format", f.toInt());
                         dest.setStringValue("url", outFileName);
                         dest.commit();
                         
@@ -525,9 +511,10 @@
 
         if (future.isDone()) {
             processor.runningJobs.remove(getNode().getNumber());
+            /* this makes no sence: 
             ready = true;
         } else {
-            LOG.warn("This job has not completed yet.");
+            LOG.warn("This job has not completed yet."); */
         }
         ready = true;
     }

Modified: 
mmbase/trunk/applications/streams/src/main/java/org/mmbase/streams/transcoders/AbstractTranscoder.java
===================================================================
--- 
mmbase/trunk/applications/streams/src/main/java/org/mmbase/streams/transcoders/AbstractTranscoder.java
      2010-05-26 13:47:01 UTC (rev 42276)
+++ 
mmbase/trunk/applications/streams/src/main/java/org/mmbase/streams/transcoders/AbstractTranscoder.java
      2010-05-26 14:03:33 UTC (rev 42277)
@@ -27,6 +27,7 @@
 import java.lang.reflect.*;
 import java.io.*;
 import java.util.*;
+import org.mmbase.bridge.Node;
 import org.mmbase.util.externalprocess.*;
 import org.mmbase.util.WriterOutputStream;
 import org.mmbase.util.MimeType;
@@ -78,7 +79,17 @@
             }
         }
         return trans;
+    }
 
+    public void init(Node dest) {
+        Format f = this.getFormat();
+        dest.setIntValue("format", f.toInt());
+        Codec c = this.getCodec();
+        if (c == null || c == Codec.UNKNOWN) {
+            dest.setValue("codec", null);
+        } else {
+            dest.setIntValue("codec", c.toInt());
+        }
     }
 
     protected AbstractTranscoder() {
@@ -152,7 +163,7 @@
                     Field f = getClass().getDeclaredField(setting);
                     value = f.get(this);
                 } catch (NoSuchFieldException nsfe) {
-                    LOG.error("No such method " + methodName + " or field " + 
setting + " on " + getClass());;
+                    LOG.error("No such method " + methodName + " or field " + 
setting + " on " + getClass());
                 } catch (IllegalAccessException iea) {
                     LOG.error(iea);
                 }

Modified: 
mmbase/trunk/applications/streams/src/main/java/org/mmbase/streams/transcoders/AnalyzerUtils.java
===================================================================
--- 
mmbase/trunk/applications/streams/src/main/java/org/mmbase/streams/transcoders/AnalyzerUtils.java
   2010-05-26 13:47:01 UTC (rev 42276)
+++ 
mmbase/trunk/applications/streams/src/main/java/org/mmbase/streams/transcoders/AnalyzerUtils.java
   2010-05-26 14:03:33 UTC (rev 42277)
@@ -59,6 +59,7 @@
     private final ChainedLogger log = new ChainedLogger(LOG);
 
     private boolean updateSource;
+    private boolean updateDestination = false;
 
     AnalyzerUtils(Logger... loggers) {
         for (Logger l : loggers) {
@@ -72,6 +73,9 @@
     public boolean getUpdateSource() {
         return updateSource;
     }
+    public void setUpdateDestination(boolean b) {
+        updateDestination = b;
+    }
 
     /**
      * This fixes the first part (f.e. audio/*) when needed, not the complete 
MimeType.
@@ -214,6 +218,20 @@
         return false;
     }
 
+    /* Output #0, mpeg, to 'presto.mpeg': */
+    private static final Pattern PATTERN_OUTPUT = Pattern.compile("^Output 
#\\d+?, (.*), to.*?");
+    
+    public boolean output(String l, Node source, Node dest) {
+        Matcher m = PATTERN_OUTPUT.matcher(l);
+        if (m.matches()) {
+            log.info("### OUTPUT match: " + l);
+            if (log.isDebugEnabled()) log.debug("format: " + m.group(1));
+            updateDestination = true;
+            return true;
+        }
+        return false;
+    }
+
     /* ffmpeg reports sometimes no start and on some video's bitrate: N/A */
     private static final Pattern PATTERN_DURATION = 
Pattern.compile("\\s*Duration: (.*?),.* bitrate:.*?");
     private static final Pattern PATTERN_BITRATE  = 
Pattern.compile("\\s*Duration: .* bitrate: (.*?) kb/s.*?");
@@ -237,7 +255,7 @@
             if (updateSource) {
                 source.setLongValue("length", length);
             }
-            if (dest != null) {
+            if (updateDestination && dest != null) {
                 dest.setLongValue("length", length);
             }
 
@@ -245,8 +263,12 @@
             if (m.matches()) {
                 if (log.isDebugEnabled()) log.debug("bitrate: " + m.group(1));
                 int bitrate = 1000 * Integer.parseInt(m.group(1));
-                if (updateSource) source.setIntValue("bitrate", bitrate);
-                if (dest != null) dest.setIntValue("bitrate", bitrate);
+                if (updateSource) {
+                    source.setIntValue("bitrate", bitrate);
+                }
+                if (updateDestination && dest != null) {
+                    dest.setIntValue("bitrate", bitrate);
+                }
             }
 
             m = PATTERN_START.matcher(l);
@@ -287,8 +309,12 @@
             if (m.matches()) {
                 if (log.isDebugEnabled()) log.debug("bitrate: " + m.group(1));
                 int bitrate = 1000 * Integer.parseInt(m.group(1));
-                if (updateSource) source.setIntValue("bitrate", bitrate);
-                if (dest != null) dest.setIntValue("bitrate", bitrate);
+                if (updateSource) {
+                    source.setIntValue("bitrate", bitrate);
+                }
+                if (updateDestination && dest != null) {
+                    dest.setIntValue("bitrate", bitrate);
+                }
             }
 
             return true;
@@ -315,6 +341,7 @@
     }
 
     private static final Pattern PATTERN_DIMENSIONS = 
Pattern.compile(".*?\\sVideo: (.*?), (.*?), ([0-9]+)x([0-9]+).*");
+    private static final Pattern VIDEOBITRATE2_PATTERN = 
Pattern.compile(".*?\\sVideo: .*, (.*?) kb/s.*");
 
     /**
      * Looks for width and height when it finds a match for Video, and looks 
for bitrate after that.
@@ -343,7 +370,7 @@
                 source.setIntValue("width", Integer.parseInt(m.group(3)));
                 source.setIntValue("height", Integer.parseInt(m.group(4)));
             }
-            if (dest != null) {
+            if (updateDestination && dest != null) {
                 if (dest.getIntValue("codec") < 0) {
                     dest.setIntValue("codec", libtoCodec(m.group(1)).toInt() );
                 }
@@ -352,10 +379,24 @@
             }
 
             m = VIDEOBITRATE_PATTERN.matcher(l);
+            Matcher m2 = VIDEOBITRATE2_PATTERN.matcher(l);
             if (m.matches()) {
-                if (log.isDebugEnabled()) log.debug("bitRate: " + m.group(1));
-                if (updateSource) source.setIntValue("bitrate", 
Integer.parseInt(m.group(1)));
-                if (dest != null) dest.setIntValue("bitrate", 
Integer.parseInt(m.group(1)));
+                if (log.isDebugEnabled()) log.debug("bitrate: " + m.group(1));
+                if (updateSource) {
+                    source.setIntValue("bitrate", 
Integer.parseInt(m.group(1)));
+                }
+                if (updateDestination && dest != null) {
+                    dest.setIntValue("bitrate", Integer.parseInt(m.group(1)));
+                }
+            } else if (m2.matches()) {
+                if (log.isDebugEnabled()) log.debug("bitrate: " + m2.group(1));
+                int bitrate = 1000 * Integer.parseInt(m2.group(1));
+                if (updateSource) {
+                    source.setIntValue("bitrate", bitrate);
+                }
+                if (updateDestination && dest != null) {
+                    dest.setIntValue("bitrate", bitrate);
+                }
             }
 
             return true;
@@ -365,7 +406,6 @@
     }
 
     private static final Pattern PATTERN_AUDIO = Pattern.compile(".*?\\sAudio: 
(.*?), (.*?) Hz, (stereo|mono|([0-9]+) channels), .*?");
-    private static final Pattern PATTERN_BITRATE2  = 
Pattern.compile("\\s*Audio: .* bitrate: (.*?) kb/s.*?");
 
     /**
      * Looks for audio channel(s).
@@ -389,13 +429,20 @@
 
             if (source.getNodeManager().hasField("channels") && updateSource) {
                 if (source.getIntValue("channels") < 0) 
source.setIntValue("channels", ch);
-                if (source.getIntValue("codec") < 0) {
+                
+                if (source.getNodeManager().hasField("acodec") && 
source.getIntValue("acodec") < 0) {
+                    source.setIntValue("acodec", 
libtoCodec(m.group(1)).toInt() );
+                } else if (source.getIntValue("codec") < 0) {
                     source.setIntValue("codec", libtoCodec(m.group(1)).toInt() 
);
                 }
             }
-            if (dest != null) {
-                if (dest.getIntValue("channels") < 0) 
dest.setIntValue("channels", ch);
-                if (dest.getIntValue("codec") < 0) {
+            if (updateDestination && dest != null) {
+                if (dest.getIntValue("channels") < 0) {
+                    dest.setIntValue("channels", ch);
+                }
+                if (dest.getNodeManager().hasField("acodec") && 
dest.getIntValue("acodec") < 0) {
+                    dest.setIntValue("acodec", libtoCodec(m.group(1)).toInt() 
);
+                } else if (source.getIntValue("codec") < 0) {
                     dest.setIntValue("codec", libtoCodec(m.group(1)).toInt() );
                 }
             }

Modified: 
mmbase/trunk/applications/streams/src/main/java/org/mmbase/streams/transcoders/FFMpeg2TheoraAnalyzer.java
===================================================================
--- 
mmbase/trunk/applications/streams/src/main/java/org/mmbase/streams/transcoders/FFMpeg2TheoraAnalyzer.java
   2010-05-26 13:47:01 UTC (rev 42276)
+++ 
mmbase/trunk/applications/streams/src/main/java/org/mmbase/streams/transcoders/FFMpeg2TheoraAnalyzer.java
   2010-05-26 14:03:33 UTC (rev 42277)
@@ -52,7 +52,7 @@
 
     private AnalyzerUtils util = new AnalyzerUtils(log);
 
-    private List<Throwable> errors =new ArrayList<Throwable>();
+    private List<Throwable> errors = new ArrayList<Throwable>();
 
     public void addThrowable(Throwable t) {
         errors.add(t);
@@ -70,11 +70,10 @@
                 return;
             }
     
-            if (util.dimensions(l, source, des)) {
-                return;
-            }
-    
             if (util.audio(l, source, des)) {
+                util.setUpdateDestination(true);
+                util.audio(l, source, des);
+                util.setUpdateDestination(false);
                 return;
             }
 
@@ -83,9 +82,6 @@
                 if (m.matches()) {
                     util.toVideo(source, des);
                     log.debug("Found " + m);
-                    source.setIntValue("width", Integer.parseInt(m.group(1)));
-                    source.setIntValue("height", Integer.parseInt(m.group(2)));
-                    source.commit();
                     des.setIntValue("width", Integer.parseInt(m.group(3)));
                     des.setIntValue("height", Integer.parseInt(m.group(4)));
                     des.commit();
@@ -95,9 +91,6 @@
                     if (n.matches()) {
                         log.debug("Found " + n);
                         util.toVideo(source, des);
-                        source.setIntValue("width", 
Integer.parseInt(n.group(1)));
-                        source.setIntValue("height", 
Integer.parseInt(n.group(2)));
-                        source.commit();
                         des.setIntValue("width", Integer.parseInt(n.group(1)));
                         des.setIntValue("height", 
Integer.parseInt(n.group(2)));
                         des.commit();
@@ -112,7 +105,6 @@
                     long videoBitrate = Integer.parseInt(m.group(3));
                     bits += ((double) (audioBitrate + videoBitrate)) * 
((double) pos - prevPos) * 1000;
                     //System.out.println("" + pos + "ms "  + (audioBitrate + 
videoBitrate) + " -> " + (bits / pos) + " " + (100 * pos / length) + " %");
-    
                     prevPos = pos;
                 }
             }

Modified: 
mmbase/trunk/applications/streams/src/main/java/org/mmbase/streams/transcoders/FFMpeg2TheoraTranscoder.java
===================================================================
--- 
mmbase/trunk/applications/streams/src/main/java/org/mmbase/streams/transcoders/FFMpeg2TheoraTranscoder.java
 2010-05-26 13:47:01 UTC (rev 42276)
+++ 
mmbase/trunk/applications/streams/src/main/java/org/mmbase/streams/transcoders/FFMpeg2TheoraTranscoder.java
 2010-05-26 14:03:33 UTC (rev 42277)
@@ -73,6 +73,14 @@
         width = x;
     }
 
+    /* Saving values codec, acodec */
+    public void init(Node dest) {
+        dest.setIntValue("codec", Codec.THEORA.toInt() );
+        if (dest.getNodeManager().hasField("acodec")) {
+            dest.setIntValue("acodec", Codec.VORBIS.toInt() );
+        }
+    }
+    
     @Override
     protected  String getCommand() {
         return "ffmpeg2theora";

Modified: 
mmbase/trunk/applications/streams/src/main/java/org/mmbase/streams/transcoders/FFMpegAnalyzer.java
===================================================================
--- 
mmbase/trunk/applications/streams/src/main/java/org/mmbase/streams/transcoders/FFMpegAnalyzer.java
  2010-05-26 13:47:01 UTC (rev 42276)
+++ 
mmbase/trunk/applications/streams/src/main/java/org/mmbase/streams/transcoders/FFMpegAnalyzer.java
  2010-05-26 14:03:33 UTC (rev 42277)
@@ -84,6 +84,11 @@
                 return;
             }
 
+            if (util.output(l, source, des)) {
+                util.setUpdateDestination(true);
+                return;
+            }
+            
             if (util.duration(l, source, des)) {
                 return;
             }

Modified: 
mmbase/trunk/applications/streams/src/main/java/org/mmbase/streams/transcoders/FFMpegTranscoder.java
===================================================================
--- 
mmbase/trunk/applications/streams/src/main/java/org/mmbase/streams/transcoders/FFMpegTranscoder.java
        2010-05-26 13:47:01 UTC (rev 42276)
+++ 
mmbase/trunk/applications/streams/src/main/java/org/mmbase/streams/transcoders/FFMpegTranscoder.java
        2010-05-26 14:03:33 UTC (rev 42277)
@@ -33,11 +33,10 @@
 
 
 /**
- * The transcoder that uses <code>ffmpeg</code> to transcode media. Possible 
parameters to be set in 
+ * Transcoder that uses <code>ffmpeg</code> to transcode media. Possible 
parameters to be set in 
  * 'createcaches.xml' are: format, forceFormat (-f), acodec (-acodec), vcodec 
(-vcodec), 
  * vpre (-vpre), aq (-aq), ab (-ab), bitrate or b (-b), async (-async), 
framesPerSecond or 
- * r (-r), audioChannels or ac (-ac), 
- * width and height (combined to -s). 
+ * r (-r), audioChannels or ac (-ac), width and height (combined to -s). 
  * Others can be added as extra parameters but will be at the end of the 
commands parameters. See the
  * documentation for FFmpeg for more information.
  *
@@ -148,6 +147,17 @@
         format = Format.AVI;
     }
 
+    /* Saving values like width, height */
+    public void init(Node dest) {
+        /*
+        if (width != null && dest.getNodeManager().hasField("width")) {
+            dest.setIntValue("width", width);
+            if (height != null) {
+                dest.setIntValue("height", height);
+            }        
+        }
+        */
+    }
 
     @Override
     protected  String getCommand() {

Modified: 
mmbase/trunk/applications/streams/src/main/java/org/mmbase/streams/transcoders/RecognizerTranscoder.java
===================================================================
--- 
mmbase/trunk/applications/streams/src/main/java/org/mmbase/streams/transcoders/RecognizerTranscoder.java
    2010-05-26 13:47:01 UTC (rev 42276)
+++ 
mmbase/trunk/applications/streams/src/main/java/org/mmbase/streams/transcoders/RecognizerTranscoder.java
    2010-05-26 14:03:33 UTC (rev 42277)
@@ -23,6 +23,7 @@
 
 import java.net.URI;
 
+import org.mmbase.bridge.Node;
 import org.mmbase.applications.media.Codec;
 import org.mmbase.applications.media.Format;
 import org.mmbase.util.MimeType;
@@ -53,6 +54,10 @@
 
     protected MimeType  mimeType = MimeType.ANY;
 
+    public void init(Node d) {
+        throw new UnsupportedOperationException();
+    }
+    
     public void setFormat(String f) {
         throw new UnsupportedOperationException();
     }

Modified: 
mmbase/trunk/applications/streams/src/main/java/org/mmbase/streams/transcoders/SegmenterAnalyzer.java
===================================================================
--- 
mmbase/trunk/applications/streams/src/main/java/org/mmbase/streams/transcoders/SegmenterAnalyzer.java
       2010-05-26 13:47:01 UTC (rev 42276)
+++ 
mmbase/trunk/applications/streams/src/main/java/org/mmbase/streams/transcoders/SegmenterAnalyzer.java
       2010-05-26 14:03:33 UTC (rev 42277)
@@ -65,6 +65,7 @@
 
     public void analyze(String l, Node source, Node des) {
         synchronized(util) {
+            /*
             Cloud cloud = source.getCloud();
             
             if (util.duration(l, source, des)) {
@@ -78,7 +79,7 @@
             if (util.audio(l, source, des)) {
                 return;
             }
-
+            */
             // TODO: progress matcher
             /*
             {

Modified: 
mmbase/trunk/applications/streams/src/main/java/org/mmbase/streams/transcoders/Transcoder.java
===================================================================
--- 
mmbase/trunk/applications/streams/src/main/java/org/mmbase/streams/transcoders/Transcoder.java
      2010-05-26 13:47:01 UTC (rev 42276)
+++ 
mmbase/trunk/applications/streams/src/main/java/org/mmbase/streams/transcoders/Transcoder.java
      2010-05-26 14:03:33 UTC (rev 42277)
@@ -21,12 +21,11 @@
 
 package org.mmbase.streams.transcoders;
 
-
 import java.net.*;
+import org.mmbase.bridge.Node;
 import org.mmbase.applications.media.*;
 import org.mmbase.util.logging.*;
 
-
 /**
  * Representation of one transcoding action. Instances should cloned before 
usage, so the transcoder
  * needs not be stateless.
@@ -44,6 +43,12 @@
     Codec getCodec();
 
     /**
+     * Init the transcoder and destination node with appropiate values.
+     * @param destination   stream destination Node
+     */
+    void init(Node destination);
+    
+    /**
      * Transcode a file to another, follow the process with a logger.
      * @param in
      * @param out

Modified: 
mmbase/trunk/applications/streams/src/main/webapp/mmbase/components/streams/admin.jspx
===================================================================
--- 
mmbase/trunk/applications/streams/src/main/webapp/mmbase/components/streams/admin.jspx
      2010-05-26 13:47:01 UTC (rev 42276)
+++ 
mmbase/trunk/applications/streams/src/main/webapp/mmbase/components/streams/admin.jspx
      2010-05-26 14:03:33 UTC (rev 42277)
@@ -41,6 +41,14 @@
 
     <table summary="mediafragments">
       <caption>Recent mediafragments</caption>
+      <tr>
+        <th>#</th>
+        <th>title or url</th>
+        <th>mimetype</th>
+        <th>size</th>
+        <th>sourcenode, builder</th>
+        <th>action</th>
+      </tr>
       <mm:listnodescontainer type="${type}">
         <mm:sortorder field="number" direction="down" />
         <mm:offset value="${page * pagesize}" />

Modified: 
mmbase/trunk/applications/streams/src/main/webapp/mmbase/components/streams/fragment.trs.jspx
===================================================================
--- 
mmbase/trunk/applications/streams/src/main/webapp/mmbase/components/streams/fragment.trs.jspx
       2010-05-26 13:47:01 UTC (rev 42276)
+++ 
mmbase/trunk/applications/streams/src/main/webapp/mmbase/components/streams/fragment.trs.jspx
       2010-05-26 14:03:33 UTC (rev 42277)
@@ -7,29 +7,26 @@
 
   <mm:listnodes id="fragment">
     <tr>
-      <th>
-        <mm:nodeinfo type="nodemanager"/>
-      </th><th>
-        <mm:field name="number" />
-      </th><th colspan="4">
-        <mm:nodeinfo type="gui" />
-      </th><th colspan="99" />
+      <th><mm:field name="number" /></th>
+      <th colspan="3"><mm:nodeinfo type="gui" /></th>
+      <th><mm:nodeinfo type="nodemanager" /></th>
+      <th colspan="3" />
     </tr>
     <mm:listfunction name="filteredurls">
       <c:if test="${_.main}">
         <c:set var="source"  value="${_.source.number}" />
       <tr>
-          <th>${_.source.builder.tableName}</th>
           <td>${_.source.number}</td>
         <td>
-          <jsp:text>${_.state}</jsp:text>
-            ${_.mimeType}
-          ${_.dimension}
+            <strong><a href="${mm:escape('text/xml', 
_.URL)}"><mm:escape>${_.URL}</mm:escape></a></strong>
         </td>
-        <td>
-          <a href="${mm:escape('text/xml', 
_.URL)}"><mm:escape>${_.URL}</mm:escape></a>
-        </td>
-            <td colspan="2">
+          <td> ${_.mimeType} </td>
+          <td> ${_.dimension} </td>
+          <td> ${_.source.builder.tableName}  </td>
+          <td>${_.state}</td>
+        </tr><tr>
+          <td />
+          <td colspan="4">
               <mm:function set="streams" name="getJob" referids="_n...@node">
               JOB: ${_.class}<br />  
               </mm:function>
@@ -71,26 +68,30 @@
     <mm:listfunction name="filteredurls">
       <c:if test="${!_.main}">
         <tr>
-          <th>${_.source.builder.tableName}</th>
-          <td>${_.source.number}</td>
+          <td> ${_.source.number} </td>
           <td>
-            <jsp:text>${_.state}</jsp:text>
-            ${_.mimeType}
-            ${_.dimension}
+            <strong><a href="${mm:escape('text/xml', 
_.URL)}"><mm:escape>${_.URL}</mm:escape></a></strong>
           </td>
+          <td> ${_.mimeType} </td>
           <td>
-            <a href="${mm:escape('text/xml', 
_.URL)}"><mm:escape>${_.URL}</mm:escape></a>
-          </td>          
-          <mm:node number="${_.source.number}" notfound="skip" id="cache">
-              <td>
+            ${_.dimension}
+            <mm:node number="${_.source.number}" notfound="skip">
               <mm:hasfield name="label">
-                <mm:field name="label" /><br />
-              </mm:hasfield>
-                <mm:hasfield name="id">
-                  <mm:field name="id" />
+                <mm:field 
name="label"><mm:isnotempty>${_}</mm:isnotempty></mm:field>
                 </mm:hasfield>
+            </mm:node>
               </td>
               <td>
+            <mm:node number="${_.source.number}" notfound="skip">
+              <mm:hasfield name="id"><mm:field name="id" />, </mm:hasfield>
+            </mm:node>
+            ${_.source.builder.tableName}  
+          </td>
+          <td>${_.state}</td>
+        </tr><tr>
+          <td />
+          <mm:node number="${_.source.number}" notfound="skip" id="cache">
+            <td colspan="4">
               <mm:hasfield name="key">
                   <mm:field name="key" />
                 </mm:hasfield>

Modified: 
mmbase/trunk/applications/streams/src/main/webapp/mmbase/components/streams/myfragments.jspx
===================================================================
--- 
mmbase/trunk/applications/streams/src/main/webapp/mmbase/components/streams/myfragments.jspx
        2010-05-26 13:47:01 UTC (rev 42276)
+++ 
mmbase/trunk/applications/streams/src/main/webapp/mmbase/components/streams/myfragments.jspx
        2010-05-26 14:03:33 UTC (rev 42277)
@@ -10,6 +10,14 @@
 
   <table summary="my fragments">
     <caption><mm:cloudinfo type="user" id="currentuser" /></caption>
+      <tr>
+        <th>#</th>
+        <th>title or url</th>
+        <th>mimetype</th>
+        <th>size</th>
+        <th>sourcenode, builder</th>
+        <th>action</th>
+      </tr>
     <mm:listnodescontainer type="mediafragments">
       <mm:constraint field="owner" 
value="${requestScope['org.mmbase.cloud'].user.ownerField}" />
       <mm:maxnumber value="100" />

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

Reply via email to