Chapter 1. Why add Groovy to Java?
Listing 1.1. Sorting strings using the Collections.sort method
Listing 1.2. A Java class to sort strings
Listing 1.3. A Java class representing a task
Listing 1.4. A Spock test that checks each Java sorting method
Chapter 2. Groovy by example
Listing 2.1. Building a Swing UI 3D pie chart using Google Chart
Listing 2.2. Stadium.groovy: a POGO to hold stadium information
Listing 2.3. Geocoder.groovy, which uses the Google geocoder to compute lat and lng
Listing 2.4. populate_stadium_data.groovy
Listing 2.5. A portion of GetGameData, showing the attributes and initialization
Listing 2.6. boxscore.xml: the box score from game 4 of the 2007 World Series
Listing 2.7. The getGame method in GetGameData.groovy
Listing 2.8. The getGames method from GetGameData
Listing 2.9. GetGameDataTests.groovy: a JUnit 4 test case
Listing 2.10. GameServlet.groovy: a groovlet for Groovy Baseball
Chapter 3. Code-level integration
Listing 3.1. Finding all the available script engine factories
Listing 3.2. Using the ScriptEngine to execute a simple Groovy script
Listing 3.3. A JUnit test case to check the JSR 223 script engine results
Listing 3.4. JUnit 4 test class verifying results of calling Eval methods from Java
Listing 3.5. Using GroovyShell and Binding to invoke the Google geocoder
Chapter 4. Using Groovy features in Java
Listing 4.1. A simple POJO representing a person
Listing 4.2. A Department with a map of Employees and operator overriding
Listing 4.3. A Spock test to check the operator overloading methods in a Java class
Listing 4.4. Base 64 encoding and decoding username/password information
Listing 4.5. GroundHog Day—an example of Date and Calendar in the Groovy JDK
Listing 4.6. A JUnit test in Groovy to demonstrate the delegated methods
Listing 4.7. Testing the ImmutablePoint class
Listing 4.8. A Spock test for the ImmutableLine class
Listing 4.9. A Spock test for the ImmutablePath class
Listing 4.10. Converting songs to XML and back
Listing 4.11. chuck_norris.groovy, which processes data from ICNDB
Chapter 5. Build processes
Listing 5.1. build.xml: A simple Ant build file for a “Hello, World” Java application
Listing 5.2. Execution of the default task in the “Hello, World” Ant build
Listing 5.3. A trivial Ant build that executes Groovy code in a task
Listing 5.4. Extending the “Hello, World” build to mix Java and Groovy sources
Listing 5.5. antbuilder.groovy, which copies itself
Listing 5.6. Simplifying the build script using the with method
Listing 5.7. A Groovy AntBuilder script port of the build.xml file from listing 5.1
Listing 5.8. The Maven pom.xml file for a standard Java project
Listing 5.9. Weather.groovy, a POGO to hold weather results from the web service
Listing 5.10. YahooParser.groovy, which accesses and parses the weather service
Listing 5.11. The Maven pom.xml file produced by the GMaven project
Listing 5.12. Part of the Java stub generated from Weather.groovy
Listing 5.13. Using Apache Commons Math and a database driver together
Listing 5.14. A Greeting POJO to demonstrate a Gradle build
Listing 5.15. A JUnit test for the Greeting POJO
Listing 5.16. A build.gradle file for the POJO application with testing
Listing 5.17. A Groovy test for the POJO, making this a mixed Java/Groovy project
Listing 5.18. A build.gradle file for a mixed Java/Groovy project
Listing 5.19. Inputs/outputs example from the incrementalBuilds Gradle sample
Chapter 6. Testing Groovy and Java projects
Listing 6.1. A Java interface with three methods
Listing 6.2. The Java implementation of the UtilityMethods interface
Listing 6.3. The Groovy implementation of the UtilityMethods interface
Listing 6.4. A Java JUnit test to check the Groovy implementation
Listing 6.5. A Groovy JUnit test for a Java implementation
Listing 6.6. A GroovyTestCase test for the Java implementation
Listing 6.7. A class to hold all the script tests
Listing 6.8. The “Hello, World!” script
Listing 6.9. A test that captures script output
Listing 6.10. A script with a binding variable
Listing 6.11. Setting a binding variable to test a script
Listing 6.12. Testing Groovy scripts using GroovyShellTestCase
Listing 6.13. A test for the addition script, calc.groovy
Listing 6.14. A script that uses a logger
Listing 6.15. Capturing log output in a test case
Listing 6.16. AccountService (in Java): uses the AccountDAO to find Accounts
Listing 6.17. The AccountDAO interface, with CRUD methods for the Account class
Listing 6.18. A JUnit 4 test case for the AccountService, in Groovy, with a stubbed DAO
Listing 6.19. Using a map of closures to implement an interface
Listing 6.20. The complete FileAccountDAO implementation, in Groovy
Listing 6.21. FileAccountDAO unit test, using an Expando to stub the File
Listing 6.22. The Groovy Baseball Geocoder class, revisited
Listing 6.23. GeocoderIntegrationTests.groovy: a JUnit 4 test for the geocoder
Listing 6.24. GeocoderUnitTest.groovy: tests geocoder even if not online
Listing 6.25. Building and testing with Spock using Gradle
Listing 6.26. A specification verifying basic java.lang.String behavior
Listing 6.27. Another spec, illustrating the old method
Chapter 7. The Spring framework
Listing 7.1. An Account POGO in Groovy that uses BigDecimal
Listing 7.2. The AccountDAO interface, in Java
Listing 7.3. Implementing the AccountDAO using JdbcTemplate, in Groovy
Listing 7.4. A portion of the AccountService class in Java
Listing 7.5. The Gradle build file for the account application
Listing 7.6. Spock tests for the JdbcAccountDAO implementation
Listing 7.7. Spock tests for the service class
Listing 7.8. A trivial mortgage application class in Groovy
Listing 7.9. The Evaluator interface in Java
Listing 7.10. A Java evaluator, with a rather lenient loan policy
Listing 7.11. A Groovy mortgage evaluator deployed as source code
Listing 7.12. The bean configuration file with the refreshable Groovy evaluator bean
Listing 7.13. A demo application that loads the Groovy bean and calls approve 10 times
Listing 7.14. A Java aspect that logs changes to properties
Listing 7.15. A simple POJO with three set methods
Listing 7.16. The Spring bean configuration file for AOP
Listing 7.17. A JUnit 4 test case to exercise the POJO
Listing 7.18. A Groovy aspect for printing property values before they are changed
Listing 7.19. An aspect tracking methods in the Account POGO
Listing 7.20. Additions to bean configuration file for an inline scripted aspect
Listing 7.21. An account processor that debits each account by one dollar
Listing 7.22. A Java configuration file that declares the AccountProcessor bean
Listing 7.23. A Spock test to check the behavior of the AccountProcessor
Listing 7.24. A Spring configuration file in Groovy as a factory for Accounts
Listing 7.25. A Spock test for the prototype Accounts
Listing 7.26. The complete Gradle build file, including Grails-Spring dependencies
Listing 7.27. The BeanBuilderTests class with its first test case
Listing 7.28. Setting bean properties in the BeanBuilder, from BeanBuilderTests
Listing 7.29. Defining several related beans with the BeanBuilder
Chapter 8. Database access
Listing 8.1. The Product class, a POJO mapped to a database table
Listing 8.2. A DAO interface for the Product class
Listing 8.3. A JDBC implementation of the DAO interface
Listing 8.4. Adding creation and population of the Product table to the DAO
Listing 8.5. The findProductById method with all the required ceremony
Listing 8.6. A ProductDAO implementation using the groovy.sql.Sql class
Listing 8.7. The complete SqlProductDAO class, except for the parts already shown
Listing 8.8. The JpaProductDAO class, which uses JPA classes to implement the DAO
Listing 8.9. A Spring test case for the JPA DAO implementation
Listing 8.10. The Product class, this time as a POGO in a Grails application
Listing 8.11. The Customer class. Customers have many orders (hopefully).
Listing 8.12. The Order class, which has many orders and belongs to a customer
Listing 8.13. The OrderLine POGO, which is assembled to build an Order
Listing 8.14. Initialization code in BootStrap.groovy
Listing 8.15. A portion of the JSON object representing the movie Blazing Saddles
Listing 8.16. Movie.groovy, which wraps the JSON data
Listing 8.17. A portion of the method that converts JSON movies to Movie instances
Chapter 9. RESTful web services
Listing 9.1. A Person POGO, used in the RESTful web service
Listing 9.2. The DAO interface with the CRUD methods for Person
Listing 9.3. The Spock test method to insert and delete a new Person
Listing 9.4. Java resource class for Person POJO
Listing 9.5. A Spock test for the PersonResource with a convenient test server
Listing 9.6. A Groovy implementation of the PersonResource class
Listing 9.7. Setting prev, self, and next link headers for each person
Listing 9.8. Walking through the data using link headers
Listing 9.9. Using a JsonBuilder to produce nested links
Chapter 10. Building and testing web applications
Listing 10.1. A simple servlet implemented in Groovy
Listing 10.2. Methods for HttpSession from groovy.servlet.ServletCategory
Listing 10.3. The HelloNameServlet class, which uses the ServletCategory
Listing 10.4. The HelloNameServletTest class, which uses Spring’s mock objects
Listing 10.5. HelloGroovletTest, an integration test for the hello groovlet
Listing 10.6. A unit test for the groovlet using GroovyShell and Binding
Listing 10.7. Using GroovyShellTestCase to simplify unit-testing groovlets
Listing 10.8. The GameService groovlet from the Groovy Baseball application
Listing 10.9. HelloServletJavaTest: a servlet test class using mock objects
Listing 10.10. Gradle build file for web application, using the war plugin
Listing 10.11. ServletIntegrationTests.groovy: accessing deployed servlets
Listing 10.12. The Quest domain class
Listing 10.13. Tasks belong to a Quest
Listing 10.14. The Knight class, which is associated with a Quest and a Castle
Listing 10.15. The Castle, which stores location information
Listing 10.16. The static Castle controller class
Listing 10.17. The Geocoder, yet again, which works on Castles this time
Listing 10.18. The unit test for the GeocoderService
Listing 10.19. Dependency injection of a service into a controller
Listing 10.20. Methods added to the GeocoderService to support the mapping plugin
Listing 10.21. Modifications to list.gsp to display a Google Map of castles
Appendix B. Groovy by feature
Listing B.1. Running “Hello, World!” in the Groovy shell
Listing B.2. numbers.groovy, showing method calls on numeric literals
Listing B.3. Using dates in a range with Java’s Calendar class
Listing B.4. SumNumbers.java, an application to read a line of numbers and add them
3.128.198.59