/* * Copyright 2002-2004 The Apache Software Foundation. * * 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.apache.commons.lang.enums; import java.util.Iterator; import java.util.List; import org.apache.commons.lang.ClassUtils; /** *

* Abstract superclass for type-safe enums with integer values suitable for use * in switch statements. *

* *

* NOTE:Due to the way in which Java ClassLoaders work, comparing * Enum objects should always be done using the equals() method, * not ==. The equals() method will try == first so in * most cases the effect is the same. *

* *

* To use this class, it must be subclassed. For example: *

* *
 * public final class JavaVersionEnum extends ValuedEnum {
 *     //standard enums for version of JVM
 *     public static final int JAVA1_0_VALUE = 100;
 *     public static final int JAVA1_1_VALUE = 110;
 *     public static final int JAVA1_2_VALUE = 120;
 *     public static final int JAVA1_3_VALUE = 130;
 *     public static final JavaVersionEnum JAVA1_0 = new JavaVersionEnum("Java 1.0", JAVA1_0_VALUE);
 *     public static final JavaVersionEnum JAVA1_1 = new JavaVersionEnum("Java 1.1", JAVA1_1_VALUE);
 *     public static final JavaVersionEnum JAVA1_2 = new JavaVersionEnum("Java 1.2", JAVA1_2_VALUE);
 *     public static final JavaVersionEnum JAVA1_3 = new JavaVersionEnum("Java 1.3", JAVA1_3_VALUE);
 * 
 *     private JavaVersionEnum(String name, int value) {
 * 	super(name, value);
 *     }
 * 
 *     public static JavaVersionEnum getEnum(String javaVersion) {
 * 	return (JavaVersionEnum) getEnum(JavaVersionEnum.class, javaVersion);
 *     }
 * 
 *     public static JavaVersionEnum getEnum(int javaVersion) {
 * 	return (JavaVersionEnum) getEnum(JavaVersionEnum.class, javaVersion);
 *     }
 * 
 *     public static Map getEnumMap() {
 * 	return getEnumMap(JavaVersionEnum.class);
 *     }
 * 
 *     public static List getEnumList() {
 * 	return getEnumList(JavaVersionEnum.class);
 *     }
 * 
 *     public static Iterator iterator() {
 * 	return iterator(JavaVersionEnum.class);
 *     }
 * }
 * 
* *

* The above class could then be used as follows: *

* *
 * public void doSomething(JavaVersion ver) {
 *     switch (ver.getValue()) {
 *     case JAVA1_0_VALUE:
 * 	// ...
 * 	break;
 *     case JAVA1_1_VALUE:
 * 	// ...
 * 	break;
 *     //...
 *     }
 * }
 * 
* *

* As shown, each enum has a name and a value. These can be accessed using * getName and getValue. *

* *

* The getEnum and iterator methods are recommended. * Unfortunately, Java restrictions require these to be coded as shown in each * subclass. An alternative choice is to use the {@link EnumUtils} class. *

* * @deprecated Replaced by {@link org.apache.commons.lang.enums.ValuedEnum * org.apache.commons.lang.enums.ValuedEnum} and will be removed in * version 3.0. All classes in this package * net.sourceforge.fenixedu.net.sourceforge.fenixedu.are deprecated * and repackaged to {@link org.apache.commons.lang.enums} since * enum is a Java 1.5 keyword. * @see org.apache.commons.lang.enums.ValuedEnum * @author Apache Avalon project * @author Stephen Colebourne * @since 1.0 * @version $Id$ */ public abstract class ValuedEnum extends Enum { /** Lang version 1.0.1 serial compatibility */ private static final long serialVersionUID = -7129650521543789085L; /** * The value contained in enum. */ private final int iValue; /** * Constructor for enum item. * * @param name * the name of enum item * @param value * the value of enum item */ protected ValuedEnum(String name, int value) { super(name); iValue = value; } /** *

* Gets an Enum object by class and value. *

* *

* This method loops through the list of Enum, thus if there * are many Enums this will be slow. *

* * @param enumClass * the class of the Enum to get * @param value * the value of the Enum to get * @return the enum object, or null if the enum does not exist * @throws IllegalArgumentException * if the enum class is null */ protected static Enum getEnum(Class enumClass, int value) { if (enumClass == null) { throw new IllegalArgumentException("The Enum Class must not be null"); } List list = Enum.getEnumList(enumClass); for (Iterator it = list.iterator(); it.hasNext();) { ValuedEnum valuedEnum = (ValuedEnum) it.next(); if (valuedEnum.getValue() == value) { return valuedEnum; } } return null; } /** *

* Get value of enum item. *

* * @return the enum item's value. */ public final int getValue() { return iValue; } /** *

* Tests for order. *

* *

* The default ordering is numeric by value, but this can be overridden by * subclasses. *

* * @see java.lang.Comparable#compareTo(Object) * @param other * the other object to compare to * @return -ve if this is less than the other object, +ve if greater than, * 0 of equal * @throws ClassCastException * if other is not an Enum * @throws NullPointerException * if other is null */ public int compareTo(Object other) { return iValue - ((ValuedEnum) other).iValue; } /** *

* Human readable description of this Enum item. *

* * @return String in the form type[name=value], for example: * JavaVersion[Java 1.0=100]. Note that the package * net.sourceforge.fenixedu.net.sourceforge.fenixedu.name is * stripped from the type name. */ public String toString() { if (iToString == null) { String shortName = ClassUtils.getShortClassName(getEnumClass()); iToString = shortName + "[" + getName() + "=" + getValue() + "]"; } return iToString; } }