Open Source Repository

Home /csv/supercsv-1.52 | Repository Home


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

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

/**
 * Converts the input data to a long and ensure that number is within a specified numeric range. If the data has no
 * upper bound (or lower bound), you should use either of <code>MIN</code> or <code>MAX</code> constants provided in
 * the class.
 
 @author Kasper B. Graversen
 */
public class LMinMax extends CellProcessorAdaptor {

/**
 * Long.MAX_VALUE
 */
public static final long MAXL = Long.MAX_VALUE;
/**
 * Long.MIN_VALUE
 */
public static final long MINL = Long.MIN_VALUE;
/**
 * Integer.MAX_VALUE
 */
public static final int MAX = Integer.MAX_VALUE;
/**
 * Integer.MIN_VALUE
 */
public static final int MIN = Integer.MIN_VALUE;
/**
 * Short.MAX_VALUE
 */
public static final short MAXS = Short.MAX_VALUE;
/** Short.MIN_VALUE */
public static final short MINS = Short.MIN_VALUE;
/** Character.MAX_VALUE */
public static final int MAXC = Character.MAX_VALUE;
/** Character.MIN_VALUE */
public static final int MINC = Character.MIN_VALUE;
/** 255 */
public static final int MAX8bit = 255;
/** -128 */
public static final int MIN8bit = -128;

protected long min, max;

public LMinMax(final long min, final long max) {
  super();
  init(min, max);
}

public LMinMax(final long min, final long max, final LongCellProcessor next) {
  super(next);
  init(min, max);
}

/**
 * {@inheritDoc}
 */
@Override
public Object execute(final Object value, final CSVContext contextthrows SuperCSVException {
  ifvalue == null ) {
    throw new NullInputException("Input cannot be null on line " + context.lineNumber + " at column "
      + context.columnNumber, context, this);
  }
  final Long result;
  ifvalue instanceof Long ) {
    result = (Longvalue;
  }
  else {
    try {
      result = Long.parseLong(value.toString());
    }
    catch(final NumberFormatException e) {
      throw new SuperCSVException("Parsing error", context, this, e);
    }
  }
  
  if!(result >= min && result <= max) ) {
    throw new SuperCSVException("Entry \"" + value + "\" on line " + context.lineNumber + " column "
      + context.columnNumber + " is not within the numerical range " + min + "-" + max, context, this);
  }
  
  return next.execute(result, context);
}

private void init(final long _min, final long _max) {
  if_max < _min ) {
    throw new SuperCSVException("max < min in the arguments " + _min + " " + _max, this);
  }
  
  this.min = _min;
  this.max = _max;
}
}