ruote 0.9.18 → 0.9.19
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/README.txt +2 -0
- data/examples/about_state.rb +29 -29
- data/examples/bigflow.rb +9 -9
- data/examples/csv_weather.rb +4 -4
- data/examples/engine_template.rb +141 -129
- data/examples/flowtracing.rb +8 -8
- data/examples/homeworkreview.rb +15 -15
- data/examples/kotoba.rb +9 -9
- data/examples/mano_tracker.rb +63 -63
- data/examples/openwferu.rb +22 -20
- data/examples/quotereporter.rb +79 -79
- data/lib/openwfe/contextual.rb +72 -72
- data/lib/openwfe/def.rb +21 -21
- data/lib/openwfe/engine.rb +19 -19
- data/lib/openwfe/engine/engine.rb +578 -614
- data/lib/openwfe/engine/expool_methods.rb +144 -115
- data/lib/openwfe/engine/file_persisted_engine.rb +77 -77
- data/lib/openwfe/engine/participant_methods.rb +96 -96
- data/lib/openwfe/engine/status_methods.rb +271 -247
- data/lib/openwfe/engine/update_exp_methods.rb +69 -69
- data/lib/openwfe/exceptions.rb +25 -25
- data/lib/openwfe/expool/errorjournal.rb +334 -348
- data/lib/openwfe/expool/expool_pause_methods.rb +98 -0
- data/lib/openwfe/expool/expressionpool.rb +793 -800
- data/lib/openwfe/expool/expstorage.rb +284 -313
- data/lib/openwfe/expool/history.rb +193 -105
- data/lib/openwfe/expool/journal.rb +163 -163
- data/lib/openwfe/expool/journal_replay.rb +228 -228
- data/lib/openwfe/expool/parser.rb +178 -142
- data/lib/openwfe/{orest/exception.rb → expool/paused_error.rb} +49 -32
- data/lib/openwfe/expool/representation.rb +59 -59
- data/lib/openwfe/expool/threadedexpstorage.rb +137 -134
- data/lib/openwfe/expool/wfidgen.rb +289 -287
- data/lib/openwfe/expool/yamlexpstorage.rb +154 -154
- data/lib/openwfe/expressions/condition.rb +175 -168
- data/lib/openwfe/expressions/environment.rb +165 -165
- data/lib/openwfe/expressions/expressionmap.rb +135 -131
- data/lib/openwfe/expressions/fe_cancel.rb +68 -68
- data/lib/openwfe/expressions/fe_command.rb +190 -190
- data/lib/openwfe/expressions/fe_concurrence.rb +531 -531
- data/lib/openwfe/expressions/fe_cron.rb +152 -197
- data/lib/openwfe/expressions/fe_cursor.rb +152 -186
- data/lib/openwfe/expressions/fe_define.rb +118 -118
- data/lib/openwfe/expressions/fe_do.rb +109 -109
- data/lib/openwfe/expressions/fe_equals.rb +219 -219
- data/lib/openwfe/expressions/fe_filter.rb +98 -98
- data/lib/openwfe/expressions/fe_filter_definition.rb +122 -122
- data/lib/openwfe/expressions/fe_fqv.rb +203 -203
- data/lib/openwfe/expressions/fe_http.rb +212 -0
- data/lib/openwfe/expressions/fe_if.rb +214 -214
- data/lib/openwfe/expressions/fe_iterator.rb +91 -91
- data/lib/openwfe/expressions/fe_listen.rb +268 -268
- data/lib/openwfe/expressions/fe_losfor.rb +73 -73
- data/lib/openwfe/expressions/fe_misc.rb +343 -351
- data/lib/openwfe/expressions/fe_participant.rb +206 -206
- data/lib/openwfe/expressions/fe_reserve.rb +153 -142
- data/lib/openwfe/expressions/fe_save.rb +226 -226
- data/lib/openwfe/expressions/fe_sequence.rb +66 -56
- data/lib/openwfe/expressions/fe_set.rb +80 -80
- data/lib/openwfe/expressions/fe_sleep.rb +132 -125
- data/lib/openwfe/expressions/fe_step.rb +113 -111
- data/lib/openwfe/expressions/fe_subprocess.rb +139 -136
- data/lib/openwfe/expressions/fe_timeout.rb +74 -78
- data/lib/openwfe/expressions/fe_wait.rb +48 -49
- data/lib/openwfe/expressions/fe_when.rb +106 -106
- data/lib/openwfe/expressions/filter.rb +60 -60
- data/lib/openwfe/expressions/flowexpression.rb +618 -612
- data/lib/openwfe/expressions/iterator.rb +158 -158
- data/lib/openwfe/expressions/merge.rb +53 -53
- data/lib/openwfe/expressions/raw.rb +396 -397
- data/lib/openwfe/expressions/rprocdef.rb +261 -266
- data/lib/openwfe/expressions/time.rb +238 -243
- data/lib/openwfe/expressions/timeout.rb +135 -135
- data/lib/openwfe/expressions/value.rb +55 -55
- data/lib/openwfe/extras/engine/db_persisted_engine.rb +94 -0
- data/lib/openwfe/extras/expool/dberrorjournal.rb +189 -0
- data/lib/openwfe/extras/expool/dbexpstorage.rb +355 -0
- data/lib/openwfe/extras/expool/dbhistory.rb +135 -0
- data/lib/openwfe/extras/listeners/sqslisteners.rb +146 -0
- data/lib/openwfe/extras/misc/activityfeed.rb +264 -0
- data/lib/openwfe/extras/misc/basecamp.rb +485 -0
- data/lib/openwfe/extras/participants/activeparticipants.rb +749 -0
- data/lib/openwfe/extras/participants/atomfeed_participants.rb +173 -0
- data/lib/openwfe/extras/participants/atompub_participants.rb +267 -0
- data/lib/openwfe/extras/participants/basecamp_participants.rb +87 -0
- data/lib/openwfe/extras/participants/csvparticipants.rb +127 -0
- data/lib/openwfe/extras/participants/sqsparticipants.rb +125 -0
- data/lib/openwfe/extras/participants/twitterparticipants.rb +176 -0
- data/lib/openwfe/filterdef.rb +191 -191
- data/lib/openwfe/flowexpressionid.rb +271 -269
- data/lib/openwfe/listeners/listener.rb +61 -61
- data/lib/openwfe/listeners/listeners.rb +81 -81
- data/lib/openwfe/listeners/socketlisteners.rb +189 -189
- data/lib/openwfe/logging.rb +74 -74
- data/lib/openwfe/omixins.rb +55 -54
- data/lib/openwfe/orest/definitions.rb +90 -90
- data/lib/openwfe/orest/osocket.rb +91 -91
- data/lib/openwfe/orest/xmlcodec.rb +471 -459
- data/lib/openwfe/participants.rb +19 -19
- data/lib/openwfe/participants/enoparticipants.rb +187 -187
- data/lib/openwfe/participants/participant.rb +100 -100
- data/lib/openwfe/participants/participantmap.rb +170 -170
- data/lib/openwfe/participants/participants.rb +316 -316
- data/lib/openwfe/participants/soapparticipants.rb +90 -90
- data/lib/openwfe/participants/socketparticipants.rb +143 -143
- data/lib/openwfe/participants/storeparticipants.rb +198 -198
- data/lib/openwfe/rexml.rb +44 -0
- data/lib/openwfe/rudefinitions.rb +87 -91
- data/lib/openwfe/service.rb +65 -65
- data/lib/openwfe/storage/yamlcustom.rb +71 -71
- data/lib/openwfe/storage/yamlfilestorage.rb +190 -190
- data/lib/openwfe/tools/flowtracer.rb +41 -45
- data/lib/openwfe/util/dollar.rb +125 -139
- data/lib/openwfe/util/irb.rb +42 -42
- data/lib/openwfe/util/observable.rb +93 -99
- data/lib/openwfe/util/ometa.rb +36 -36
- data/lib/openwfe/util/treechecker.rb +122 -0
- data/lib/openwfe/util/workqueue.rb +73 -73
- data/lib/openwfe/util/xml.rb +285 -279
- data/lib/openwfe/utils.rb +415 -442
- data/lib/openwfe/version.rb +1 -1
- data/lib/openwfe/workitem.rb +444 -437
- data/lib/openwfe/worklist/oldrest.rb +161 -161
- data/lib/openwfe/worklist/storelocks.rb +218 -218
- data/lib/openwfe/worklist/storeparticipant.rb +19 -19
- data/lib/openwfe/worklist/worklist.rb +223 -223
- data/test/back_0916_test.rb +57 -59
- data/test/bm/bm_1_xml_vs_prog.rb +25 -22
- data/test/bm/bm_2_step.rb +81 -81
- data/test/bm/ft_0f_5ms.rb +13 -13
- data/test/bm/ft_26_load.rb +177 -179
- data/test/bm/ft_26b_load.rb +57 -59
- data/test/bm/ft_26c_load.rb +70 -65
- data/test/bm/ft_recu.rb +51 -51
- data/test/clone_test.rb +145 -99
- data/test/concurrence_test.rb +41 -41
- data/test/condition_test.rb +104 -90
- data/test/description_test.rb +46 -45
- data/test/eno_test.rb +36 -36
- data/test/expmap_test.rb +26 -26
- data/test/extras/README.txt +5 -0
- data/test/extras/active_connection.rb +48 -0
- data/test/extras/active_with_engine_test.rb +140 -0
- data/test/extras/activityfeed_test.rb +85 -0
- data/test/extras/ap_0_test.rb +287 -0
- data/test/extras/ap_1_test.rb +53 -0
- data/test/extras/ap_test_base.rb +24 -0
- data/test/extras/atomfeedp_test.rb +113 -0
- data/test/extras/atompubp_test.rb +91 -0
- data/test/extras/basecamp_test.rb +53 -0
- data/test/extras/db_errorjournal_utest.rb +75 -0
- data/test/extras/db_expstorage_utest.rb +171 -0
- data/test/extras/db_history_0_test.rb +58 -0
- data/test/extras/ft_19_csv.rb +58 -0
- data/test/extras/ft_71_b14008.rb +85 -0
- data/test/extras/sqs_test.rb +57 -0
- data/test/extras/twitter_test.rb +62 -0
- data/test/fe_lookup_att_test.rb +41 -41
- data/test/fei_test.rb +131 -131
- data/test/file_persisted_engine_test.rb +30 -30
- data/test/file_persistence_test.rb +112 -111
- data/test/filep_cancel_test.rb +58 -58
- data/test/filter_test.rb +67 -67
- data/test/flowtestbase.rb +207 -219
- data/test/ft_0.rb +35 -35
- data/test/ft_0b_sequence.rb +15 -15
- data/test/ft_0c_testname.rb +12 -12
- data/test/ft_0d_participant.rb +9 -9
- data/test/ft_0e_multibody.rb +11 -11
- data/test/ft_10_loop.rb +103 -104
- data/test/ft_11_ppd.rb +285 -289
- data/test/ft_11b_ppd.rb +26 -26
- data/test/ft_12_blockparticipant.rb +57 -57
- data/test/ft_13_eno.rb +31 -31
- data/test/ft_14_subprocess.rb +45 -45
- data/test/ft_14b_subprocess.rb +107 -107
- data/test/ft_14c_subprocess.rb +33 -33
- data/test/ft_15_iterator.rb +127 -127
- data/test/ft_15b_iterator.rb +41 -41
- data/test/ft_16_fqv.rb +44 -44
- data/test/ft_17_condition.rb +48 -48
- data/test/ft_18_pname.rb +26 -26
- data/test/ft_1_unset.rb +140 -140
- data/test/ft_1b_unset.rb +17 -17
- data/test/ft_20_cron.rb +33 -33
- data/test/ft_21_cron.rb +51 -51
- data/test/ft_21b_cron_pause.rb +41 -41
- data/test/ft_22_history.rb +45 -41
- data/test/ft_23_when.rb +51 -51
- data/test/ft_23b_when.rb +43 -43
- data/test/ft_23c_wait.rb +48 -48
- data/test/ft_23d_cww.rb +28 -28
- data/test/ft_24_def.rb +15 -15
- data/test/ft_25_cancel.rb +57 -54
- data/test/ft_27_getflowpos.rb +79 -83
- data/test/ft_28_fileparticipant.rb +25 -25
- data/test/ft_29_httprb.rb +57 -57
- data/test/ft_2_concurrence.rb +99 -97
- data/test/ft_2b_concurrence.rb +132 -132
- data/test/ft_2c_concurrence.rb +37 -37
- data/test/ft_30_socketlistener.rb +133 -133
- data/test/ft_31_flowname.rb +15 -16
- data/test/ft_32_journal.rb +48 -48
- data/test/ft_32c_journal.rb +54 -54
- data/test/ft_32d_journal.rb +43 -46
- data/test/ft_33_description.rb +62 -62
- data/test/ft_34_cancelwfid.rb +37 -37
- data/test/ft_35_localdefs.rb +36 -34
- data/test/ft_36_subprocids.rb +61 -61
- data/test/ft_37_pnames.rb +33 -33
- data/test/ft_38_tag.rb +82 -82
- data/test/ft_38b_tag.rb +97 -97
- data/test/ft_38c_tag.rb +50 -50
- data/test/ft_38d_tag.rb +53 -0
- data/test/ft_39_reserve.rb +33 -33
- data/test/ft_39b_reserve.rb +59 -59
- data/test/ft_3_equals.rb +131 -131
- data/test/ft_3b_lookup_vf.rb +43 -43
- data/test/ft_40_defined.rb +33 -33
- data/test/ft_41_case.rb +80 -80
- data/test/ft_42_environments.rb +48 -48
- data/test/ft_43_pat10.rb +51 -51
- data/test/ft_44_save.rb +37 -37
- data/test/ft_44b_restore.rb +151 -151
- data/test/ft_45_citerator.rb +149 -149
- data/test/ft_45b_citerator.rb +77 -0
- data/test/ft_46_pparams.rb +27 -27
- data/test/ft_47_filter.rb +100 -100
- data/test/ft_48_fe_filter.rb +41 -41
- data/test/ft_49_condition.rb +101 -94
- data/test/ft_4_misc.rb +185 -190
- data/test/ft_50_xml_attribute.rb +101 -104
- data/test/ft_51_stack.rb +30 -30
- data/test/ft_52_obs_participant.rb +73 -73
- data/test/ft_53_null_noop_participant.rb +31 -31
- data/test/ft_54_listen.rb +183 -183
- data/test/ft_54b_listen.rb +32 -32
- data/test/ft_54c_listen.rb +60 -60
- data/test/ft_55_ptimeout.rb +29 -30
- data/test/ft_56_timeout.rb +29 -29
- data/test/ft_57_a.rb +105 -102
- data/test/ft_58_ejournal.rb +83 -80
- data/test/ft_58b_ejournal.rb +82 -0
- data/test/ft_59_ps.rb +148 -86
- data/test/ft_5_time.rb +77 -77
- data/test/ft_60_ecancel.rb +98 -98
- data/test/ft_61_elsub.rb +23 -23
- data/test/ft_62_procparticipant.rb +46 -46
- data/test/ft_63_pause.rb +82 -69
- data/test/ft_64_alias.rb +56 -57
- data/test/ft_65_stringlaunch.rb +29 -29
- data/test/ft_66_subforget.rb +42 -42
- data/test/ft_67_schedlaunch.rb +58 -59
- data/test/ft_68_ifparticipant.rb +39 -39
- data/test/ft_69_cancelmissing.rb +23 -21
- data/test/ft_6_lambda.rb +37 -37
- data/test/ft_70_lookupvar.rb +25 -25
- data/test/ft_71_log.rb +35 -35
- data/test/ft_72_lookup_processes.rb +43 -40
- data/test/ft_73_cancel_sub.rb +79 -79
- data/test/ft_74_block_and_workitem_dup.rb +42 -42
- data/test/ft_75_ruby_attributes.rb +53 -51
- data/test/ft_76_merge_isolate.rb +57 -57
- data/test/ft_77_segments.rb +13 -13
- data/test/ft_78_eval.rb +94 -94
- data/test/ft_79_tticket.rb +79 -79
- data/test/ft_79b_tticket.rb +73 -73
- data/test/ft_79c_outcome.rb +36 -36
- data/test/ft_7_lose.rb +73 -73
- data/test/ft_7b_lose.rb +49 -49
- data/test/ft_80_spname.rb +65 -65
- data/test/ft_81_exp.rb +30 -30
- data/test/ft_82_trecu.rb +30 -24
- data/test/ft_83_badpause.rb +35 -35
- data/test/ft_84_updateexp.rb +118 -118
- data/test/ft_84b_subrepr.rb +72 -0
- data/test/ft_85_dolhash.rb +18 -18
- data/test/ft_86_dollar_fv.rb +33 -33
- data/test/ft_87_define.rb +47 -47
- data/test/ft_88_http.rb +100 -0
- data/test/ft_8_forget.rb +25 -25
- data/test/ft_9_cursor.rb +119 -110
- data/test/ft_9b_cursor.rb +70 -70
- data/test/ft_tests.rb +6 -0
- data/test/hash_test.rb +52 -34
- data/test/hparticipant_test.rb +92 -88
- data/test/lookup_att_test.rb +70 -70
- data/test/lookup_vf_test.rb +52 -52
- data/test/misc_test.rb +55 -51
- data/test/obs_test.rb +82 -82
- data/test/param_test.rb +181 -181
- data/test/participant_test.rb +46 -46
- data/test/pending.rb +12 -12
- data/test/ps_representation.rb +70 -70
- data/test/rake_ltest.rb +2 -2
- data/test/rake_qtest.rb +11 -11
- data/test/raw_prog_test.rb +303 -308
- data/test/restart_cron_test.rb +74 -74
- data/test/restart_paused_test.rb +52 -47
- data/test/restart_sleep_test.rb +80 -80
- data/test/restart_when_test.rb +64 -64
- data/test/ruby_procdef_test.rb +71 -71
- data/test/rutest_utils.rb +32 -32
- data/test/sec_test.rb +143 -142
- data/test/slock_test.rb +41 -41
- data/test/storage_test.rb +15 -15
- data/test/timeout_test.rb +53 -53
- data/test/treechecker_test.rb +111 -0
- data/test/util_xml_test.rb +57 -57
- data/test/wfid_test.rb +93 -93
- data/test/wi_test.rb +58 -58
- metadata +64 -19
- data/examples/scheduler_cron_usage.rb +0 -48
- data/examples/scheduler_usage.rb +0 -56
- data/lib/openwfe/orest/controlclient.rb +0 -119
- data/lib/openwfe/orest/oldrestservlet.rb +0 -279
- data/lib/openwfe/orest/restclient.rb +0 -176
- data/lib/openwfe/orest/workitem.rb +0 -206
- data/lib/openwfe/orest/worklistclient.rb +0 -272
- data/test/bm/ft_26d_load.rb +0 -97
- data/test/ft_59b_ps_for_pat.rb +0 -58
- data/test/ft_64_clone.rb +0 -69
- data/test/orest_test.rb +0 -251
@@ -43,150 +43,150 @@ require 'openwfe/expressions/fe_sequence'
|
|
43
43
|
|
44
44
|
module OpenWFE
|
45
45
|
|
46
|
+
#
|
47
|
+
# The <process-definition> expression.
|
48
|
+
#
|
49
|
+
# <process-definition name="myprocess" revision="2">
|
50
|
+
# <sequence>
|
51
|
+
# <participant ref="alpha" />
|
52
|
+
# <subprocess ref="sub0" />
|
53
|
+
# </sequence>
|
54
|
+
# <process-definition name="sub0">
|
55
|
+
# <participant ref="bravo" />
|
56
|
+
# </process-definition>
|
57
|
+
# </process-definition>
|
58
|
+
#
|
59
|
+
# In a Ruby process definition :
|
60
|
+
#
|
61
|
+
# class Test0 < OpenWFE::ProcessDefinition
|
62
|
+
#
|
63
|
+
# sequence do
|
64
|
+
# sub0
|
65
|
+
# sub1
|
66
|
+
# sub2
|
67
|
+
# sub3
|
68
|
+
# end
|
69
|
+
#
|
70
|
+
# process_definition :name => "sub0" do
|
71
|
+
# _print "sub0"
|
72
|
+
# end
|
73
|
+
# define :name => "sub1" do
|
74
|
+
# _print "sub1"
|
75
|
+
# end
|
76
|
+
# process_definition "sub2" do
|
77
|
+
# _print "sub2"
|
78
|
+
# end
|
79
|
+
# define "sub3" do
|
80
|
+
# _print "sub3"
|
81
|
+
# end
|
82
|
+
# end
|
83
|
+
#
|
84
|
+
# It is most often used with its "process-definition" name, but "define"
|
85
|
+
# and "workflow-definition" are accepted as well.
|
86
|
+
#
|
87
|
+
class DefineExpression < SequenceExpression
|
88
|
+
|
89
|
+
is_definition
|
90
|
+
|
91
|
+
names :define, :process_definition, :workflow_definition
|
92
|
+
|
46
93
|
#
|
47
|
-
#
|
48
|
-
#
|
49
|
-
# <process-definition name="myprocess" revision="2">
|
50
|
-
# <sequence>
|
51
|
-
# <participant ref="alpha" />
|
52
|
-
# <subprocess ref="sub0" />
|
53
|
-
# </sequence>
|
54
|
-
# <process-definition name="sub0">
|
55
|
-
# <participant ref="bravo" />
|
56
|
-
# </process-definition>
|
57
|
-
# </process-definition>
|
58
|
-
#
|
59
|
-
# In a Ruby process definition :
|
60
|
-
#
|
61
|
-
# class Test0 < OpenWFE::ProcessDefinition
|
94
|
+
# A pointer to the body expression of this process definition.
|
62
95
|
#
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
#
|
67
|
-
#
|
68
|
-
# end
|
96
|
+
attr_accessor :body_fei
|
97
|
+
|
98
|
+
#--
|
99
|
+
# Evaluates the definition, but doesn't apply its body, will
|
100
|
+
# simply return the body fei.
|
69
101
|
#
|
70
|
-
#
|
71
|
-
#
|
72
|
-
#
|
73
|
-
#
|
74
|
-
#
|
75
|
-
|
76
|
-
|
77
|
-
# _print "sub2"
|
78
|
-
# end
|
79
|
-
# define "sub3" do
|
80
|
-
# _print "sub3"
|
81
|
-
# end
|
82
|
-
# end
|
102
|
+
#def evaluate (workitem)
|
103
|
+
# @eval_only = true
|
104
|
+
# apply workitem
|
105
|
+
# @body_fei
|
106
|
+
#end
|
107
|
+
#++
|
108
|
+
|
83
109
|
#
|
84
|
-
#
|
85
|
-
#
|
110
|
+
# Called at the end of the 'evaluation', the 'apply' operation on
|
111
|
+
# the body of the definition is done here.
|
86
112
|
#
|
87
|
-
|
88
|
-
|
89
|
-
is_definition
|
90
|
-
|
91
|
-
names :define, :process_definition, :workflow_definition
|
92
|
-
|
93
|
-
#
|
94
|
-
# A pointer to the body expression of this process definition.
|
95
|
-
#
|
96
|
-
attr_accessor :body_fei
|
97
|
-
|
98
|
-
#--
|
99
|
-
# Evaluates the definition, but doesn't apply its body, will
|
100
|
-
# simply return the body fei.
|
101
|
-
#
|
102
|
-
#def evaluate (workitem)
|
103
|
-
# @eval_only = true
|
104
|
-
# apply workitem
|
105
|
-
# @body_fei
|
106
|
-
#end
|
107
|
-
#++
|
113
|
+
def reply_to_parent (workitem)
|
108
114
|
|
109
|
-
|
110
|
-
# Called at the end of the 'evaluation', the 'apply' operation on
|
111
|
-
# the body of the definition is done here.
|
112
|
-
#
|
113
|
-
def reply_to_parent (workitem)
|
115
|
+
#return if @eval_only
|
114
116
|
|
115
|
-
|
117
|
+
#puts "/// \n bf #{@body_fei} \n wi.fei #{workitem.fei}"
|
116
118
|
|
117
|
-
|
119
|
+
return super(workitem) \
|
120
|
+
if @body_fei == nil or @body_fei == workitem.fei
|
121
|
+
#unless @body_fei
|
118
122
|
|
119
|
-
|
120
|
-
|
121
|
-
|
123
|
+
#_fei = @body_fei
|
124
|
+
#@body_fei = nil
|
125
|
+
#store_itself
|
126
|
+
#get_expression_pool.apply _fei, workitem
|
122
127
|
|
123
|
-
|
124
|
-
|
125
|
-
#store_itself
|
126
|
-
#get_expression_pool.apply _fei, workitem
|
127
|
-
|
128
|
-
get_expression_pool.apply @body_fei, workitem
|
129
|
-
end
|
128
|
+
get_expression_pool.apply @body_fei, workitem
|
129
|
+
end
|
130
130
|
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
131
|
+
#
|
132
|
+
# Overrides the set_variable in FlowExpression to
|
133
|
+
# make sure to intercept requests for binding subprocesses
|
134
|
+
# at the engine level and to store a copy of the raw expression,
|
135
|
+
# not only the flow expression id.
|
136
|
+
#
|
137
|
+
def set_variable (name, fei)
|
138
138
|
|
139
|
-
|
139
|
+
if name[0, 2] == "//"
|
140
140
|
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
141
|
+
raw_exp = get_expression_pool.fetch_expression(fei).dup
|
142
|
+
raw_exp.parent_id = nil
|
143
|
+
raw_exp.fei = raw_exp.fei.dup
|
144
|
+
fei = raw_exp.fei
|
145
|
+
fei.wfid = get_wfid_generator.generate
|
146
146
|
|
147
|
-
|
148
|
-
|
147
|
+
raw_exp.store_itself
|
148
|
+
end
|
149
149
|
|
150
|
-
|
151
|
-
|
150
|
+
super name, fei
|
151
|
+
end
|
152
152
|
|
153
|
-
|
153
|
+
protected
|
154
154
|
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
155
|
+
#
|
156
|
+
# Determines the flowExpressionId of the next child to apply.
|
157
|
+
#
|
158
|
+
def next_child (current_fei)
|
159
159
|
|
160
|
-
|
160
|
+
next_fei = super
|
161
161
|
|
162
|
-
|
162
|
+
return nil unless next_fei
|
163
163
|
|
164
|
-
|
164
|
+
rawchild = get_expression_pool.fetch_expression next_fei
|
165
165
|
|
166
|
-
|
166
|
+
return next_child(next_fei) unless rawchild
|
167
167
|
|
168
|
-
|
168
|
+
unless rawchild.is_definition?
|
169
169
|
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
170
|
+
unless @body_fei
|
171
|
+
@body_fei = next_fei
|
172
|
+
store_itself
|
173
|
+
end
|
174
|
+
return next_child(next_fei)
|
175
|
+
end
|
176
176
|
|
177
|
-
|
177
|
+
exp_class = get_expression_map.get_class rawchild
|
178
178
|
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
179
|
+
if exp_class == DefineExpression
|
180
|
+
set_variable rawchild.definition_name, next_fei
|
181
|
+
return next_child(next_fei)
|
182
|
+
end
|
183
183
|
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
184
|
+
next_fei
|
185
|
+
#
|
186
|
+
# expression is a 'set', a 'filter-definition' or
|
187
|
+
# something like that, let it get applied
|
188
|
+
end
|
189
|
+
end
|
190
190
|
|
191
191
|
end
|
192
192
|
|
@@ -2,31 +2,31 @@
|
|
2
2
|
#--
|
3
3
|
# Copyright (c) 2007-2008, John Mettraux, OpenWFE.org
|
4
4
|
# All rights reserved.
|
5
|
-
#
|
6
|
-
# Redistribution and use in source and binary forms, with or without
|
5
|
+
#
|
6
|
+
# Redistribution and use in source and binary forms, with or without
|
7
7
|
# modification, are permitted provided that the following conditions are met:
|
8
|
-
#
|
8
|
+
#
|
9
9
|
# . Redistributions of source code must retain the above copyright notice, this
|
10
|
-
# list of conditions and the following disclaimer.
|
11
|
-
#
|
12
|
-
# . Redistributions in binary form must reproduce the above copyright notice,
|
13
|
-
# this list of conditions and the following disclaimer in the documentation
|
10
|
+
# list of conditions and the following disclaimer.
|
11
|
+
#
|
12
|
+
# . Redistributions in binary form must reproduce the above copyright notice,
|
13
|
+
# this list of conditions and the following disclaimer in the documentation
|
14
14
|
# and/or other materials provided with the distribution.
|
15
|
-
#
|
15
|
+
#
|
16
16
|
# . Neither the name of the "OpenWFE" nor the names of its contributors may be
|
17
17
|
# used to endorse or promote products derived from this software without
|
18
18
|
# specific prior written permission.
|
19
|
-
#
|
20
|
-
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
21
|
-
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
22
|
-
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
23
|
-
# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
24
|
-
# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
25
|
-
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
26
|
-
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
27
|
-
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
28
|
-
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
29
|
-
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
19
|
+
#
|
20
|
+
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
21
|
+
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
22
|
+
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
23
|
+
# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
24
|
+
# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
25
|
+
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
26
|
+
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
27
|
+
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
28
|
+
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
29
|
+
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
30
30
|
# POSSIBILITY OF SUCH DAMAGE.
|
31
31
|
#++
|
32
32
|
#
|
@@ -47,122 +47,122 @@ require 'openwfe/expressions/flowexpression'
|
|
47
47
|
|
48
48
|
module OpenWFE
|
49
49
|
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
50
|
+
#
|
51
|
+
# Every expression in OpenWFEru accepts a 'tag' attribute. This tag
|
52
|
+
# can later be referenced by an 'undo' or 'redo' expression.
|
53
|
+
# Tags are active as soon as an expression is applied and they vanish
|
54
|
+
# when the expression replies to its parent expression or is cancelled.
|
55
|
+
#
|
56
|
+
# Calling for the undo of a non-existent tag throws no error, the flow
|
57
|
+
# simply resumes.
|
58
|
+
#
|
59
|
+
# concurrence do
|
60
|
+
# sequence :tag => "side_job" do
|
61
|
+
# participant "alice"
|
62
|
+
# participant "bob"
|
63
|
+
# end
|
64
|
+
# sequence do
|
65
|
+
# participant "charly"
|
66
|
+
# undo :ref => "side_job"
|
67
|
+
# end
|
68
|
+
# end
|
69
|
+
#
|
70
|
+
# In this example, as soon as the participant charly is over, the sequence
|
71
|
+
# 'side_job' gets undone (cancelled). If the sequence 'side_job' was
|
72
|
+
# already over, the "undo" will have no effect.
|
73
|
+
#
|
74
|
+
class UndoExpression < FlowExpression
|
75
|
+
|
76
|
+
names :undo
|
77
|
+
|
78
|
+
def apply (workitem)
|
79
|
+
|
80
|
+
tag = lookup_tag(workitem)
|
81
|
+
|
82
|
+
undo_self = false
|
83
|
+
|
84
|
+
if tag
|
85
|
+
#OpenWFE::call_in_thread(fei.expression_name, self) do
|
86
|
+
process_tag tag
|
87
|
+
#end
|
75
88
|
|
76
|
-
|
89
|
+
undo_self = tag.fei.ancestor_of?(@fei)
|
90
|
+
end
|
77
91
|
|
78
|
-
|
92
|
+
reply_to_parent(workitem) unless undo_self
|
93
|
+
end
|
79
94
|
|
80
|
-
|
95
|
+
#
|
96
|
+
# Calls the expression pool cancel() method upon the tagged
|
97
|
+
# expression.
|
98
|
+
#
|
99
|
+
def process_tag (tag)
|
81
100
|
|
82
|
-
|
101
|
+
ldebug do
|
102
|
+
"process_tag() #{fei.to_debug_s} to undo #{tag.fei.to_debug_s}"
|
103
|
+
end
|
83
104
|
|
84
|
-
|
85
|
-
|
86
|
-
process_tag tag
|
87
|
-
#end
|
105
|
+
#get_expression_pool.cancel_and_reply_to_parent(
|
106
|
+
# tag.raw_expression.fei, tag.workitem)
|
88
107
|
|
89
|
-
|
90
|
-
end
|
108
|
+
exp = get_expression_pool.fetch_expression(tag.raw_expression.fei)
|
91
109
|
|
92
|
-
|
93
|
-
end
|
110
|
+
get_expression_pool.cancel(tag.raw_expression.fei)
|
94
111
|
|
112
|
+
get_expression_pool.reply_to_parent(exp, tag.workitem, false)
|
95
113
|
#
|
96
|
-
#
|
97
|
-
# expression
|
98
|
-
|
99
|
-
def process_tag (tag)
|
100
|
-
|
101
|
-
ldebug do
|
102
|
-
"process_tag() #{fei.to_debug_s} to undo #{tag.fei.to_debug_s}"
|
103
|
-
end
|
104
|
-
|
105
|
-
#get_expression_pool.cancel_and_reply_to_parent(
|
106
|
-
# tag.raw_expression.fei, tag.workitem)
|
107
|
-
|
108
|
-
exp = get_expression_pool.fetch_expression(tag.raw_expression.fei)
|
109
|
-
|
110
|
-
get_expression_pool.cancel(tag.raw_expression.fei)
|
111
|
-
|
112
|
-
get_expression_pool.reply_to_parent(exp, tag.workitem, false)
|
113
|
-
#
|
114
|
-
# 'remove' is set to false, cancel already removed the
|
115
|
-
# expression
|
116
|
-
end
|
114
|
+
# 'remove' is set to false, cancel already removed the
|
115
|
+
# expression
|
116
|
+
end
|
117
117
|
|
118
|
-
|
119
|
-
|
118
|
+
#def reply (workitem)
|
119
|
+
#end
|
120
120
|
|
121
|
-
|
121
|
+
protected
|
122
122
|
|
123
|
-
|
123
|
+
def lookup_tag (workitem)
|
124
124
|
|
125
|
-
|
125
|
+
tagname = lookup_attribute :ref, workitem
|
126
126
|
|
127
|
-
|
127
|
+
tag = lookup_variable tagname
|
128
128
|
|
129
|
-
|
130
|
-
|
129
|
+
lwarn { "lookup_tag() no tag named '#{tagname}' found" } \
|
130
|
+
unless tag
|
131
131
|
|
132
|
-
|
133
|
-
|
134
|
-
|
132
|
+
tag
|
133
|
+
end
|
134
|
+
end
|
135
135
|
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
136
|
+
#
|
137
|
+
# Every expression in OpenWFEru accepts a 'tag' attribute. This tag
|
138
|
+
# can later be referenced by an 'undo' or 'redo' expression.
|
139
|
+
#
|
140
|
+
# Calling for the undo of a non-existent tag throws no error, the flow
|
141
|
+
# simply resumes.
|
142
|
+
#
|
143
|
+
class RedoExpression < UndoExpression
|
144
144
|
|
145
|
-
|
145
|
+
names :redo
|
146
146
|
|
147
|
-
|
147
|
+
def process_tag (tag)
|
148
148
|
|
149
|
-
|
150
|
-
|
151
|
-
|
149
|
+
ldebug do
|
150
|
+
"process_tag() #{fei.to_debug_s} to redo #{tag.fei.to_debug_s}"
|
151
|
+
end
|
152
152
|
|
153
|
-
|
154
|
-
|
153
|
+
#
|
154
|
+
# cancel
|
155
155
|
|
156
|
-
|
156
|
+
get_expression_pool.cancel(tag.fei)
|
157
157
|
|
158
|
-
|
159
|
-
|
158
|
+
#
|
159
|
+
# [re]apply
|
160
160
|
|
161
|
-
|
161
|
+
tag.raw_expression.application_context = @application_context
|
162
162
|
|
163
|
-
|
164
|
-
end
|
163
|
+
get_expression_pool.apply tag.raw_expression, tag.workitem
|
165
164
|
end
|
165
|
+
end
|
166
166
|
|
167
167
|
end
|
168
168
|
|