package com.opencsv.bean;

import com.opencsv.ICSVParser;
import com.opencsv.exceptions.CsvDataTypeMismatchException;
import org.apache.commons.lang3.EnumUtils;
import org.apache.commons.lang3.StringUtils;

import java.util.Locale;
import java.util.ResourceBundle;

This class converts an input to an enumeration type and vice versa. The input string must match the enumeration value as declared, ignoring case. The output value will always be the enumeration value, exactly as declared.
Author:Andrew Rucker Jones
Since:5.2
/** * This class converts an input to an enumeration type and vice versa. * The input string must match the enumeration value as declared, ignoring * case. The output value will always be the enumeration value, exactly as * declared. * * @author Andrew Rucker Jones * @since 5.2 */
public class ConverterEnum extends AbstractCsvConverter {
Params:
  • type – The class of the type of the data being processed
  • locale – If not null or empty, specifies the locale used for converting locale-specific data types
  • writeLocale – If not null or empty, specifies the locale used for converting locale-specific data types for writing
  • errorLocale – The locale to use for error messages.
/** * @param type The class of the type of the data being processed * @param locale If not null or empty, specifies the locale used for * converting locale-specific data types * @param writeLocale If not null or empty, specifies the locale used for * converting locale-specific data types for writing * @param errorLocale The locale to use for error messages. */
public ConverterEnum(Class<?> type, String locale, String writeLocale, Locale errorLocale) { super(type, locale, writeLocale, errorLocale); } @Override @SuppressWarnings("unchecked") public Object convertToRead(String value) throws CsvDataTypeMismatchException { Object o = null; if (StringUtils.isNotEmpty(value)) { o = EnumUtils.getEnumIgnoreCase((Class<Enum>)type, value); if(o==null) { throw new CsvDataTypeMismatchException(value, type, String.format( ResourceBundle.getBundle(ICSVParser.DEFAULT_BUNDLE_NAME).getString("illegal.enum.value"), value, type.getName())); } } return o; } @Override public String convertToWrite(Object value) { String s = StringUtils.EMPTY; if(value != null) { Enum e = (Enum)value; s = e.name(); } return s; } }