Author: michiel
Date: 2009-06-25 18:37:54 +0200 (Thu, 25 Jun 2009)
New Revision: 36419

Added:
   
mmbase/trunk/applications/media/src/main/java/org/mmbase/applications/media/filters/BitrateInfo.java
   
mmbase/trunk/applications/media/src/main/java/org/mmbase/applications/media/filters/BitrateLabeler.java
   
mmbase/trunk/applications/media/src/main/java/org/mmbase/applications/media/filters/Labeler.java
Modified:
   mmbase/trunk/applications/media/src/main/config/media/filters.xml
   
mmbase/trunk/applications/media/src/main/java/org/mmbase/applications/media/filters/ClientBitrateFilter.java
   
mmbase/trunk/applications/media/src/main/java/org/mmbase/applications/media/filters/ServerDimensionSorter.java
   
mmbase/trunk/applications/media/src/main/java/org/mmbase/applications/media/urlcomposers/URLComposer.java
   
mmbase/trunk/applications/media/src/main/java/org/mmbase/applications/media/urlcomposers/URLComposerFactory.java
Log:


Modified: mmbase/trunk/applications/media/src/main/config/media/filters.xml
===================================================================
--- mmbase/trunk/applications/media/src/main/config/media/filters.xml   
2009-06-25 16:04:24 UTC (rev 36418)
+++ mmbase/trunk/applications/media/src/main/config/media/filters.xml   
2009-06-25 16:37:54 UTC (rev 36419)
@@ -19,7 +19,7 @@
        <chain>
 
                
<filter>org.mmbase.applications.media.filters.AvailableSorter</filter>
-               <filter 
id="clienformat">org.mmbase.applications.media.filters.ClientFormatSorter</filter>
+               <filter 
id="clientformat">org.mmbase.applications.media.filters.ClientFormatSorter</filter>
                <filter 
id="format">org.mmbase.applications.media.filters.ServerFormatSorter</filter>
                <filter 
id="real">org.mmbase.applications.media.filters.RealSorter</filter>
 

Added: 
mmbase/trunk/applications/media/src/main/java/org/mmbase/applications/media/filters/BitrateInfo.java
===================================================================
--- 
mmbase/trunk/applications/media/src/main/java/org/mmbase/applications/media/filters/BitrateInfo.java
                                (rev 0)
+++ 
mmbase/trunk/applications/media/src/main/java/org/mmbase/applications/media/filters/BitrateInfo.java
        2009-06-25 16:37:54 UTC (rev 36419)
@@ -0,0 +1,63 @@
+ /*
+
+This software is OSI Certified Open Source Software.
+OSI Certified is a certification mark of the Open Source Initiative.
+
+The license (Mozilla version 1.0) can be read at the MMBase site.
+See http://www.MMBase.org/license
+
+  */
+
+package org.mmbase.applications.media.filters;
+
+import org.mmbase.applications.media.urlcomposers.URLComposer;
+import org.mmbase.util.logging.*;
+import org.mmbase.util.xml.DocumentReader;
+import org.w3c.dom.Element;
+import java.util.*;
+import org.mmbase.util.logging.Logger;
+import org.mmbase.util.logging.Logging;
+
+
+/**
+ * container for information beloning to a bitrate filter keyword.
+ * In filter.xml the line <bitrate name="smallband" min="0" max="150000" />
+ * will result in a BitrateFilterInfo inner object.
+ */
+
+public class BitrateInfo {
+    private static final Logger log = 
Logging.getLoggerInstance(BitrateInfo.class);
+
+    protected final String name;
+    protected final int min;
+    protected final int max;
+
+    public BitrateInfo(String name, int min, int max) {
+        this.name = name;
+        this.min = min;
+        this.max = max;
+    }
+    public BitrateInfo(Element el) {
+        this.name = el.getAttribute("name");
+        String minAtt = el.getAttribute("min");
+        this.min = minAtt.equals("") ? 0 : Integer.parseInt(minAtt);
+        String maxAtt = el.getAttribute("max");
+        this.max = maxAtt.equals("") ? Integer.MAX_VALUE : 
Integer.parseInt(maxAtt);
+    }
+
+    public String getName() {
+        return name;
+    }
+
+
+    public String toString() {
+        return "[" + min + "," + max + "]";
+    }
+
+
+    public boolean matches(int bitrateMedia) {
+
+        log.debug("matching " + bitrateMedia + " with " + this);
+        return bitrateMedia > min && bitrateMedia < max;
+    }
+}

