package org.hibernate.test.hql;
import java.io.Serializable;
import java.util.HashMap;
/**
* Mimic a JDK 5 enum.
*
* @author Steve Ebersole
*/
public class Classification implements Serializable, Comparable {
public static final Classification COOL = new Classification( "COOL", 0 );
public static final Classification LAME = new Classification( "LAME", 1 );
private static final HashMap INSTANCES = new HashMap();
static {
INSTANCES.put( COOL.name, COOL );
INSTANCES.put( LAME.name, LAME );
}
private final String name;
private final int ordinal;
private final int hashCode;
private Classification(String name, int ordinal) {
this.name = name;
this.ordinal = ordinal;
int hashCode = name.hashCode();
hashCode = 29 * hashCode + ordinal;
this.hashCode = hashCode;
}
public String name() {
return name;
}
public int ordinal() {
return ordinal;
}
public boolean equals(Object obj) {
return compareTo( obj ) == 0;
}
public int compareTo(Object o) {
int otherOrdinal = ( ( Classification ) o ).ordinal;
if ( ordinal == otherOrdinal ) {
return 0;
}
else if ( ordinal > otherOrdinal ) {
return 1;
}
else {
return -1;
}
}
public int hashCode() {
return hashCode;
}
public static Classification valueOf(String name) {
return ( Classification ) INSTANCES.get( name );
}
public static Classification valueOf(Integer ordinal) {
if ( ordinal == null ) {
return null;
}
switch ( ordinal.intValue() ) {
case 0: return COOL;
case 1: return LAME;
default: throw new IllegalArgumentException( "unknown classification ordinal [" + ordinal + "]" );
}
}
}
|