ruote 0.9.19 → 0.9.20
Sign up to get free protection for your applications and to get access to all the features.
- 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,113 +0,0 @@
|
|
1
|
-
#
|
2
|
-
#--
|
3
|
-
# Copyright (c) 2005-2007, John Mettraux, OpenWFE.org
|
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:
|
8
|
-
#
|
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
|
14
|
-
# and/or other materials provided with the distribution.
|
15
|
-
#
|
16
|
-
# . Neither the name of the "OpenWFE" nor the names of its contributors may be
|
17
|
-
# used to endorse or promote products derived from this software without
|
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
|
30
|
-
# POSSIBILITY OF SUCH DAMAGE.
|
31
|
-
#++
|
32
|
-
#
|
33
|
-
|
34
|
-
#
|
35
|
-
# "hecho en Costa Rica"
|
36
|
-
#
|
37
|
-
|
38
|
-
module OpenWFE
|
39
|
-
|
40
|
-
NAME = 'name'
|
41
|
-
STORE = 'store'
|
42
|
-
STORES = 'stores'
|
43
|
-
WORKITEM_COUNT = 'workitem-count'
|
44
|
-
PERMISSIONS = 'permissions'
|
45
|
-
HEADER = 'header'
|
46
|
-
HEADERS = 'headers'
|
47
|
-
A_LAST_MODIFIED = 'last-modified'
|
48
|
-
A_LOCKED = 'locked'
|
49
|
-
FLOW_EXPRESSION_ID = 'flow-expression-id'
|
50
|
-
ATTRIBUTES = 'attributes'
|
51
|
-
|
52
|
-
OWFE_VERSION = 'owfe-version'
|
53
|
-
ENGINE_ID = 'engine-id'
|
54
|
-
INITIAL_ENGINE_ID = 'initial-engine-id'
|
55
|
-
WORKFLOW_DEFINITION_URL = 'workflow-definition-url'
|
56
|
-
WORKFLOW_DEFINITION_NAME = 'workflow-definition-name'
|
57
|
-
WORKFLOW_DEFINITION_REVISION = 'workflow-definition-revision'
|
58
|
-
WORKFLOW_INSTANCE_ID = 'workflow-instance-id'
|
59
|
-
EXPRESSION_NAME = 'expression-name'
|
60
|
-
EXPRESSION_ID = 'expression-id'
|
61
|
-
|
62
|
-
E_STRING = 'string'
|
63
|
-
E_INTEGER = 'integer'
|
64
|
-
E_BOOLEAN = 'boolean'
|
65
|
-
E_LONG = 'long'
|
66
|
-
E_DOUBLE = 'double'
|
67
|
-
|
68
|
-
E_RAW_XML = 'raw-xml'
|
69
|
-
E_XML_DOCUMENT = 'xml-document'
|
70
|
-
E_BASE64 = 'base64'
|
71
|
-
|
72
|
-
E_LIST = 'list'
|
73
|
-
E_MAP = 'map'
|
74
|
-
E_SMAP = 'smap'
|
75
|
-
|
76
|
-
M_ENTRY = 'entry'
|
77
|
-
M_KEY = 'key'
|
78
|
-
M_VALUE = 'value'
|
79
|
-
|
80
|
-
MAP_TYPE = '___map_type'
|
81
|
-
|
82
|
-
FLOW_EXPRESSION_IDS = 'flow-expression-ids'
|
83
|
-
|
84
|
-
LAUNCHITEM = 'launchitem'
|
85
|
-
ENGINEID = "engineid"
|
86
|
-
OK = "ok"
|
87
|
-
A_FLOW_ID = "flow-id"
|
88
|
-
|
89
|
-
IN_FLOW_WORKITEM = 'workitem'
|
90
|
-
A_DISPATCH_TIME = 'dispatch-time'
|
91
|
-
A_PARTICIPANT_NAME = 'participant-name'
|
92
|
-
E_LAST_EXPRESSION_ID = 'last-expression-id'
|
93
|
-
|
94
|
-
#LAUNCHABLES = 'launchables'
|
95
|
-
#LAUNCHABLE = 'launchable'
|
96
|
-
URL = 'url'
|
97
|
-
|
98
|
-
TARGETSTORE = 'targetstore'
|
99
|
-
|
100
|
-
#EXPRESSIONS = 'expressions'
|
101
|
-
#EXPRESSION = 'expression'
|
102
|
-
APPLY_TIME = 'apply-time'
|
103
|
-
STATE = 'state'
|
104
|
-
STATE_SINCE = 'state-since'
|
105
|
-
|
106
|
-
#HISTORY = 'history'
|
107
|
-
#HISTORY_ITEM = 'history-item'
|
108
|
-
A_AUTHOR = 'author'
|
109
|
-
A_DATE = 'date'
|
110
|
-
A_HOST = 'host'
|
111
|
-
|
112
|
-
end
|
113
|
-
|
@@ -1,148 +0,0 @@
|
|
1
|
-
#
|
2
|
-
#--
|
3
|
-
# Copyright (c) 2006-2008, John Mettraux, OpenWFE.org
|
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:
|
8
|
-
#
|
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
|
14
|
-
# and/or other materials provided with the distribution.
|
15
|
-
#
|
16
|
-
# . Neither the name of the "OpenWFE" nor the names of its contributors may be
|
17
|
-
# used to endorse or promote products derived from this software without
|
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
|
30
|
-
# POSSIBILITY OF SUCH DAMAGE.
|
31
|
-
#++
|
32
|
-
#
|
33
|
-
|
34
|
-
require 'socket'
|
35
|
-
|
36
|
-
require 'openwfe/orest/xmlcodec'
|
37
|
-
|
38
|
-
|
39
|
-
module OpenWFE
|
40
|
-
|
41
|
-
#
|
42
|
-
# This code was blogged about at
|
43
|
-
# http://jmettraux.wordpress.com/2006/06/01/openwfe-ruby/
|
44
|
-
#
|
45
|
-
class OldSocketListener < TCPServer
|
46
|
-
|
47
|
-
#
|
48
|
-
# starts to listen on a given interface (IP) and port
|
49
|
-
#
|
50
|
-
def initialize (iface, port)
|
51
|
-
super(iface, port)
|
52
|
-
end
|
53
|
-
|
54
|
-
def listen ()
|
55
|
-
while (session = accept())
|
56
|
-
#
|
57
|
-
# how does it scale ?
|
58
|
-
|
59
|
-
s = session.gets
|
60
|
-
|
61
|
-
if s[0..8] != 'xmlCoder '
|
62
|
-
session.close
|
63
|
-
break
|
64
|
-
end
|
65
|
-
|
66
|
-
l = s[9..-1].to_i
|
67
|
-
|
68
|
-
s = session.gets
|
69
|
-
#
|
70
|
-
# skipping the empty line between the
|
71
|
-
# header and the actual workitem
|
72
|
-
|
73
|
-
sXml = ''
|
74
|
-
|
75
|
-
while sXml.length < l
|
76
|
-
s = session.gets
|
77
|
-
sXml = "#{sXml}#{s}"
|
78
|
-
end
|
79
|
-
|
80
|
-
session.print "<ok-reply/>"
|
81
|
-
session.close
|
82
|
-
|
83
|
-
yield OpenWFE.xml_decode(xml.root)
|
84
|
-
end
|
85
|
-
end
|
86
|
-
end
|
87
|
-
|
88
|
-
#
|
89
|
-
# Dispatches a workitem over TCP, the workitem will be
|
90
|
-
# encoded with XML
|
91
|
-
# The default encode_method is
|
92
|
-
#
|
93
|
-
def OpenWFE.dispatch_workitem (host, port, workitem)
|
94
|
-
|
95
|
-
#sXml = OpenWFE.xml_encode(workitem)
|
96
|
-
sXml = OpenWFE::XmlCodec::encode workitem
|
97
|
-
|
98
|
-
socket = TCPSocket.new(host, port)
|
99
|
-
socket.puts "xmlCoder #{sXml.length}"
|
100
|
-
socket.puts
|
101
|
-
socket.puts sXml
|
102
|
-
socket.puts
|
103
|
-
socket.close_write
|
104
|
-
|
105
|
-
reply = socket.gets
|
106
|
-
|
107
|
-
#reply = reply + socket.gets
|
108
|
-
#
|
109
|
-
# a bit ridiculous, but it works
|
110
|
-
# socket.close_write fixed it
|
111
|
-
|
112
|
-
socket.close
|
113
|
-
|
114
|
-
#puts "dispatch() reply is >#{reply}<"
|
115
|
-
end
|
116
|
-
|
117
|
-
end
|
118
|
-
|
119
|
-
|
120
|
-
#
|
121
|
-
# some test code
|
122
|
-
|
123
|
-
#sl = OpenWFE::OldSocketListener.new('127.0.0.1', 7010)
|
124
|
-
#
|
125
|
-
#puts "..ready.."
|
126
|
-
#
|
127
|
-
#sl.listen do |workitem|
|
128
|
-
#
|
129
|
-
# #puts workitem
|
130
|
-
# #next
|
131
|
-
#
|
132
|
-
# puts workitem.flow_expression_id
|
133
|
-
# puts "...history length : #{workitem.history.length}"
|
134
|
-
#
|
135
|
-
# #puts workitem.history
|
136
|
-
# workitem.history.each do |hi|
|
137
|
-
# puts ".....hi = '#{hi.text}' #{hi.date}"
|
138
|
-
# end
|
139
|
-
#
|
140
|
-
# #hi = OpenWFE::HistoryItem.new
|
141
|
-
# #hi.author = 'osocket.rb'
|
142
|
-
# #workitem.history.push(hi)
|
143
|
-
#
|
144
|
-
# workitem.attributes['ruby?'] = 'yes'
|
145
|
-
#
|
146
|
-
# OpenWFE.dispatch_workitem('127.0.0.1', 7007, workitem)
|
147
|
-
#end
|
148
|
-
|
@@ -1,682 +0,0 @@
|
|
1
|
-
#
|
2
|
-
#--
|
3
|
-
# Copyright (c) 2005-2008, John Mettraux, OpenWFE.org
|
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:
|
8
|
-
#
|
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
|
14
|
-
# and/or other materials provided with the distribution.
|
15
|
-
#
|
16
|
-
# . Neither the name of the "OpenWFE" nor the names of its contributors may be
|
17
|
-
# used to endorse or promote products derived from this software without
|
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
|
30
|
-
# POSSIBILITY OF SUCH DAMAGE.
|
31
|
-
#++
|
32
|
-
#
|
33
|
-
|
34
|
-
#
|
35
|
-
# "hecho en Costa Rica" (with just the PickAxe at hand)
|
36
|
-
#
|
37
|
-
|
38
|
-
require 'base64'
|
39
|
-
require 'openwfe/rexml'
|
40
|
-
|
41
|
-
require 'openwfe/utils'
|
42
|
-
require 'openwfe/workitem'
|
43
|
-
require 'openwfe/flowexpressionid'
|
44
|
-
require 'openwfe/orest/definitions'
|
45
|
-
|
46
|
-
|
47
|
-
module OpenWFE
|
48
|
-
|
49
|
-
#
|
50
|
-
# a wrapper for some binary content
|
51
|
-
#
|
52
|
-
class Base64Attribute
|
53
|
-
|
54
|
-
attr_accessor :content
|
55
|
-
|
56
|
-
def initialize (base64content)
|
57
|
-
|
58
|
-
@content = base64content
|
59
|
-
end
|
60
|
-
|
61
|
-
#
|
62
|
-
# dewraps (decode) the current content and returns it
|
63
|
-
#
|
64
|
-
def dewrap
|
65
|
-
|
66
|
-
Base64.decode64 @content
|
67
|
-
end
|
68
|
-
|
69
|
-
#
|
70
|
-
# wraps some binary content and stores it in this attribute
|
71
|
-
# (class method)
|
72
|
-
#
|
73
|
-
def self.wrap (binaryData)
|
74
|
-
|
75
|
-
Base64Attribute.new(Base64.encode64(binaryData))
|
76
|
-
end
|
77
|
-
end
|
78
|
-
|
79
|
-
#
|
80
|
-
# Ugly XML codec for OpenWFE workitems
|
81
|
-
#
|
82
|
-
# (one of the first things I wrote in Ruby...)
|
83
|
-
#
|
84
|
-
module XmlCodec
|
85
|
-
|
86
|
-
#
|
87
|
-
# Returns the first subelt of xmlElt that matches the given elt_name.
|
88
|
-
# If the name is null, the first elt will be returned.
|
89
|
-
#
|
90
|
-
def self.first_element (xml_elt, elt_name=nil)
|
91
|
-
|
92
|
-
return nil if not xml_elt
|
93
|
-
|
94
|
-
return xml_elt.elements.find { |e| e.is_a?(REXML::Element) } \
|
95
|
-
unless elt_name
|
96
|
-
|
97
|
-
xml_elt.elements.find do |e|
|
98
|
-
e.is_a?(REXML::Element) and e.name == elt_name
|
99
|
-
end
|
100
|
-
end
|
101
|
-
|
102
|
-
#
|
103
|
-
# Takes as input some XML element and returns is decoded
|
104
|
-
# (as an instance)
|
105
|
-
#
|
106
|
-
def XmlCodec.decode (xmlElt)
|
107
|
-
|
108
|
-
return nil unless xmlElt
|
109
|
-
|
110
|
-
if xmlElt.kind_of? String
|
111
|
-
|
112
|
-
xmlElt = REXML::Document.new(
|
113
|
-
xmlElt,
|
114
|
-
:compress_whitespace => :all,
|
115
|
-
:ignore_whitespace_nodes => :all)
|
116
|
-
|
117
|
-
xmlElt = xmlElt.root
|
118
|
-
end
|
119
|
-
|
120
|
-
#puts "decode() xmlElt.name is >#{xmlElt.name}<"
|
121
|
-
|
122
|
-
return decode_session_id(xmlElt) if xmlElt.name == 'session'
|
123
|
-
#return decode_list(xmlElt) if xmlElt.name == STORES
|
124
|
-
#return decode_store(xmlElt) if xmlElt.name == STORE
|
125
|
-
#return decode_list(xmlElt) if xmlElt.name == HEADERS
|
126
|
-
#return decode_header(xmlElt) if xmlElt.name == HEADER
|
127
|
-
|
128
|
-
return decode_launch_ok(xmlElt) if xmlElt.name == OK
|
129
|
-
|
130
|
-
#return decode_list(xmlElt) if xmlElt.name == HISTORY
|
131
|
-
#return decode_historyitem(xmlElt) if xmlElt.name == HISTORY_ITEM
|
132
|
-
|
133
|
-
return decode_list(xmlElt) if xmlElt.name == FLOW_EXPRESSION_IDS
|
134
|
-
return decode_fei(xmlElt) if xmlElt.name == FLOW_EXPRESSION_ID
|
135
|
-
|
136
|
-
return decode_inflowworkitem(xmlElt) \
|
137
|
-
if xmlElt.name == IN_FLOW_WORKITEM
|
138
|
-
return decode_launchitem(xmlElt) \
|
139
|
-
if xmlElt.name == LAUNCHITEM
|
140
|
-
|
141
|
-
#return decode_list(xmlElt) if xmlElt.name == LAUNCHABLES
|
142
|
-
#return decode_launchable(xmlElt) if xmlElt.name == LAUNCHABLE
|
143
|
-
|
144
|
-
#return decode_list(xmlElt) if xmlElt.name == EXPRESSIONS
|
145
|
-
#return decode_expression(xmlElt) if xmlElt.name == EXPRESSION
|
146
|
-
|
147
|
-
return decode_attribute(xmlElt.elements[1]) if xmlElt.name == ATTRIBUTES
|
148
|
-
|
149
|
-
#
|
150
|
-
# default
|
151
|
-
|
152
|
-
decode_attribute(xmlElt)
|
153
|
-
|
154
|
-
#raise \
|
155
|
-
# ArgumentError, \
|
156
|
-
# "Cannot decode : '"+xmlElt.name+"' "+xmlElt.to_s()
|
157
|
-
end
|
158
|
-
|
159
|
-
#
|
160
|
-
# Takes some OpenWFE Ruby instance and returns it as XML
|
161
|
-
#
|
162
|
-
def XmlCodec.encode (owfeData)
|
163
|
-
|
164
|
-
#puts "encode() #{owfeData.inspect}"
|
165
|
-
|
166
|
-
return encode_launchitem(owfeData) \
|
167
|
-
if owfeData.kind_of? LaunchItem
|
168
|
-
|
169
|
-
return encode_fei(owfeData) \
|
170
|
-
if owfeData.kind_of? FlowExpressionId
|
171
|
-
|
172
|
-
return encode_inflowworkitem(owfeData) \
|
173
|
-
if owfeData.kind_of? InFlowWorkItem
|
174
|
-
|
175
|
-
raise \
|
176
|
-
ArgumentError, \
|
177
|
-
"Cannot encode : "+owfeData.inspect()
|
178
|
-
end
|
179
|
-
|
180
|
-
#--
|
181
|
-
#def XmlCodec.encode_workitem_as_header (in_flow_workitem, locked)
|
182
|
-
# e = REXML::Element.new HEADER
|
183
|
-
# e.add_attribute A_LAST_MODIFIED, "#{in_flow_workitem.last_modified}"
|
184
|
-
# e.add_attribute A_LOCKED, locked
|
185
|
-
# e << XmlCodec::encode_fei(in_flow_workitem.fei)
|
186
|
-
# e << XmlCodec::encode_attributes(in_flow_workitem)
|
187
|
-
# e
|
188
|
-
#end
|
189
|
-
#++
|
190
|
-
|
191
|
-
private
|
192
|
-
|
193
|
-
#
|
194
|
-
# DECODE
|
195
|
-
#
|
196
|
-
|
197
|
-
def XmlCodec.decode_session_id (xmlElt)
|
198
|
-
Integer(xmlElt.attributes['id'])
|
199
|
-
end
|
200
|
-
|
201
|
-
def XmlCodec.decode_list (xmlElt)
|
202
|
-
xmlElt.elements.collect { |elt| decode(elt) }
|
203
|
-
end
|
204
|
-
|
205
|
-
|
206
|
-
def XmlCodec.decode_launchable (xmlElt)
|
207
|
-
|
208
|
-
launchable = Launchable.new()
|
209
|
-
|
210
|
-
launchable.url = xmlElt.attributes[URL]
|
211
|
-
launchable.engine_id = xmlElt.attributes[ENGINE_ID]
|
212
|
-
|
213
|
-
launchable
|
214
|
-
end
|
215
|
-
|
216
|
-
|
217
|
-
def XmlCodec.decode_expression (xmlElt)
|
218
|
-
|
219
|
-
exp = Expression.new()
|
220
|
-
|
221
|
-
exp.id = decode(first_element(xmlElt))
|
222
|
-
|
223
|
-
exp.apply_time = xmlElt.attributes[APPLY_TIME]
|
224
|
-
exp.state = xmlElt.attributes[STATE]
|
225
|
-
exp.state_since = xmlElt.attributes[STATE_SINCE]
|
226
|
-
|
227
|
-
exp
|
228
|
-
end
|
229
|
-
|
230
|
-
#--
|
231
|
-
#def XmlCodec.decode_store (xmlElt)
|
232
|
-
# store = Store.new()
|
233
|
-
# store.name = xmlElt.attributes[NAME]
|
234
|
-
# store.workitem_count = xmlElt.attributes[WORKITEM_COUNT]
|
235
|
-
# store.workitem_count = Integer(store.workitem_count)
|
236
|
-
# store.permissions = xmlElt.attributes[PERMISSIONS]
|
237
|
-
# store
|
238
|
-
#end
|
239
|
-
#++
|
240
|
-
|
241
|
-
#--
|
242
|
-
#def XmlCodec.decode_header (xmlElt)
|
243
|
-
# header = Header.new()
|
244
|
-
# header.last_modified = xmlElt.attributes[A_LAST_MODIFIED]
|
245
|
-
# header.locked = parse_boolean(xmlElt.attributes[A_LOCKED])
|
246
|
-
# header.flow_expression_id = decode(first_element(xmlElt, FLOW_EXPRESSION_ID))
|
247
|
-
# header.attributes = decode(first_element(xmlElt, ATTRIBUTES))
|
248
|
-
# header
|
249
|
-
#end
|
250
|
-
#++
|
251
|
-
|
252
|
-
def XmlCodec.decode_fei (xmlElt)
|
253
|
-
|
254
|
-
fei = FlowExpressionId.new
|
255
|
-
|
256
|
-
fei.owfe_version = xmlElt.attributes[OWFE_VERSION]
|
257
|
-
fei.engine_id = xmlElt.attributes[ENGINE_ID]
|
258
|
-
fei.initial_engine_id = xmlElt.attributes[INITIAL_ENGINE_ID]
|
259
|
-
|
260
|
-
fei.workflow_definition_url = xmlElt.attributes[WORKFLOW_DEFINITION_URL]
|
261
|
-
fei.workflow_definition_name = xmlElt.attributes[WORKFLOW_DEFINITION_NAME]
|
262
|
-
fei.workflow_definition_revision = xmlElt.attributes[WORKFLOW_DEFINITION_REVISION]
|
263
|
-
|
264
|
-
fei.workflow_instance_id = xmlElt.attributes[WORKFLOW_INSTANCE_ID]
|
265
|
-
|
266
|
-
fei.expression_name = xmlElt.attributes[EXPRESSION_NAME]
|
267
|
-
fei.expression_id = xmlElt.attributes[EXPRESSION_ID]
|
268
|
-
|
269
|
-
#puts " ... fei.expressionName is >#{fei.expressionName}<"
|
270
|
-
#puts " ... fei.wfid is >#{fei.workflowInstanceId}<"
|
271
|
-
|
272
|
-
fei
|
273
|
-
end
|
274
|
-
|
275
|
-
|
276
|
-
def XmlCodec.decode_attribute (xmlElt)
|
277
|
-
|
278
|
-
#puts "decodeAttribute() '#{xmlElt.name}' --> '#{xmlElt.text}'"
|
279
|
-
|
280
|
-
#
|
281
|
-
# atomic types
|
282
|
-
|
283
|
-
return xmlElt.text.strip \
|
284
|
-
if xmlElt.name == E_STRING
|
285
|
-
return Integer(xmlElt.text.strip) \
|
286
|
-
if xmlElt.name == E_INTEGER
|
287
|
-
return Integer(xmlElt.text.strip) \
|
288
|
-
if xmlElt.name == E_LONG
|
289
|
-
return Float(xmlElt.text.strip) \
|
290
|
-
if xmlElt.name == E_DOUBLE
|
291
|
-
return parse_boolean(xmlElt.text) \
|
292
|
-
if xmlElt.name == E_BOOLEAN
|
293
|
-
|
294
|
-
return decode_xmldocument(xmlElt) \
|
295
|
-
if xmlElt.name == E_XML_DOCUMENT
|
296
|
-
return xmlElt.children[0] \
|
297
|
-
if xmlElt.name == E_RAW_XML
|
298
|
-
|
299
|
-
return Base64Attribute.new(xmlElt.text) \
|
300
|
-
if xmlElt.name == E_BASE64
|
301
|
-
|
302
|
-
#
|
303
|
-
# composite types
|
304
|
-
|
305
|
-
return decode_list(xmlElt) \
|
306
|
-
if xmlElt.name == E_LIST
|
307
|
-
|
308
|
-
if xmlElt.name == E_SMAP or xmlElt.name == E_MAP
|
309
|
-
|
310
|
-
map = {}
|
311
|
-
map[MAP_TYPE] = xmlElt.name
|
312
|
-
|
313
|
-
#xmlElt.elements.each("//"+M_ENTRY) do |e|
|
314
|
-
xmlElt.elements.each(M_ENTRY) do |e|
|
315
|
-
#puts "decodeAttribute() >#{e}<"
|
316
|
-
decode_entry(e, map)
|
317
|
-
end
|
318
|
-
|
319
|
-
return map
|
320
|
-
end
|
321
|
-
|
322
|
-
#puts OpenWFE.xmldoc_to_string(xmlElt.document())
|
323
|
-
|
324
|
-
raise \
|
325
|
-
ArgumentError, \
|
326
|
-
"Cannot decode <#{xmlElt.name}/> in \n"+\
|
327
|
-
OpenWFE.xmldoc_to_string(xmlElt.document())
|
328
|
-
end
|
329
|
-
|
330
|
-
def XmlCodec.decode_xmldocument (xmlElt)
|
331
|
-
|
332
|
-
s = Base64::decode64 xmlElt.text.strip
|
333
|
-
REXML::Document.new s
|
334
|
-
end
|
335
|
-
|
336
|
-
def XmlCodec.decode_entry (xmlElt, map)
|
337
|
-
|
338
|
-
key = xmlElt.elements[1]
|
339
|
-
val = xmlElt.elements[2]
|
340
|
-
|
341
|
-
#
|
342
|
-
# this parse method supports the old style and the [new] light
|
343
|
-
# style/schema
|
344
|
-
#
|
345
|
-
|
346
|
-
key = key.elements[1] if key.name == M_KEY
|
347
|
-
val = val.elements[1] if val.name == M_VALUE
|
348
|
-
|
349
|
-
key = decode(key)
|
350
|
-
val = decode(val)
|
351
|
-
|
352
|
-
#puts "decodeEntry() k >#{key}< v >#{val}<"
|
353
|
-
#puts "decodeEntry() subject '#{val}'" if key == '__subject__'
|
354
|
-
|
355
|
-
key = key.strip if key.is_a?(String)
|
356
|
-
val = val.strip if val.is_a?(String)
|
357
|
-
|
358
|
-
map[key] = val
|
359
|
-
end
|
360
|
-
|
361
|
-
def XmlCodec.parse_boolean (string)
|
362
|
-
|
363
|
-
string.strip.downcase == 'true'
|
364
|
-
end
|
365
|
-
|
366
|
-
#--
|
367
|
-
#def XmlCodec.decode_historyitem (xmlElt)
|
368
|
-
# hi = HistoryItem.new
|
369
|
-
# hi.author = xmlElt.attributes[A_AUTHOR]
|
370
|
-
# hi.date = xmlElt.attributes[A_DATE]
|
371
|
-
# hi.host = xmlElt.attributes[A_HOST]
|
372
|
-
# hi.text = xmlElt.text
|
373
|
-
# hi.wfd_name = xmlElt.attributes[WORKFLOW_DEFINITION_NAME]
|
374
|
-
# hi.wfd_revision = xmlElt.attributes[WORKFLOW_DEFINITION_REVISION]
|
375
|
-
# hi.wf_instance_id = xmlElt.attributes[WORKFLOW_INSTANCE_ID]
|
376
|
-
# hi.expression_id = xmlElt.attributes[EXPRESSION_ID]
|
377
|
-
# hi
|
378
|
-
#end
|
379
|
-
#++
|
380
|
-
|
381
|
-
def XmlCodec.decode_launch_ok (xmlElt)
|
382
|
-
|
383
|
-
sFei = xmlElt.attributes[A_FLOW_ID]
|
384
|
-
|
385
|
-
return true unless sFei
|
386
|
-
|
387
|
-
FlowExpressionId.to_fei(sFei)
|
388
|
-
end
|
389
|
-
|
390
|
-
|
391
|
-
def XmlCodec.decode_inflowworkitem (xmlElt)
|
392
|
-
|
393
|
-
wi = InFlowWorkItem.new()
|
394
|
-
|
395
|
-
wi.last_modified = xmlElt.attributes[A_LAST_MODIFIED]
|
396
|
-
wi.attributes = decode(first_element(xmlElt, ATTRIBUTES))
|
397
|
-
|
398
|
-
wi.participant_name = xmlElt.attributes[A_PARTICIPANT_NAME]
|
399
|
-
wi.flow_expression_id = decode(first_element(first_element(xmlElt, E_LAST_EXPRESSION_ID), FLOW_EXPRESSION_ID))
|
400
|
-
|
401
|
-
wi.dispatch_time = xmlElt.attributes[A_DISPATCH_TIME]
|
402
|
-
|
403
|
-
# TODO : decode filter
|
404
|
-
|
405
|
-
#wi.history = decode(first_element(xmlElt, HISTORY))
|
406
|
-
|
407
|
-
wi
|
408
|
-
end
|
409
|
-
|
410
|
-
def XmlCodec.decode_launchitem (xmlElt)
|
411
|
-
|
412
|
-
li = LaunchItem.new
|
413
|
-
|
414
|
-
li.workflow_definition_url =
|
415
|
-
xmlElt.attributes[WORKFLOW_DEFINITION_URL]
|
416
|
-
|
417
|
-
li.attributes =
|
418
|
-
decode(first_element(xmlElt, ATTRIBUTES))
|
419
|
-
|
420
|
-
li
|
421
|
-
end
|
422
|
-
|
423
|
-
|
424
|
-
#
|
425
|
-
# ENCODE
|
426
|
-
#
|
427
|
-
|
428
|
-
|
429
|
-
def XmlCodec.encode_item (item, elt)
|
430
|
-
|
431
|
-
elt.attributes[A_LAST_MODIFIED] = item.last_modified
|
432
|
-
|
433
|
-
elt << encode_attributes(item)
|
434
|
-
end
|
435
|
-
|
436
|
-
def XmlCodec.encode_attributes (item)
|
437
|
-
|
438
|
-
eAttributes = REXML::Element.new(ATTRIBUTES)
|
439
|
-
|
440
|
-
eAttributes << encode_attribute(item.attributes)
|
441
|
-
|
442
|
-
eAttributes
|
443
|
-
end
|
444
|
-
|
445
|
-
|
446
|
-
def XmlCodec.encode_launchitem (launchitem)
|
447
|
-
|
448
|
-
doc = REXML::Document.new()
|
449
|
-
|
450
|
-
root = REXML::Element.new(LAUNCHITEM)
|
451
|
-
|
452
|
-
encode_item(launchitem, root)
|
453
|
-
|
454
|
-
root.attributes[WORKFLOW_DEFINITION_URL] = \
|
455
|
-
launchitem.workflow_definition_url
|
456
|
-
|
457
|
-
# TODO :
|
458
|
-
#
|
459
|
-
# - encode descriptionMap
|
460
|
-
#
|
461
|
-
# - replyTo is not necessary
|
462
|
-
|
463
|
-
doc << root
|
464
|
-
|
465
|
-
OpenWFE.xmldoc_to_string(doc)
|
466
|
-
end
|
467
|
-
|
468
|
-
|
469
|
-
def XmlCodec.encode_inflowitem (item, elt)
|
470
|
-
|
471
|
-
encode_item(item, elt)
|
472
|
-
|
473
|
-
elt.attributes[A_PARTICIPANT_NAME] = item.participant_name
|
474
|
-
|
475
|
-
eLastExpressionId = REXML::Element.new(E_LAST_EXPRESSION_ID)
|
476
|
-
|
477
|
-
eLastExpressionId << encode_fei(item.last_expression_id)
|
478
|
-
|
479
|
-
elt << eLastExpressionId
|
480
|
-
end
|
481
|
-
|
482
|
-
|
483
|
-
def XmlCodec.encode_inflowworkitem (item)
|
484
|
-
|
485
|
-
doc = REXML::Document.new()
|
486
|
-
|
487
|
-
root = REXML::Element.new(IN_FLOW_WORKITEM)
|
488
|
-
|
489
|
-
encode_inflowitem(item, root)
|
490
|
-
|
491
|
-
root.attributes[A_DISPATCH_TIME] = item.dispatch_time
|
492
|
-
|
493
|
-
# add filter ? no
|
494
|
-
|
495
|
-
encode_history(item, root) if item.history
|
496
|
-
|
497
|
-
doc << root
|
498
|
-
|
499
|
-
s = OpenWFE.xmldoc_to_string(doc)
|
500
|
-
#puts "encoded :\n#{s}"
|
501
|
-
s
|
502
|
-
end
|
503
|
-
|
504
|
-
#--
|
505
|
-
#def XmlCodec.encode_history (item, elt)
|
506
|
-
# eHistory = REXML::Element.new(HISTORY)
|
507
|
-
# item.history.each do |hi|
|
508
|
-
# ehi = REXML::Element.new(HISTORY_ITEM)
|
509
|
-
# ehi.attributes[A_AUTHOR] = hi.author
|
510
|
-
# ehi.attributes[A_DATE] = hi.date
|
511
|
-
# ehi.attributes[A_HOST] = hi.host
|
512
|
-
# ehi.attributes[WORKFLOW_DEFINITION_NAME] = hi.wfd_name
|
513
|
-
# ehi.attributes[WORKFLOW_DEFINITION_REVISION] = hi.wfd_revision
|
514
|
-
# ehi.attributes[WORKFLOW_INSTANCE_ID] = hi.wf_instance_id
|
515
|
-
# ehi.attributes[EXPRESSION_ID] = hi.expression_id
|
516
|
-
# eHistory << ehi
|
517
|
-
# end
|
518
|
-
# elt << eHistory
|
519
|
-
#end
|
520
|
-
#++
|
521
|
-
|
522
|
-
def XmlCodec.encode_attribute (att)
|
523
|
-
|
524
|
-
#puts "encodeAttribute() att.class is #{att.class}"
|
525
|
-
|
526
|
-
return encode_atomicattribute(E_STRING, att) \
|
527
|
-
if att.kind_of?(String)
|
528
|
-
return encode_atomicattribute(E_INTEGER, att) \
|
529
|
-
if att.kind_of?(Fixnum)
|
530
|
-
return encode_atomicattribute(E_DOUBLE, att) \
|
531
|
-
if att.kind_of?(Float)
|
532
|
-
|
533
|
-
return encode_xmldocument(att) \
|
534
|
-
if att.kind_of?(REXML::Document)
|
535
|
-
return encode_xmlattribute(att) \
|
536
|
-
if att.kind_of?(REXML::Element)
|
537
|
-
|
538
|
-
return encode_atomicattribute(E_BOOLEAN, true) \
|
539
|
-
if att.kind_of?(TrueClass)
|
540
|
-
return encode_atomicattribute(E_BOOLEAN, false) \
|
541
|
-
if att.kind_of?(FalseClass)
|
542
|
-
|
543
|
-
return encode_base64attribute(att) \
|
544
|
-
if att.kind_of?(Base64Attribute)
|
545
|
-
|
546
|
-
return encode_mapattribute(att) if att.kind_of?(Hash)
|
547
|
-
return encode_listattribute(att) if att.kind_of?(Array)
|
548
|
-
|
549
|
-
#
|
550
|
-
# default
|
551
|
-
|
552
|
-
encode_atomicattribute(E_STRING, att)
|
553
|
-
|
554
|
-
#raise \
|
555
|
-
# ArgumentError, \
|
556
|
-
# "Cannot encode attribute of class '#{att.class}'"
|
557
|
-
end
|
558
|
-
|
559
|
-
def XmlCodec.encode_xmldocument (elt)
|
560
|
-
|
561
|
-
e = REXML::Element.new(E_XML_DOCUMENT)
|
562
|
-
e.text = Base64::encode64(elt.to_s)
|
563
|
-
e
|
564
|
-
end
|
565
|
-
|
566
|
-
def XmlCodec.encode_xmlattribute (elt)
|
567
|
-
|
568
|
-
return elt if elt.name == E_RAW_XML
|
569
|
-
|
570
|
-
#
|
571
|
-
# else, wrap within <raw-xml>...</raw-xml>
|
572
|
-
|
573
|
-
e = REXML::Element.new(E_RAW_XML)
|
574
|
-
e << elt
|
575
|
-
|
576
|
-
e
|
577
|
-
end
|
578
|
-
|
579
|
-
|
580
|
-
def XmlCodec.encode_base64attribute (att)
|
581
|
-
|
582
|
-
e = REXML::Element.new(E_BASE64)
|
583
|
-
e.text = att.content
|
584
|
-
|
585
|
-
e
|
586
|
-
end
|
587
|
-
|
588
|
-
|
589
|
-
def XmlCodec.encode_atomicattribute (name, value)
|
590
|
-
|
591
|
-
elt = REXML::Element.new(name)
|
592
|
-
#elt << REXML::Text.new(value.to_s())
|
593
|
-
elt.add_text(value.to_s())
|
594
|
-
|
595
|
-
elt
|
596
|
-
end
|
597
|
-
|
598
|
-
|
599
|
-
def XmlCodec.encode_listattribute (list)
|
600
|
-
|
601
|
-
elt = REXML::Element.new(E_LIST)
|
602
|
-
|
603
|
-
list.each do |e|
|
604
|
-
elt << encode_attribute(e)
|
605
|
-
end
|
606
|
-
|
607
|
-
elt
|
608
|
-
end
|
609
|
-
|
610
|
-
|
611
|
-
def XmlCodec.encode_mapattribute (hash)
|
612
|
-
|
613
|
-
name = hash[MAP_TYPE]
|
614
|
-
name = 'map' if name == nil
|
615
|
-
|
616
|
-
elt = REXML::Element.new(name)
|
617
|
-
|
618
|
-
hash.each_key do |key|
|
619
|
-
|
620
|
-
next if key == MAP_TYPE
|
621
|
-
|
622
|
-
eEntry = REXML::Element.new(M_ENTRY)
|
623
|
-
|
624
|
-
val = hash[key]
|
625
|
-
|
626
|
-
eEntry << encode_attribute(key)
|
627
|
-
eEntry << encode_attribute(val)
|
628
|
-
|
629
|
-
elt << eEntry
|
630
|
-
end
|
631
|
-
|
632
|
-
elt
|
633
|
-
end
|
634
|
-
|
635
|
-
|
636
|
-
def XmlCodec.encode_fei (fei)
|
637
|
-
|
638
|
-
elt = REXML::Element.new(FLOW_EXPRESSION_ID)
|
639
|
-
|
640
|
-
elt.attributes[OWFE_VERSION] = fei.owfe_version
|
641
|
-
elt.attributes[ENGINE_ID] = fei.engine_id
|
642
|
-
elt.attributes[INITIAL_ENGINE_ID] = fei.initial_engine_id
|
643
|
-
|
644
|
-
elt.attributes[WORKFLOW_DEFINITION_URL] = fei.workflow_definition_url
|
645
|
-
elt.attributes[WORKFLOW_DEFINITION_NAME] = fei.workflow_definition_name
|
646
|
-
elt.attributes[WORKFLOW_DEFINITION_REVISION] = fei.workflow_definition_revision
|
647
|
-
elt.attributes[WORKFLOW_INSTANCE_ID] = fei.workflow_instance_id
|
648
|
-
|
649
|
-
elt.attributes[EXPRESSION_NAME] = fei.expression_name
|
650
|
-
elt.attributes[EXPRESSION_ID] = fei.expression_id
|
651
|
-
|
652
|
-
elt
|
653
|
-
end
|
654
|
-
end
|
655
|
-
|
656
|
-
#
|
657
|
-
# Just turns some XML to a String (if decl is set to false, no
|
658
|
-
# XML declaration will be printed).
|
659
|
-
#
|
660
|
-
def OpenWFE.xmldoc_to_string (xml, decl=true)
|
661
|
-
|
662
|
-
#return xml if xml.is_a?(String)
|
663
|
-
|
664
|
-
xml << REXML::XMLDecl.new \
|
665
|
-
if decl and (not xml[0].is_a?(REXML::XMLDecl))
|
666
|
-
|
667
|
-
#s = ""
|
668
|
-
#xml.write(s, 0)
|
669
|
-
#return s
|
670
|
-
xml.to_s
|
671
|
-
end
|
672
|
-
|
673
|
-
#
|
674
|
-
# An alias for OpenWFE::xmldoc_to_string()
|
675
|
-
#
|
676
|
-
def OpenWFE.xml_to_s (xml, decl=true)
|
677
|
-
|
678
|
-
OpenWFE::xmldoc_to_string(xml, decl)
|
679
|
-
end
|
680
|
-
|
681
|
-
end
|
682
|
-
|