This directory contains an example ANTLR grammar for a little language called OGNL (pronounced OGG-null), which stands for Object-Graph Navigation Language. OGNL is an expression language for setting and getting properties of Java objects, and can be used as is or as a starting point for other projects. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright (c) 2002, Drew Davidson and Luke Blanshard * * All rights reserved. * * * * Redistribution and use in source and binary forms, with or without * * modification, are permitted provided that the following conditions are * * met: * * * * Redistributions of source code must retain the above copyright notice, * * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright * * notice, this list of conditions and the following disclaimer in the * * documentation and/or other materials provided with the distribution. * * Neither the name of the Drew Davidson nor the names of its contributors * * may be used to endorse or promote products derived from this software * * without specific prior written permission. * * * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS * * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE * * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, * * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, * * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS * * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED * * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF * * THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH * * DAMAGE. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 1. Overview =========== As a tool and a code base, OGNL can be used as is or can be cannibalized for its parts. Its possible uses and features include: * OGNL was first conceived as a mechanism for associating parts of GUIs with model objects. A single expression is used both to pull the appropriate value from the model for display by a widget, and to push the newly edited value back into the model when editing is complete. * OGNL's current syntax includes most of Java's operators and a few of its own. It is probably close to powerful enough to be used by a debugger or other system that requires run-time interpretation of expressions. * OGNL has fully integrated support for arbitrary-precision math, as embodied by the classes of the java.math package, meaning that OGNL's arithmetic operators work on BigIntegers and BigDecimals as well as the primitive types. While this is of marginal use (at best) to OGNL as a GUI hooker-upper, it could be valuable in other settings. 2. Building =========== OGNL was designed for JDK 1.2 (now known as Java 2). It is possible to modify the code to run under 1.1, though the extensive use of the 1.2 collections API makes this a bit painful. If you have the JDK 1.1 version of the 1.2 collections, which was made available in the summer of 1998 by the InfoBus group at Sun (and still available in June 1999 at http://java.sun.com/beans/infobus), the job will be easier. If you have GNU make, the GNUmakefile provided will build the OGNL package, run the test program, and use javadoc to produce API documentation; all on NT, Win98 or Unix systems. Please see that file for more information on what build targets are available. 3. Documentation ================ OGNL is documented in the accompanying file "package.html", which is used by javadoc as the ognl package description. The best way to view this is to generate javadoc (using "make doc" if you have GNU make), and then open the generated file "index.html" in the javadoc-created "doc" subdirectory, using your favorite HTML browser. The package description will be below the lists of interfaces and classes. The accompanying test program, Test.java, can be thought of as "practical documentation." 4. Feedback =========== If you have any observations or complaints about OGNL or its implementation or documentation, we would like to hear from you. You can reach Luke Blanshard by email at luke@quiq.com, or Drew Davidson at drew@ognl.org.