code listing for groovy in action 2