cocoon-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Ivelin Ivanov" <ive...@apache.org>
Subject Re: [Proposal] Implementing XMLForm with Flow
Date Sat, 07 Dec 2002 07:44:32 GMT

I was refering to the demo wizard not the howto wizard, although they are
similar.

How would the flow code look if you implement the functionality  of 2 way
navigation (prev, next).
Additionally when prev is pressed, validation is skipped.


Ivelin



----- Original Message -----
From: "Christopher Oliver" <res1cf5x@verizon.net>
To: <cocoon-dev@xml.apache.org>
Sent: Friday, December 06, 2002 9:13 PM
Subject: Re: [Proposal] Implementing XMLForm with Flow


> Um, I think Daniel basically answered this question a long time ago:
> http://marc.theaimsgroup.com/?l=xml-cocoon-dev&m=102052662705449&w=2.
>
> Sorry, I don't have an actual implementation, but I think it's clear
> that the corresponding flow code would be much more readable than the
> action code in the XML form howto (namely something like below). That is
> the whole point of the flow layer - that you don't have to write
> state-machine code as in XMLForm actions.  Compare the flow version to
> the original XMLForm action code reproduced below, and judge for yourself.
>
> //  display form, wait for submission, and
> //  apply validations; repeat until no violations
> function sendView(form, view, uri) {
>     form.clearViolations();
>     if (uri == undefined) {
>         uri = view + ".xml";
>     }
>     sendPageAndWait(uri, {id: view});
>     form.populate(cocoon.request);
>     if (form.violations != null) {
>         sendView(form, view, uri);
>     }
> }
>
> function createForm() {
>     // create the Form object
>     // ...
> }
>
> function howToWizard() {
>     // different form views
>     // participating in the wizard
>     var VIEW_START = "start";
>     var VIEW_REGISTRATION = "registration";
>     var VIEW_INTEREST = "interest";
>     var VIEW_GARDENING = "organicGardening";
>     var VIEW_COOKING = "cooking";
>     var VIEW_SMALLHOLDING = "smallholdingManagement";
>     var VIEW_CONFIRM = "confirm";
>     var VIEW_END = "end";
>
>     var form = createForm();
>     var jBean = form.getModel();
>     sendView(form, VIEW_START);
>     sendView(form, VIEW_REGISTRATION);
>     sendView(form, VIEW_INTEREST);
>     if (jBean.organicGardening) {
>         sendView(form, VIEW_GARDENING);
>     } else if (jBean.cooking) {
>         sendView(form, VIEW_COOKING);
>     } else if (jBean.smallholdingManagement) {
>         sendView(form, VIEW_SMALLHOLDING);
>     }
>     sendView(form, VIEW_CONFIRM);
>     sendView(form, VIEW_END);
> }
>
> ------------------------------------------------------------
>
>  From HowToWizardAction.java:
>
>       ....
>
>      // apply control flow rules
>       if ( formView.equals ( VIEW_REGISTRATION ) )
>       {
>         if ( command.equals( CMD_NEXT ) )
>         {
>           return page(  VIEW_INTEREST );
>         }
>       }
>       else if ( formView.equals ( VIEW_INTEREST ) )
>       {
>         if ( command.equals( CMD_NEXT ) )
>         {
>            if ( jBean.getOrganicGardening() == true )
>            {
>              return page( VIEW_GARDENING );
>            }
>            else if ( jBean.getCooking() == true )
>            {
>              return page( VIEW_COOKING );
>            }
>            else if ( jBean.getSmallholdingManagement() == true )
>            {
>              return page( VIEW_SMALLHOLDING );
>            }
>            //else if ( getForm().get
>           return page(  VIEW_CONFIRM );
>         }
>         if ( command.equals( CMD_PREV ) )
>         {
>            return page( VIEW_REGISTRATION );
>         }
>       }
>       else if ( formView.equals ( VIEW_GARDENING ) )
>       {
>         if ( command.equals ( CMD_NEXT ) )
>         {
>            if ( jBean.getCooking() == true )
>            {
>              return page( VIEW_COOKING );
>            }
>            else if ( jBean.getSmallholdingManagement() == true )
>            {
>              return page( VIEW_SMALLHOLDING );
>            }
>           return page( VIEW_CONFIRM );
>         }
>         else if( command.equals( CMD_PREV ) )
>         {
>           return page( VIEW_INTEREST );
>         }
>       }
>       else if ( formView.equals ( VIEW_COOKING ) )
>       {
>         if ( command.equals ( CMD_NEXT ) )
>         {
>            if ( jBean.getSmallholdingManagement() == true )
>            {
>              return page( VIEW_SMALLHOLDING );
>            }
>           return page( VIEW_CONFIRM );
>         }
>         else if ( command.equals( CMD_PREV ) )
>         {
>           if ( jBean.getOrganicGardening() == true )
>           {
>             return page( VIEW_GARDENING );
>           }
>           return page( VIEW_INTEREST );
>         }
>       }
>       else if ( formView.equals ( VIEW_SMALLHOLDING ) )
>       {
>         if ( command.equals( CMD_NEXT ) )
>         {
>           return page( VIEW_CONFIRM );
>         }
>         else if ( command.equals( CMD_PREV ) )
>         {
>           if ( jBean.getCooking() == true )
>           {
>             return page( VIEW_COOKING );
>           }
>           else if ( jBean.getOrganicGardening() == true )
>           {
>             return page( VIEW_GARDENING );
>           }
>           return page( VIEW_INTEREST );
>         }
>       }
>       else if ( formView.equals ( VIEW_CONFIRM ) )
>       {
>         if ( command.equals( CMD_NEXT ) )
>         {
>            return page( VIEW_END );
>         }
>         else if( command.equals( CMD_PREV ) )
>         {
>            if ( jBean.getOrganicGardening() == true )
>            {
>              return page( VIEW_GARDENING );
>            }
>           return page( VIEW_INTEREST );
>         }
>       }
>     }
>
> Ivelin Ivanov wrote:
>
> >Sorry I wasn't clear before.
> >I know you can call Java from the flow.
> >The question is how to use the flow in a way which significantly reduces
> >code
> >while making the maintenance easier and improving the readability.
> >
> >Try to beat the existing XMLForm wizard demo.
> >If you succeed, it will be great !
> >
> >Fingers crossed,
> >
> >Ivelin
> >
> >
> >----- Original Message -----
> >From: "Ugo Cei" <u.cei@cbim.it>
> >To: <cocoon-dev@xml.apache.org>
> >Sent: Thursday, December 05, 2002 2:36 AM
> >Subject: Re: [Proposal] Implementing XMLForm with Flow
> >
> >
> >
> >
> >>Ivelin Ivanov wrote:
> >>
> >>
> >>>I hope you are the last hero trying to confront this monster.
> >>>
> >>>The discussion how to combine the two has been going on forever, but we
> >>>
> >>>
> >have
> >
> >
> >>>not come to an agreement.
> >>>
> >>>
> >>I'm currently recovering the previous threads from the archive and
> >>reading them.
> >>
> >>
> >>
> >>>I would gladly offer my tactical guidance for your effort.
> >>>
> >>>
> >>Thank you.
> >>
> >>
> >>
> >>>If I was to do this with Actions, I could use well known and
> >>>
> >>>
> >standardized
> >
> >
> >>>Java APIs - JWSP or JDBC.
> >>>
> >>>
> >>But, as Ovidiu pointed out, you can!
> >>
> >>var schemaFactory =
> >>   Packages.org.apache.cocoon.components.validation.SchemaFactory.lookup
> >>     ("http://www.ascc.net/xml/schematron");
> >>var is = new Packages.org.xml.sax.InputSource
> >>   ("flows/newuser-schema.xml");
> >>var schema = schemaFactory.compileSchema(is);
> >>var validator = schema.newValidator();
> >>validator.setProperty("http://xml.apache.org/cocoon/validator/phase",
> >>   "NewUser");
> >>violations = validator.validate(userBean);
> >>
> >>This is just a quick hack I put together looking at the code for the
> >>AbstractXMLFormAction and Form, but it works. I just need to define some
> >>symbolic constants for the namespaces and find a way to access a
> >>SourceResolver from JavaScript to make it pretty.
> >>
> >>Anyway, if you prefer to write complex business logic in Java (and I'd
> >>agree wholeheartedly with that), you can encapsulate it in a Java method
> >>that returns a boolean or an index to drive the flow that will be
> >>implemented by an if/then/else or a switch in JavaScript.
> >>
> >>What do we gain by this? We remove flow logic from the sitemap in the
> >>form of actions and put it in the flowscript, where it belongs (IMHO).
> >>
> >>Ugo
> >>
> >>--
> >>Ugo Cei - http://www.beblogging.com/blog/
> >>
> >>
> >>---------------------------------------------------------------------
> >>To unsubscribe, e-mail: cocoon-dev-unsubscribe@xml.apache.org
> >>For additional commands, email: cocoon-dev-help@xml.apache.org
> >>
> >>
> >>
> >
> >
> >---------------------------------------------------------------------
> >To unsubscribe, e-mail: cocoon-dev-unsubscribe@xml.apache.org
> >For additional commands, email: cocoon-dev-help@xml.apache.org
> >
> >
> >
> >
>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: cocoon-dev-unsubscribe@xml.apache.org
> For additional commands, email: cocoon-dev-help@xml.apache.org
>


---------------------------------------------------------------------
To unsubscribe, e-mail: cocoon-dev-unsubscribe@xml.apache.org
For additional commands, email: cocoon-dev-help@xml.apache.org


Mime
View raw message