package org.supercsv.cellprocessor;

import java.util.Map;

import org.supercsv.cellprocessor.ift.BoolCellProcessor;
import org.supercsv.cellprocessor.ift.DateCellProcessor;
import org.supercsv.cellprocessor.ift.DoubleCellProcessor;
import org.supercsv.cellprocessor.ift.LongCellProcessor;
import org.supercsv.cellprocessor.ift.StringCellProcessor;
import org.supercsv.exception.NullInputException;
import org.supercsv.exception.SuperCSVException;
import org.supercsv.util.CSVContext;

/**
 * Translate a value into another one, given some value mapping.
 * 
 * @since 1.50
 * @author Dominique De Vito
 */
public class HashMapper extends CellProcessorAdaptor implements BoolCellProcessor, DateCellProcessor,
	DoubleCellProcessor, LongCellProcessor, StringCellProcessor {

private final Map<Object, Object> mapping;
private final Object defaultValue;

public HashMapper(final Map<Object, Object> mapping, final BoolCellProcessor next) {
	this(mapping, null, next);
}

public HashMapper(final Map<Object, Object> mapping, final Object defaultValue, final BoolCellProcessor next) {
	super(next);
	this.mapping = mapping;
	this.defaultValue = defaultValue;
	if( mapping == null ) { throw new NullInputException("Mapping cannot be null", this); }
}

/**
 * {@inheritDoc}
 */
@Override
public Object execute(final Object value, final CSVContext context) throws SuperCSVException {
	if( value == null ) { throw new NullInputException("Input cannot be null on line " + context.lineNumber
		+ " at column " + context.columnNumber, context, this); }
	Object result = mapping.get(value);
	if( result == null ) {
		result = defaultValue;
	}
	return next.execute(result, context);
}
}

package org.supercsv.cellprocessor;

import java.util.Map;

import org.supercsv.cellprocessor.ift.BoolCellProcessor;
import org.supercsv.cellprocessor.ift.DateCellProcessor;
import org.supercsv.cellprocessor.ift.DoubleCellProcessor;
import org.supercsv.cellprocessor.ift.LongCellProcessor;
import org.supercsv.cellprocessor.ift.StringCellProcessor;
import org.supercsv.exception.NullInputException;
import org.supercsv.exception.SuperCSVException;
import org.supercsv.util.CSVContext;

/**
 * Translate a value into another one, given some value mapping.
 * 
 * @since 1.50
 * @author Dominique De Vito
 */
public class HashMapper extends CellProcessorAdaptor implements BoolCellProcessor, DateCellProcessor,
	DoubleCellProcessor, LongCellProcessor, StringCellProcessor {

private final Map<Object, Object> mapping;
private final Object defaultValue;

public HashMapper(final Map<Object, Object> mapping) {
	super();
	this.mapping = mapping;
	this.defaultValue = null;
}

public HashMapper(final Map<Object, Object> mapping, final Object defaultValue) {
	super();
	this.mapping = mapping;
	this.defaultValue = defaultValue;
}

public HashMapper(final Map<Object, Object> mapping, final BoolCellProcessor next) {
	this(mapping, null, next);
}

public HashMapper(final Map<Object, Object> mapping, final Object defaultValue, final BoolCellProcessor next) {
	super(next);
	this.mapping = mapping;
	this.defaultValue = defaultValue;
	if( mapping == null ) { throw new NullInputException("Mapping cannot be null", this); }
}

/**
 * {@inheritDoc}
 */
@Override
public Object execute(final Object value, final CSVContext context) throws SuperCSVException {
	if( value == null ) { throw new NullInputException("Input cannot be null on line " + context.lineNumber
		+ " at column " + context.columnNumber, context, this); }
	Object result = mapping.get(value);
	if( result == null ) {
		result = defaultValue;
	}
	return next.execute(result, context);
}
}

add of new constructors in case of no next processor