view visualizer/LogViewer/src/at/ssw/visualizer/logviewer/model/filter/FilterManager.java @ 5734:6a812002a918

Initial commit: LogViewer backend
author Alexander Stipsits <stipsits_alexander@gmx.at>
date Fri, 22 Jun 2012 23:13:34 +0200
parents
children
line wrap: on
line source

package at.ssw.visualizer.logviewer.model.filter;

import at.ssw.visualizer.logviewer.model.LogLine;
import at.ssw.visualizer.logviewer.model.LogModel;
import java.util.ArrayList;
import java.util.List;

/**
 *
 * @author Alexander Stipsits
 */
public class FilterManager {
	
	private final List<Filter> filters = new ArrayList<>();
	private final Filter methodFilter, scopeFilter, nodeFilter, fulltextFilter;
	
	/**
	 * Creates a new instance of the filter manager.
	 */
	public FilterManager() {
		add(methodFilter = new MethodFilter());
		add(scopeFilter = new ScopeFilter());
		add(nodeFilter = new NodeFilter());
		add(fulltextFilter = new FullTextFilter());
	}
	
	/**
	 * Executes a filtering process with the given log model as subject. Inactive filters will be ignored.
	 * @param model subject
	 * @return filtered list of log lines
	 * @throws InterruptedException 
	 */
	public List<LogLine> execute(LogModel model) throws InterruptedException {
		List<LogLine> input = model.getLogs();
		List<LogLine> output = new ArrayList<>();
		
		for(LogLine line : input) {
			if(Thread.interrupted()) throw new InterruptedException();
			if(keep(line)) output.add(line);
		}
		
		if(Thread.interrupted()) throw new InterruptedException();
		
		return output;
	}
	
	private boolean keep(LogLine line) {
		boolean keep = true;
		for(Filter filter : filters) {
			keep = keep && (!filter.isActive() || filter.keep(line));
		}
		return keep;
	}
	
	private Filter add(Filter filter) {
		filters.add(filter);
		return filter;
	}
	
	/**
	 * Returns the instance of a method filter
	 * @return method filter
	 */
	public Filter getMethodFilter() {
		return methodFilter;
	}
	
	/**
	 * Returns the instance of a scope filter
	 * @return scope filter
	 */
	public Filter getScopeFilter() {
		return scopeFilter;
	}
	
	/**
	 * Returns the instance of a node filter
	 * @return node filter
	 */
	public Filter getNodeFilter() {
		return nodeFilter;
	}
	
	/**
	 * Returns the instance of a full text filter
	 * @return full text filter
	 */
	public Filter getFullTextFilter() {
		return fulltextFilter;
	}
	
}