commons-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Rahul Akolkar" <rahul.akol...@gmail.com>
Subject Re: [scxml] including chunks of scxml code.
Date Fri, 05 Jan 2007 18:30:54 GMT
On 1/5/07, Nestor Urquiza <nestoru@yahoo.com> wrote:
> Hi,
> I am sorry I could not reply before. Then,
>
<snip/>

No rush at all :-)


> Using templating thru //state/@src is useful for
> including reusable FSM as mean of whole states.
>
> XInclude/XML Entities are useful for including chunks
> of SCXML logic.
>
> I am not sure how the first works but seems like
> commons-scxml would parse just once those states
> defined within the reusable FSM. For the second one I
> think it complies with DRY principles, however since
> including nodes means more processing for either SAX
> or DOM parser I would predict some performance
> degradation (the same in comparison to just copying
> and pasting the bits within the main SCXML file
> though).
>
<snap/>

Possibly, though its a one time cost (not per instance of state machine).


> The question of course is if SCXML provides a way/tag
> for real code reuse either templating or functions
> that can be used "for any arbitrary bits or pieces". I
> can read from [1]
>
<snip-invoke-quote/>

The invoke tag is too heavyweight for the example below, and it is not
completely fleshed out in the spec yet (as mentioned on Commons SCXML
homepage).


> Can anyone offer some snippet of code to solve let us
> say the following simple example of code reuse?
>
> usecase: Build a template/function that returns the
> name of the pet knowing that:
> if animal type="dog" then name="Fido"
> if animal type="cat" then name="Kitty"
> if animal type="bird" then name="Tweety"
> if animal type="horse" then name="Trigger"
> if animal type="cat" then name="Tom"
> if animal type="pig" then name="Porky"
> if animal type="fish" then name="Charlie"
> if animal type="pig" then name="Babe"
> if animal type="cow" then name="Elsie"
> if animal type="cat" then name="Puss"
>
> Of course using <invoke> and <finalize> it seems to be
> possible to accomplish this but I am wondering if
> someone already used them or simply someone can write
> down the snippet of code that actually works while
> using of course commons-scxml.
>
<snap/>

For such bits, define functions in your own namespace (see bottom of
this page [A] ). The above pseudo could be the body of:

public String petName(String species) { ... }

whereby the name is obtained within executable content in the SCXML document as:

<var name="pet" expr="${myfn:petName(type)}"/>  (EL)

<var name="pet" expr="myfn.petName(type)"/>  (JEXL)

This puts the procedural bits in a Java class, makes them reusable etc.

-Rahul

[A] http://jakarta.apache.org/commons/scxml/guide/contexts-evaluators.html



> Thanks,
>
> -Nestor
>
> [1] http://www.w3.org/TR/scxml/
>
>
> --- Rahul Akolkar <rahul.akolkar@gmail.com> wrote:
>
> > On 11/1/06, Craig McClanahan <craigmcc@apache.org>
> > wrote:
> > > On 11/1/06, Nestor Urquiza <nestoru@yahoo.com>
> > wrote:
> > > >
> > > > Hello guys,
> > > >
> > > > I need to apply DRY ;-) so I do not want to be
> > > > duplicating SCXML code that is to be included in
> > many
> > > > different states.
> > > >
> > > > Just wondering about the options we have here:
> > > >
> > > > 1)XInclude
> > > > 2)A special tag from scxml???
> > > > 3) Any other idea?
> > >
> > >
> > > XML entities?
> > >
> > <snip/>
> >
> > This will work well for any abitrary bits and
> > pieces, the earlier
> > solution is just for <state>s. But if you choose
> > this, you'll have to
> > worry about duplicating state IDs, if the bits and
> > pieces contain
> > those.
> >
> > -Rahul
> >
> >
> > > Thanks,
> > > >
> > > > -Nestor
> > >
> > >
> > > Craig
> > >
> > >
> >

---------------------------------------------------------------------
To unsubscribe, e-mail: commons-user-unsubscribe@jakarta.apache.org
For additional commands, e-mail: commons-user-help@jakarta.apache.org


Mime
View raw message