AddressGroup.java

package com.ziesemer.utils.web.addressFilter;

import java.util.Collections;
import java.util.List;

import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

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

import com.ziesemer.utils.web.addressFilter.actions.IAction;
import com.ziesemer.utils.web.addressFilter.conditions.ICondition;

/**
 * @author Mark A. Ziesemer
 * 	<a href="http://www.ziesemer.com.">&lt;www.ziesemer.com&gt;</a>
 */
public class AddressGroup{
	
	protected static final Logger LOGGER = LoggerFactory.getLogger(AddressGroup.class);
	
	protected final String groupId;
	protected final List<ICondition> conditions;
	protected final List<IAction> actions;
	
	public AddressGroup(final String groupId, final List<ICondition> conditions, final List<IAction> actions){
		this.groupId = groupId;
		this.conditions = conditions;
		this.actions = actions;
	}
	
	public void run(final ServletRequest request, final ServletResponse response, final FilterState fs) throws Exception{
		LOGGER.trace("({}) Running address group \"{}\"...", fs.getFilterName(), groupId);
		
		for(final ICondition condition : conditions){
			if(!condition.checkCondition(request)){
				return;
			}
		}
		
		for(final IAction action : actions){
			LOGGER.debug("({}) Match on address group \"{}\", running actions...", fs.getFilterName(), groupId);
			action.run(request, response, fs, groupId);
		}
		
	}
	
	public String getGroupId(){
		return groupId;
	}
	
	/**
	 * <p>
	 * 	Returns a read-only view of the group's conditions, primarily for unit testing.
	 * </p>
	 */
	public List<ICondition> getConditions(){
		return Collections.unmodifiableList(conditions);
	}
	
	/**
	 * <p>
	 * 	Returns a read-only view of the group's actions, primarily for unit testing.
	 * </p>
	 */
	public List<IAction> getActions(){
		return Collections.unmodifiableList(actions);
	}
	
}