SimpleEnumManager.java

package eu.javaexperience.collection.enumerations;

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

import eu.javaexperience.asserts.AssertArgument;
import eu.javaexperience.collection.CollectionReadOnlyFunctions;
import eu.javaexperience.collection.ReadOnlyAndRwCollection;

public class SimpleEnumManager<T extends EnumLike<T>> implements EnumManager<T>
{
	protected ReadOnlyAndRwCollection<List<T>> values = new ReadOnlyAndRwCollection(new ArrayList<>(), CollectionReadOnlyFunctions.MAKE_LIST_READ_ONLY);
	
	public void registerElement(T elem)
	{
		AssertArgument.assertTrue(!elem.isRegistered(), "Enum element is already registered.");
		int ord = values.getWriteable().size();
		elem.setOrdinal(ord);
		elem.setEnumManager(this);
		values.getWriteable().add(ord, elem);
	}
	
	public T getByOrdinal(int ord)
	{
		return values.getWriteable().get(ord);
	}
	
	public T getByName(String name)
	{
		for(T val:values.getWriteable())
		{
			if(name.equals(val.getName()))
			{
				return val;
			}
		}
		
		return null;
	}
	
	public Object[] getValues()
	{
		return values.getWriteable().toArray();
	}
	
	public T[] getValues(T[] arr)
	{
		return values.getWriteable().toArray(arr);
	}
	
	public List<T> getValueList()
	{
		return values.getReadOnly();
	}

	@Override
	public Iterator<T> iterator()
	{
		return values.getReadOnly().iterator();
	}
}