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... requiredHashcodesthrows SuperCSVException {
  forfinal int hash : requiredHashcodes ) {
    ifrequiredHashCodes.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 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!requiredHashCodes.contains(value.hashCode()) ) {
    // create string of required hash'es for error msg
    final StringBuilder sb = new StringBuilder();
    forfinal 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);
}
}