lib/openwfe/expressions/fe_when.rb in ruote-0.9.18 vs lib/openwfe/expressions/fe_when.rb in ruote-0.9.19

- old
+ new

@@ -1,34 +1,34 @@ # #-- # Copyright (c) 2006-2008, John Mettraux, OpenWFE.org # All rights reserved. -# -# Redistribution and use in source and binary forms, with or without +# +# Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are met: -# +# # . Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# . Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation +# list of conditions and the following disclaimer. +# +# . Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation # and/or other materials provided with the distribution. -# +# # . Neither the name of the "OpenWFE" nor the names of its contributors may be # used to endorse or promote products derived from this software without # specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE -# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE +# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE # POSSIBILITY OF SUCH DAMAGE. #++ # # @@ -47,96 +47,96 @@ # 'when' and 'wait' # module OpenWFE - # - # The 'when' expression will trigger a consequence when a condition - # is met, like in - # - # <when test="${variable:over} == true"> - # <participant ref="toto" /> - # </when> - # - # where the participant "toto" will receive a workitem when the (local) - # variable "over" has the value true. - # - # This is also possible : - # - # <when> - # <equals field-value="done" other-value="true" /> - # <participant ref="toto" /> - # </when> - # - # The 'when' expression by defaults, evaluates every 10 seconds its - # condition clause. - # A different frequency can be stated via the "frequency" attribute : - # - # _when :test => "${completion_level} == 4", :frequency => "1s" - # participant "next_stage" - # end - # - # will check for the completion_level value every second. The scheduler - # itself is by default 'waking up' every 250 ms, so setting a frequency to - # something smaller than that value might prove useless. - # (Note than in the Ruby process definition, the 'when' got escaped to - # '_when' not to conflict with the 'when' keyword of the Ruby language). - # - # The when expression understands the 'timeout' attribute like the - # participant expression does. Thus - # - # _when :test => "${cows} == 'do fly'", :timeout => "1y" - # participant "me" - # end - # - # will timeout after one year (participant "me" will not receive a - # workitem). - # - class WhenExpression < WaitingExpression + # + # The 'when' expression will trigger a consequence when a condition + # is met, like in + # + # <when test="${variable:over} == true"> + # <participant ref="toto" /> + # </when> + # + # where the participant "toto" will receive a workitem when the (local) + # variable "over" has the value true. + # + # This is also possible : + # + # <when> + # <equals field-value="done" other-value="true" /> + # <participant ref="toto" /> + # </when> + # + # The 'when' expression by defaults, evaluates every 10 seconds its + # condition clause. + # A different frequency can be stated via the "frequency" attribute : + # + # _when :test => "${completion_level} == 4", :frequency => "1s" + # participant "next_stage" + # end + # + # will check for the completion_level value every second. The scheduler + # itself is by default 'waking up' every 250 ms, so setting a frequency to + # something smaller than that value might prove useless. + # (Note than in the Ruby process definition, the 'when' got escaped to + # '_when' not to conflict with the 'when' keyword of the Ruby language). + # + # The when expression understands the 'timeout' attribute like the + # participant expression does. Thus + # + # _when :test => "${cows} == 'do fly'", :timeout => "1y" + # participant "me" + # end + # + # will timeout after one year (participant "me" will not receive a + # workitem). + # + class WhenExpression < WaitingExpression - names :when - conditions :test + names :when + conditions :test - attr_accessor \ - :consequence_triggered, - :condition_sub_id + attr_accessor \ + :consequence_triggered, + :condition_sub_id - def apply (workitem) + def apply (workitem) - return reply_to_parent(workitem) \ - if raw_children.size < 1 + return reply_to_parent(workitem) \ + if raw_children.size < 1 - @condition_sub_id = -1 - @consequence_triggered = false + @condition_sub_id = -1 + @consequence_triggered = false - super workitem - end + super workitem + end - def reply (workitem) + def reply (workitem) - #ldebug do - # "reply() @consequence_triggered is '#{@consequence_triggered}'" - #end + #ldebug do + # "reply() @consequence_triggered is '#{@consequence_triggered}'" + #end - return reply_to_parent(workitem) \ - if @consequence_triggered + return reply_to_parent(workitem) \ + if @consequence_triggered - super workitem - end + super workitem + end - protected + protected - def apply_consequence (workitem) + def apply_consequence (workitem) - @consequence_triggered = true + @consequence_triggered = true - store_itself + store_itself - i = 1 - i = 0 if @children.size == 1 + i = 1 + i = 0 if @children.size == 1 - get_expression_pool.apply @children[i], workitem - end - end + get_expression_pool.apply @children[i], workitem + end + end end