Added: 
mmbase/trunk/applications/media/src/main/java/org/mmbase/applications/media/filters/BitrateLabeler.java
===================================================================
--- 
mmbase/trunk/applications/media/src/main/java/org/mmbase/applications/media/filters/BitrateLabeler.java
                             (rev 0)
+++ 
mmbase/trunk/applications/media/src/main/java/org/mmbase/applications/media/filters/BitrateLabeler.java
     2009-06-25 16:37:54 UTC (rev 36419)
@@ -0,0 +1,57 @@
+ /*
+
+This software is OSI Certified Open Source Software.
+OSI Certified is a certification mark of the Open Source Initiative.
+
+The license (Mozilla version 1.0) can be read at the MMBase site.
+See http://www.MMBase.org/license
+
+  */
+
+package org.mmbase.applications.media.filters;
+
+import org.mmbase.applications.media.urlcomposers.URLComposer;
+import org.mmbase.util.logging.*;
+import org.mmbase.util.xml.DocumentReader;
+import org.w3c.dom.Element;
+import java.util.*;
+
+/**
+ *
+ *
+ * @author Michiel Meeuwissen
+ * @since MMBase-1.9.2
+ */
+public class  BitrateLabeler  extends Labeler  {
+    private static final Logger log = 
Logging.getLoggerInstance(BitrateLabeler.class);
+    private static final String CONFIG_TAG = MainFilter.FILTERCONFIG_TAG + 
".bitrates";
+
+    private final Map<String, BitrateInfo> bitrates= new LinkedHashMap<String, 
BitrateInfo>();
+
+    public void configure(DocumentReader reader, Element element) {
+        bitrates.clear();
+        try {
+            for(Element bitrate : 
reader.getChildElements(reader.getElementByPath(element, CONFIG_TAG))) {
+                BitrateInfo bri = new BitrateInfo(bitrate);
+                log.debug("Adding BitrateInfo "+ bri);
+                bitrates.put(bri.getName(), bri);
+            }
+        } catch (Exception ex) {
+            log.error("Error in filter.xml:" + ex, ex);
+        }
+        log.info("Configured bit rate labeler " + bitrates);
+    }
+
+
+    protected void label(URLComposer uc) {
+        for (Map.Entry<String, BitrateInfo> entry : bitrates.entrySet()) {
+            int bitrate = uc.getSource().getIntValue("bitrate");
+            if (entry.getValue().matches(bitrate)) {
+                log.debug("" + bitrate + " matched " + entry);
+                uc.getInfo().put("bitrate", entry.getKey());
+            }
+        }
+
+    }
+
+}

Modified: 
mmbase/trunk/applications/media/src/main/java/org/mmbase/applications/media/filters/ClientBitrateFilter.java
===================================================================
--- 
mmbase/trunk/applications/media/src/main/java/org/mmbase/applications/media/filters/ClientBitrateFilter.java
        2009-06-25 16:04:24 UTC (rev 36418)
+++ 
mmbase/trunk/applications/media/src/main/java/org/mmbase/applications/media/filters/ClientBitrateFilter.java
        2009-06-25 16:37:54 UTC (rev 36419)
