package fruit; import org.oddjob.arooa.ArooaValue; import org.oddjob.arooa.convert.Convertlet; import org.oddjob.arooa.convert.ConvertletException; import org.oddjob.arooa.convert.ConversionProvider; import org.oddjob.arooa.convert.ConversionRegistry; public class ColourType implements ArooaValue { enum Colours { RED, GREEN } public static class Conversions implements ConversionProvider { public void registerWith(ConversionRegistry registry) { registry.register(String.class, Colours.class, new Convertlet<String, Colours>() { public Colours convert(String from) throws ConvertletException { return Colours.valueOf(from); } }); registry.register(ColourType.class, Colour.class, new Convertlet<ColourType, Colour>() { public Colour convert(ColourType from) throws ConvertletException { switch (from.colour) { case GREEN: return new Colour() { public boolean isShiny() { return false; } @Override public String toString() { return "Green"; } }; case RED: return new Colour() { public boolean isShiny() { return true; } @Override public String toString() { return "Red"; } }; default: throw new IllegalStateException("Unrecognized Colour"); } } }); } } private boolean shiny; private Colours colour; public Colours getColour() { return colour; } public void setColour(Colours colour) { this.colour = colour; } public boolean isShiny() { return shiny; } public void setShiny(boolean shiny) { this.shiny = shiny; } }