Open Source Repository

Home /csv/supercsv-1.52 | Repository Home


org/supercsv/cellprocessor/constraint/ForbidSubStr.java
/**
 *
 */
package org.supercsv.cellprocessor.constraint;

import java.util.List;

import org.supercsv.cellprocessor.CellProcessorAdaptor;
import org.supercsv.cellprocessor.ift.CellProcessor;
import org.supercsv.cellprocessor.ift.StringCellProcessor;
import org.supercsv.exception.NullInputException;
import org.supercsv.exception.SuperCSVException;
import org.supercsv.util.CSVContext;

/**
 * Convert to string and ensure the input string is not present in a set of specified sub strings. Such constraint is
 * handy when reading/writing e.g. filenames and wanting to ensure no filename contains e.g. ":", "/", ...
 
 @since 1.10
 @author Kasper B. Graversen
 */
public class ForbidSubStr extends CellProcessorAdaptor implements StringCellProcessor {

String[] forbiddenSubStrings;

public ForbidSubStr(final List<String> forbiddenSubStrings) {
  this(forbiddenSubStrings.toArray(new String[0]));
}

public ForbidSubStr(final List<String> forbiddenSubStrings, final CellProcessor next) {
  this(forbiddenSubStrings.toArray(new String[0]), next);
}

public ForbidSubStr(final String... forbiddenSubStrings) {
  super();
  this.forbiddenSubStrings = forbiddenSubStrings.clone();
}

public ForbidSubStr(final String forbiddenSubString, final CellProcessor next) {
  this(new String[] { forbiddenSubString }, next);
}

public ForbidSubStr(final String[] forbiddenSubStrings, final CellProcessor next) {
  super(next);
  this.forbiddenSubStrings = forbiddenSubStrings.clone();
}

/**
 * {@inheritDoc}
 
 @throws ClassCastException
 *             is the parameter value cannot be cast to a String
 @throws SuperCSVException
 *             if the input contains any of the substrings
 @return the argument value
 */
@Override
public Object execute(final Object value, final CSVContext contextthrows SuperCSVException, ClassCastException {
  ifvalue == null ) { throw new NullInputException("Input cannot be null on line " + context.lineNumber + " at column " + context.columnNumber, context, this)}
  final String sval = value.toString()// cast
  
  // check for forbidden strings
  forfinal String forbidden : forbiddenSubStrings ) {
    ifsval.indexOf(forbidden!= -) { throw new SuperCSVException("Entry \"" + value + "\" on line "
      + context.lineNumber + " column " + context.columnNumber + " contains the forbidden char \"" + forbidden
      "\"", context, this)}
  }
  
  return next.execute(value, context);
}
}