coliver     2003/02/28 11:12:13

  Modified:    src/java/org/apache/cocoon/components/flow/javascript
                        system.js
  Log:
  Removed tabs, added getValue() and iterate() methods to XForm and removed xpath() 
method
  
  Revision  Changes    Path
  1.9       +114 -96   
xml-cocoon2/src/java/org/apache/cocoon/components/flow/javascript/system.js
  
  Index: system.js
  ===================================================================
  RCS file: 
/home/cvs/xml-cocoon2/src/java/org/apache/cocoon/components/flow/javascript/system.js,v
  retrieving revision 1.8
  retrieving revision 1.9
  diff -u -r1.8 -r1.9
  --- system.js 26 Feb 2003 17:15:41 -0000      1.8
  +++ system.js 28 Feb 2003 19:12:13 -0000      1.9
  @@ -159,11 +159,13 @@
    */
   XForm.prototype.setModel = function(model) {
       this.form = 
  -     new Packages.org.apache.cocoon.components.xmlform.Form(this.id, 
  -                                                            model);
  +       new Packages.org.apache.cocoon.components.xmlform.Form(this.id, 
  +                                                               model);
  +    this.context = 
  +       Packages.org.apache.commons.jxpath.JXPathContext.newContext(model);
       this.form.setAutoValidate(false);
       if (this.validatorNS != undefined && this.validatorDoc != undefined) {
  -     this._setValidator(this.validatorNS, this.validatorDoc);
  +        this._setValidator(this.validatorNS, this.validatorDoc);
       }
   }
   
  @@ -176,7 +178,7 @@
   XForm.prototype.start = function(lastCont, timeToLive) {
       var k = new Continuation();
       var kont = new WebContinuation(cocoon, k, 
  -                                lastCont, timeToLive);
  +                                   lastCont, timeToLive);
       return kont;
   } 
   
  @@ -193,12 +195,12 @@
       var list = new java.util.LinkedList();
       list.add(violation);
       try {
  -     this.form.addViolations(list);
  +        this.form.addViolations(list);
       } catch (e) {
  -     print(e);
  -     if (e instanceof java.lang.Throwable) {
  -         e.printStackTrace();
  -     }
  +        print(e);
  +        if (e instanceof java.lang.Throwable) {
  +            e.printStackTrace();
  +        }
       }
   }
   
  @@ -207,9 +209,18 @@
    * @param expr xpath expression
    * @return result of computing <code>expr</code>
    */
  -XForm.prototype.xpath = function(expr) {
  -    var ctx = new 
Packages.org.apache.commons.jxpath.JXPathContext.newContext(this.form.getModel());
  -    return ctx.getValue(expr);
  +XForm.prototype.getValue = function(expr) {
  +    return this.context.getValue(expr);
  +}
  +
  +/**
  + * Returns an iterator over a nodeset value of an xpath expression evaluated 
  + * against the model of this form
  + * @param expr xpath expression
  + * @return java.util.Iterator representing a nodeset 
  + */
  +XForm.prototype.iterate = function(expr) {
  +    return this.context.iterate(expr);
   }
   
   XForm.prototype._sendView = function(uri, lastCont, timeToLive) {
  @@ -228,7 +239,7 @@
   /**
    * Sends view to presentation pipeline and waits for subsequent submission.
    * Automatically resends view if validation fails.
  - * Creates two continuations: one immediately before the page submission
  + * Creates two continuations: one immediately before the page is sent 
    * and one immediately after. These are used to implement automated support
    * for back/forward navigation in the form. When you move forward in the
    * form the second continuation is invoked. When you move back from the
  @@ -242,41 +253,47 @@
       this.form.clearViolations();
       var view = this.form.getFormView(cocoon.environment.objectModel);
       while (true) {
  -     var k = this.start(lastCont);
  -     if (cocoon.request == null) {
  -         // this continuation has been invalidated
  -         this.dead = true;
  -         handleInvalidContinuation();
  -         suicide();
  -     }
  -     cocoon.request.setAttribute("view", view);
  -     try {
  -         this.form.save(cocoon.environment.objectModel, "request");
  -     } catch (e if (e instanceof java.lang.IllegalStateException)) {
  -         if (cocoon.session.getAttribute(this.id) != null) {
  -             // someone else has taken my session
  -             this.dead = true;
  -             cocoon.removeSession();
  -             handleInvalidContinuation();
  -             suicide();
  -         }
  -         throw e;
  -     }
  -     this._sendView(uri, k);
  -     if (this.dead || cocoon.request == null) {
  -         // this continuation has been invalidated
  -         handleInvalidContinuation();
  -         suicide();
  -     }
  -     this.form.populate(cocoon.environment.objectModel);
  -     if (validator != undefined) {
  -         validator(this);
  -     }
  -     this.form.validate(phase);
  -     if (this.form.violationsAsSortedSet == null ||
  -         this.form.violationsAsSortedSet.size() == 0) {
  -         break;
  -     }
  +        // create a continuation, the invocation of which will resend
  +        // the page: this is used to implement <xf:submit continuation="back">
  +        var k = this.start(lastCont);
  +        if (cocoon.request == null) {
  +            // this continuation has been invalidated
  +            this.dead = true;
  +            handleInvalidContinuation();
  +            suicide();
  +        }
  +        // reset the view in case this is a re-invocation of a continuation
  +        cocoon.request.setAttribute("view", view);
  +        try {
  +            this.form.save(cocoon.environment.objectModel, "request");
  +        } catch (e if (e instanceof java.lang.IllegalStateException)) {
  +            if (cocoon.session.getAttribute(this.id) != null) {
  +                // someone else has taken my session
  +                this.dead = true;
  +                cocoon.removeSession();
  +                handleInvalidContinuation();
  +                suicide();
  +            }
  +            throw e;
  +        }
  +        this._sendView(uri, k);
  +        // _sendView creates a continuation, the invocation of which
  +        // will return right here: it is used to implement 
  +        // <xf:submit continuation="forward">
  +        if (this.dead || cocoon.request == null) {
  +            // this continuation has been invalidated
  +            handleInvalidContinuation();
  +            suicide();
  +        }
  +        this.form.populate(cocoon.environment.objectModel);
  +        if (validator != undefined) {
  +            validator(this);
  +        }
  +        this.form.validate(phase);
  +        if (this.form.violationsAsSortedSet == null ||
  +            this.form.violationsAsSortedSet.size() == 0) {
  +            break;
  +        }
       }
   }
   
  @@ -287,12 +304,12 @@
       var resolver = cocoon.environment;
       var schemaSrc = resolver.resolveURI( schDoc );
       try {
  -     var is = 
Packages.org.apache.cocoon.components.source.SourceUtil.getInputSource(schemaSrc);
  -     var schf = 
Packages.org.apache.cocoon.components.validation.SchemaFactory.lookup ( schNS );
  -     var sch = schf.compileSchema ( is );
  -     this.form.setValidator(sch.newValidator());
  +        var is = 
Packages.org.apache.cocoon.components.source.SourceUtil.getInputSource(schemaSrc);
  +        var schf = 
Packages.org.apache.cocoon.components.validation.SchemaFactory.lookup ( schNS );
  +        var sch = schf.compileSchema ( is );
  +        this.form.setValidator(sch.newValidator());
       } finally {
  -     resolver.release(schemaSrc);
  +        resolver.release(schemaSrc);
       }
   }
   
  @@ -304,25 +321,25 @@
   
   XForm.prototype.finish = function(view, uri) {
       try {
  -     this.form.save(cocoon.environment.objectModel, "request");
  +        this.form.save(cocoon.environment.objectModel, "request");
       } catch (e if (e instanceof java.lang.IllegalStateException)) {
  -     if (cocoon.session.getAttribute(this.id) != null) {
  -         // someone else has taken my session
  -         this.dead = true;
  -         cocoon.removeSession();
  -         handleInvalidContinuation();
  -         suicide();
  -     }
  -     throw e;
  +        if (cocoon.session.getAttribute(this.id) != null) {
  +            // someone else has taken my session
  +            this.dead = true;
  +            cocoon.removeSession();
  +            handleInvalidContinuation();
  +            suicide();
  +        }
  +        throw e;
       }
       cocoon.forwardTo("cocoon://" + cocoon.environment.getURIPrefix() + uri,
  -                  this.form.getModel(), null);
  +                     this.form.getModel(), null);
       delete XForm.forms[this.id]; // delete myself
       this.dead = true;
       cocoon.removeSession();
       if (this.lastContinuation != null) {
  -     this.lastContinuation.invalidate();
  -     this.lastContinuation = null;
  +        this.lastContinuation.invalidate();
  +        this.lastContinuation = null;
       }
       
   }
  @@ -337,41 +354,42 @@
    */
   
   function xmlForm(application, id, validator_ns, validator_doc) {
  +    if (cocoon.request == null) {
  +        handleInvalidContinuation("");
  +        return;
  +    }
       function getCommand() {
  -     if (cocoon.request == null) {
  -         return undefined;
  -     }
  -     var enum_ = cocoon.request.parameterNames;
  -     var command = undefined;
  -     while (enum_.hasMoreElements()) {
  -         var paramName = enum_.nextElement();
  -         // search for the command
  -         if 
(paramName.startsWith(Packages.org.apache.cocoon.Constants.ACTION_PARAM_PREFIX)) {
  -             command =
  -                 
paramName.substring(Packages.org.apache.cocoon.Constants.ACTION_PARAM_PREFIX.length(), 
paramName.length());
  -             break;
  -         }
  -     }
  -     // command encodes the continuation id for "back" or "next" actions
  -     return command;
  +        var enum_ = cocoon.request.parameterNames;
  +        var command = undefined;
  +        while (enum_.hasMoreElements()) {
  +            var paramName = enum_.nextElement();
  +            // search for the command
  +            if 
(paramName.startsWith(Packages.org.apache.cocoon.Constants.ACTION_PARAM_PREFIX)) {
  +                command =
  +                    
paramName.substring(Packages.org.apache.cocoon.Constants.ACTION_PARAM_PREFIX.length(), 
paramName.length());
  +                break;
  +            }
  +        }
  +        // command encodes the continuation id for "back" or "next" actions
  +        return command;
       }
       var command = getCommand();
       if (command != undefined) {
  -     var xform = XForm.forms[id];
  -     if (xform != undefined) {
  -         // invoke a continuation 
  -         var continuationsMgr =
  -             
cocoon.componentManager.lookup(Packages.org.apache.cocoon.components.flow.ContinuationsManager.ROLE);
  -         var wk = continuationsMgr.lookupWebContinuation(command);
  -         cocoon.componentManager.release(continuationsMgr);
  -         if (wk != null) {
  -             var jswk = wk.userObject;
  -             xform.form.clearViolations();
  -             jswk.continuation(jswk);
  -         } else {
  -             handleInvalidContinuation(command);
  -         }
  -     }
  +        var xform = XForm.forms[id];
  +        if (xform != undefined) {
  +            // invoke a continuation 
  +            var continuationsMgr =
  +                
cocoon.componentManager.lookup(Packages.org.apache.cocoon.components.flow.ContinuationsManager.ROLE);
  +            var wk = continuationsMgr.lookupWebContinuation(command);
  +            cocoon.componentManager.release(continuationsMgr);
  +            if (wk != null) {
  +                var jswk = wk.userObject;
  +                xform.form.clearViolations();
  +                jswk.continuation(jswk);
  +            }
  +        }
  +        handleInvalidContinuation(command);
  +        return;
       } 
       // Just start a new instance of the application
       cocoon.session.removeAttribute(id);
  
  
  

Reply via email to