Apparently we have different perspectives on this matter, but that is good.
----- Original Message ----- From: "Christopher Oliver" <[EMAIL PROTECTED]> To: <[EMAIL PROTECTED]> Sent: Saturday, December 07, 2002 9:37 AM Subject: Re: [Proposal] Implementing XMLForm with Flow > Ivelin Ivanov wrote: > > >I was refering to the demo wizard not the howto wizard, although they are > >similar. > > > Uh, does it matter? Is the action code in that wizard any less convoluted? > > > > >How would the flow code look if you implement the functionality of 2 way > >navigation (prev, next). > > > It would look exactly the same. See Ovidiu's answer to Daniel's message > cited below. This functionality can be implemented outside the flow > script itself. > > >Additionally when prev is pressed, validation is skipped. > > > > > > > Well, there are many ways to implement this behavior, none of them > difficult, for example: > > function shouldValidate(form, request) { > // do whatever to decide if validation should happen > return true; > } > > function sendView(form, view, uri) { > form.clearViolations(); > if (uri == undefined) { > uri = view + ".xml"; > } > sendPageAndWait(uri, {id: view}); > if (shouldValidate(form, cocoon.request) { > form.populate(cocoon.request); > if (form.violations != null) { > sendView(form, view, uri); > } > } > } > > Bottom line, in my opinion, there's no doubt such functionality can be > implemented. And there's equally no doubt in my opinion that the flow > layer provides an elegant solution compared to using actions. (Remember, > that was the objection you most recently raised). > > Regards, > > Chris > > >Ivelin > > > > > > > >----- Original Message ----- > >From: "Christopher Oliver" <[EMAIL PROTECTED]> > >To: <[EMAIL PROTECTED]> > >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" <[EMAIL PROTECTED]> > >>>To: <[EMAIL PROTECTED]> > >>>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: [EMAIL PROTECTED] > >>>>For additional commands, email: [EMAIL PROTECTED] > >>>> > >>>> > >>>> > >>>> > >>>> > >>>--------------------------------------------------------------------- > >>>To unsubscribe, e-mail: [EMAIL PROTECTED] > >>>For additional commands, email: [EMAIL PROTECTED] > >>> > >>> > >>> > >>> > >>> > >>> > >> > >>--------------------------------------------------------------------- > >>To unsubscribe, e-mail: [EMAIL PROTECTED] > >>For additional commands, email: [EMAIL PROTECTED] > >> > >> > >> > > > > > >--------------------------------------------------------------------- > >To unsubscribe, e-mail: [EMAIL PROTECTED] > >For additional commands, email: [EMAIL PROTECTED] > > > > > > > > > > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [EMAIL PROTECTED] > For additional commands, email: [EMAIL PROTECTED] > --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, email: [EMAIL PROTECTED]