/* * Copyright 2008 Udai Gupta, Ralf Joachim * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.castor.cpa.query.object.literal; /** * Final immutable class that represents a enum expression. * * @author <a href="mailto:mailtoud AT gmail DOT com">Udai Gupta</a> * @author <a href="mailto:ralf DOT joachim AT syscon DOT eu">Ralf Joachim</a> * @version $Revision: 7121 $ $Date: 2006-04-25 16:09:10 -0600 (Tue, 25 Apr 2006) $ * @since 1.3 */ public final class EnumLiteral extends AbstractLiteral { //-------------------------------------------------------------------------- /** Enum constant represented by this enum literal. */ private final Enum < ? > _value; //-------------------------------------------------------------------------- /** * Construct enum literal for given string value. The string value has to contain the full * class name of the enumeration including the name of the constant separated by dot. If * an enum constant can not be found an IllegalArgumentException will be thrown. * * @param value String value with full name of the enum constant. */ public EnumLiteral(final String value) { if (value == null) { throw new NullPointerException(); } int dot = value.lastIndexOf('.'); if (dot < 0) { throw new IllegalArgumentException(); } Class type = null; try { String typename = value.substring(0, dot); type = Class.forName(typename); } catch (ClassNotFoundException ex) { throw new IllegalArgumentException(); } if (!type.isEnum()) { throw new IllegalArgumentException(); } Object[] enumvalues = type.getEnumConstants(); String enumname = value.substring(dot + 1); Enum < ? > enumvalue = null; for (int i = 0; i < enumvalues.length; i++) { if (enumname.equals(enumvalues[i].toString())) { enumvalue = (Enum) enumvalues[i]; } } if (enumvalue == null) { throw new IllegalArgumentException(); } _value = enumvalue; } /** * Construct enum literal for given enum constant. * * @param value Enum constant to represent by the enum literal. */ public EnumLiteral(final Enum < ? > value) { if (value == null) { throw new NullPointerException(); } _value = value; } //-------------------------------------------------------------------------- /** * Get enum constant represented by this enum literal. * * @return Enum constant represented by this enum literal. */ public Enum < ? > getValue() { return _value; } //-------------------------------------------------------------------------- /** * {@inheritDoc} */ public StringBuilder toString(final StringBuilder sb) { return sb.append(_value.getClass().getName()).append('.').append(_value); } //-------------------------------------------------------------------------- }