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

jakarta.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.2
Show newest version
/*
 * Copyright (c) 1997, 2021 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 jakarta.faces.convert;

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

/**
 * 

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

* * @since 1.2 */ public class EnumConverter implements Converter, PartialStateHolder { /** *

* The standard converter id for this converter. *

*/ public static final String CONVERTER_ID = "jakarta.faces.Enum"; // ------------------------------------------------------ Manifest Constants /** *

* The message identifier of the {@link jakarta.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 = "jakarta.faces.converter.EnumConverter.ENUM"; /** *

* The message identifier of the {@link jakarta.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 = "jakarta.faces.converter.EnumConverter.ENUM_NO_CLASS"; private Class targetClass; private boolean isTransient; private boolean initialState; /** * For StateHolder */ public EnumConverter() { } /** * Instantiates an enum converter with a class where enum constants are taken from. * * @param targetClass Class where the enum constants are taken from by the converter methods. */ public EnumConverter(Class targetClass) { this.targetClass = targetClass; } // ----------------------------------------------------- Converter Methods /** *

* 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) { targetClass = (Class) object; } } @Override public Object saveState(FacesContext facesContext) { if (facesContext == null) { throw new NullPointerException(); } if (!initialStateMarked()) { return targetClass; } return null; } @Override public void setTransient(boolean b) { isTransient = b; } @Override public boolean isTransient() { return isTransient; } @Override public void markInitialState() { initialState = true; } @Override public boolean initialStateMarked() { return initialState; } @Override public void clearInitialState() { initialState = false; } }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy