Open Source Repository

Home /csv/supercsv-1.52 | Repository Home


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

import org.supercsv.cellprocessor.CellProcessorAdaptor;
import org.supercsv.cellprocessor.ift.DoubleCellProcessor;
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 DMinMax extends CellProcessorAdaptor {
public static final double MAXD = Double.MAX_VALUE;
public static final double MIND = Double.MIN_VALUE;
public static final double MAXS = Short.MAX_VALUE;
public static final double MINS = Short.MIN_VALUE;
public static final double MAXC = Character.MAX_VALUE;
public static final double MINC = Character.MIN_VALUE;
/** 255 */
public static final int MAX8bit = 255;
/** -128 */
public static final int MIN8bit = -128;

protected double min, max;

public DMinMax(final double min, final double max) {
  super();
  init(min, max);
}

public DMinMax(final double min, final double max, final DoubleCellProcessor 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 Double result;
  ifvalue instanceof Double ) {
    result = (Doublevalue;
  }
  else {
    try {
      result = Double.parseDouble(value.toString());
    }
    catch(final NumberFormatException e) {
      throw new SuperCSVException("Parser 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 double min, final double max) {
  ifmax < min ) {
    throw new SuperCSVException("max < min in the arguments " + min + " " + max, this);
  }
  
  this.min = min;
  this.max = max;
}
}