ClassParserChain.java

package com.ziesemer.utils.classParser;

import java.util.ArrayList;
import java.util.List;

/**
 * @author Mark A. Ziesemer
 * 	<a href="http://www.ziesemer.com">&lt;www.ziesemer.com&gt;</a>
 */
public class ClassParserChain implements IClassParser{
	
	protected List<IClassParser> chain;
	
	public ClassParserChain(){
		chain = new ArrayList<IClassParser>();
	}
	
	public ClassParserChain(final List<IClassParser> chain){
		this.chain = chain;
	}

	@Override
	public Object convert(final Class<?> c, final String str) throws Exception{
		for(final IClassParser parser : chain){
			final Object result = parser.convert(c, str);
			if(result != NO_RESULT){
				return result;
			}
		}
		return NO_RESULT;
	}

	public List<IClassParser> getChain(){
		return chain;
	}

	public void setChain(final List<IClassParser> chain){
		this.chain = chain;
	}
	
	public static ClassParserChain getDefault(){
		final List<IClassParser> chain = new ArrayList<IClassParser>(4);
		chain.add(new NumberParser());
		chain.add(new CommonParser());
		chain.add(new InetAddressParser());
		chain.add(new UnhandledParser());
		return new ClassParserChain(chain);
	}
}