All Downloads are FREE. Search and download functionalities are using the official Maven repository.

net.sf.extcos.internal.AbstractChainedFilter Maven / Gradle / Ivy

package net.sf.extcos.internal;

import static net.sf.extcos.util.StringUtils.append;

import java.util.Iterator;
import java.util.Set;

import net.sf.extcos.filter.ChainedFilter;
import net.sf.extcos.filter.Filter;
import net.sf.extcos.filter.MultiplexingConnector;
import net.sf.extcos.filter.ResultSetProvider;
import net.sf.extcos.resource.Resource;
import net.sf.extcos.util.Assert;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public abstract class AbstractChainedFilter implements ChainedFilter {
	protected Logger logger = LoggerFactory.getLogger(getClass());

	private Set filters;

	private MultiplexingConnector resourceDispatcher;

	private ResultSetProvider resultSetProvider;

	@Override
	public void setChildFilters(final Set filters) {
		try {
			Assert.notEmpty(filters, IllegalArgumentException.class,
					"filters must not be null or empty");

			this.filters = filters;

			if (logger.isTraceEnabled()) {
				logger.trace("successfully set filters");
			}
		} catch(IllegalArgumentException e) {
			logger.debug("couldn't set filters", e);
		}
	}

	@Override
	public void setResourceDispatcher(final MultiplexingConnector resourceDispatcher) {
		try {
			Assert.notNull(resourceDispatcher, IllegalArgumentException.class,
					"resourceDispatcher must not be null");

			this.resourceDispatcher = resourceDispatcher;

			if (logger.isTraceEnabled()) {
				logger.trace(append("successfully set resource dispatcher to ", resourceDispatcher));
			}
		} catch(IllegalArgumentException e) {
			logger.debug("couldn't set resource dispatcher", e);
		}
	}

	@Override
	public void setResultSetProvider(final ResultSetProvider resultSetProvider) {
		try {
			Assert.notNull(resultSetProvider, IllegalArgumentException.class,
					"resultSetProvider must not be null");

			this.resultSetProvider = resultSetProvider;

			if (logger.isTraceEnabled()) {
				logger.trace(append("successfully set result set provider to ", resultSetProvider));
			}
		} catch(IllegalArgumentException e) {
			logger.debug("couldn't set result set provider", e);
		}
	}

	@Override
	public final void filter(final Iterable resources) {
		if (resources == null) {
			logger.debug("resources must not be null, nothing to filter");
			return;
		}

		if (resourceDispatcher == null && filters == null) {
			logger.warn("no resource dispatcher or filters are set, hence no filtering will take place");
			return;
		} else if (resourceDispatcher == null && filters != null) {
			if (resultSetProvider == null) {
				invokeFilters(resources);
			} else {
				invokeFilters(
						filter(resources.iterator(),
								resultSetProvider.getResultSet()));
			}
		} else if (resourceDispatcher != null && filters == null) {
			filter(resources.iterator(), resourceDispatcher);
		} else /* resourceDispatcher != null && filters != null */{
			if (resultSetProvider == null) {
				filter(resources.iterator(), resourceDispatcher);
				invokeFilters(resources);
			} else {
				invokeFilters(
						filter(resources.iterator(), resourceDispatcher,
								resultSetProvider.getResultSet()));
			}
		}
	}

	private void invokeFilters(final Iterable resources) {
		for (Filter filter : filters) {
			filter.filter(resources);
		}
	}

	protected abstract Iterable filter(Iterator resources, Set resultSet);

	@SuppressWarnings("hiding")
	protected abstract void filter(Iterator resources, MultiplexingConnector resourceDispatcher);

	@SuppressWarnings("hiding")
	protected abstract Iterable filter(Iterator resources, MultiplexingConnector resourceDispatcher, Set resultSet);
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy