package edu.uchicago.at.faces.convert;

import java.util.logging.Logger;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.convert.Converter;

public class EnumConverter implements Converter {
	private static Logger logger = Logger.getLogger(EnumConverter.class.getName());

	public Object getAsObject(FacesContext context, UIComponent component, String value) {
		Object object = null;
		try {
			if(context == null || component == null) {
				throw new NullPointerException();
			}
			if(value == null) {
				return null;
			}
			String[] s = value.split(":");
			Class c = Class.forName(s[0]);
			object = Enum.valueOf(c, s[1]);
		}
		catch(ClassNotFoundException cnfe) {
			throw new IllegalArgumentException(cnfe);
		}
		return object;
	}

	public String getAsString(FacesContext context, UIComponent component, Object value) {
		if(context == null || component == null) {
			throw new NullPointerException();
		}
		if(value == null) {
			return "";
		}
		if(! (value instanceof Enum)) {
			throw new IllegalArgumentException();
		}
		StringBuilder sb = new StringBuilder();
		sb.append(value.getClass().getName());
		sb.append(":");
		sb.append(value.toString());
		return sb.toString();
	}
}
