Building a fluent API (internal DSL) in Java