/** * TNTConcept Easy Enterprise Management by Autentia Real Bussiness Solution S.L. * Copyright (C) 2007 Autentia Real Bussiness Solution S.L. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package com.autentia.tnt.converter; import javax.faces.component.*; import javax.faces.context.*; import javax.faces.convert.*; import org.apache.commons.lang.*; import org.apache.commons.logging.*; /** * JAVA5 enums converter for JSF. Converts ordinal into Enum and vice versa. * @author ivan */ public class EnumConverter implements Converter { private static Log log = LogFactory.getLog(EnumConverter.class); public Object getAsObject( FacesContext context, UIComponent component, String value ) throws ConverterException { Class clazz = component.getValueBinding("value").getType(context); log.debug("getAsObject - clazz="+clazz.getName()); Enum ret = null; if( !StringUtils.isEmpty(value) ) { try { Enum[] values = (Enum[])clazz.getEnumConstants(); ret = values[Integer.parseInt(value)]; /* for( Enum val : values ) { if( val.name().equals(value) ) { ret = val; break; } } */ } catch( Exception e ) { log.warn("getAsObject - exception converting value '"+value+"' to "+clazz.getName(),e); throw new ConverterException( "Error converting value '"+value+"' to "+clazz.getName(), e ); } } return ret; } public String getAsString( FacesContext context, UIComponent component, Object value ) throws ConverterException { String ret = null; if( value!=null ){ if( value instanceof Enum ){ ret = Integer.toString(((Enum)value).ordinal()); } else if( value instanceof String ){ ret = value.toString(); } } return ret; } }