View Javadoc

1   package cz.cuni.amis.pogamut.base.utils.logging;
2   
3   import java.util.HashSet;
4   import java.util.Set;
5   import java.util.logging.Filter;
6   import java.util.logging.LogRecord;
7   
8   /**
9    * Simple filter for LogCategory - it is instantiated with the instance
10   * of the LogCategory (or array of them) which it should accept.
11   * 
12   * @author Jimmy
13   */
14  public class LogCategoryFilter implements Filter {
15  	
16  	private interface Filter {
17  		public boolean isLoggable(LogRecord record);
18  	}
19  	
20  	private class LogSingleCategoryFilter implements Filter {
21  		
22  		public boolean isLoggable(LogRecord record) {
23  			return record.getParameters() != null && record.getParameters().length > 0 && record.getParameters()[0] == category; 
24  		}
25  		
26  	}
27  	
28  	private class LogMultipleCategoriesFilter implements Filter {
29  		
30  		public boolean isLoggable(LogRecord record) {
31  			return record.getParameters() != null && record.getParameters().length > 0 && categories.contains(record.getParameters()[0]); 
32  		}
33  		
34  	}
35  	
36  	private LogCategory category = null;
37  	
38  	private Filter filter;
39  	
40  	private Set<LogCategory> categories = null;
41  	
42  	public LogCategoryFilter(LogCategory category) {
43  		this.category = category;
44  		filter = new LogSingleCategoryFilter();
45  	}
46  	
47  	public LogCategoryFilter(LogCategory[] categories) {
48  		this.categories = new HashSet<LogCategory>();
49  		for (LogCategory category : categories) {
50  			this.categories.add(category);
51  		}
52  		filter = new LogMultipleCategoriesFilter();
53  	}
54  
55  	@Override
56  	public boolean isLoggable(LogRecord record) {
57  		return filter.isLoggable(record); 
58  	}
59  	
60  	/**
61  	 * Returns cathegories the filter is looking for (taking / allowing the log record to be published).
62  	 * <p><p>
63  	 * This array is copy - altering it won't alter the filter.
64  	 *  
65  	 * @return
66  	 */
67  	public LogCategory[] getFilterCategories() {
68  		if (category != null) return new LogCategory[]{category};
69  		return categories.toArray(new LogCategory[categories.size()]);
70  	}
71  
72  }