SimpleEnumLike.java
package eu.javaexperience.collection.enumerations;
import eu.javaexperience.asserts.AssertArgument;
public class SimpleEnumLike<E extends EnumLike<E>> implements EnumLike<E>
{
protected int ordinal = -1;
protected String name;
protected EnumManager<E> mngr;
public SimpleEnumLike(String name)
{
AssertArgument.assertNotNull(this.name = name, "enum value name");
}
@Override
public boolean isRegistered()
{
return ordinal >= 0;
}
@Override
public String getName()
{
return name;
}
@Override
public int getOrdinal()
{
return ordinal;
}
@Override
public EnumManager<E> getEnumManager()
{
return mngr;
}
public void assertNotRegistered()
{
AssertArgument.assertTrue(null == this.mngr, "Enum's manager may be set only once. "+name);
}
@Override
public void setEnumManager(EnumManager<E> mngr)
{
assertNotRegistered();
AssertArgument.assertNotNull(mngr, "enum manager");
this.mngr = mngr;
}
@Override
public void setOrdinal(int oridinal)
{
AssertArgument.assertTrue(this.ordinal == -1, "Ordinal may be set only once.");
AssertArgument.assertTrue(oridinal >= 0, "Ordinal must be greater than or equals 0");
this.ordinal = oridinal;
}
}