@@ -24,23 +24,21 @@
  * @author Rob Vermeulen (VPRO)
  */
 public class ClientBitrateFilter implements Filter {
-    private static Logger log = 
Logging.getLoggerInstance(ClientBitrateFilter.class);
+    private static final Logger log = 
Logging.getLoggerInstance(ClientBitrateFilter.class);
     private static final String CONFIG_TAG = MainFilter.FILTERCONFIG_TAG + 
".bitrates";
-    private static Map<String, BitrateFilterInfo> bitrateFilters = new 
HashMap<String, BitrateFilterInfo>();
 
+    private final Map<String, BitrateInfo> bitrateFilters = new 
LinkedHashMap<String, BitrateInfo>();
+
     public void configure(DocumentReader reader, Element element) {
+        bitrateFilters.clear();
         try {
             for(Element 
bitrate:reader.getChildElements(reader.getElementByPath(element, CONFIG_TAG))) {
-                String name = reader.getElementAttributeValue(bitrate, "name");
-                int min = 
Integer.parseInt(reader.getElementAttributeValue(bitrate, "min"));
-                int max = 
Integer.parseInt(reader.getElementAttributeValue(bitrate, "max"));
-                BitrateFilterInfo brfi = new BitrateFilterInfo(name, min, max);
+                BitrateInfo brfi = new BitrateInfo(bitrate);
                 log.debug("Adding BitrateFilterInfo "+brfi);
-                bitrateFilters.put(name, brfi);
+                bitrateFilters.put(brfi.getName(), brfi);
             }
         } catch (Exception ex) {
-            log.error("Error in filter.xml:" + ex);
-            log.error(Logging.stackTrace(ex));
+            log.error("Error in filter.xml:" + ex, ex);
         }
     }
 
@@ -51,7 +49,7 @@
             Object bitrate = urlcomposer.getInfo().get("bitrate");
             log.debug("Client specified bitrate = " + bitrate);
 
-            if(bitrate==null) {
+            if(bitrate == null) {
                 log.debug("Client did not specify bitrate.");
                 return urlcomposers;
             }
@@ -63,11 +61,11 @@
 
             if (bitrate instanceof String) {
                 if(!bitrateFilters.containsKey(bitrate)) {
-                    log.error("Specified bitrate keyword is invaled. 
biterate="+bitrate);
+                    log.error("Specified bitrate keyword is invalidid. 
biterate="+bitrate);
                 }
-                BitrateFilterInfo brfi = bitrateFilters.get(bitrate);
+                BitrateInfo brfi = bitrateFilters.get(bitrate);
                 int br = urlcomposer.getSource().getIntValue("bitrate");
-                if (brfi.validate(br)) {
+                if (brfi.matches(br)) {
                     log.debug("BitrateFilter "+brfi+" fits for urlcomposer 
with bitrate "+br);
                     filteredUrlcomposers.add(urlcomposer);
                 }
@@ -78,27 +76,5 @@
         return filteredUrlcomposers;
     }
 
-    /**
-     * container for information beloning to a bitrate filter keyword.
-     * In filter.xml the line <bitrate name="smallband" min="0" max="150000" />
-     * will result in a BitrateFilterInfo innerclass.
-     */
-    private class BitrateFilterInfo {
-        private String name;
-        private int min, max;
 
-        private BitrateFilterInfo(String name, int min, int max) {
-            this.name = name;
-            this.min = min;
-            this.max = max;
-        }
-
-        private boolean validate(int bitrateMedia) {
-            return min<bitrateMedia && max>bitrateMedia;
-        }
-
-        public String toString() {
-            return "BitrateFilterInfo name="+name+" max="+max+" min="+min;
-        }
-    }
 }

Added: 
mmbase/trunk/applications/media/src/main/java/org/mmbase/applications/media/filters/Labeler.java
===================================================================
--- 
mmbase/trunk/applications/media/src/main/java/org/mmbase/applications/media/filters/Labeler.java
                            (rev 0)
+++ 
mmbase/trunk/applications/media/src/main/java/org/mmbase/applications/media/filters/Labeler.java
    2009-06-25 16:37:54 UTC (rev 36419)
@@ -0,0 +1,45 @@
+ /*
+
+This software is OSI Certified Open Source Software.
+OSI Certified is a certification mark of the Open Source Initiative.
+
+The license (Mozilla version 1.0) can be read at the MMBase site.
+See http://www.MMBase.org/license
+
+ */
+
+package org.mmbase.applications.media.filters;
+
+import org.mmbase.applications.media.urlcomposers.URLComposer;
+import java.util.*;
+import org.mmbase.util.xml.DocumentReader;
+import org.w3c.dom.Element;
+
+/**
+ * Implements a Filter as a Labeler. It only adds stuff to the URLComposer. It 
does not remove, it
+ * does not change order.
+ *
+ * @author  Michiel Meeuwissen
+ * @since MMBase-1.9.2
+ * @version $Id: $
+ */
+abstract public class Labeler implements  Filter {
+
+    /**
+     * Implement this.
+     */
+    abstract  protected void label(URLComposer o);
+
+    public void configure(DocumentReader reader, Element e) {
+        // nothing to be configured on default.
+    }
+
+
+    final public List<URLComposer> filter(List<URLComposer> urlcomposers) {
+        for (URLComposer uc : urlcomposers) {
+            label(uc);
+        }
+        return urlcomposers;
+    }
+}
+

Modified: 
mmbase/trunk/applications/media/src/main/java/org/mmbase/applications/media/filters/ServerDimensionSorter.java
===================================================================
--- 
mmbase/trunk/applications/media/src/main/java/org/mmbase/applications/media/filters/ServerDimensionSorter.java
      2009-06-25 16:04:24 UTC (rev 36418)
+++ 
mmbase/trunk/applications/media/src/main/java/org/mmbase/applications/media/filters/ServerDimensionSorter.java
      2009-06-25 16:37:54 UTC (rev 36419)
@@ -48,8 +48,9 @@
             preferredDimensions.add(new Dimension(xa.equals("*") ? - 1 : 
Integer.parseInt(xa),
                                                   ya.equals("*") ? - 1 : 
Integer.parseInt(ya)));
 
-            log.service("Adding preferred diemnsion '"+ preferredDimensions 
+"'");
         }
+        log.service("Preferred dimensions '"+ preferredDimensions +"'");
+
     }
 
     protected int getPreference(URLComposer ri) {
@@ -59,9 +60,13 @@
         for (index = 0; index <= preferredDimensions.size(); index++) {
             if (index< preferredDimensions.size()) {
                 Dimension dim = preferredDimensions.get(index);
-                if ((dim.getHeight() == -1 || dimension.getHeight() == 
dim.getHeight()) ||
+
+                if ((dim.getHeight() == -1 || dimension.getHeight() == 
dim.getHeight()) &&
                     (dim.getWidth() == -1 || dimension.getWidth() == 
dim.getWidth())) {
+                    log.debug("Comparing " + dim + " with " + dimension + " -> 
matched");
                     break;
+                } else {
+                    log.debug("Comparing " + dim + " with " + dimension + " -> 
not matched");
                 }
             }
         }

Modified: 
mmbase/trunk/applications/media/src/main/java/org/mmbase/applications/media/urlcomposers/URLComposer.java
===================================================================
--- 
mmbase/trunk/applications/media/src/main/java/org/mmbase/applications/media/urlcomposers/URLComposer.java
   2009-06-25 16:04:24 UTC (rev 36418)
+++ 
mmbase/trunk/applications/media/src/main/java/org/mmbase/applications/media/urlcomposers/URLComposer.java
   2009-06-25 16:37:54 UTC (rev 36419)
@@ -63,7 +63,7 @@
     public MMObjectNode getProvider() {
         return provider;
     }
-    public Map<String, Object>          getInfo()     {
+    public Map<String, Object> getInfo()     {
         return info;
     }
 
@@ -78,6 +78,9 @@
     public Codec       getCodec()   {
         return Codec.get(source.getIntValue("codec"));
     }
+    public int getBitrate() {
+        return source.getIntValue("bitrate");
+    }
 
     /**
      * The mime-type of the produced URL. This is not necessarily the mimetype 
of the source.

Modified: 
mmbase/trunk/applications/media/src/main/java/org/mmbase/applications/media/urlcomposers/URLComposerFactory.java
===================================================================
--- 
mmbase/trunk/applications/media/src/main/java/org/mmbase/applications/media/urlcomposers/URLComposerFactory.java
    2009-06-25 16:04:24 UTC (rev 36418)
+++ 
mmbase/trunk/applications/media/src/main/java/org/mmbase/applications/media/urlcomposers/URLComposerFactory.java
    2009-06-25 16:37:54 UTC (rev 36419)
@@ -81,7 +81,8 @@
             try {
                 log.debug("Instatiating " + klass);
                 URLComposer newComposer = (URLComposer) klass.newInstance();
-                newComposer.init(provider, source, fragment, info, 
cacheExpireObjects);
+                Map<String, Object> clone = new HashMap<String, Object>(); // 
filter may change the info map, but that should of course not influence others
+                newComposer.init(provider, source, fragment, clone, 
cacheExpireObjects);
                 return newComposer;
             }  catch (Exception g) {
                 log.error("URLComposer could not be instantiated " + 
g.toString());

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

Reply via email to