<?xml version="1.0" encoding="ISO-8859-1" ?>
<!--
    Licensed to the Apache Software Foundation (ASF) under one
    or more contributor license agreements.  See the NOTICE file
    distributed with this work for additional information
    regarding copyright ownership.  The ASF licenses this file
    to you under the Apache License, Version 2.0 (the
    "License"); you may not use this file except in compliance
    with the License.  You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

    Unless required by applicable law or agreed to in writing,
    software distributed under the License is distributed on an
    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    KIND, either express or implied.  See the License for the
    specific language governing permissions and limitations
    under the License.

-->
<document>
    <properties>
        <title>Installation of the MyFaces Ext-Scripting Alpha 1 "Release"</title>
    </properties>

    <section name="General Information">
        <p>
            Ext-Scripting is currently still in Alpha stage, so no official release has been done,
            only a semi official 1.0-Alpha release. Since then, a lot of simplification work on the
            dependency side has been done.
        </p>
        This page gives detailed instructions on how to use the Alpha-1.
        <p>
            However we would recommend to use the latest codebase or one of the upcoming beta releases
            since lots of bug fixes have went into the codebase.
        </p>
    </section>
    <section name="Setup using Apache Maven2">
        <subsction name="Download Location">
            <p>
                The release build is hosted and signed in an inofficial repository hosted under
                http://people.apache.org/~lu4242/extscript100alpha
            </p>
            <p>
                You simply have to add following code to your maven pom.xml to be able to use the alpha
                jars:
                <source><![CDATA[
<repositories>
  <repository>
         <id>ext-scripting.alpha1</id>
         <name>Maven Repository for myfaces Ext-Scripting Alpha 1</name>
         <url>http://people.apache.org/~lu4242/extscript100alpha/</url>
        <layout>default</layout>
  </repository>
<repositories>
                ]]></source>
            </p>
        </subsction>
        <subsction name="Maven Dependencies">
            <p>
                If you want to use Ext-Scripting Alpha 1 in your own project,
                you will have to add several dependencies to your pom.xml
                (note a lot of simplification has been done in this area post Alpha-1)

            </p>
            <p>
                Depending on your working environment the configuration can vary!
            </p>

            <h4>Core</h4>
            <p>All configurations definitely need our core jar</p>
            <source><![CDATA[
<dependency>
    <groupId>org.apache.myfaces.extension-scripting</groupId>
    <artifactId>core</artifactId>
    <version>1.0-ALPHA-1</version>
</dependency>
                ]]></source>


            <h4>Java6</h4>
            <p>If you are in a Java-6 environment you will definitely have to add following section to your pom.xml.</p>
            <source><![CDATA[
<dependency>
    <groupId>org.apache.myfaces.extension-scripting</groupId>
    <artifactId>core-java6</artifactId>
    <version>1.0-ALPHA-1</version>
</dependency>
                ]]></source>
            <h4>MyFaces Version</h4>
            <p>Depending on your MyFaces version, you either have to add the 1.2 extension or the 2.0 extension to your
                pom.xml.
            </p>

            <p>
                <b>For Myfaces 1.2.8+</b>
            </p>

            <source><![CDATA[
<dependency>
    <groupId>org.apache.myfaces.extension-scripting</groupId>
    <artifactId>myfaces12-extensions</artifactId>
    <version>1.0-ALPHA-1</version>
</dependency>
                ]]></source>

            <p>
                <b>For Myfaces 2.0</b>
            </p>


            <source><![CDATA[
<dependency>
    <groupId>org.apache.myfaces.extension-scripting</groupId>
    <artifactId>myfaces2-extensions</artifactId>
    <version>1.0-ALPHA-1</version>
</dependency>
                ]]></source>

            <p>
                <b>For Myfaces 2.0</b>
            </p>
            <p>Following image gives a quick overview over the modules you can use for your respective configuration:
            </p>

            <img src="images/alpha_1_depgraph.jpg"  width="511px" height="434px"   />
        </subsction>
        <section name="Setup by hand">
            <p>As of writing there is no bundle for a manual install available, but the installation
            is almost identical to the maven installation</p>
            <p>Since Ext-Scripting uses almost the same dependencies as MyFaces you only just have to add
            the Ext-Scripting jars + a valid Groovy-All.jar (1.7.x or higher) + Objectwebs ASM 3.2</p>

            <p>Following download Links are available to download all dependencies</p>

            <ul>
                <li><a href="http://people.apache.org/~lu4242/extscript100alpha/org/apache/myfaces/extension-scripting/core/1.0-ALPHA-1/core-1.0-ALPHA-1.jar">Ext Scripting Alpha 1 Core</a></li>
                <li><a href="http://people.apache.org/~lu4242/extscript100alpha/org/apache/myfaces/extension-scripting/core-java6/1.0-ALPHA-1/core-java6-1.0-ALPHA-1.jar">Ext Scripting Alpha 1 Core Java6</a></li>
                <li><a href="http://people.apache.org/~lu4242/extscript100alpha/org/apache/myfaces/extension-scripting/myfaces12-extensions/1.0-ALPHA-1/myfaces12-extensions-1.0-ALPHA-1.jar">Ext Scripting MyFaces 1.2 Extensions</a></li>
                <li><a href="http://people.apache.org/~lu4242/extscript100alpha/org/apache/myfaces/extension-scripting/myfaces20-extensions/1.0-ALPHA-1/myfaces20-extensions-1.0-ALPHA-1.jar">Ext Scripting MyFaces 2.0 Extensions</a></li>
                <li><a href="http://repository.codehaus.org/org/codehaus/groovy/groovy-all/1.7.1/groovy-all-1.7.1.jar">Groovy-All.jar</a></li>
                <li><a href="http://repo1.maven.org/maven2/asm/asm/3.2/asm-3.2.jar">ASM.jar</a></li>
            </ul>

            <p>Note some of the dependencies will be included directly in your bundle jar in later builds</p>

        </section>
        <section name="Kickstarting via an Example Web Application">
            <p>Ext-Scripting provides two sample web applications for testing and kickstarting an application.
            Both can be found under following links and can be dropped into a servlet container (note that the MyFaces 2.0 example requires a servlet 2.5+ container)</p>
            <ul>
                <li><a href="http://people.apache.org/~lu4242/extscript100alpha/org/apache/myfaces/extension-scripting/myfaces12-example/1.0-ALPHA-1/myfaces12-example-1.0-ALPHA-1.war">Ext Scripting Alpha 1 Example for MyFaces 1.2</a></li>
                <li><a href="http://people.apache.org/~lu4242/extscript100alpha/org/apache/myfaces/extension-scripting/myfaces20-example/1.0-ALPHA-1/myfaces20-example-1.0-ALPHA-1.war">Ext Scripting Alpha 1 Example for MyFaces 2.0</a></li>
            </ul>
        </section>


    </section>

</document>