Open Source Repository

Home /csv/supercsv-1.52 | Repository Home



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

import java.util.HashSet;

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;

/**
 * Deprecated due to bad naming. Use {@link RequireHashCode} instead
 * 
 * @author Kasper B. Graversen
 */
@Deprecated
public class Required extends CellProcessorAdaptor implements BoolCellProcessor, DateCellProcessor,
  DoubleCellProcessor, LongCellProcessor, StringCellProcessor {
protected HashSet<Integer> requiredHashCodes = new HashSet<Integer>();

public Required(final int... requiredHashcodes) {
  super();
  addValues(requiredHashcodes);
}

public Required(final int requiredHashcode, final CellProcessor next) {
  this(new int[] { requiredHashcode }, next);
}

public Required(final int[] requiredHashcodes, final CellProcessor next) {
  super(next);
  addValues(requiredHashcodes);
}

protected void addValues(final int... requiredHashcodes) throws SuperCSVException {
  for( final int hash : requiredHashcodes ) {
    if( requiredHashCodes.contains(hash) ) { throw new SuperCSVException("Cannot accept two identical hash codes",
      this); }
    requiredHashCodes.add(hash);
  }
}

/**
 * {@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 context) throws SuperCSVException, ClassCastException {
  if( value == null ) { throw new NullInputException("Input cannot be null on line " + context.lineNumber + " at column " + context.columnNumber, context, this); }
  // check for required hash
  if( !requiredHashCodes.contains(value.hashCode()) ) {
    // create string of required hash'es for error msg
    final StringBuilder sb = new StringBuilder();
    for( final int hash : requiredHashCodes ) {
      sb.append(hash + ", ");
    }
    sb.deleteCharAt(sb.length() - 1); // delete last comma
    
    throw new SuperCSVException("Entry \"" + value + "\" on line " + context.lineNumber + " column "
      + context.columnNumber + " has hashcode " + value.hashCode()
      + " which is not one of the required hash codes: " + sb.toString(), context, this);
  }
  
  return next.execute(value, context);
}
}