Revive samples/expenses from its 2.3 breakage. Also now generates
sample data on demand.

Review at http://gwt-code-reviews.appspot.com/1447809

Review by: jlabanca@google.com

git-svn-id: https://google-web-toolkit.googlecode.com/svn/trunk@10237 8db76d5a-ed1c-0410-87a9-c151d255dfc7
diff --git a/samples/expenses/README-MAVEN.txt b/samples/expenses/README-MAVEN.txt
index cbb08be..1ba53bf 100644
--- a/samples/expenses/README-MAVEN.txt
+++ b/samples/expenses/README-MAVEN.txt
@@ -1,8 +1,10 @@
 -- Option A: Import your project into Eclipse (recommended) --
 
-If you use Eclipse, you can simply import the generated project into
-Eclipse. We've tested against Eclipse 3.5. Later versions will likely
-also work, earlier versions may not.
+If you use Eclipse for Jave EE, you can simply import the generated
+project into Eclipse. We've tested against Eclipse 3.5. Later versions
+will likely also work, earlier versions may not. (Please note that
+this demo requires WTP, which is pre-installed with the Jave EE
+versions of Eclipse.)
 
 Eclipse users will need to install the following plugin components:
 - Google Plugin for Eclipse (instructions at http://code.google.com/eclipse/)
@@ -41,6 +43,19 @@
 
   You can now use the built-in debugger to debug your web app in development mode.
 
+GWT developers (those who build GWT from source) may add their
+gwt-user project to top of this project's class path in order to use
+the built-from-source version of GWT instead of the version specified
+in the POM.
+
+  Select the project in the Project explorer and select File > Properties
+
+  Select Java Build Path and click the Projects tab
+
+  Click Add..., select gwt-user, and click OK
+
+  Click Order and Export and move gwt-user above Maven Dependencies
+
 -- Option B: Build from the command line with Maven --
 
 If you prefer to work from the command line, you can use Maven to
diff --git a/samples/expenses/pom.xml b/samples/expenses/pom.xml
index 2af82f3..b93c9ab 100644
--- a/samples/expenses/pom.xml
+++ b/samples/expenses/pom.xml
@@ -7,12 +7,12 @@
   <version>0.1.0.BUILD-SNAPSHOT</version>
   <name>expenses</name>
   <properties>
-    <gwt.version>2.2.0</gwt.version>
+    <gwt.version>2.3.0</gwt.version>
     <roo.version>1.1.0.RELEASE</roo.version>
     <spring.version>3.0.3.RELEASE</spring.version>
     <slf4j.version>1.6.1</slf4j.version>
-    <gae.version>1.4.2</gae.version>
-    <gae-test.version>1.4.2</gae-test.version>
+    <gae.version>1.5.0</gae.version>
+    <gae-test.version>1.5.0</gae-test.version>
     <gae.home>${user.home}/.m2/repository/com/google/appengine/appengine-java-sdk/${gae.version}/appengine-java-sdk-${gae.version}</gae.home>
     <datanucleus.version>1.1.5</datanucleus.version>
   </properties>
diff --git a/samples/expenses/src/main/java/com/google/gwt/sample/expenses/client/ExpensesShell.ui.xml b/samples/expenses/src/main/java/com/google/gwt/sample/expenses/client/ExpensesShell.ui.xml
index f713bfc..6feaf5b 100644
--- a/samples/expenses/src/main/java/com/google/gwt/sample/expenses/client/ExpensesShell.ui.xml
+++ b/samples/expenses/src/main/java/com/google/gwt/sample/expenses/client/ExpensesShell.ui.xml
@@ -5,7 +5,6 @@
   xmlns:m='urn:import:com.google.gwt.mobile.client'
   xmlns:e='urn:import:com.google.gwt.sample.expenses.client'
   xmlns:a='urn:import:com.google.gwt.sample.gaerequest.client'>
-  xmlns:r='urn:import:com.google.web.bindery.requestfactory.ui.client'
 
   <ui:with field='styles' type='com.google.gwt.sample.expenses.client.style.Styles' />
 
diff --git a/samples/expenses/src/main/java/com/google/gwt/sample/expenses/server/domain/Report.java b/samples/expenses/src/main/java/com/google/gwt/sample/expenses/server/domain/Report.java
index 96954de..4d35c0d 100644
--- a/samples/expenses/src/main/java/com/google/gwt/sample/expenses/server/domain/Report.java
+++ b/samples/expenses/src/main/java/com/google/gwt/sample/expenses/server/domain/Report.java
@@ -16,6 +16,7 @@
 package com.google.gwt.sample.expenses.server.domain;
 
 import com.google.appengine.api.datastore.Cursor;
+import com.google.gwt.sample.expenses.server.DataGenerationServiceImpl;
 
 import org.datanucleus.store.appengine.query.JPACursorHelper;
 
@@ -69,9 +70,20 @@
       Query query = queryReportsBySearch(em, employeeId, department, startsWith,
           null, true);
       if (query == null) {
+        /*
+         * Demo hack around app engine's 1000 record cap: a request for "all"
+         * records comes in as startsWith=="", which returns null. Report how
+         * many we prepopulated the thing with. A real app would have to
+         * maintain its own count in the datastore and return that.
+         */
         return REPORT_COUNT;
       }
       long count = ((Number) query.getSingleResult()).longValue();
+      // Demo hack: if there are no records, make some up.
+      if (count == 0) {
+        new DataGenerationServiceImpl().generate(200);
+        count = ((Number) query.getSingleResult()).longValue();
+      }
       return count;
     } finally {
       em.close();
diff --git a/samples/expenses/src/main/webapp/WEB-INF/web.xml b/samples/expenses/src/main/webapp/WEB-INF/web.xml
index 130c671..e0644ed 100644
--- a/samples/expenses/src/main/webapp/WEB-INF/web.xml
+++ b/samples/expenses/src/main/webapp/WEB-INF/web.xml
@@ -27,7 +27,7 @@
 
   <servlet>
     <servlet-name>requestFactoryServlet</servlet-name>
-    <Servlet-class>com.google.web.bindery.requestfactory.server.RequestFactoryServlet</servlet-class>
+    <servlet-class>com.google.web.bindery.requestfactory.server.RequestFactoryServlet</servlet-class>
   </servlet>
 
   <servlet-mapping>