    <JSB>
        <JSB_DESCRIPTOR NAME="netscape.peas.ClientCursor" DISPLAYNAME="Client Side Cursor"
            SHORTDESCRIPTION="LiveConnect LiveWire client side cursor"
            ISHIDDEN ENV="client" ISJAVA>

        <JSB_PROPERTY NAME="currentRowNumber" ISRUNTIME DISPLAYNAME="CurrentRow" PROPTYPE="AWT11" TYPE="int" EVENTMODEL="AWT11"
            READMETHOD="getCurrentRowNumber" WRITEMETHOD="setCurrentRowNumber"
            ISRUNTIME ISBOUND
            SHORTDESCRIPTION="Current Row Number">

        <JSB_PROPERTY NAME="SQL" DISPLAYNAME="SQL Query" ISRUNTIME PROPTYPE="JS-expr" TYPE="SQLQuery" ENV="server"  EVENTMODEL="AWT11"
            READMETHOD="getQuery" WRITEMETHOD="setQuery" ISBOUND
            SHORTDESCRIPTION="SQL query that defines cursor">

        <JSB_PROPERTY NAME="database" DISPLAYNAME="Database" PROPTYPE="JS"  TYPE="string"
            SHORTDESCRIPTION="Name of LiveWire database object to operate on">

        <JSB_PROPERTY NAME="updatable" DISPLAYNAME="Updatable" PROPTYPE="AWT11" TYPE="boolean"
            READMETHOD="setUpdatable" WRITEMETHOD="getUpdatable"
            SHORTDESCRIPTION="Is Cursor Updatable">

        // methods
        <JSB_METHOD NAME="executeQuery" TYPE="boolean"> </JSB_METHOD>

        <JSB_METHOD NAME="nextRow" TYPE="boolean"> </JSB_METHOD>

        <JSB_METHOD NAME="previousRow" TYPE="boolean"> </JSB_METHOD>

        <JSB_METHOD NAME="setCurrentRowNumber" TYPE="boolean">
            <JSB_PARAMETER NAME="row" TYPE="int">
        </JSB_METHOD>

        <JSB_METHOD NAME="getCurrentRowNumber" TYPE="int"> </JSB_METHOD>

        <JSB_METHOD NAME="setQuery" TYPE="void"> </JSB_METHOD>

        <JSB_METHOD NAME="getQuery" TYPE="String"> </JSB_METHOD>

        <JSB_METHOD NAME="setURL" TYPE="void">

            <JSB_PARAMETER NAME="url" TYPE="String">
        </JSB_METHOD>

        <JSB_METHOD NAME="getURL" TYPE="string"> </JSB_METHOD>

        <JSB_METHOD NAME="updateCurrentRow" TYPE="void"> </JSB_METHOD>

        <JSB_METHOD NAME="deleteRow" TYPE="void"> </JSB_METHOD>

        <JSB_METHOD NAME="addRow" TYPE="void"> </JSB_METHOD>

        // ----------- events ---------------------------------
        <JSB_EVENT NAME="java.beans.PropertyChange" LISTENERMETHODS="propertyChange" LISTENERTYPE="java.beans.PropertyChangeListener" EVENTMODEL="AWT11">

        <JSB_EVENT NAME="netscape.peas.RowChange" LISTENERMETHODS="rowChange" LISTENERTYPE="netscape.peas.RowChangeListener" EVENTMODEL="AWT11">

        <JSB_EVENT NAME="netscape.peas.TableChange" LISTENERMETHODS="tableChange" LISTENERTYPE="netscape.peas.TableChangeListener" EVENTMODEL="AWT11" ISDEFAULT>

        // ------------ interfaces ----------------------------
        <JSB_INTERFACE NAME="netscape.peas.GetInterface">
        <JSB_INTERFACE NAME="netscape.peas.Row">
        <JSB_INTERFACE NAME="netscape.peas.RowChangeListener">
        <JSB_INTERFACE NAME="netscape.peas.Table">
        <JSB_INTERFACE NAME="netscape.peas.TableChangeListener">

        <JSB_CONSTRUCTOR>
    function netscape_peas_ClientCursor(params) {
        oCursor = new Packages.netscape.peas.ClientSideCursor();
        documentURL = document.URL;
        cscURL = documentURL.substring( 0, documentURL.lastIndexOf("/") );
        oCursor.setURL( cscURL );
        oCursor.setQuery( params.SQL );
        oCursor.setUpdatable( params.updatable );
        return oCursor;
    }
         </JSB_CONSTRUCTOR>

    </JSB>

    <JSB_LISTENER NAME="PropertyChangeListener">
        <JSB_METHOD NAME="propertyChange" TYPE="void">
            <JSB_PARAMETER NAME="oEvent" TYPE="PropertyChangeEvent">
        </JSB_METHOD>
    </JSB_LISTENER>

    <JSB_LISTENER NAME="RowChangeListener">
        <JSB_METHOD NAME="rowChange" TYPE="void">
            <JSB_PARAMETER NAME="oEvent" TYPE="RowChangeEvent">
        </JSB_METHOD>
    </JSB_LISTENER>

    <JSB_LISTENER NAME="TableChangeListener">
        <JSB_METHOD NAME="rowChange" TYPE="void">
            <JSB_PARAMETER NAME="oEvent" TYPE="TableChangeEvent">
        </JSB_METHOD>
    </JSB_LISTENER>