SimpleFixedEnumManager.java

package eu.javaexperience.collection.enumerations;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;

import eu.javaexperience.asserts.AssertArgument;

public class SimpleFixedEnumManager<E extends EnumLike<E>> implements EnumManager<E>
{
	protected List<E> cnst;
	final HashMap<String, E> byName = new HashMap<>();
	
	public SimpleFixedEnumManager(List<E> from)
	{
		cnst = new ArrayList<>(from);
		int i = 0;
		for(E c:cnst)
		{
			byName.put(c.getName(), c);
			//SimpleEnumManager doest this
			//c.setEnumManager(this);
			//c.setOrdinal(i);
			AssertArgument.assertEquals(i++, c.getOrdinal(), "enum_oridnal");
		}
	}
	
	@Override
	public Iterator<E> iterator()
	{
		return cnst.iterator();
	}

	@Override
	public void registerElement(E elem)
	{
		throw new UnsupportedOperationException();
	}

	@Override
	public E getByOrdinal(int ord)
	{
		return cnst.get(ord);
	}

	@Override
	public E getByName(String name)
	{
		return byName.get(name);
	}

	@Override
	public Object[] getValues()
	{
		return cnst.toArray();
	}

	@Override
	public E[] getValues(E[] arr)
	{
		return cnst.toArray(arr);
	}

	@Override
	public List<E> getValueList()
	{
		return cnst;
	}
	
	@Override
	public String toString()
	{
		return "SimpleFixedEnumManager";
	}
	
}