<?xml version="1.0"?>
<!---
 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>JellySwing</title>
    <author email="jstrachan@apache.org">James Strachan</author>
  </properties>

  <body>
    <section name="JellySwing"> 
      <p>
        JellySwing is a simple Jelly library which can be used to create Swing user interfaces.
        It allows XML documents (Jelly scripts) to be used to define the layout and rendering of Swing 
        front ends which avoids lots of mundane Java coding, using markup to define the view 
        of your front end and allowing you to bind to Java code for the business objects and models. 
      </p>
      <p>
        This mechanism uses seperation of concerns and MVC ideas from web applications, allowing the rendering
        of your Swing front end to be easily transformed (since its XML) into different styles while leaving your
        model and business objects untouched. It also allows different views to be constructed independently of your models.
      </p>
      <p>
        There is an example JellySwing script
        <a href="http://cvs.apache.org/viewcvs.cgi/jakarta-commons-sandbox/jelly/src/test/org/apache/commons/jelly/swing/example.jelly?rev=HEAD">here</a>
      </p>
      <p>
        To run the example type the following command (from within the <code>jelly-tags/swing</code>
        directory) and then you should see a full Swing user interface 
        appear with pull down menus, a splitter pane, a form, entry fields, buttons and a table.
      </p>
      <source>
    maven demo:swing
      </source>
      <p>
        This example even shows that simple actions can be coded in Jelly script too! Though typically most
        complex logic and models (such as TableModel, TreeModel) should be written in Java code.
        Then Jelly script can be used to create the view and bind in the models.
      </p>
    </section>
    
    <section name="JellyRunner"> 
      <p>
        JellyRunner is a simple example Swing user interface written with JellySwing.
        You can view the source to it
        <a href="http://cvs.apache.org/viewcvs.cgi/jakarta-commons-sandbox/jelly/src/test/org/apache/commons/jelly/swing/run.jelly?rev=HEAD">here</a>
      </p>
      <p>
        If you invoke it via the following command you will get a small Swing UI that allows you to
        choose Jelly scripts to invoke, within the current JVM. Again run this within the
        <code>jelly-tags/swing</code> directory.
      </p>
      <source>
    maven jelly:runner
      </source>
      <p>
        This makes developing Jelly scripts and JellySwing scripts in particular, much more RAD-like.
        You can keep JellyRunner open, edit a Jelly script and just hit the 'Run' button and the
        script executes instantaneously, there's no waiting for a JVM to startup.
      </p>
    </section>
    
    <section name="Comparing JellySwing with Java code for Swing"> 
      <p>
        There's a simple demo written by Otto von Wachter which demonstrates how Jelly can be used
        for templating HTML.
      </p>
      <p>
        The demo was orignally written in
        <a href="http://cvs.apache.org/viewcvs.cgi/jakarta-commons-sandbox/jelly/src/test/org/apache/commons/jelly/demos/HomepageBuilder.java?rev=HEAD">Java code</a>
         
        to implement a simple Swing UI
        As an experiment the same Swing user interface has been written 
       <a href="http://cvs.apache.org/viewcvs.cgi/jakarta-commons-sandbox/jelly/src/test/org/apache/commons/jelly/demos/homepageBuilder.jelly?rev=HEAD">as a JellyScript</a>
        as well.
        While this is a fairly simple Swing UI and not a particularly great example of the power of JellySwing,
        it does highlight the main difference between the two appraches.
      </p>
    </section>
    
  </body>
</document>

