/* * RHQ Management Platform * Copyright (C) 2005-2008 Red Hat, Inc. * All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License, version 2, as * published by the Free Software Foundation, and/or the GNU Lesser * General Public License, version 2.1, also as published by the Free * Software Foundation. * * 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 and the GNU Lesser General Public License * for more details. * * You should have received a copy of the GNU General Public License * and the GNU Lesser General Public License along with this program; * if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ package org.rhq.core.gui.converter; import java.io.Serializable; import java.util.HashMap; import java.util.Map; import javax.faces.application.FacesMessage; import javax.faces.component.UIComponent; import javax.faces.component.UIInput; import javax.faces.context.FacesContext; import javax.faces.convert.Converter; import javax.faces.validator.Validator; import javax.faces.validator.ValidatorException; import org.rhq.core.gui.configuration.AbstractConfigurationComponent; import org.rhq.core.template.TemplateEngine; /** * @author Ian Springer */ public class PropertySimpleValueConverter implements Converter , Serializable{ TemplateEngine engine = null; public void setEngine(TemplateEngine engine) { this.engine = engine; } public PropertySimpleValueConverter(TemplateEngine engine ) { this.engine = engine; } /** * A special value for an input that tells the server-side that the corresponding value should be set to null. */ public static final String NULL_INPUT_VALUE = " "; public Object getAsObject(FacesContext context, UIComponent component, String string) { if ((engine != null) && (string != null)) { string = engine.replaceTokens(string); } //noinspection UnnecessaryLocalVariable Object object = NULL_INPUT_VALUE.equals(string) ? null : string; validateEmptyString(context, component, string); return object; } public String getAsString(FacesContext facesContext, UIComponent component, Object object) { //noinspection UnnecessaryLocalVariable String string = (String) object; return string; } private static void validateEmptyString(FacesContext context, UIComponent component, String string) { UIInput input = (UIInput) component; if (input.isValid() && string != null && string.length() == 0) { if (input.getValidators() != null) { for (Validator validator : input.getValidators()) { try { validator.validate(context, input, string); } catch (ValidatorException ve) { // If the validator throws an exception, we're // invalid, and we need to add a message input.setValid(false); FacesMessage message; String validatorMessageString = input.getValidatorMessage(); if (null != validatorMessageString) { message = new FacesMessage(FacesMessage.SEVERITY_ERROR, validatorMessageString, validatorMessageString); message.setSeverity(FacesMessage.SEVERITY_ERROR); } else { message = ve.getFacesMessage(); } if (message != null) { context.addMessage(input.getClientId(context), message); } } } } } } }