KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > mmbase > applications > media > filters > ClientBitrateFilter


1  /*
2   
3 This software is OSI Certified Open Source Software.
4 OSI Certified is a certification mark of the Open Source Initiative.
5   
6 The license (Mozilla version 1.0) can be read at the MMBase site.
7 See http://www.MMBase.org/license
8   
9   */

10
11 package org.mmbase.applications.media.filters;
12
13 import org.mmbase.applications.media.urlcomposers.URLComposer;
14 import org.mmbase.util.logging.*;
15 import org.mmbase.util.xml.DocumentReader;
16 import org.w3c.dom.Element JavaDoc;
17 import java.util.*;
18
19
20 /**
21  * Filters media sources according to a specified bitrate.
22  * i.e. if bitrate=broadband, only broadband media sources are returned.
23  * The definition of broadbast can be made in the filter.xml configuration file.
24  *
25  * @author Rob Vermeulen (VPRO)
26  */

27 public class ClientBitrateFilter implements Filter {
28     private static Logger log = Logging.getLoggerInstance(ClientBitrateFilter.class);
29     private static final String JavaDoc CONFIG_TAG = MainFilter.FILTERCONFIG_TAG + ".bitrates";
30     private static Map bitrateFilters = new HashMap();
31     
32     public void configure(DocumentReader reader, Element JavaDoc element) {
33         try {
34             for(Iterator bitrates = reader.getChildElements(reader.getElementByPath(element, CONFIG_TAG));bitrates.hasNext();) {
35                 Element JavaDoc bitrate=(Element JavaDoc)bitrates.next();
36                 String JavaDoc name = reader.getElementAttributeValue(bitrate, "name");
37                 int min = Integer.parseInt(reader.getElementAttributeValue(bitrate, "min"));
38                 int max = Integer.parseInt(reader.getElementAttributeValue(bitrate, "max"));
39                 BitrateFilterInfo brfi = new BitrateFilterInfo(name, min, max);
40                 log.debug("Adding BitrateFilterInfo "+brfi);
41                 bitrateFilters.put(name, brfi);
42             }
43         } catch (Exception JavaDoc ex) {
44             log.error("Error in filter.xml:" + ex);
45             log.error(Logging.stackTrace(ex));
46         }
47     }
48     
49     public List filter(List urlcomposers) {
50         List filteredUrlcomposers = new ArrayList();
51         
52         for (Iterator urlcomposerlist = urlcomposers.iterator();urlcomposerlist.hasNext();) {
53             URLComposer urlcomposer = (URLComposer)urlcomposerlist.next();
54             
55             Object JavaDoc bitrate = urlcomposer.getInfo().get("bitrate");
56             log.debug("Client specified bitrate = " + bitrate);
57             
58             if(bitrate==null) {
59                 log.debug("Client did not specify bitrate.");
60                 return urlcomposers;
61             }
62             
63             if(bitrate instanceof List) {
64                 log.error("lits is not supported.");
65                 
66             }
67             
68             if (bitrate instanceof String JavaDoc) {
69                 if(!bitrateFilters.containsKey(bitrate)) {
70                     log.error("Specified bitrate keyword is invaled. biterate="+bitrate);
71                 }
72                 BitrateFilterInfo brfi = (BitrateFilterInfo)bitrateFilters.get(bitrate);
73                 int br = urlcomposer.getSource().getIntValue("bitrate");
74                 if (brfi.validate(br)) {
75                     log.debug("BitrateFilter "+brfi+" fits for urlcomposer with bitrate "+br);
76                     filteredUrlcomposers.add(urlcomposer);
77                 }
78             }
79         }
80         
81         log.debug("filteredUrlcomposers = "+filteredUrlcomposers);
82         return filteredUrlcomposers;
83     }
84     
85     /**
86      * container for information beloning to a bitrate filter keyword.
87      * In filter.xml the line <bitrate name="smallband" min="0" max="150000" />
88      * will result in a BitrateFilterInfo innerclass.
89      */

90     private class BitrateFilterInfo {
91         private String JavaDoc name;
92         private int min, max;
93         
94         private BitrateFilterInfo(String JavaDoc name, int min, int max) {
95             this.name = name;
96             this.min = min;
97             this.max = max;
98         }
99        
100         private boolean validate(int bitrateMedia) {
101             return min<bitrateMedia && max>bitrateMedia;
102         }
103         
104         public String JavaDoc toString() {
105             return "BitrateFilterInfo name="+name+" max="+max+" min="+min;
106         }
107     }
108 }
109
Popular Tags