NullFriendlyConverter.java

package org.cyclopsgroup.caff.conversion;

/**
 * A converter that maps between empty CharSequence and NULL
 *
 * @author <a href="mailto:jiaqi@cyclopsgroup.org">Jiaqi Guo</a>
 * @param <T> Type of value to convert from/to
 */
public class NullFriendlyConverter<T> implements Converter<T> {
  private static final String EMPTY = "";

  private final Converter<T> proxy;

  /**
   * @param proxy Internal converter that does actual conversion
   */
  public NullFriendlyConverter(Converter<T> proxy) {
    if (proxy == null) {
      throw new NullPointerException("Input proxy converter can't be NULL");
    }
    this.proxy = proxy;
  }

  @Override
  public T fromCharacters(CharSequence text) {
    if (text == null || text.length() == 0) {
      return null;
    }
    return proxy.fromCharacters(text);
  }

  @Override
  public CharSequence toCharacters(T value) {
    if (value == null) {
      return EMPTY;
    }
    return proxy.toCharacters(value);
  }
}