ruote 0.9.19 → 0.9.20
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 +16 -6
- data/examples/engine_template.rb +6 -43
- data/examples/quickstart.rb +87 -0
- data/examples/quotereporter.rb +42 -49
- data/examples/simple.rb +56 -0
- data/lib/openwfe.rb +20 -34
- data/lib/openwfe/contextual.rb +45 -36
- data/lib/openwfe/def.rb +21 -30
- data/lib/openwfe/engine.rb +17 -26
- data/lib/openwfe/engine/engine.rb +132 -397
- data/lib/openwfe/engine/expool_methods.rb +34 -122
- data/lib/openwfe/engine/file_persisted_engine.rb +39 -60
- data/lib/openwfe/engine/fs_engine.rb +54 -0
- data/lib/openwfe/engine/launch_methods.rb +245 -0
- data/lib/openwfe/engine/listener_methods.rb +128 -0
- data/lib/openwfe/engine/lookup_methods.rb +156 -0
- data/lib/openwfe/engine/participant_methods.rb +60 -52
- data/lib/openwfe/engine/status_methods.rb +102 -97
- data/lib/openwfe/engine/tc_engine.rb +55 -0
- data/lib/openwfe/engine/tt_engine.rb +55 -0
- data/lib/openwfe/engine/update_exp_methods.rb +46 -39
- data/lib/openwfe/expool/def_parser.rb +196 -0
- data/lib/openwfe/expool/errorjournal.rb +51 -219
- data/lib/openwfe/expool/errors.rb +69 -0
- data/lib/openwfe/expool/expool_pause_methods.rb +32 -43
- data/lib/openwfe/expool/expressionpool.rb +398 -594
- data/lib/openwfe/expool/expstorage.rb +68 -72
- data/lib/openwfe/expool/fs_expstorage.rb +302 -0
- data/lib/openwfe/expool/history.rb +54 -38
- data/lib/openwfe/expool/journal.rb +24 -38
- data/lib/openwfe/expool/journal_replay.rb +20 -36
- data/lib/openwfe/expool/representation.rb +62 -78
- data/lib/openwfe/expool/tc_expstorage.rb +239 -0
- data/lib/openwfe/expool/{threadedexpstorage.rb → threaded_expstorage.rb} +25 -53
- data/lib/openwfe/expool/tt_expstorage.rb +55 -0
- data/lib/openwfe/expool/wfidgen.rb +23 -43
- data/lib/openwfe/expool/yaml_errorjournal.rb +187 -0
- data/lib/openwfe/expressions/condition.rb +33 -58
- data/lib/openwfe/expressions/environment.rb +62 -76
- data/lib/openwfe/expressions/{expressionmap.rb → expression_map.rb} +40 -54
- data/lib/openwfe/expressions/expression_tree.rb +265 -0
- data/lib/openwfe/expressions/fe_cancel.rb +19 -39
- data/lib/openwfe/expressions/fe_command.rb +80 -84
- data/lib/openwfe/expressions/fe_concurrence.rb +250 -313
- data/lib/openwfe/expressions/fe_cron.rb +38 -55
- data/lib/openwfe/expressions/fe_cursor.rb +49 -74
- data/lib/openwfe/expressions/fe_define.rb +44 -90
- data/lib/openwfe/expressions/fe_do.rb +83 -70
- data/lib/openwfe/expressions/fe_equals.rb +17 -35
- data/lib/openwfe/expressions/fe_error.rb +103 -0
- data/lib/openwfe/expressions/fe_filter.rb +27 -44
- data/lib/openwfe/expressions/fe_filter_definition.rb +37 -54
- data/lib/openwfe/expressions/fe_fqv.rb +46 -65
- data/lib/openwfe/expressions/fe_http.rb +17 -31
- data/lib/openwfe/expressions/fe_if.rb +39 -55
- data/lib/openwfe/expressions/fe_iterator.rb +25 -42
- data/lib/openwfe/expressions/fe_listen.rb +71 -115
- data/lib/openwfe/expressions/fe_losfor.rb +34 -43
- data/lib/openwfe/expressions/fe_misc.rb +70 -109
- data/lib/openwfe/expressions/fe_participant.rb +61 -99
- data/lib/openwfe/expressions/fe_reserve.rb +28 -59
- data/lib/openwfe/expressions/fe_save.rb +62 -81
- data/lib/openwfe/expressions/fe_sequence.rb +45 -70
- data/lib/openwfe/expressions/fe_set.rb +22 -40
- data/lib/openwfe/expressions/fe_step.rb +22 -37
- data/lib/openwfe/expressions/fe_subprocess.rb +34 -55
- data/lib/openwfe/expressions/fe_timeout.rb +28 -44
- data/lib/openwfe/expressions/fe_wait.rb +142 -36
- data/lib/openwfe/expressions/fe_when.rb +22 -46
- data/lib/openwfe/expressions/filter.rb +24 -43
- data/lib/openwfe/expressions/flowexpression.rb +211 -192
- data/lib/openwfe/expressions/iterator.rb +24 -39
- data/lib/openwfe/expressions/merge.rb +30 -52
- data/lib/openwfe/expressions/raw.rb +168 -384
- data/lib/openwfe/expressions/rprocdef.rb +79 -76
- data/lib/openwfe/expressions/time.rb +89 -103
- data/lib/openwfe/expressions/timeout.rb +98 -92
- data/lib/openwfe/expressions/value.rb +43 -69
- data/lib/openwfe/extras/engine/ar_engine.rb +58 -0
- data/lib/openwfe/extras/engine/db_persisted_engine.rb +37 -57
- data/lib/openwfe/extras/engine/dm_engine.rb +59 -0
- data/lib/openwfe/extras/expool/ar_expstorage.rb +337 -0
- data/lib/openwfe/extras/expool/db_errorjournal.rb +165 -0
- data/lib/openwfe/extras/expool/db_expstorage.rb +73 -0
- data/lib/openwfe/extras/expool/db_history.rb +163 -0
- data/lib/openwfe/extras/expool/dm_expstorage.rb +327 -0
- data/lib/openwfe/extras/listeners/jabber_listeners.rb +102 -0
- data/lib/openwfe/extras/listeners/jabberlisteners.rb +26 -0
- data/lib/openwfe/extras/listeners/sqs_listeners.rb +128 -0
- data/lib/openwfe/extras/misc/activityfeed.rb +19 -34
- data/lib/openwfe/extras/misc/jabber_common.rb +122 -0
- data/lib/openwfe/extras/participants/active_participants.rb +724 -0
- data/lib/openwfe/extras/participants/active_resource_participants.rb +213 -0
- data/lib/openwfe/extras/participants/activeparticipants.rb +1 -747
- data/lib/openwfe/extras/participants/ar_participants.rb +285 -0
- data/lib/openwfe/extras/participants/atomfeed_participants.rb +19 -34
- data/lib/openwfe/extras/participants/atompub_participants.rb +19 -34
- data/lib/openwfe/extras/participants/basecamp_participants.rb +17 -31
- data/lib/openwfe/extras/participants/{csvparticipants.rb → decision_participants.rb} +17 -31
- data/lib/openwfe/extras/participants/jabber_participants.rb +147 -0
- data/lib/openwfe/extras/participants/jabberparticipants.rb +3 -0
- data/lib/openwfe/extras/participants/sqs_participants.rb +108 -0
- data/lib/openwfe/extras/participants/{twitterparticipants.rb → twitter_participants.rb} +20 -34
- data/lib/openwfe/extras/singlecon.rb +56 -0
- data/lib/openwfe/filterdef.rb +83 -65
- data/lib/openwfe/flowexpressionid.rb +99 -62
- data/lib/openwfe/listeners/listener.rb +54 -65
- data/lib/openwfe/listeners/listeners.rb +52 -56
- data/lib/openwfe/logging.rb +17 -31
- data/lib/openwfe/omixins.rb +25 -58
- data/lib/openwfe/participants.rb +1 -34
- data/lib/openwfe/participants/{enoparticipants.rb → mail_participants.rb} +33 -47
- data/lib/openwfe/participants/participant.rb +37 -36
- data/lib/openwfe/participants/participant_map.rb +245 -0
- data/lib/openwfe/participants/participants.rb +43 -69
- data/lib/openwfe/participants/{soapparticipants.rb → soap_participants.rb} +22 -36
- data/lib/openwfe/participants/{storeparticipants.rb → store_participants.rb} +57 -62
- data/lib/openwfe/{storage/yamlfilestorage.rb → participants/yaml_filestorage.rb} +35 -64
- data/lib/openwfe/representations.rb +770 -0
- data/lib/openwfe/rudefinitions.rb +17 -29
- data/lib/openwfe/service.rb +21 -32
- data/lib/openwfe/tools/flowtracer.rb +21 -35
- data/lib/openwfe/util/dollar.rb +48 -61
- data/lib/openwfe/util/irb.rb +19 -34
- data/lib/openwfe/util/json.rb +55 -0
- data/lib/openwfe/util/observable.rb +22 -41
- data/lib/openwfe/util/ometa.rb +21 -35
- data/lib/openwfe/util/treechecker.rb +17 -31
- data/lib/openwfe/util/workqueue.rb +45 -44
- data/lib/openwfe/util/xml.rb +80 -234
- data/lib/openwfe/utils.rb +67 -110
- data/lib/openwfe/version.rb +19 -27
- data/lib/openwfe/workitem.rb +119 -84
- data/lib/openwfe/worklist/storelocks.rb +17 -33
- data/lib/openwfe/worklist/storeparticipant.rb +1 -39
- data/lib/openwfe/worklist/worklist.rb +17 -31
- data/lib/pooltool.ru +311 -0
- data/test/{extras/active_connection.rb → ar_test_connection.rb} +26 -11
- data/test/bm/fatxml.rb +70 -0
- data/test/bm/load_26c.rb +79 -0
- data/test/dm_test_connection.rb +11 -0
- data/test/extras/base.rb +3 -0
- data/test/extras/et_0_sqs.rb +37 -0
- data/test/extras/et_jabber_test.rb +226 -0
- data/test/extras/test.rb +16 -0
- data/test/functional/base.rb +198 -0
- data/test/functional/db_ft_0_ar_participants.rb +136 -0
- data/test/functional/eft_0_process_definition.rb +34 -0
- data/test/functional/eft_10_unset.rb +60 -0
- data/test/functional/eft_11_sleep.rb +95 -0
- data/test/functional/eft_12_wait.rb +57 -0
- data/test/functional/eft_13_cursor.rb +139 -0
- data/test/functional/eft_14_loop.rb +36 -0
- data/test/functional/eft_15_undo.rb +77 -0
- data/test/functional/eft_16_redo.rb +88 -0
- data/test/functional/eft_1_print.rb +57 -0
- data/test/functional/eft_2_sequence.rb +47 -0
- data/test/functional/eft_3_equals.rb +98 -0
- data/test/functional/eft_4_if.rb +96 -0
- data/test/functional/eft_5_eval.rb +89 -0
- data/test/functional/eft_6_reval.rb +101 -0
- data/test/functional/eft_7_exp.rb +47 -0
- data/test/functional/eft_8_log.rb +50 -0
- data/test/functional/eft_9_set.rb +132 -0
- data/test/functional/engine_helper.rb +122 -0
- data/test/functional/ft_0_vars_at_launch.rb +27 -0
- data/test/functional/ft_1_process_status.rb +46 -0
- data/test/functional/ft_2_file_listener.rb +45 -0
- data/test/functional/ft_3_on_cancel.rb +171 -0
- data/test/functional/ft_4_on_error.rb +220 -0
- data/test/functional/ft_5_process_uri.rb +82 -0
- data/test/functional/ft_6_process_status.rb +62 -0
- data/test/functional/ft_7_parameters.rb +103 -0
- data/test/functional/ft_8_dollar.rb +53 -0
- data/test/functional/ft_9_register_participants.rb +119 -0
- data/test/functional/restart_base.rb +43 -0
- data/test/functional/rft_0_sleep.rb +76 -0
- data/test/functional/test.rb +24 -0
- data/test/path_helper.rb +12 -0
- data/test/test.rb +11 -1
- data/test/{rutest_utils.rb → test_helper.rb} +8 -31
- data/test/unit/test.rb +19 -0
- data/test/{fei_test.rb → unit/ut_0_fei.rb} +34 -49
- data/test/unit/ut_10_lookup_attribute.rb +86 -0
- data/test/unit/ut_11_filter.rb +124 -0
- data/test/{condition_test.rb → unit/ut_12_conditional.rb} +33 -40
- data/test/unit/ut_13_xmlutil.rb +57 -0
- data/test/unit/ut_14_var_field_lookup.rb +85 -0
- data/test/{fe_lookup_att_test.rb → unit/ut_15_fe_att_lookup.rb} +14 -21
- data/test/{storage_test.rb → unit/ut_16_expstorage_findexp.rb} +3 -9
- data/test/unit/ut_17_representations.rb +330 -0
- data/test/{hash_test.rb → unit/ut_17b_representations_hash.rb} +25 -21
- data/test/{slock_test.rb → unit/ut_18_store_lock.rb} +17 -20
- data/test/{wfid_test.rb → unit/ut_1_wfid.rb} +2 -73
- data/test/unit/ut_2_utils.rb +53 -0
- data/test/unit/ut_3_expmap.rb +65 -0
- data/test/{clone_test.rb → unit/ut_4_fulldup.rb} +41 -46
- data/test/{obs_test.rb → unit/ut_5_observable.rb} +9 -19
- data/test/unit/ut_6_treechecker.rb +101 -0
- data/test/unit/ut_7_parser_ruby.rb +344 -0
- data/test/unit/ut_7b_parser_ruby.rb +56 -0
- data/test/{description_test.rb → unit/ut_8_parser_description.rb} +8 -19
- data/test/unit/ut_9_workitem.rb +72 -0
- metadata +117 -234
- data/lib/openwfe/exceptions.rb +0 -51
- data/lib/openwfe/expool/parser.rb +0 -278
- data/lib/openwfe/expool/paused_error.rb +0 -77
- data/lib/openwfe/expool/yamlexpstorage.rb +0 -224
- data/lib/openwfe/expressions/fe_sleep.rb +0 -173
- data/lib/openwfe/extras/expool/dberrorjournal.rb +0 -189
- data/lib/openwfe/extras/expool/dbexpstorage.rb +0 -355
- data/lib/openwfe/extras/expool/dbhistory.rb +0 -135
- data/lib/openwfe/extras/listeners/sqslisteners.rb +0 -146
- data/lib/openwfe/extras/participants/sqsparticipants.rb +0 -125
- data/lib/openwfe/listeners/socketlisteners.rb +0 -272
- data/lib/openwfe/orest/definitions.rb +0 -113
- data/lib/openwfe/orest/osocket.rb +0 -148
- data/lib/openwfe/orest/xmlcodec.rb +0 -682
- data/lib/openwfe/participants/participantmap.rb +0 -249
- data/lib/openwfe/participants/socketparticipants.rb +0 -202
- data/lib/openwfe/storage/yamlcustom.rb +0 -106
- data/lib/openwfe/worklist/oldrest.rb +0 -244
- data/test/README.txt +0 -27
- data/test/back_0916_test.rb +0 -109
- data/test/bm/bm_1_xml_vs_prog.rb +0 -59
- data/test/bm/bm_2_step.rb +0 -109
- data/test/bm/ft_0f_5ms.rb +0 -35
- data/test/bm/ft_26_load.rb +0 -208
- data/test/bm/ft_26b_load.rb +0 -84
- data/test/bm/ft_26c_load.rb +0 -102
- data/test/bm/ft_recu.rb +0 -71
- data/test/concurrence_test.rb +0 -77
- data/test/console_test.rb +0 -12
- data/test/cron_ltest.rb +0 -15
- data/test/eno_test.rb +0 -76
- data/test/expmap_test.rb +0 -54
- data/test/expool_20031219_0916.tgz +0 -0
- data/test/extras/README.txt +0 -5
- data/test/extras/active_with_engine_test.rb +0 -140
- data/test/extras/activityfeed_test.rb +0 -85
- data/test/extras/ap_0_test.rb +0 -287
- data/test/extras/ap_1_test.rb +0 -53
- data/test/extras/ap_test_base.rb +0 -24
- data/test/extras/atomfeedp_test.rb +0 -113
- data/test/extras/atompubp_test.rb +0 -91
- data/test/extras/basecamp_test.rb +0 -53
- data/test/extras/db_errorjournal_utest.rb +0 -75
- data/test/extras/db_expstorage_utest.rb +0 -171
- data/test/extras/db_history_0_test.rb +0 -58
- data/test/extras/ft_19_csv.rb +0 -58
- data/test/extras/ft_71_b14008.rb +0 -85
- data/test/extras/sqs_test.rb +0 -57
- data/test/extras/twitter_test.rb +0 -62
- data/test/file_persisted_engine_test.rb +0 -64
- data/test/file_persistence_test.rb +0 -135
- data/test/filep_cancel_test.rb +0 -123
- data/test/filter_test.rb +0 -109
- data/test/flowtestbase.rb +0 -339
- data/test/ft_0.rb +0 -68
- data/test/ft_0b_sequence.rb +0 -36
- data/test/ft_0c_testname.rb +0 -33
- data/test/ft_0d_participant.rb +0 -30
- data/test/ft_0e_multibody.rb +0 -34
- data/test/ft_10_loop.rb +0 -133
- data/test/ft_11_ppd.rb +0 -411
- data/test/ft_11b_ppd.rb +0 -54
- data/test/ft_12_blockparticipant.rb +0 -97
- data/test/ft_13_eno.rb +0 -52
- data/test/ft_14_subprocess.rb +0 -88
- data/test/ft_14b_subprocess.rb +0 -192
- data/test/ft_14c_subprocess.rb +0 -68
- data/test/ft_15_iterator.rb +0 -216
- data/test/ft_15b_iterator.rb +0 -74
- data/test/ft_16_fqv.rb +0 -73
- data/test/ft_17_condition.rb +0 -84
- data/test/ft_18_pname.rb +0 -56
- data/test/ft_1_unset.rb +0 -175
- data/test/ft_1b_unset.rb +0 -39
- data/test/ft_20_cron.rb +0 -53
- data/test/ft_21_cron.rb +0 -87
- data/test/ft_21b_cron_pause.rb +0 -82
- data/test/ft_22_history.rb +0 -78
- data/test/ft_23_when.rb +0 -77
- data/test/ft_23b_when.rb +0 -70
- data/test/ft_23c_wait.rb +0 -80
- data/test/ft_23d_cww.rb +0 -58
- data/test/ft_24_def.rb +0 -44
- data/test/ft_25_cancel.rb +0 -92
- data/test/ft_27_getflowpos.rb +0 -143
- data/test/ft_28_fileparticipant.rb +0 -63
- data/test/ft_29_httprb.rb +0 -106
- data/test/ft_2_concurrence.rb +0 -137
- data/test/ft_2b_concurrence.rb +0 -188
- data/test/ft_2c_concurrence.rb +0 -64
- data/test/ft_30_socketlistener.rb +0 -203
- data/test/ft_31_flowname.rb +0 -39
- data/test/ft_32_journal.rb +0 -91
- data/test/ft_32c_journal.rb +0 -102
- data/test/ft_32d_journal.rb +0 -81
- data/test/ft_33_description.rb +0 -107
- data/test/ft_34_cancelwfid.rb +0 -80
- data/test/ft_35_localdefs.rb +0 -77
- data/test/ft_36_subprocids.rb +0 -97
- data/test/ft_37_pnames.rb +0 -70
- data/test/ft_38_tag.rb +0 -127
- data/test/ft_38b_tag.rb +0 -161
- data/test/ft_38c_tag.rb +0 -100
- data/test/ft_38d_tag.rb +0 -53
- data/test/ft_39_reserve.rb +0 -63
- data/test/ft_39b_reserve.rb +0 -84
- data/test/ft_3_equals.rb +0 -170
- data/test/ft_3b_lookup_vf.rb +0 -83
- data/test/ft_40_defined.rb +0 -61
- data/test/ft_41_case.rb +0 -110
- data/test/ft_42_environments.rb +0 -75
- data/test/ft_43_pat10.rb +0 -85
- data/test/ft_44_save.rb +0 -70
- data/test/ft_44b_restore.rb +0 -212
- data/test/ft_45_citerator.rb +0 -214
- data/test/ft_45b_citerator.rb +0 -77
- data/test/ft_46_pparams.rb +0 -62
- data/test/ft_47_filter.rb +0 -160
- data/test/ft_48_fe_filter.rb +0 -88
- data/test/ft_49_condition.rb +0 -133
- data/test/ft_4_misc.rb +0 -232
- data/test/ft_50_xml_attribute.rb +0 -152
- data/test/ft_51_stack.rb +0 -55
- data/test/ft_52_obs_participant.rb +0 -123
- data/test/ft_53_null_noop_participant.rb +0 -62
- data/test/ft_54_listen.rb +0 -288
- data/test/ft_54b_listen.rb +0 -66
- data/test/ft_54c_listen.rb +0 -99
- data/test/ft_55_ptimeout.rb +0 -58
- data/test/ft_56_timeout.rb +0 -59
- data/test/ft_57_a.rb +0 -148
- data/test/ft_58_ejournal.rb +0 -154
- data/test/ft_58b_ejournal.rb +0 -82
- data/test/ft_59_ps.rb +0 -212
- data/test/ft_5_time.rb +0 -118
- data/test/ft_60_ecancel.rb +0 -161
- data/test/ft_61_elsub.rb +0 -51
- data/test/ft_62_procparticipant.rb +0 -71
- data/test/ft_63_pause.rb +0 -137
- data/test/ft_64_alias.rb +0 -101
- data/test/ft_65_stringlaunch.rb +0 -59
- data/test/ft_66_subforget.rb +0 -70
- data/test/ft_67_schedlaunch.rb +0 -115
- data/test/ft_68_ifparticipant.rb +0 -70
- data/test/ft_69_cancelmissing.rb +0 -53
- data/test/ft_6_lambda.rb +0 -64
- data/test/ft_70_lookupvar.rb +0 -55
- data/test/ft_71_log.rb +0 -60
- data/test/ft_72_lookup_processes.rb +0 -79
- data/test/ft_73_cancel_sub.rb +0 -139
- data/test/ft_74_block_and_workitem_dup.rb +0 -63
- data/test/ft_75_ruby_attributes.rb +0 -89
- data/test/ft_76_merge_isolate.rb +0 -88
- data/test/ft_77_segments.rb +0 -35
- data/test/ft_78_eval.rb +0 -150
- data/test/ft_79_tticket.rb +0 -187
- data/test/ft_79b_tticket.rb +0 -172
- data/test/ft_79c_outcome.rb +0 -56
- data/test/ft_7_lose.rb +0 -104
- data/test/ft_7b_lose.rb +0 -78
- data/test/ft_80_spname.rb +0 -91
- data/test/ft_81_exp.rb +0 -60
- data/test/ft_82_trecu.rb +0 -52
- data/test/ft_83_badpause.rb +0 -58
- data/test/ft_84_updateexp.rb +0 -198
- data/test/ft_84b_subrepr.rb +0 -72
- data/test/ft_85_dolhash.rb +0 -43
- data/test/ft_86_dollar_fv.rb +0 -68
- data/test/ft_87_define.rb +0 -74
- data/test/ft_88_http.rb +0 -100
- data/test/ft_8_forget.rb +0 -44
- data/test/ft_9_cursor.rb +0 -154
- data/test/ft_9b_cursor.rb +0 -105
- data/test/ft_tests.rb +0 -130
- data/test/hparticipant_test.rb +0 -168
- data/test/lookup_att_test.rb +0 -90
- data/test/lookup_vf_test.rb +0 -94
- data/test/misc_test.rb +0 -94
- data/test/nut_0_irb.rb +0 -20
- data/test/param_test.rb +0 -290
- data/test/participant_test.rb +0 -101
- data/test/pending.rb +0 -23
- data/test/ps_representation.rb +0 -133
- data/test/rake_ltest.rb +0 -38
- data/test/rake_qtest.rb +0 -68
- data/test/raw_prog_test.rb +0 -407
- data/test/restart_cron_test.rb +0 -136
- data/test/restart_paused_test.rb +0 -103
- data/test/restart_sleep_test.rb +0 -140
- data/test/restart_tests.rb +0 -18
- data/test/restart_when_test.rb +0 -112
- data/test/ruby_procdef_test.rb +0 -132
- data/test/sec_test.rb +0 -206
- data/test/timeout_test.rb +0 -105
- data/test/treechecker_test.rb +0 -111
- data/test/util_xml_test.rb +0 -112
- data/test/wi_test.rb +0 -75
@@ -1,41 +1,26 @@
|
|
1
|
-
#
|
2
1
|
#--
|
3
|
-
# Copyright (c) 2007-
|
4
|
-
# All rights reserved.
|
5
|
-
#
|
6
|
-
# Redistribution and use in source and binary forms, with or without
|
7
|
-
# modification, are permitted provided that the following conditions are met:
|
2
|
+
# Copyright (c) 2007-2009, John Mettraux, jmettraux@gmail.com
|
8
3
|
#
|
9
|
-
#
|
10
|
-
#
|
4
|
+
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
5
|
+
# of this software and associated documentation files (the "Software"), to deal
|
6
|
+
# in the Software without restriction, including without limitation the rights
|
7
|
+
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
8
|
+
# copies of the Software, and to permit persons to whom the Software is
|
9
|
+
# furnished to do so, subject to the following conditions:
|
11
10
|
#
|
12
|
-
#
|
13
|
-
#
|
14
|
-
# and/or other materials provided with the distribution.
|
11
|
+
# The above copyright notice and this permission notice shall be included in
|
12
|
+
# all copies or substantial portions of the Software.
|
15
13
|
#
|
16
|
-
#
|
17
|
-
#
|
18
|
-
#
|
14
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
15
|
+
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
16
|
+
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
17
|
+
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
18
|
+
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
19
|
+
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
20
|
+
# THE SOFTWARE.
|
19
21
|
#
|
20
|
-
#
|
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
|
-
# POSSIBILITY OF SUCH DAMAGE.
|
22
|
+
# Made in Japan.
|
31
23
|
#++
|
32
|
-
#
|
33
|
-
|
34
|
-
#
|
35
|
-
# "made in Japan"
|
36
|
-
#
|
37
|
-
# John Mettraux at openwfe.org
|
38
|
-
#
|
39
24
|
|
40
25
|
|
41
26
|
module OpenWFE
|
@@ -47,8 +32,8 @@ module OpenWFE
|
|
47
32
|
#
|
48
33
|
class Iterator
|
49
34
|
|
50
|
-
ITERATOR_COUNT =
|
51
|
-
ITERATOR_POSITION =
|
35
|
+
ITERATOR_COUNT = '__ic__'
|
36
|
+
ITERATOR_POSITION = '__ip__'
|
52
37
|
|
53
38
|
attr_accessor :iteration_index
|
54
39
|
attr_accessor :iteration_list
|
@@ -113,7 +98,7 @@ module OpenWFE
|
|
113
98
|
#
|
114
99
|
def next (workitem)
|
115
100
|
|
116
|
-
position_at
|
101
|
+
position_at(workitem, @iteration_index)
|
117
102
|
end
|
118
103
|
|
119
104
|
#
|
@@ -121,7 +106,7 @@ module OpenWFE
|
|
121
106
|
#
|
122
107
|
def rewind (workitem)
|
123
108
|
|
124
|
-
position_at
|
109
|
+
position_at(workitem, 0)
|
125
110
|
end
|
126
111
|
|
127
112
|
#
|
@@ -137,7 +122,7 @@ module OpenWFE
|
|
137
122
|
index
|
138
123
|
end
|
139
124
|
|
140
|
-
position_at
|
125
|
+
position_at(workitem, index)
|
141
126
|
end
|
142
127
|
|
143
128
|
#
|
@@ -145,7 +130,7 @@ module OpenWFE
|
|
145
130
|
#
|
146
131
|
def skip (workitem, offset)
|
147
132
|
|
148
|
-
jump
|
133
|
+
jump(workitem, @iteration_index + offset)
|
149
134
|
end
|
150
135
|
|
151
136
|
#
|
@@ -168,7 +153,7 @@ module OpenWFE
|
|
168
153
|
|
169
154
|
value = @iteration_list[position]
|
170
155
|
|
171
|
-
return nil
|
156
|
+
return nil if (value == nil)
|
172
157
|
|
173
158
|
if @to_field
|
174
159
|
workitem.attributes[@to_field] = value
|
@@ -1,41 +1,27 @@
|
|
1
|
-
#
|
2
1
|
#--
|
3
|
-
# Copyright (c) 2007-
|
4
|
-
#
|
5
|
-
#
|
6
|
-
#
|
7
|
-
#
|
8
|
-
#
|
9
|
-
#
|
10
|
-
#
|
11
|
-
#
|
12
|
-
#
|
13
|
-
#
|
14
|
-
#
|
15
|
-
#
|
16
|
-
#
|
17
|
-
#
|
18
|
-
#
|
19
|
-
#
|
20
|
-
#
|
21
|
-
#
|
22
|
-
#
|
23
|
-
#
|
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
|
-
# POSSIBILITY OF SUCH DAMAGE.
|
2
|
+
# Copyright (c) 2007-2009, John Mettraux, jmettraux@gmail.com
|
3
|
+
#
|
4
|
+
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
5
|
+
# of this software and associated documentation files (the "Software"), to deal
|
6
|
+
# in the Software without restriction, including without limitation the rights
|
7
|
+
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
8
|
+
# copies of the Software, and to permit persons to whom the Software is
|
9
|
+
# furnished to do so, subject to the following conditions:
|
10
|
+
#
|
11
|
+
# The above copyright notice and this permission notice shall be included in
|
12
|
+
# all copies or substantial portions of the Software.
|
13
|
+
#
|
14
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
15
|
+
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
16
|
+
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
17
|
+
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
18
|
+
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
19
|
+
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
20
|
+
# THE SOFTWARE.
|
21
|
+
#
|
22
|
+
# Made in Japan.
|
31
23
|
#++
|
32
|
-
#
|
33
24
|
|
34
|
-
#
|
35
|
-
# "made in Japan"
|
36
|
-
#
|
37
|
-
# John Mettraux at openwfe.org
|
38
|
-
#
|
39
25
|
|
40
26
|
require 'openwfe/utils'
|
41
27
|
|
@@ -53,30 +39,22 @@ module OpenWFE
|
|
53
39
|
#
|
54
40
|
# Returns the resulting (merged) workitem.
|
55
41
|
#
|
56
|
-
def merge_workitems (
|
42
|
+
def merge_workitems (wi_target, wi_source, override=false)
|
57
43
|
|
58
|
-
return
|
59
|
-
return
|
44
|
+
return wi_source unless wi_target
|
45
|
+
return wi_target unless wi_source
|
60
46
|
|
61
|
-
return
|
47
|
+
return wi_source if override
|
62
48
|
|
63
|
-
|
64
|
-
#puts "merge() source : " + wiSource.attributes.inspect
|
65
|
-
#puts "merge() target : " + wiTarget.attributes.inspect
|
49
|
+
wi_source.attributes.each do |k, v|
|
66
50
|
|
67
|
-
|
51
|
+
nk = OpenWFE.fulldup(k)
|
52
|
+
nv = OpenWFE.fulldup(v)
|
68
53
|
|
69
|
-
|
70
|
-
|
71
|
-
nk = OpenWFE::fulldup k
|
72
|
-
nv = OpenWFE::fulldup v
|
73
|
-
|
74
|
-
wiTarget.attributes[nk] = nv
|
54
|
+
wi_target.attributes[nk] = nv
|
75
55
|
end
|
76
56
|
|
77
|
-
|
78
|
-
|
79
|
-
wiTarget
|
57
|
+
wi_target
|
80
58
|
end
|
81
59
|
end
|
82
60
|
|
@@ -1,45 +1,30 @@
|
|
1
|
-
#
|
2
1
|
#--
|
3
|
-
# Copyright (c) 2006-
|
4
|
-
# All rights reserved.
|
5
|
-
#
|
6
|
-
# Redistribution and use in source and binary forms, with or without
|
7
|
-
# modification, are permitted provided that the following conditions are met:
|
2
|
+
# Copyright (c) 2006-2009, John Mettraux, jmettraux@gmail.com
|
8
3
|
#
|
9
|
-
#
|
10
|
-
#
|
4
|
+
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
5
|
+
# of this software and associated documentation files (the "Software"), to deal
|
6
|
+
# in the Software without restriction, including without limitation the rights
|
7
|
+
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
8
|
+
# copies of the Software, and to permit persons to whom the Software is
|
9
|
+
# furnished to do so, subject to the following conditions:
|
11
10
|
#
|
12
|
-
#
|
13
|
-
#
|
14
|
-
# and/or other materials provided with the distribution.
|
11
|
+
# The above copyright notice and this permission notice shall be included in
|
12
|
+
# all copies or substantial portions of the Software.
|
15
13
|
#
|
16
|
-
#
|
17
|
-
#
|
18
|
-
#
|
14
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
15
|
+
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
16
|
+
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
17
|
+
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
18
|
+
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
19
|
+
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
20
|
+
# THE SOFTWARE.
|
19
21
|
#
|
20
|
-
#
|
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
|
-
# POSSIBILITY OF SUCH DAMAGE.
|
22
|
+
# Made in Japan.
|
31
23
|
#++
|
32
|
-
#
|
33
24
|
|
34
|
-
#
|
35
|
-
# "made in Japan"
|
36
|
-
#
|
37
|
-
# John Mettraux at openwfe.org
|
38
|
-
#
|
39
25
|
|
40
|
-
require 'openwfe/exceptions'
|
41
|
-
require 'openwfe/expressions/flowexpression'
|
42
26
|
require 'openwfe/rudefinitions'
|
27
|
+
require 'openwfe/expressions/flowexpression'
|
43
28
|
|
44
29
|
|
45
30
|
module OpenWFE
|
@@ -54,8 +39,7 @@ module OpenWFE
|
|
54
39
|
#
|
55
40
|
# A [static] method for creating new RawExpression instances.
|
56
41
|
#
|
57
|
-
def self.new_raw (
|
58
|
-
fei, parent_id, env_id, app_context, raw_representation)
|
42
|
+
def self.new_raw (fei, parent_id, env_id, app_context, raw_tree)
|
59
43
|
|
60
44
|
re = self.new
|
61
45
|
|
@@ -67,89 +51,24 @@ module OpenWFE
|
|
67
51
|
re.children = []
|
68
52
|
re.apply_time = nil
|
69
53
|
|
70
|
-
re.raw_representation =
|
54
|
+
re.raw_representation = raw_tree
|
71
55
|
re
|
72
56
|
end
|
73
57
|
|
74
|
-
#--
|
75
|
-
# A duplication method that duplicates everything, except
|
76
|
-
# the application context
|
77
|
-
#
|
78
|
-
#def dup
|
79
|
-
# self.class.new_raw(
|
80
|
-
# @fei.dup,
|
81
|
-
# @parent_id ? @parent_id.dup : nil,
|
82
|
-
# @environment_id ? @environment_id.dup : nil,
|
83
|
-
# @application_context,
|
84
|
-
# raw_representation)
|
85
|
-
#end
|
86
|
-
#alias :fulldup :dup
|
87
|
-
#++
|
88
|
-
|
89
|
-
def instantiate_real_expression (
|
90
|
-
workitem, exp_name=nil, exp_class=nil, attributes=nil)
|
91
|
-
|
92
|
-
exp_name ||= expression_name
|
93
|
-
exp_class ||= expression_class
|
94
|
-
|
95
|
-
raise "unknown expression '#{exp_name}'" \
|
96
|
-
unless exp_class
|
97
|
-
|
98
|
-
#ldebug do
|
99
|
-
# "instantiate_real_expression() exp_class is #{exp_class}"
|
100
|
-
#end
|
101
|
-
|
102
|
-
attributes ||= raw_representation[1]
|
103
|
-
|
104
|
-
exp = exp_class.new
|
105
|
-
exp.fei = @fei
|
106
|
-
exp.parent_id = @parent_id
|
107
|
-
exp.environment_id = @environment_id
|
108
|
-
exp.application_context = @application_context
|
109
|
-
exp.attributes = attributes
|
110
|
-
|
111
|
-
exp.raw_representation = raw_representation
|
112
|
-
exp.raw_rep_updated = raw_rep_updated
|
113
|
-
#
|
114
|
-
# keeping track of how the expression look at apply /
|
115
|
-
# instantiation time
|
116
|
-
|
117
|
-
consider_tag workitem, exp
|
118
|
-
|
119
|
-
exp.children = extract_children \
|
120
|
-
unless exp_class.uses_template?
|
121
|
-
|
122
|
-
exp
|
123
|
-
end
|
124
|
-
|
125
58
|
#
|
126
59
|
# When a raw expression is applied, it gets turned into the
|
127
60
|
# real expression which then gets applied.
|
128
61
|
#
|
129
62
|
def apply (workitem)
|
130
63
|
|
131
|
-
|
64
|
+
exp_class, val = determine_real_expression_class
|
132
65
|
|
133
|
-
expression = instantiate_real_expression(
|
134
|
-
workitem, exp_name, exp_class, attributes)
|
66
|
+
expression = instantiate_real_expression(workitem, exp_class, val)
|
135
67
|
|
136
68
|
expression.apply_time = Time.now
|
137
69
|
expression.store_itself
|
138
70
|
|
139
|
-
expression.apply
|
140
|
-
end
|
141
|
-
|
142
|
-
#
|
143
|
-
# This method is called by the expression pool when it is about
|
144
|
-
# to launch a process, it will interpret the 'parameter' statements
|
145
|
-
# in the process definition and raise an exception if the requirements
|
146
|
-
# are not met.
|
147
|
-
#
|
148
|
-
def check_parameters (workitem)
|
149
|
-
|
150
|
-
extract_parameters.each do |param|
|
151
|
-
param.check(workitem)
|
152
|
-
end
|
71
|
+
expression.apply(workitem)
|
153
72
|
end
|
154
73
|
|
155
74
|
#--
|
@@ -193,354 +112,219 @@ module OpenWFE
|
|
193
112
|
# at the attributes of an expression before it's really
|
194
113
|
# 'instantiated'.
|
195
114
|
#
|
115
|
+
# (overriden by ExpExpression)
|
116
|
+
#
|
196
117
|
def extract_attributes
|
197
118
|
|
198
119
|
raw_representation[1]
|
199
120
|
end
|
200
121
|
|
122
|
+
#
|
123
|
+
# This method is called by the expression pool when it is about
|
124
|
+
# to launch a process, it will interpret the 'parameter' statements
|
125
|
+
# in the process definition and raise an exception if the requirements
|
126
|
+
# are not met.
|
127
|
+
#
|
128
|
+
def check_parameters (workitem)
|
129
|
+
|
130
|
+
#extract_parameters.each { |param| param.check(workitem) }
|
131
|
+
ExpressionTree.check_parameters(raw_representation, workitem)
|
132
|
+
end
|
133
|
+
|
201
134
|
protected
|
202
135
|
|
203
|
-
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
#
|
208
|
-
def lookup_participant (name)
|
136
|
+
#
|
137
|
+
# Looks up a key as a variable or a participant.
|
138
|
+
#
|
139
|
+
def lookup (kind, key, underscore=false)
|
209
140
|
|
210
|
-
|
141
|
+
val = (kind == :variable) ?
|
142
|
+
lookup_variable(key) : get_participant_map.lookup_participant(key)
|
211
143
|
|
212
|
-
|
213
|
-
|
214
|
-
p = get_participant_map.lookup_participant(name)
|
215
|
-
end
|
144
|
+
return lookup(:participant, val) || lookup(:variable, val) \
|
145
|
+
if kind == :variable and val.is_a?(String) # alias lookup
|
216
146
|
|
217
|
-
|
147
|
+
return val, key if val
|
218
148
|
|
219
|
-
|
220
|
-
end
|
149
|
+
return nil if underscore
|
221
150
|
|
222
|
-
|
223
|
-
|
224
|
-
# expression, a participant or a subprocess, or nothing at all...
|
225
|
-
#
|
226
|
-
def determine_real_expression
|
227
|
-
|
228
|
-
exp_name = expression_name()
|
229
|
-
exp_class = expression_class()
|
230
|
-
var_value = lookup_variable exp_name
|
231
|
-
attributes = extract_attributes
|
232
|
-
|
233
|
-
unless var_value
|
234
|
-
#
|
235
|
-
# accomodating "sub_process_name" and "sub-process-name"
|
236
|
-
#
|
237
|
-
alt = OpenWFE::to_underscore exp_name
|
238
|
-
var_value = lookup_variable(alt) if alt != exp_name
|
239
|
-
|
240
|
-
exp_name = alt if var_value
|
241
|
-
end
|
151
|
+
lookup(kind, OpenWFE::to_underscore(key), true)
|
152
|
+
end
|
242
153
|
|
243
|
-
|
244
|
-
|
154
|
+
#
|
155
|
+
# Determines if this raw expression points to a classical
|
156
|
+
# expression, a participant or a subprocess, or nothing at all...
|
157
|
+
#
|
158
|
+
def determine_real_expression_class
|
245
159
|
|
246
|
-
|
160
|
+
exp_name = expression_name()
|
247
161
|
|
248
|
-
|
162
|
+
val, key =
|
163
|
+
lookup(:variable, exp_name) ||
|
164
|
+
expression_class() ||
|
165
|
+
lookup(:participant, exp_name)
|
166
|
+
# priority to variables
|
249
167
|
|
250
|
-
|
251
|
-
exp_name = participant_name
|
252
|
-
exp_class = ParticipantExpression
|
253
|
-
attributes['ref'] = participant_name
|
254
|
-
end
|
168
|
+
if val.is_a?(Array)
|
255
169
|
|
256
|
-
|
257
|
-
or var_value.is_a?(RawExpression)
|
170
|
+
[ SubProcessRefExpression, val ]
|
258
171
|
|
259
|
-
|
260
|
-
attributes['ref'] = exp_name
|
261
|
-
end
|
262
|
-
# else, it's a standard expression
|
172
|
+
elsif val.respond_to?(:consume)
|
263
173
|
|
264
|
-
[
|
265
|
-
end
|
174
|
+
[ ParticipantExpression, key ]
|
266
175
|
|
267
|
-
|
176
|
+
else
|
268
177
|
|
269
|
-
|
270
|
-
|
271
|
-
|
178
|
+
[ val, nil ]
|
179
|
+
end
|
180
|
+
end
|
272
181
|
|
273
|
-
|
182
|
+
def instantiate_real_expression (workitem, exp_class, val)
|
274
183
|
|
275
|
-
|
276
|
-
else
|
184
|
+
raise "unknown expression '#{expression_name}'" unless exp_class
|
277
185
|
|
278
|
-
|
186
|
+
exp = exp_class.new
|
187
|
+
exp.fei = @fei
|
188
|
+
exp.parent_id = @parent_id
|
189
|
+
exp.environment_id = @environment_id
|
190
|
+
exp.application_context = @application_context
|
191
|
+
exp.attributes = extract_attributes()
|
279
192
|
|
280
|
-
|
281
|
-
|
282
|
-
#next if cname == :description
|
193
|
+
exp.raw_representation = @raw_representation
|
194
|
+
exp.raw_rep_updated = @raw_rep_updated
|
283
195
|
|
284
|
-
|
285
|
-
|
286
|
-
|
196
|
+
consider_tag(workitem, exp)
|
197
|
+
consider_on_error(workitem, exp)
|
198
|
+
consider_on_cancel(workitem, exp)
|
287
199
|
|
288
|
-
|
200
|
+
if val
|
201
|
+
class << exp
|
202
|
+
attr_accessor :hint
|
203
|
+
end
|
204
|
+
exp.hint = val
|
205
|
+
end # later sparing a variable/participant lookup
|
289
206
|
|
290
|
-
|
291
|
-
|
207
|
+
exp
|
208
|
+
end
|
292
209
|
|
293
|
-
|
210
|
+
#
|
211
|
+
# Expressions can get tagged. Tagged expressions can easily
|
212
|
+
# be cancelled (undone) or redone.
|
213
|
+
#
|
214
|
+
def consider_tag (workitem, new_expression)
|
294
215
|
|
295
|
-
|
216
|
+
tagname = new_expression.lookup_string_attribute(:tag, workitem)
|
296
217
|
|
297
|
-
|
298
|
-
end
|
299
|
-
end
|
300
|
-
result
|
301
|
-
end
|
218
|
+
return unless tagname
|
302
219
|
|
303
|
-
|
220
|
+
#ldebug { "consider_tag() tag is '#{tagname}'" }
|
304
221
|
|
305
|
-
|
306
|
-
|
222
|
+
set_variable(tagname, Tag.new(self, workitem))
|
223
|
+
#
|
224
|
+
# keep copy of raw expression and workitem as applied
|
307
225
|
|
308
|
-
|
309
|
-
|
310
|
-
|
226
|
+
new_expression.attributes['tag'] = tagname
|
227
|
+
#
|
228
|
+
# making sure that the value of tag doesn't change anymore
|
229
|
+
end
|
311
230
|
|
312
|
-
|
313
|
-
|
231
|
+
#
|
232
|
+
# A small class wrapping a tag (a raw expression and the workitem
|
233
|
+
# it received at apply time.
|
234
|
+
#
|
235
|
+
class Tag
|
314
236
|
|
315
|
-
|
237
|
+
attr_reader :raw_expression, :workitem
|
316
238
|
|
317
|
-
|
318
|
-
|
319
|
-
attributes['match'],
|
320
|
-
attributes['default'],
|
321
|
-
attributes['type'])
|
322
|
-
end
|
323
|
-
r
|
239
|
+
def flow_expression_id
|
240
|
+
@raw_expression.fei
|
324
241
|
end
|
242
|
+
alias :fei :flow_expression_id
|
325
243
|
|
326
|
-
def
|
244
|
+
def initialize (raw_expression, workitem)
|
327
245
|
|
328
|
-
|
329
|
-
|
330
|
-
( ! child.first.is_a?(String)))
|
246
|
+
@raw_expression = raw_expression.dup
|
247
|
+
@workitem = workitem.dup
|
331
248
|
end
|
249
|
+
end
|
332
250
|
|
333
|
-
|
334
|
-
|
335
|
-
|
336
|
-
|
337
|
-
def consider_tag (workitem, new_expression)
|
338
|
-
|
339
|
-
tagname = new_expression.lookup_string_attribute :tag, workitem
|
251
|
+
#
|
252
|
+
# manages 'on-error' expression tags
|
253
|
+
#
|
254
|
+
def consider_on_error (workitem, new_expression)
|
340
255
|
|
341
|
-
|
256
|
+
on_error = new_expression.lookup_string_attribute(:on_error, workitem)
|
342
257
|
|
343
|
-
|
258
|
+
return unless on_error
|
344
259
|
|
345
|
-
|
346
|
-
#
|
347
|
-
# keep copy of raw expression and workitem as applied
|
260
|
+
on_error = on_error.to_s
|
348
261
|
|
349
|
-
|
350
|
-
#
|
351
|
-
# making sure that the value of tag doesn't change anymore
|
352
|
-
end
|
262
|
+
handlers = lookup_variable('error_handlers') || []
|
353
263
|
|
354
|
-
|
355
|
-
|
356
|
-
|
357
|
-
#
|
358
|
-
class Tag
|
264
|
+
handlers << [ fei.dup, on_error ]
|
265
|
+
# not using a hash to preserve insertion order
|
266
|
+
# "deeper last"
|
359
267
|
|
360
|
-
|
361
|
-
:raw_expression,
|
362
|
-
:workitem
|
268
|
+
set_variable('error_handlers', handlers)
|
363
269
|
|
364
|
-
|
365
|
-
|
366
|
-
|
367
|
-
|
270
|
+
new_expression.attributes['on_error'] = on_error
|
271
|
+
#
|
272
|
+
# making sure that the value of tag doesn't change anymore
|
273
|
+
end
|
368
274
|
|
369
|
-
|
275
|
+
#
|
276
|
+
# manages 'on-cancel'
|
277
|
+
#
|
278
|
+
def consider_on_cancel (workitem, new_expression)
|
370
279
|
|
371
|
-
|
372
|
-
@workitem = workitem.dup
|
373
|
-
end
|
374
|
-
end
|
280
|
+
on_cancel = new_expression.lookup_string_attribute(:on_cancel, workitem)
|
375
281
|
|
376
|
-
|
377
|
-
# Encapsulating
|
378
|
-
# <parameter field="x" default="y" type="z" match="m" />
|
379
|
-
#
|
380
|
-
# Somehow I have that : OpenWFEru is not a strongly typed language
|
381
|
-
# ... Anyway I implemented that to please Pat.
|
382
|
-
#
|
383
|
-
class Parameter
|
384
|
-
|
385
|
-
def initialize (field, match, default, type)
|
386
|
-
|
387
|
-
@field = to_s field
|
388
|
-
@match = to_s match
|
389
|
-
@default = to_s default
|
390
|
-
@type = to_s type
|
391
|
-
end
|
282
|
+
return unless on_cancel
|
392
283
|
|
284
|
+
new_expression.attributes['on_cancel'] = [ on_cancel, workitem.dup ]
|
393
285
|
#
|
394
|
-
#
|
395
|
-
#
|
286
|
+
# storing the on_cancel value (a participant name or a subprocess
|
287
|
+
# name along with a copy of the workitem as applied among the
|
288
|
+
# attributes of the new expression)
|
396
289
|
#
|
397
|
-
|
398
|
-
|
399
|
-
unless @field
|
400
|
-
raise \
|
401
|
-
OpenWFE::ParameterException,
|
402
|
-
"'parameter'/'param' without a 'field' attribute"
|
403
|
-
end
|
404
|
-
|
405
|
-
field_value = workitem.attributes[@field]
|
406
|
-
field_value = @default unless field_value
|
407
|
-
|
408
|
-
unless field_value
|
409
|
-
raise \
|
410
|
-
OpenWFE::ParameterException,
|
411
|
-
"field '#{@field}' is missing" \
|
412
|
-
end
|
413
|
-
|
414
|
-
check_match(field_value)
|
415
|
-
|
416
|
-
enforce_type(workitem, field_value)
|
417
|
-
end
|
418
|
-
|
419
|
-
protected
|
420
|
-
|
421
|
-
#
|
422
|
-
# Used in the constructor to flatten everything to strings.
|
423
|
-
#
|
424
|
-
def to_s (o)
|
425
|
-
return nil unless o
|
426
|
-
o.to_s
|
427
|
-
end
|
428
|
-
|
429
|
-
#
|
430
|
-
# Will raise an exception if it cannot coerce the type
|
431
|
-
# of the value to the one desired.
|
432
|
-
#
|
433
|
-
def enforce_type (workitem, value)
|
434
|
-
|
435
|
-
value = if not @type
|
436
|
-
value
|
437
|
-
elsif @type == "string"
|
438
|
-
value.to_s
|
439
|
-
elsif @type == "int" or @type == "integer"
|
440
|
-
Integer(value)
|
441
|
-
elsif @type == "float"
|
442
|
-
Float(value)
|
443
|
-
else
|
444
|
-
raise
|
445
|
-
"unknown type '#{@type}' for field '#{@field}'"
|
446
|
-
end
|
447
|
-
|
448
|
-
workitem.attributes[@field] = value
|
449
|
-
end
|
450
|
-
|
451
|
-
def check_match (value)
|
452
|
-
|
453
|
-
return unless @match
|
454
|
-
|
455
|
-
unless value.to_s.match(@match)
|
456
|
-
raise \
|
457
|
-
OpenWFE::ParameterException,
|
458
|
-
"value of field '#{@field}' doesn't match"
|
459
|
-
end
|
460
|
-
end
|
461
|
-
end
|
462
|
-
end
|
463
|
-
|
464
|
-
#
|
465
|
-
# This class is only present to ensure that OpenWFEru 0.9.17 can read
|
466
|
-
# previous (<= 0.9.16) expools.
|
467
|
-
#
|
468
|
-
class ProgRawExpression < RawExpression
|
469
|
-
|
470
|
-
def raw_representation
|
471
|
-
|
472
|
-
@raw_representation.to_a
|
290
|
+
# (note 'on_cancel' and not 'on-cancel' as we're specifically storing
|
291
|
+
# more info and not just the initial string value of the attribute)
|
473
292
|
end
|
474
293
|
end
|
475
294
|
|
295
|
+
private
|
296
|
+
|
476
297
|
#
|
477
|
-
#
|
478
|
-
#
|
298
|
+
# OpenWFE process definitions do use some
|
299
|
+
# Ruby keywords... The workaround is to put an underscore
|
300
|
+
# just before the name to 'escape' it.
|
479
301
|
#
|
480
|
-
|
481
|
-
|
482
|
-
|
483
|
-
|
484
|
-
|
485
|
-
|
486
|
-
|
302
|
+
# 'undo' isn't reserved by Ruby, but lets keep it in line
|
303
|
+
# with 'do' and 'redo' that are.
|
304
|
+
#
|
305
|
+
KEYWORDS = [
|
306
|
+
:if, :do, :redo, :undo, :print, :sleep, :loop, :break, :when
|
307
|
+
#:until, :while
|
308
|
+
]
|
487
309
|
|
488
310
|
#
|
489
|
-
#
|
490
|
-
#
|
311
|
+
# Ensures the method name is not conflicting with Ruby keywords
|
312
|
+
# and turn dashes to underscores.
|
491
313
|
#
|
492
|
-
|
314
|
+
def OpenWFE.make_safe (method_name)
|
493
315
|
|
494
|
-
|
495
|
-
|
496
|
-
children = @children.collect do |c|
|
497
|
-
if c.is_a?(SimpleExpRepresentation)
|
498
|
-
c.to_a
|
499
|
-
else
|
500
|
-
c
|
501
|
-
end
|
502
|
-
end
|
316
|
+
method_name = OpenWFE::to_underscore(method_name)
|
503
317
|
|
504
|
-
|
505
|
-
end
|
318
|
+
KEYWORDS.include?(method_name.to_sym) ? "_#{method_name}" : method_name
|
506
319
|
end
|
507
320
|
|
508
|
-
|
321
|
+
def OpenWFE.to_expression_name (method_name)
|
509
322
|
|
510
|
-
|
511
|
-
|
512
|
-
|
513
|
-
|
514
|
-
|
515
|
-
# 'undo' isn't reserved by Ruby, but lets keep it in line
|
516
|
-
# with 'do' and 'redo' that are.
|
517
|
-
#
|
518
|
-
KEYWORDS = [
|
519
|
-
:if, :do, :redo, :undo, :print, :sleep, :loop, :break, :when
|
520
|
-
#:until, :while
|
521
|
-
]
|
522
|
-
|
523
|
-
#
|
524
|
-
# Ensures the method name is not conflicting with Ruby keywords
|
525
|
-
# and turn dashes to underscores.
|
526
|
-
#
|
527
|
-
def OpenWFE.make_safe (method_name)
|
528
|
-
|
529
|
-
method_name = OpenWFE::to_underscore(method_name)
|
530
|
-
|
531
|
-
return "_" + method_name \
|
532
|
-
if KEYWORDS.include? eval(":"+method_name)
|
533
|
-
|
534
|
-
method_name
|
535
|
-
end
|
536
|
-
|
537
|
-
def OpenWFE.to_expression_name (method_name)
|
538
|
-
|
539
|
-
method_name = method_name.to_s
|
540
|
-
method_name = method_name[1..-1] if method_name[0, 1] == "_"
|
541
|
-
method_name = OpenWFE::to_dash(method_name)
|
542
|
-
method_name
|
543
|
-
end
|
323
|
+
method_name = method_name.to_s
|
324
|
+
method_name = method_name[1..-1] if method_name[0, 1] == '_'
|
325
|
+
method_name = OpenWFE::to_dash(method_name)
|
326
|
+
method_name
|
327
|
+
end
|
544
328
|
|
545
329
|
end
|
546
330
|
|