Open Source Repository

Home /csv/supercsv-1.52 | Repository Home


org/supercsv/cellprocessor/constraint/IsIncludedIn.java
package org.supercsv.cellprocessor.constraint;

import java.util.HashSet;
import java.util.Set;

import org.supercsv.cellprocessor.CellProcessorAdaptor;
import org.supercsv.cellprocessor.ift.BoolCellProcessor;
import org.supercsv.cellprocessor.ift.CellProcessor;
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;

/**
 * This processor enforces the input value to belong to a specific set of given values.
 <p>
 
 @since 1.50
 @author Dominique De Vito
 */
public class IsIncludedIn extends CellProcessorAdaptor implements BoolCellProcessor, DateCellProcessor,
  DoubleCellProcessor, LongCellProcessor, StringCellProcessor {
protected Set<Object> possibleValues;

public IsIncludedIn(final Set<Object> possibleValues) {
  super();
  this.possibleValues = possibleValues;
}

public IsIncludedIn(final Set<Object> possibleValues, final CellProcessor next) {
  super(next);
  this.possibleValues = possibleValues;
}

public IsIncludedIn(final Object[] possibleValues) {
  super();
  this.possibleValues = createSet(possibleValues);
}

public IsIncludedIn(final Object[] possibleValues, final CellProcessor next) {
  super(next);
  this.possibleValues = createSet(possibleValues);
}
 
private static Set<Object> createSet(Object[] arr) {
  int nb = (arr == null: arr.length;
  if (nb == 0) {
    return new HashSet<Object>();
  else {
    HashSet<Object> set = new HashSet<Object>((* nb / 31);
    forint i = 0; i < arr.length; i++ ) {
      set.add(arr[i]);
    }
    return set;
  }
}
/**
 * {@inheritDoc}
 
 @throws SuperCSVException
 *             upon receiving a string of an un-accepted length
 @throws ClassCastException
 *             is the parameter value cannot be cast to a String
 @return the argument value if the value is unique
 */
@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)}
  // check for required hash
  if!possibleValues.contains(value) ) {
    
    throw new SuperCSVException("Entry \"" + value + "\" on line " + context.lineNumber + " column "
      + context.columnNumber + " is not accepted as a possible value", context, this);
  }
  
  return next.execute(value, context);
}
}