=======================================================================
iEat Release Notes
@VERSION@ @BUILD_DATE@
=======================================================================

Major new features:

- Background job to automatically remove "stale" user registrations.

- Search by ingredients (kitchen search).

- Recipe ratings: rate any recipe from 1-5 stars, displays average 
  rating for all users.

- "Forgot my password" support.

- Import/export RecipeML data; export plain text recipes.

- Pagination support on recipe and user index views.

=======================================================================

NOTE: the database schema has changed since the last release. You 
      will need to recreate your iEat database as described in 
      the README file. You should be able to export your existing
      database data, recreate the database, and import the data 
      back in without difficulty as only new tables have been 
      added.

=======================================================================

Changes since last release:

- Added Xalan and Xerces JARs to binary release build.

- Added delete cascade notion to meal recipe DB schema so when 
  deleting a meal the corresponding meal recipes are deleted, too.
  
- Fixed problem where some error messages could be displayed twice.

- Added validation for alter size form.

- Simplified webapp configuration by extending parent bean definitions.

- Implemented Quartz job for removing "stale" user registrations 
  (users registered but not confirmed for 14 days).

- Fixed bug with DynamicInitializerRequestDataBinder that prevented 
  some forms from properly binding.
   
- Implemented search-by-ingredient (kitchen search).

- Implemented recipe ratings (DB schema change). Also added support 
  for recipe comments (to be implemented in the future).

- Save recipe search form in session so previous search criteria 
  available when navigating between search and other pages.
  
- Cleaned up much XHTML output so that nearly all pages validate as 
  XHTML 1.0 strict.
  
- Implemented global XSTL layout template which greatly simplifies 
  individual XSLT view implementations and standardizes all page views.
  
- Properly handle error condition when attempting to create a new 
  user with a login/email that already exists.
  
- Fixed database transaction declarations so additional operations 
  occur within a transaction.
  
- Implemented "Forgot my password" functionality.

- Tweaked RecipeIngredient schema order of elements so that XML 
  "reads" more naturally.
  
- Upgraded to JAXB 1.0.4 (JWSDP 1.5).

- Fixed build script JAXB generation target so as to not delete the 
  Hibernate mapping files when generating domain objects.
  
- Added new business interface for import/export of recipe data. 
  Implemented importing of RecipeML recipes and export of RecipeML
  and plain text.
  
- Implemented a Spring view resolver DefaultXSLTViewResolver which 
  greatly simplifies the handling of XSLT views and reduces the 
  size of the views.xml configuration file.
  
- Removed unused "ordering" attributes from domain object schema.

- Cache the JAXBContext for better performance of view transforms.

- Use <xsl:key> and key() to display internationalized messages in 
  XSLT views (instead of using explicit selectors) to simplify XSLT 
  and boost performance.
  
- Update to Hibernate 2.1.8.

- Altered the Recipe Hibernate mapping slightly to work with string
  types instead of text, discovered during testing with PostgreSQL 8.
  
- Now index Unit data to aid recipe import process of mapping imported 
  units to iEat units.
  
- Fixed issues with incremental indexing so they occur outside the 
  scope of any database transaction and thus no longer attempt to 
  index objects before they have been committed to the database.
  
- Implemented new XwebJaxbView to replace XwebView; this implementation
  renders output via a direct transform from JAXB to the output
  stream, bypassing the former step of creating a DOM Document and 
  then transforming that to the output stream. This should increase 
  the performance of the view transforms.
  
- Made JAXB domain objects implement Serializable so can be cached
  and stored in session.
  
- Implemented 100% Lucene-based search business interface 
  implementation, removing previous reliance on database queries. Now
  recipe and user index views are generated via Lucene searches. This 
  removes two of the most complex custom SQL queries used by iEat, 
  helping towards the goal of having a single Hibernate SQL query 
  definition file instead of multiple ones per database (as currently
  need different configurations for PostgreSQL versus MySQL).
  
- Added caching aspect for the recipe and user index view business 
  methods; now index view data is cached to help performance of 
  these expensive operations.
  
- Added 'xslt.cache' environment property so don't need to have 
  different versions of ieat-servlet.xml configuration files to 
  enable/disable XSLT caching.
  
- Implemented pagination UI support for recipe and user index views.

- Updated view implementation to handle directly the MessagesSource 
  resource bundle object, removing the need for individual controller 
  implementations to pass this to the view.
