All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.richfaces.component.util.InputUtils Maven / Gradle / Ivy

There is a newer version: 4.5.17.Final
Show newest version
/**
 * License Agreement.
 *
 * Rich Faces - Natural Ajax for Java Server Faces (JSF)
 *
 * Copyright (C) 2007 Exadel, Inc.
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License version 2.1 as published by the Free Software Foundation.
 *
 * 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
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301  USA
 */
package org.richfaces.component.util;

import javax.el.ValueExpression;
import javax.faces.component.UIComponent;
import javax.faces.component.UIInput;
import javax.faces.component.ValueHolder;
import javax.faces.context.FacesContext;
import javax.faces.convert.Converter;
import javax.faces.convert.ConverterException;

import org.richfaces.renderkit.util.RendererUtils;

import com.google.common.base.Strings;

/**
 * @author Maksim Kaszynski
 * @author Manfred Geiler
 */
public final class InputUtils {
    private static final ConverterLookupStrategy DEFAULT_CONVERTER_LOOKUP_STRATEGY = new ConverterLookupStrategy() {
        public Converter getConverterByValue(FacesContext context, UIComponent component, Object value) {
            Converter result = null;

            if (component instanceof ValueHolder) {
                result = ((ValueHolder) component).getConverter();
            }

            if (result == null && value != null) {
                result = getConverterForType(context, value.getClass());
            }

            return result;
        }

        public Converter getConverterByProperty(FacesContext context, UIComponent component) {
            return findConverter(context, component, "value");
        }
    };

    private InputUtils() {
    }

    public interface ConverterLookupStrategy {
        Converter getConverterByProperty(FacesContext context, UIComponent component);

        Converter getConverterByValue(FacesContext context, UIComponent component, Object value);
    }

    public static boolean isDisabled(UIComponent component) {
        return RendererUtils.getInstance().isBooleanAttribute(component, "disabled");
    }

    public static boolean isReadOnly(UIComponent component) {
        return RendererUtils.getInstance().isBooleanAttribute(component, "readonly");
    }

    /**
     * Returns converter for given Java type
     */
    public static Converter getConverterForType(FacesContext context, Class type) {
        // see getConvertedValue
        if (type == null || Object.class.equals(type)) {
            return null;
        }

        return context.getApplication().createConverter(type);
    }

    public static String getConvertedStringValue(FacesContext context, UIComponent component, Object value)
        throws ConverterException {
        return getConvertedStringValue(context, component, DEFAULT_CONVERTER_LOOKUP_STRATEGY, value);
    }

    public static String getConvertedStringValue(FacesContext context, UIComponent component,
        ConverterLookupStrategy converterLookupStrategy, Object value) throws ConverterException {

        Converter converter = converterLookupStrategy.getConverterByValue(context, component, value);
        if (converter != null) {
            return converter.getAsString(context, component, value);
        }

        if (value == null) {
            return "";
        }

        if (value instanceof String) {
            return (String) value;
        }

        return value.toString();
    }

    /**
     * 

Returns {@link Converter} based on a converter configured for provided {@link UIComponent} or returns converter for type referenced by given property's {@link ValueExpression}.

* *

If no converter applied for conditions above, null is returned instead.

*/ public static Converter findConverter(FacesContext facesContext, UIComponent component, String property) { Converter converter = null; if (component instanceof ValueHolder) { converter = ((ValueHolder) component).getConverter(); } if (converter == null) { ValueExpression ve = component.getValueExpression(property); if (ve != null) { Class valueType = ve.getType(facesContext.getELContext()); if (valueType == null || Object.class.equals(valueType)) { // No converter needed } else { converter = facesContext.getApplication().createConverter(valueType); } } } return converter; } public static Object getConvertedValue(FacesContext context, UIComponent component, Object val) throws ConverterException { return getConvertedValue(context, component, DEFAULT_CONVERTER_LOOKUP_STRATEGY, val); } public static Object getConvertedValue(FacesContext context, UIComponent component, ConverterLookupStrategy converterLookupStrategy, Object val) throws ConverterException { String submittedString = (String) val; if (Strings.isNullOrEmpty(submittedString)) { return null; } Converter converter = converterLookupStrategy.getConverterByProperty(context, (UIInput) component); if (converter != null) { return converter.getAsObject(context, component, submittedString); } return submittedString; } public static String getInputValue(FacesContext context, UIComponent component) throws ConverterException { return getInputValue(context, component, DEFAULT_CONVERTER_LOOKUP_STRATEGY); } public static String getInputValue(FacesContext context, UIComponent component, ConverterLookupStrategy converterLookupStrategy) throws ConverterException { UIInput input = (UIInput) component; String submittedValue = (String) input.getSubmittedValue(); if (submittedValue != null) { return submittedValue; } Object value = input.getValue(); Converter converter = converterLookupStrategy.getConverterByValue(context, input, value); if (converter != null) { return converter.getAsString(context, input, value); } else { return value != null ? value.toString() : ""; } } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy