On 1/5/07, Nestor Urquiza <[EMAIL PROTECTED]> 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 <[EMAIL PROTECTED]> wrote:
> On 11/1/06, Craig McClanahan <[EMAIL PROTECTED]>
> wrote:
> > On 11/1/06, Nestor Urquiza <[EMAIL PROTECTED]>
> 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: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]