/***************************************************************
* This file is part of the [fleXive](R) project.
*
* Copyright (c) 1999-2007
* UCS - unique computing solutions gmbh (http://www.ucs.at)
* All rights reserved
*
* The [fleXive](R) project 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 2 of the License, or (at your option) any
* later version.
*
* The GNU General Public License can be found at
* http://www.gnu.org/copyleft/gpl.html.
* A copy is found in the textfile GPL.txt and important notices to the
* license from the author are found in LICENSE.txt distributed with
* these libraries.
*
* This library 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.
*
* For further information about UCS - unique computing solutions gmbh,
* please see the company website: http://www.ucs.at
*
* For further information about [fleXive](R), please see the
* project website: http://www.flexive.org
*
*
* This copyright notice MUST APPEAR in all copies of the file!
***************************************************************/
package com.flexive.faces.converter;
import org.apache.commons.lang.StringUtils;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.convert.Converter;
/**
* Generic JSF enum converter. Drop this as soon as we migrate to JSF 1.2.
*
* @author Daniel Lichtenberger (daniel.lichtenberger@flexive.com), UCS - unique computing solutions gmbh (http://www.ucs.at)
* @version $Rev: 1 $
*/
public class EnumConverter implements Converter {
/**
* {@inheritDoc}
*/
@SuppressWarnings({"unchecked"})
public Object getAsObject(FacesContext facesContext, UIComponent uiComponent, String value) {
if (StringUtils.isBlank(value)) {
return null;
}
String[] values = value.split("::");
if (values.length != 2) {
throw new IllegalArgumentException("Invalid argument for enum converter: " + value);
}
try {
return Enum.valueOf((Class<? extends Enum>) Class.forName(values[0]), values[1]);
} catch (ClassNotFoundException e) {
throw new IllegalArgumentException(e);
}
}
/**
* {@inheritDoc}
*/
public String getAsString(FacesContext facesContext, UIComponent uiComponent, Object object) {
if (object == null) {
return null;
}
Enum value = (Enum) object;
// replace inner class suffixes of class name and append enum name
return value.getClass().getName().replaceFirst("\\$\\d+$", "") + "::" + value.name();
}
}
|