Open Source Repository

Home /csv/supercsv-1.52 | Repository Home



org/supercsv/cellprocessor/constraint/RequireSubStr.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 must contain any of the specified sub strings.
 * 
 * @since 1.10
 * @author Kasper B. Graversen
 */
public class RequireSubStr extends CellProcessorAdaptor implements StringCellProcessor {
String[] requiredSubStrings;

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

public RequireSubStr(final String... requiredSubStrings) {
  super();
  this.requiredSubStrings = requiredSubStrings.clone();
}

public RequireSubStr(final String requiredSubStrings, final CellProcessor next) {
  this(new String[] { requiredSubStrings }, next);
}

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

/**
 * {@inheritDoc}
 * 
 * @throws ClassCastException
 *             is the parameter value cannot be cast to a String
 * @throws SuperCSVException
 *             if none of the substrings are found in the input
 * @return the argument value
 */
@Override
public Object execute(final Object value, final CSVContext context) throws SuperCSVException, ClassCastException {
  if( value == null ) { throw new NullInputException("Input cannot be null on line " + context.lineNumber + " at column " + context.columnNumber, context, this); }
  final String sval = value.toString(); // cast
  
  boolean found = false;
  for( final String required : requiredSubStrings ) {
    if( sval.indexOf(required) != -1 ) {
      found = true;
      break;
    }
  }
  if( found == false ) { throw new SuperCSVException("Entry \"" + value + "\" on line " + context.lineNumber
    + " column " + context.columnNumber + " doesn't contain any of the required substrings", context, this); }
  
  return next.execute(value, context);
}
}