package citation.extra;
import java.util.Enumeration;
import net.rim.device.api.util.MultiMap;
import net.rim.device.api.util.ObjectEnumerator;
/**
* version of enum using array
*/
public class EnumLikeUsingArray implements EnumLike {
private MultiMap emap;
private MultiMap humanReadableMap;
private String easyIterate[];
private int pointer;
private void resetKeys(){
pointer=0;
}
/**
* @param slist=list of enums
*/
public EnumLikeUsingArray(String [] slist){
emap=new MultiMap();
humanReadableMap= new MultiMap();
int i;
easyIterate=new String[slist.length];
for(i=0;i<slist.length;i++)
{
emap.add(slist[i],new Integer(i));
easyIterate[i]=slist[i];
}
resetKeys();
}
/**
* @param slist=list of enums
* @param readablelist=human readable substitues for enum tags
*/
public EnumLikeUsingArray(String [] slist, String [] readablelist){
emap=new MultiMap();
humanReadableMap= new MultiMap();
int i;
easyIterate=new String[slist.length];
for(i=0;i<slist.length;i++)
{
emap.add(slist[i],new Integer(i));
easyIterate[i]=slist[i];
}
for(i=0;i<readablelist.length;i++)
{
humanReadableMap.add(readablelist[i],readablelist[i+1]);
}
resetKeys();
}
/**
* The important function,
* @return the integer representation of a key
*/
public int enumval(String key){
return ((Integer) emap.elements(key).nextElement()).intValue();
}
/**
* returns next tag by iterating through the array, updating the offset int
* @ return the next tag, on error returns null
*/
public String nextTag(){
return easyIterate[pointer];
}
/**
*@return either the readable tag substitute or if it doesn't exist a somewhat readable version of the tag "TAG"->"Tag: "
*/
public String nextReadable(){
String tag;
Enumeration temp;
if(pointer>easyIterate.length)
tag=easyIterate[pointer];
else
return null;
temp=humanReadableMap.elements(tag);
if(temp.hasMoreElements())
return (String)temp.nextElement();
else
return tag;
}
}