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

javax.faces.convert.EnumConverter Maven / Gradle / Ivy

Go to download

Jakarta Faces defines an MVC framework for building user interfaces for web applications, including UI components, state management, event handing, input validation, page navigation, and support for internationalization and accessibility.

There is a newer version: 4.1.0
Show newest version
/*
 * Copyright (c) 1997, 2018 Oracle and/or its affiliates. All rights reserved.
 *
 * This program and the accompanying materials are made available under the
 * terms of the Eclipse Public License v. 2.0, which is available at
 * http://www.eclipse.org/legal/epl-2.0.
 *
 * This Source Code may also be made available under the following Secondary
 * Licenses when the conditions for such availability set forth in the
 * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
 * version 2 with the GNU Classpath Exception, which is available at
 * https://www.gnu.org/software/classpath/license.html.
 *
 * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
 */

package javax.faces.convert;


import javax.faces.component.UIComponent;
import javax.faces.component.PartialStateHolder;
import javax.faces.context.FacesContext;


/**
 * 

{@link Converter} implementation * for java.lang.Enum (and enum primitive) values.

* * @since 1.2 */ public class EnumConverter implements Converter, PartialStateHolder { // for StateHolder public EnumConverter() { } public EnumConverter(Class targetClass) { this.targetClass = (Class) targetClass; } // ------------------------------------------------------ Manifest Constants /** *

The standard converter id for this converter.

*/ public static final String CONVERTER_ID = "javax.faces.Enum"; /** *

The message identifier of the {@link javax.faces.application.FacesMessage} to be created if * the conversion to Enum fails. The message format * string for this message may optionally include the following * placeholders: *

    *
  • {0} replaced by the unconverted value.
  • *
  • {1} replaced by one of the enum constants or the empty * string if none can be found.
  • *
  • {2} replaced by a String whose value * is the label of the input component that produced this message.
  • *
*/ public static final String ENUM_ID = "javax.faces.converter.EnumConverter.ENUM"; /** *

The message identifier of the {@link javax.faces.application.FacesMessage} to be created if * the conversion to Enum fails and no target class has been * provided. The message format * string for this message may optionally include the following * placeholders: *

    *
  • {0} replaced by the unconverted value.
  • *
  • {1} replaced by a String whose value * is the label of the input component that produced this message.
  • *
*/ public static final String ENUM_NO_CLASS_ID = "javax.faces.converter.EnumConverter.ENUM_NO_CLASS"; // ----------------------------------------------------- Converter Methods private Class targetClass; /** *

Convert the value argument to one of the enum * constants of the class provided in our constructor. If no * target class argument has been provided to the constructor of * this instance, throw a ConverterException * containing the {@link #ENUM_NO_CLASS_ID} message with proper * parameters. If the value argument is null * or it has a length of zero, return null. * Otherwise, perform the equivalent of Enum.valueOf using * target class and value and return the Object. * If the conversion fails, throw a ConverterException * containing the {@link #ENUM_ID} message with proper parameters. *

* * @param context the FacesContext for this request. * @param component the UIComponent to which this value * will be applied. * @param value the String value to be converted to * Object. * @throws ConverterException {@inheritDoc} * @throws NullPointerException {@inheritDoc} */ @Override public Object getAsObject(FacesContext context, UIComponent component, String value) { if (context == null || component == null) { throw new NullPointerException(); } if (targetClass == null) { throw new ConverterException( MessageFactory.getMessage(context, ENUM_NO_CLASS_ID, value, MessageFactory.getLabel(context, component))); } // If the specified value is null or zero-length, return null if (value == null) { return (null); } value = value.trim(); if (value.length() < 1) { return (null); } try { return Enum.valueOf(targetClass, value); } catch (IllegalArgumentException iae) { throw new ConverterException( MessageFactory.getMessage(context, ENUM_ID, value, value, MessageFactory.getLabel(context, component)), iae); } } /** *

Convert the enum constant given by the value * argument into a String. If no target class argument has been * provided to the constructor of this instance, throw a * ConverterException containing the {@link * #ENUM_NO_CLASS_ID} message with proper parameters. If the * value argument is null, return * the empty String. If the value is an instance of the provided * target class, return its string value by casting it to a * java.lang.Enum and returning the result of calling * the name() method. Otherwise, throw a {@link * ConverterException} containing the {@link #ENUM_ID} message with * proper parameters.

* * @throws ConverterException {@inheritDoc} * @throws NullPointerException {@inheritDoc} */ @Override public String getAsString(FacesContext context, UIComponent component, Object value) { if (context == null || component == null) { throw new NullPointerException(); } if (targetClass == null) { throw new ConverterException( MessageFactory.getMessage(context, ENUM_NO_CLASS_ID, value, MessageFactory.getLabel(context, component))); } // If the specified value is null, return the empty string. if (value == null) { return ""; } if (targetClass.isInstance(value)) { return ((Enum)value).name(); } throw new ConverterException( MessageFactory.getMessage(context, ENUM_ID, value, value, MessageFactory.getLabel(context, component))); } // ----------------------------------------------------------- StateHolder @Override public void restoreState(FacesContext facesContext, Object object) { if (facesContext == null) { throw new NullPointerException(); } if (object != null) { this.targetClass = (Class) object; } } @Override public Object saveState(FacesContext facesContext) { if (facesContext == null) { throw new NullPointerException(); } if (!initialStateMarked()) { return this.targetClass; } return null; } private boolean isTransient; @Override public void setTransient(boolean b) { isTransient = b; } @Override public boolean isTransient() { return isTransient; } private boolean initialState; @Override public void markInitialState() { initialState = true; } @Override public boolean initialStateMarked() { return initialState; } @Override public void clearInitialState() { initialState = false; } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy