This document details any special actions that need to be taken when upgrading Wookie from a previous version. For
general information on new features and improvements, see NEW_AND_NOTEWORTHY.

FROM 0.15.0 TO 1.0.0
=====================
No major changes to the core or database schema. 

FROM 0.14.0 TO 0.15.0
=====================
No major changes to the core or database schema. 

FROM 0.13.1 TO 0.14.0
=====================
No major changes to the core or database schema. 

FROM 0.11.0 TO 0.13.1 (Version 0.12.0 was not released)
=====================
No major changes to the core or database schema. The W3CParser module has been updated so it is possible
you may need to clear your ivy cache on your local machine.

FROM 0.10.0 TO 0.11.0
=====================
Participants now have a role attribute to support the getHost() method in shared widgets. 

Scripts for migrating databases to 0.11.0 can be found in /scripts/migration.

FROM 0.9.2 TO 0.10.0
====================

There are a number of API changes in 0.10.0, in particular the XML representation used for Widgets returned by the
REST API has been changed to follow more closely the W3C Widget XML format. This affects any plugins or connectors 
that browse the Wookie widget catalog by calling GET /widgets. The connector frameworks have been updated for this
release and so you should make sure you use a 0.10.0 connector with a 0.10.0 server.

The Services class and related classes deprecated in earlier versions of Wookie were removed in 0.10.0, and these
tables can be removed from the database. There is a script in /scripts/migration to drop these tables.

From 0.10.0 the API keys are managed using a configuration text file rather than in the database (as per Policies).
This means that you should add API keys to the /keys file from the database and then drop the API keys table. Note
that this is not included in the migration script to prevent inadvertently deleting the keys before creating the
keys file.

FROM 0.9.1 TO 0.9.2
===================

A number of changes to the data model were put in place in 0.9.2, meaning that any existing databases must be updated.

Scripts for migrating databases to 0.9.2 can be found in /scripts/migration.

From 0.9.2, proxy policies are handled in a /policies text file rather than in the database; you should add your
previous policies to the /policies file in the new format. The new file covers both widget-access policies and whitelist
entries; the latter have a wildcard scope (*). For more information, see NEW_AND_NOTEWORTHY and see the documentation
included in the default policies file.

FROM 0.9.0 TO 0.9.1
===================

A number of changes to the data model were put in place in 0.9.1, meaning that any existing databases must be updated.

Scripts for migrating databases to 0.9.1 can be found in /scripts/migration.

From 0.9.1 the JCR persistence mechanism is an optional module that must be built separately; any installations using 
JCR will need to upgrade using a source release, building the modules/jcr subproject.