blob: caae2cd413159f26546400231d732ecb599c18cb [file] [log] [blame]
/**
*******************************************************************************
* Copyright (C) 1996-2001, International Business Machines Corporation and *
* others. All Rights Reserved. *
*******************************************************************************
*
* $Source: /xsrl/Nsvn/icu/unicodetools/com/ibm/text/utility/PoorMansEnum.java,v $
* $Date: 2002/10/05 01:28:57 $
* $Revision: 1.1 $
*
*******************************************************************************
*/
/* Goal for enum is:
* Easy to use
* ID <-> int
* ID <-> string name
*/
package com.ibm.text.utility;
import java.util.*;
public class PoorMansEnum {
protected int value;
protected String name;
protected PoorMansEnum next;
public int toInt() {
return value;
}
public String toString() {
return name;
}
// for subclassers
protected PoorMansEnum() {
}
/** Utility for subclasses
*/
protected static class EnumStore {
private List int2Id = new ArrayList();
private Map string2Id = new HashMap();
private PoorMansEnum last = null;
public PoorMansEnum add(PoorMansEnum id, String name) {
// both string and id must be new!
if (int2Id.indexOf(id) >= 0) {
throw new IllegalArgumentException("ID already stored for \"" + name + '"');
} else if (string2Id.containsKey(name)) {
throw new IllegalArgumentException('"' + name + "\" already stored for ID ");
}
id.value = int2Id.size();
id.name = name;
if (last != null) {
last.next = id;
}
int2Id.add(id);
string2Id.put(name, id);
last = id;
return id;
}
public PoorMansEnum addAlias(PoorMansEnum id, String name) {
// id must be old, string must be new
if (int2Id.indexOf(id) < 0) {
throw new IllegalArgumentException("ID must already be stored for \"" + name + '"');
} else if (string2Id.containsKey(name)) {
throw new IllegalArgumentException('"' + name + "\" already stored for ID ");
}
string2Id.put(name, id);
return id;
}
public Collection getAliases(PoorMansEnum id, Collection output) {
Iterator it = string2Id.keySet().iterator();
while (it.hasNext()) {
Object s = it.next();
if (s == id.name) continue;
if (id == string2Id.get(s)) output.add(s);
}
return output;
}
public int getMax() {
return int2Id.size();
}
public PoorMansEnum get(int value) {
return (PoorMansEnum) int2Id.get(value);
}
public PoorMansEnum get(String name) {
return (PoorMansEnum) string2Id.get(name);
}
}
}