public boolean isValid(final Cell cell, final StringBuilder unassignableValueAsText) {
    if (!underlyingValueHandler.isValid(cell, unassignableValueAsText)) return false;

    final Object object = underlyingValueHandler.getValue(cell, null);
    if (object == null) return true;

    final String[] strings = ((String[]) object);
    final List<Integer> invalidValues = new ArrayList<Integer>();
    int index = 0;
    for (final String s : strings) {
      try {
        Integer.parseInt(s);
      } catch (NumberFormatException e) {
        invalidValues.add(index);
      }
      index++;
    }

    if (invalidValues.size() > 0) {
      for (final int invalid : invalidValues) {
        final String textValue = strings[invalid];
        if (unassignableValueAsText.length() > 0) unassignableValueAsText.append(", ");
        unassignableValueAsText.append(textValue);
      }
      return false;
    } else return true;
  }
  public Object getValue(final Cell cell, final Object defaultValue) {
    final Object string = underlyingValueHandler.getValue(cell, null);
    if (string == null) return defaultValue;

    final Object object = underlyingValueHandler.getValue(cell, null);
    if (object == null) return true;

    final String[] strings = ((String[]) object);
    final List<Integer> ints = new ArrayList<Integer>();
    for (final String s : strings) {
      try {
        ints.add(Integer.parseInt(s));
      } catch (NumberFormatException e) {
        ints.add((Integer) defaultValue);
      }
    }
    return ints.toArray(new Integer[ints.size()]);
  }
 public boolean isBlank(final Cell cell) {
   return underlyingValueHandler.isBlank(cell);
 }