Apache Wookie  - source distribution instructions
=================================================

Initial Setup
-------------

1) Install a JDK (1.6.* or higher)
	See http://www.oracle.com/technetwork/java/javase/downloads/index.html
	or http://java.com/en/download/
	(Be sure to choose a JDK and not a JRE version)
	
2) Make sure that your PATH includes %JAVA_HOME%\bin (windows) or 
        $JAVA_HOME$/bin (unix). Optionally, you may also wish to add an environment variable
        named %JAVA_HOME% and point that to the %JAVA_HOME%\bin folder of the java JDK install.
 
3) Install Apache Ant
	See http://archive.apache.org/dist/ant/binaries/
	for an applicable binary. Once installed ensure your PATH includes %ANT_HOME%\bin (windows) 
	or $ANT_HOME$/bin (unix). (otherwise you won't be able to run it unless you are in the
	%ANT_HOME%\bin folder.) NOTE: There is a known issue when using Ant version 1.8.x to build and run
	Wookie; you should instead use version 1.7.1. To check which version of ant you are using, type 
	ant -version. See the RELEASE_NOTES for more information.

4) Install Apache Maven
	See http://maven.apache.org/run-maven/index.html
	
5) Check out and build the Wookie Master Project
	This is only needed when building the project from source, and contains all the basic information
        about the project. Check it out from subversion using 
        "svn co http://svn.apache.org/repos/asf/wookie/wookie-master-pom/trunk/"
        Navigate to the checked-out project folder at the command line and type "mvn install".

5) Build using Maven
	Navigate to the top level of the source distribution in a command prompt/console window.
	Type "mvn -DskipTests=true clean install", to start the build process. The first time you run this command all 
        dependencies will be downloaded so you must be online and it will take some time. Subsequent builds will be 
        much faster.
	
5) Run Wookie using Cargo 
	The quickest way to run Wookie is in "standalone" mode; in this mode Wookie uses a local database and 
	Apache Tomcat. This is a good way to experiment with Wookie in development. Navigate to the wookie-server folder 
	of the source distribution in a command prompt/console window. Once there type "mvn cargo:run".
	
	Once the server is running go to 'http://localhost:8080/wookie' in your favourite browser.

6) Build and deploy widgets
	The project comes with some default widgets; you can deploy these to the server by navigating to the 
        wookie-widgets folder in the command prompt/console window and typing "ant deploy-all".  

7) Additional Information
	Note that by default, Wookie uses in-memory storage for things like widget preferences, which
        are then lost when the server is restarted. For persistent storage, you can use Redis or JPA; 
        to install a storage provider read the documentation in the relevant module, e.g. wookie-redis.