| /** |
| ******************************************************************************* |
| * 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); |
| } |
| } |
| } |