ruote 0.9.18
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 +24 -0
- data/bin/validate-workflow.rb +89 -0
- data/examples/about_state.rb +81 -0
- data/examples/bigflow.rb +19 -0
- data/examples/csv_weather.rb +23 -0
- data/examples/engine_template.rb +247 -0
- data/examples/flowtracing.rb +24 -0
- data/examples/homeworkreview.rb +68 -0
- data/examples/kotoba.rb +22 -0
- data/examples/mano_tracker.rb +172 -0
- data/examples/openwferu.rb +58 -0
- data/examples/quotereporter.rb +157 -0
- data/examples/scheduler_cron_usage.rb +48 -0
- data/examples/scheduler_usage.rb +56 -0
- data/lib/openwfe.rb +41 -0
- data/lib/openwfe/contextual.rb +111 -0
- data/lib/openwfe/def.rb +46 -0
- data/lib/openwfe/engine.rb +37 -0
- data/lib/openwfe/engine/engine.rb +756 -0
- data/lib/openwfe/engine/expool_methods.rb +172 -0
- data/lib/openwfe/engine/file_persisted_engine.rb +105 -0
- data/lib/openwfe/engine/participant_methods.rb +133 -0
- data/lib/openwfe/engine/status_methods.rb +353 -0
- data/lib/openwfe/engine/update_exp_methods.rb +112 -0
- data/lib/openwfe/exceptions.rb +51 -0
- data/lib/openwfe/expool/errorjournal.rb +476 -0
- data/lib/openwfe/expool/expressionpool.rb +1144 -0
- data/lib/openwfe/expool/expstorage.rb +403 -0
- data/lib/openwfe/expool/history.rb +174 -0
- data/lib/openwfe/expool/journal.rb +224 -0
- data/lib/openwfe/expool/journal_replay.rb +321 -0
- data/lib/openwfe/expool/parser.rb +242 -0
- data/lib/openwfe/expool/representation.rb +121 -0
- data/lib/openwfe/expool/threadedexpstorage.rb +188 -0
- data/lib/openwfe/expool/wfidgen.rb +388 -0
- data/lib/openwfe/expool/yamlexpstorage.rb +224 -0
- data/lib/openwfe/expressions/condition.rb +244 -0
- data/lib/openwfe/expressions/environment.rb +246 -0
- data/lib/openwfe/expressions/expressionmap.rb +258 -0
- data/lib/openwfe/expressions/fe_cancel.rb +109 -0
- data/lib/openwfe/expressions/fe_command.rb +241 -0
- data/lib/openwfe/expressions/fe_concurrence.rb +662 -0
- data/lib/openwfe/expressions/fe_cron.rb +259 -0
- data/lib/openwfe/expressions/fe_cursor.rb +259 -0
- data/lib/openwfe/expressions/fe_define.rb +192 -0
- data/lib/openwfe/expressions/fe_do.rb +168 -0
- data/lib/openwfe/expressions/fe_equals.rb +291 -0
- data/lib/openwfe/expressions/fe_filter.rb +129 -0
- data/lib/openwfe/expressions/fe_filter_definition.rb +168 -0
- data/lib/openwfe/expressions/fe_fqv.rb +250 -0
- data/lib/openwfe/expressions/fe_if.rb +303 -0
- data/lib/openwfe/expressions/fe_iterator.rb +145 -0
- data/lib/openwfe/expressions/fe_listen.rb +371 -0
- data/lib/openwfe/expressions/fe_losfor.rb +111 -0
- data/lib/openwfe/expressions/fe_misc.rb +421 -0
- data/lib/openwfe/expressions/fe_participant.rb +269 -0
- data/lib/openwfe/expressions/fe_reserve.rb +212 -0
- data/lib/openwfe/expressions/fe_save.rb +274 -0
- data/lib/openwfe/expressions/fe_sequence.rb +117 -0
- data/lib/openwfe/expressions/fe_set.rb +139 -0
- data/lib/openwfe/expressions/fe_sleep.rb +166 -0
- data/lib/openwfe/expressions/fe_step.rb +159 -0
- data/lib/openwfe/expressions/fe_subprocess.rb +168 -0
- data/lib/openwfe/expressions/fe_timeout.rb +127 -0
- data/lib/openwfe/expressions/fe_wait.rb +78 -0
- data/lib/openwfe/expressions/fe_when.rb +142 -0
- data/lib/openwfe/expressions/filter.rb +104 -0
- data/lib/openwfe/expressions/flowexpression.rb +847 -0
- data/lib/openwfe/expressions/iterator.rb +221 -0
- data/lib/openwfe/expressions/merge.rb +84 -0
- data/lib/openwfe/expressions/raw.rb +547 -0
- data/lib/openwfe/expressions/rprocdef.rb +375 -0
- data/lib/openwfe/expressions/time.rb +333 -0
- data/lib/openwfe/expressions/timeout.rb +178 -0
- data/lib/openwfe/expressions/value.rb +126 -0
- data/lib/openwfe/filterdef.rb +259 -0
- data/lib/openwfe/flowexpressionid.rb +357 -0
- data/lib/openwfe/listeners/listener.rb +97 -0
- data/lib/openwfe/listeners/listeners.rb +139 -0
- data/lib/openwfe/listeners/socketlisteners.rb +272 -0
- data/lib/openwfe/logging.rb +122 -0
- data/lib/openwfe/omixins.rb +95 -0
- data/lib/openwfe/orest/controlclient.rb +119 -0
- data/lib/openwfe/orest/definitions.rb +113 -0
- data/lib/openwfe/orest/exception.rb +60 -0
- data/lib/openwfe/orest/oldrestservlet.rb +279 -0
- data/lib/openwfe/orest/osocket.rb +148 -0
- data/lib/openwfe/orest/restclient.rb +176 -0
- data/lib/openwfe/orest/workitem.rb +206 -0
- data/lib/openwfe/orest/worklistclient.rb +272 -0
- data/lib/openwfe/orest/xmlcodec.rb +670 -0
- data/lib/openwfe/participants.rb +38 -0
- data/lib/openwfe/participants/enoparticipants.rb +230 -0
- data/lib/openwfe/participants/participant.rb +141 -0
- data/lib/openwfe/participants/participantmap.rb +249 -0
- data/lib/openwfe/participants/participants.rb +407 -0
- data/lib/openwfe/participants/soapparticipants.rb +135 -0
- data/lib/openwfe/participants/socketparticipants.rb +202 -0
- data/lib/openwfe/participants/storeparticipants.rb +254 -0
- data/lib/openwfe/rudefinitions.rb +130 -0
- data/lib/openwfe/service.rb +103 -0
- data/lib/openwfe/storage/yamlcustom.rb +106 -0
- data/lib/openwfe/storage/yamlfilestorage.rb +245 -0
- data/lib/openwfe/tools/flowtracer.rb +81 -0
- data/lib/openwfe/util/dollar.rb +217 -0
- data/lib/openwfe/util/irb.rb +86 -0
- data/lib/openwfe/util/observable.rb +144 -0
- data/lib/openwfe/util/ometa.rb +62 -0
- data/lib/openwfe/util/workqueue.rb +124 -0
- data/lib/openwfe/util/xml.rb +418 -0
- data/lib/openwfe/utils.rb +554 -0
- data/lib/openwfe/version.rb +37 -0
- data/lib/openwfe/workitem.rb +499 -0
- data/lib/openwfe/worklist/oldrest.rb +244 -0
- data/lib/openwfe/worklist/storelocks.rb +293 -0
- data/lib/openwfe/worklist/storeparticipant.rb +44 -0
- data/lib/openwfe/worklist/worklist.rb +297 -0
- data/test/README.txt +27 -0
- data/test/back_0916_test.rb +111 -0
- data/test/bm/bm_1_xml_vs_prog.rb +56 -0
- data/test/bm/bm_2_step.rb +109 -0
- data/test/bm/ft_0f_5ms.rb +35 -0
- data/test/bm/ft_26_load.rb +210 -0
- data/test/bm/ft_26b_load.rb +86 -0
- data/test/bm/ft_26c_load.rb +97 -0
- data/test/bm/ft_26d_load.rb +97 -0
- data/test/bm/ft_recu.rb +71 -0
- data/test/clone_test.rb +122 -0
- data/test/concurrence_test.rb +77 -0
- data/test/condition_test.rb +155 -0
- data/test/console_test.rb +12 -0
- data/test/cron_ltest.rb +15 -0
- data/test/description_test.rb +87 -0
- data/test/eno_test.rb +76 -0
- data/test/expmap_test.rb +54 -0
- data/test/expool_20031219_0916.tgz +0 -0
- data/test/fe_lookup_att_test.rb +62 -0
- data/test/fei_test.rb +181 -0
- data/test/file_persisted_engine_test.rb +64 -0
- data/test/file_persistence_test.rb +134 -0
- data/test/filep_cancel_test.rb +123 -0
- data/test/filter_test.rb +109 -0
- data/test/flowtestbase.rb +351 -0
- data/test/ft_0.rb +68 -0
- data/test/ft_0b_sequence.rb +36 -0
- data/test/ft_0c_testname.rb +33 -0
- data/test/ft_0d_participant.rb +30 -0
- data/test/ft_0e_multibody.rb +34 -0
- data/test/ft_10_loop.rb +134 -0
- data/test/ft_11_ppd.rb +415 -0
- data/test/ft_11b_ppd.rb +54 -0
- data/test/ft_12_blockparticipant.rb +97 -0
- data/test/ft_13_eno.rb +52 -0
- data/test/ft_14_subprocess.rb +88 -0
- data/test/ft_14b_subprocess.rb +192 -0
- data/test/ft_14c_subprocess.rb +68 -0
- data/test/ft_15_iterator.rb +216 -0
- data/test/ft_15b_iterator.rb +74 -0
- data/test/ft_16_fqv.rb +73 -0
- data/test/ft_17_condition.rb +84 -0
- data/test/ft_18_pname.rb +56 -0
- data/test/ft_1_unset.rb +175 -0
- data/test/ft_1b_unset.rb +39 -0
- data/test/ft_20_cron.rb +53 -0
- data/test/ft_21_cron.rb +87 -0
- data/test/ft_21b_cron_pause.rb +82 -0
- data/test/ft_22_history.rb +74 -0
- data/test/ft_23_when.rb +77 -0
- data/test/ft_23b_when.rb +70 -0
- data/test/ft_23c_wait.rb +80 -0
- data/test/ft_23d_cww.rb +58 -0
- data/test/ft_24_def.rb +44 -0
- data/test/ft_25_cancel.rb +89 -0
- data/test/ft_27_getflowpos.rb +147 -0
- data/test/ft_28_fileparticipant.rb +63 -0
- data/test/ft_29_httprb.rb +106 -0
- data/test/ft_2_concurrence.rb +135 -0
- data/test/ft_2b_concurrence.rb +188 -0
- data/test/ft_2c_concurrence.rb +64 -0
- data/test/ft_30_socketlistener.rb +203 -0
- data/test/ft_31_flowname.rb +40 -0
- data/test/ft_32_journal.rb +91 -0
- data/test/ft_32c_journal.rb +102 -0
- data/test/ft_32d_journal.rb +84 -0
- data/test/ft_33_description.rb +107 -0
- data/test/ft_34_cancelwfid.rb +80 -0
- data/test/ft_35_localdefs.rb +75 -0
- data/test/ft_36_subprocids.rb +97 -0
- data/test/ft_37_pnames.rb +70 -0
- data/test/ft_38_tag.rb +127 -0
- data/test/ft_38b_tag.rb +161 -0
- data/test/ft_38c_tag.rb +100 -0
- data/test/ft_39_reserve.rb +63 -0
- data/test/ft_39b_reserve.rb +84 -0
- data/test/ft_3_equals.rb +170 -0
- data/test/ft_3b_lookup_vf.rb +83 -0
- data/test/ft_40_defined.rb +61 -0
- data/test/ft_41_case.rb +110 -0
- data/test/ft_42_environments.rb +75 -0
- data/test/ft_43_pat10.rb +85 -0
- data/test/ft_44_save.rb +70 -0
- data/test/ft_44b_restore.rb +212 -0
- data/test/ft_45_citerator.rb +214 -0
- data/test/ft_46_pparams.rb +62 -0
- data/test/ft_47_filter.rb +160 -0
- data/test/ft_48_fe_filter.rb +88 -0
- data/test/ft_49_condition.rb +126 -0
- data/test/ft_4_misc.rb +237 -0
- data/test/ft_50_xml_attribute.rb +155 -0
- data/test/ft_51_stack.rb +55 -0
- data/test/ft_52_obs_participant.rb +123 -0
- data/test/ft_53_null_noop_participant.rb +62 -0
- data/test/ft_54_listen.rb +288 -0
- data/test/ft_54b_listen.rb +66 -0
- data/test/ft_54c_listen.rb +99 -0
- data/test/ft_55_ptimeout.rb +59 -0
- data/test/ft_56_timeout.rb +59 -0
- data/test/ft_57_a.rb +145 -0
- data/test/ft_58_ejournal.rb +151 -0
- data/test/ft_59_ps.rb +150 -0
- data/test/ft_59b_ps_for_pat.rb +58 -0
- data/test/ft_5_time.rb +118 -0
- data/test/ft_60_ecancel.rb +161 -0
- data/test/ft_61_elsub.rb +51 -0
- data/test/ft_62_procparticipant.rb +71 -0
- data/test/ft_63_pause.rb +124 -0
- data/test/ft_64_alias.rb +102 -0
- data/test/ft_64_clone.rb +69 -0
- data/test/ft_65_stringlaunch.rb +59 -0
- data/test/ft_66_subforget.rb +70 -0
- data/test/ft_67_schedlaunch.rb +116 -0
- data/test/ft_68_ifparticipant.rb +70 -0
- data/test/ft_69_cancelmissing.rb +51 -0
- data/test/ft_6_lambda.rb +64 -0
- data/test/ft_70_lookupvar.rb +55 -0
- data/test/ft_71_log.rb +60 -0
- data/test/ft_72_lookup_processes.rb +76 -0
- data/test/ft_73_cancel_sub.rb +139 -0
- data/test/ft_74_block_and_workitem_dup.rb +63 -0
- data/test/ft_75_ruby_attributes.rb +87 -0
- data/test/ft_76_merge_isolate.rb +88 -0
- data/test/ft_77_segments.rb +35 -0
- data/test/ft_78_eval.rb +150 -0
- data/test/ft_79_tticket.rb +187 -0
- data/test/ft_79b_tticket.rb +172 -0
- data/test/ft_79c_outcome.rb +56 -0
- data/test/ft_7_lose.rb +104 -0
- data/test/ft_7b_lose.rb +78 -0
- data/test/ft_80_spname.rb +91 -0
- data/test/ft_81_exp.rb +60 -0
- data/test/ft_82_trecu.rb +46 -0
- data/test/ft_83_badpause.rb +58 -0
- data/test/ft_84_updateexp.rb +198 -0
- data/test/ft_85_dolhash.rb +43 -0
- data/test/ft_86_dollar_fv.rb +68 -0
- data/test/ft_87_define.rb +74 -0
- data/test/ft_8_forget.rb +44 -0
- data/test/ft_9_cursor.rb +145 -0
- data/test/ft_9b_cursor.rb +105 -0
- data/test/ft_tests.rb +124 -0
- data/test/hash_test.rb +75 -0
- data/test/hparticipant_test.rb +164 -0
- data/test/lookup_att_test.rb +90 -0
- data/test/lookup_vf_test.rb +94 -0
- data/test/misc_test.rb +90 -0
- data/test/nut_0_irb.rb +20 -0
- data/test/obs_test.rb +142 -0
- data/test/orest_test.rb +251 -0
- data/test/param_test.rb +290 -0
- data/test/participant_test.rb +101 -0
- data/test/pending.rb +23 -0
- data/test/ps_representation.rb +133 -0
- data/test/rake_ltest.rb +38 -0
- data/test/rake_qtest.rb +68 -0
- data/test/raw_prog_test.rb +412 -0
- data/test/restart_cron_test.rb +136 -0
- data/test/restart_paused_test.rb +98 -0
- data/test/restart_sleep_test.rb +140 -0
- data/test/restart_tests.rb +18 -0
- data/test/restart_when_test.rb +112 -0
- data/test/ruby_procdef_test.rb +132 -0
- data/test/rutest_utils.rb +63 -0
- data/test/sec_test.rb +205 -0
- data/test/slock_test.rb +80 -0
- data/test/storage_test.rb +44 -0
- data/test/test.rb +3 -0
- data/test/timeout_test.rb +105 -0
- data/test/util_xml_test.rb +112 -0
- data/test/wfid_test.rb +175 -0
- data/test/wi_test.rb +75 -0
- metadata +433 -0
|
@@ -0,0 +1,357 @@
|
|
|
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"
|
|
36
|
+
# enhanced in Japan
|
|
37
|
+
#
|
|
38
|
+
# john.mettraux@openwfe.org
|
|
39
|
+
#
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
module OpenWFE
|
|
43
|
+
|
|
44
|
+
#
|
|
45
|
+
# A FlowExpressionId is a unique identifier for a FlowExpression (an atomic
|
|
46
|
+
# piece of a process instance).
|
|
47
|
+
#
|
|
48
|
+
# As workitems move through a workflow among the expressions and are emitted
|
|
49
|
+
# outside of the business process engine via 'participant expressions',
|
|
50
|
+
# these workitems are identified by the FlowExpressionId of the participant
|
|
51
|
+
# expression that pushed them out (and is usually waiting for them
|
|
52
|
+
# to come back).
|
|
53
|
+
#
|
|
54
|
+
class FlowExpressionId
|
|
55
|
+
|
|
56
|
+
FIELDS = [
|
|
57
|
+
:owfe_version,
|
|
58
|
+
:engine_id,
|
|
59
|
+
#:initial_engine_id,
|
|
60
|
+
:workflow_definition_url,
|
|
61
|
+
:workflow_definition_name,
|
|
62
|
+
:workflow_definition_revision,
|
|
63
|
+
:workflow_instance_id,
|
|
64
|
+
:expression_name,
|
|
65
|
+
:expression_id
|
|
66
|
+
]
|
|
67
|
+
|
|
68
|
+
FIELDS.each { |f| attr_accessor f }
|
|
69
|
+
|
|
70
|
+
alias :expid :expression_id
|
|
71
|
+
alias :expid= :expression_id=
|
|
72
|
+
|
|
73
|
+
alias :expname :expression_name
|
|
74
|
+
alias :wfurl :workflow_definition_url
|
|
75
|
+
alias :wfname :workflow_definition_name
|
|
76
|
+
alias :wfrevision :workflow_definition_revision
|
|
77
|
+
|
|
78
|
+
#--
|
|
79
|
+
# a trick : returns self...
|
|
80
|
+
#
|
|
81
|
+
#def fei
|
|
82
|
+
# self
|
|
83
|
+
#end
|
|
84
|
+
#++
|
|
85
|
+
|
|
86
|
+
#
|
|
87
|
+
# This method return @workflow_instance_id. If parent is set to
|
|
88
|
+
# true, if will return the same result as
|
|
89
|
+
# parent_workflow_instance_id().
|
|
90
|
+
#
|
|
91
|
+
def wfid (parent=false)
|
|
92
|
+
|
|
93
|
+
if parent
|
|
94
|
+
parent_workflow_instance_id
|
|
95
|
+
else
|
|
96
|
+
workflow_instance_id
|
|
97
|
+
end
|
|
98
|
+
end
|
|
99
|
+
alias :wfid= :workflow_instance_id=
|
|
100
|
+
|
|
101
|
+
#
|
|
102
|
+
# the old 'initial_engine_id' is now deprecated, the methods
|
|
103
|
+
# are still around though.
|
|
104
|
+
#
|
|
105
|
+
def initial_engine_id= (s)
|
|
106
|
+
|
|
107
|
+
# silently discard
|
|
108
|
+
end
|
|
109
|
+
def initial_engine_id
|
|
110
|
+
|
|
111
|
+
@engine_id
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
#
|
|
115
|
+
# Overrides the classical to_s()
|
|
116
|
+
#
|
|
117
|
+
def to_s
|
|
118
|
+
"(fei #{@owfe_version} #{@engine_id} #{wfurl} #{wfname} #{wfrevision} #{wfid} #{expname} #{expid})"
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
#
|
|
122
|
+
# Returns a hash version of this FlowExpressionId instance.
|
|
123
|
+
#
|
|
124
|
+
def to_h
|
|
125
|
+
|
|
126
|
+
FIELDS.inject({}) { |r, f| r[f] = instance_eval("@#{f.to_s}"); r }
|
|
127
|
+
end
|
|
128
|
+
|
|
129
|
+
#
|
|
130
|
+
# Rebuilds a FlowExpressionId from its Hash representation.
|
|
131
|
+
#
|
|
132
|
+
def FlowExpressionId.from_h (h)
|
|
133
|
+
|
|
134
|
+
FIELDS.inject FlowExpressionId.new do |fei, f|
|
|
135
|
+
fei.instance_variable_set("@#{f}", h[f] || h[f.to_s])
|
|
136
|
+
fei
|
|
137
|
+
end
|
|
138
|
+
end
|
|
139
|
+
|
|
140
|
+
def hash
|
|
141
|
+
|
|
142
|
+
to_s.hash
|
|
143
|
+
end
|
|
144
|
+
|
|
145
|
+
def == (other)
|
|
146
|
+
|
|
147
|
+
return false if not other.kind_of?(FlowExpressionId)
|
|
148
|
+
|
|
149
|
+
#return self.to_s == other.to_s
|
|
150
|
+
# no perf gain
|
|
151
|
+
|
|
152
|
+
@workflow_instance_id == other.workflow_instance_id and
|
|
153
|
+
@expression_id == other.expression_id and
|
|
154
|
+
@workflow_definition_url == other.workflow_definition_url and
|
|
155
|
+
@workflow_definition_revision == other.workflow_definition_revision and
|
|
156
|
+
@workflow_definition_name == other.workflow_definition_name and
|
|
157
|
+
@expression_name == other.expression_name and
|
|
158
|
+
@owfe_version == other.owfe_version and
|
|
159
|
+
@engine_id == other.engine_id
|
|
160
|
+
#@initial_engine_id == other.initial_engine_id
|
|
161
|
+
#
|
|
162
|
+
# Made sure to put on top of the 'and' the things that
|
|
163
|
+
# change the most...
|
|
164
|
+
end
|
|
165
|
+
|
|
166
|
+
#
|
|
167
|
+
# Returns true if this other FlowExpressionId is nested within
|
|
168
|
+
# this one.
|
|
169
|
+
#
|
|
170
|
+
# For example (fei TestTag 3 20070331-goyunodabu 0.0.0 sequence)
|
|
171
|
+
# is an ancestor of (fei TestTag 3 20070331-goyunodabu 0.0.0.1 redo)
|
|
172
|
+
#
|
|
173
|
+
# This current implementation doesn't cross the subprocesses
|
|
174
|
+
# boundaries.
|
|
175
|
+
#
|
|
176
|
+
def ancestor_of? (other_fei)
|
|
177
|
+
|
|
178
|
+
o = other_fei.dup
|
|
179
|
+
o.expression_name = @expression_name
|
|
180
|
+
o.expression_id = @expression_id
|
|
181
|
+
|
|
182
|
+
return false unless self == o
|
|
183
|
+
|
|
184
|
+
OpenWFE::starts_with other_fei.expression_id, @expression_id
|
|
185
|
+
end
|
|
186
|
+
|
|
187
|
+
#
|
|
188
|
+
# Returns a deep copy of this FlowExpressionId instance.
|
|
189
|
+
#
|
|
190
|
+
def dup
|
|
191
|
+
|
|
192
|
+
OpenWFE::fulldup(self)
|
|
193
|
+
end
|
|
194
|
+
|
|
195
|
+
alias eql? ==
|
|
196
|
+
|
|
197
|
+
def to_debug_s
|
|
198
|
+
"(fei #{wfname} #{wfrevision} #{wfid} #{expid} #{expname})"
|
|
199
|
+
end
|
|
200
|
+
|
|
201
|
+
#
|
|
202
|
+
# Returns a very short string representation (fei wfid expid expname).
|
|
203
|
+
#
|
|
204
|
+
def to_short_s
|
|
205
|
+
"(fei #{wfid} #{expid} #{expname})"
|
|
206
|
+
end
|
|
207
|
+
|
|
208
|
+
#
|
|
209
|
+
# Returns a URI escaped string with just the wfid and the expid, like
|
|
210
|
+
# '20070917-dupibodasa__0.0.1'
|
|
211
|
+
#
|
|
212
|
+
# Useful for unique identifier in URIs.
|
|
213
|
+
#
|
|
214
|
+
def to_web_s
|
|
215
|
+
|
|
216
|
+
eid = expid.gsub("\.", "_")
|
|
217
|
+
|
|
218
|
+
URI.escape "#{wfid}__#{eid}"
|
|
219
|
+
end
|
|
220
|
+
|
|
221
|
+
#
|
|
222
|
+
# Splits the web fei into the workflow instance id and the expression
|
|
223
|
+
# id.
|
|
224
|
+
#
|
|
225
|
+
def self.split_web_s (s)
|
|
226
|
+
|
|
227
|
+
i = s.rindex("__")
|
|
228
|
+
|
|
229
|
+
[ s[0..i-1], s[i+2..-1].gsub("\_", ".") ]
|
|
230
|
+
end
|
|
231
|
+
|
|
232
|
+
#
|
|
233
|
+
# Yet another debugging method. Just returns the sub_instance_id and
|
|
234
|
+
# the expression_id, in a string.
|
|
235
|
+
#
|
|
236
|
+
def to_env_s
|
|
237
|
+
|
|
238
|
+
"i#{sub_instance_id} #{@expression_id}"
|
|
239
|
+
end
|
|
240
|
+
|
|
241
|
+
#
|
|
242
|
+
# Returns the workflow instance id without any subflow indices.
|
|
243
|
+
# For example, if the wfid is "1234.0.1", this method will
|
|
244
|
+
# return "1234".
|
|
245
|
+
#
|
|
246
|
+
def parent_workflow_instance_id
|
|
247
|
+
|
|
248
|
+
FlowExpressionId.to_parent_wfid workflow_instance_id
|
|
249
|
+
end
|
|
250
|
+
|
|
251
|
+
alias :parent_wfid :parent_workflow_instance_id
|
|
252
|
+
|
|
253
|
+
#
|
|
254
|
+
# Returns "" if this expression id belongs to a top process,
|
|
255
|
+
# returns something like ".0" or ".1.3" if this exp id belongs to
|
|
256
|
+
# an expression in a subprocess.
|
|
257
|
+
# (Only used in some unit tests for now)
|
|
258
|
+
#
|
|
259
|
+
def sub_instance_id
|
|
260
|
+
|
|
261
|
+
i = workflow_instance_id.index(".")
|
|
262
|
+
return "" unless i
|
|
263
|
+
workflow_instance_id[i..-1]
|
|
264
|
+
end
|
|
265
|
+
|
|
266
|
+
#
|
|
267
|
+
# If this flow expression id belongs to a sub instance, a call to
|
|
268
|
+
# this method will return the last number of the sub instanceid.
|
|
269
|
+
#
|
|
270
|
+
# For example, in the case of the instance "20071114-dukikomino.1", "1"
|
|
271
|
+
# will be returned. For "20071114-dukikomino.1.0", "0" will be returned.
|
|
272
|
+
#
|
|
273
|
+
# If the flow expression id doesn't belong to a sub instance, nil
|
|
274
|
+
# will be returned.
|
|
275
|
+
#
|
|
276
|
+
def last_sub_instance_id
|
|
277
|
+
|
|
278
|
+
i = workflow_instance_id.rindex(".")
|
|
279
|
+
return nil unless i
|
|
280
|
+
workflow_instance_id[i+1..-1]
|
|
281
|
+
end
|
|
282
|
+
|
|
283
|
+
#
|
|
284
|
+
# Returns true if this flow expression id belongs to a process
|
|
285
|
+
# which is not a subprocess.
|
|
286
|
+
#
|
|
287
|
+
def is_in_parent_process?
|
|
288
|
+
|
|
289
|
+
(sub_instance_id == "")
|
|
290
|
+
end
|
|
291
|
+
|
|
292
|
+
#
|
|
293
|
+
# Returns the last part of the expression_id. For example, if
|
|
294
|
+
# the expression_id is "0.1.0.4", "4" will be returned.
|
|
295
|
+
#
|
|
296
|
+
# This method is used in "concurrence" when merging workitems coming
|
|
297
|
+
# backing from the children expressions.
|
|
298
|
+
#
|
|
299
|
+
def child_id
|
|
300
|
+
|
|
301
|
+
i = @expression_id.rindex(".")
|
|
302
|
+
return @expression_id unless i
|
|
303
|
+
@expression_id[i+1..-1]
|
|
304
|
+
end
|
|
305
|
+
|
|
306
|
+
#
|
|
307
|
+
# This class method parses a string into a FlowExpressionId instance
|
|
308
|
+
#
|
|
309
|
+
def self.to_fei (string)
|
|
310
|
+
|
|
311
|
+
fei = FlowExpressionId.new
|
|
312
|
+
|
|
313
|
+
ss = string.split(" ")
|
|
314
|
+
|
|
315
|
+
#require 'pp'; puts; pp ss
|
|
316
|
+
|
|
317
|
+
ss = ss[1..-1] if ss[0] == "("
|
|
318
|
+
|
|
319
|
+
fei.owfe_version = ss[1]
|
|
320
|
+
|
|
321
|
+
ssRawEngineId = ss[2].split("/")
|
|
322
|
+
fei.engine_id = ssRawEngineId[0]
|
|
323
|
+
#fei.initial_engine_id = ssRawEngineId[1]
|
|
324
|
+
|
|
325
|
+
fei.workflow_definition_url = ss[3]
|
|
326
|
+
fei.workflow_definition_name = ss[4]
|
|
327
|
+
fei.workflow_definition_revision = ss[5]
|
|
328
|
+
fei.workflow_instance_id = ss[6]
|
|
329
|
+
fei.expression_name = ss[7]
|
|
330
|
+
fei.expression_id = ss[8][0..-2]
|
|
331
|
+
|
|
332
|
+
fei.expression_id = fei.expression_id[0..-2] \
|
|
333
|
+
if fei.expression_id[-1, 1] == ")"
|
|
334
|
+
|
|
335
|
+
fei
|
|
336
|
+
end
|
|
337
|
+
|
|
338
|
+
#
|
|
339
|
+
# An alias for to_fei(string)
|
|
340
|
+
#
|
|
341
|
+
def self.from_s (string)
|
|
342
|
+
|
|
343
|
+
to_fei string
|
|
344
|
+
end
|
|
345
|
+
|
|
346
|
+
#
|
|
347
|
+
# If wfid is already a 'parent wfid' (no sub id), returns it. Else
|
|
348
|
+
# returns the parent wfid (whatever is before the first ".").
|
|
349
|
+
#
|
|
350
|
+
def self.to_parent_wfid (wfid)
|
|
351
|
+
|
|
352
|
+
wfid.split(".").first
|
|
353
|
+
end
|
|
354
|
+
end
|
|
355
|
+
|
|
356
|
+
end
|
|
357
|
+
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
#
|
|
2
|
+
#--
|
|
3
|
+
# Copyright (c) 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
|
+
# "made in Japan"
|
|
36
|
+
#
|
|
37
|
+
# John Mettraux at openwfe.org
|
|
38
|
+
#
|
|
39
|
+
|
|
40
|
+
require 'openwfe/logging'
|
|
41
|
+
require 'openwfe/workitem'
|
|
42
|
+
require 'openwfe/contextual'
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
module OpenWFE
|
|
46
|
+
|
|
47
|
+
#
|
|
48
|
+
# this mixin module provides two protected methods, handle_item() and
|
|
49
|
+
# filter_item(). They can be easily overriden to add some special
|
|
50
|
+
# behaviours.
|
|
51
|
+
#
|
|
52
|
+
module WorkItemListener
|
|
53
|
+
include Contextual, Logging, OwfeServiceLocator
|
|
54
|
+
|
|
55
|
+
protected
|
|
56
|
+
|
|
57
|
+
#
|
|
58
|
+
# Simply considers the object as a workitem and feeds it to the
|
|
59
|
+
# engine.
|
|
60
|
+
#
|
|
61
|
+
def handle_item (item)
|
|
62
|
+
|
|
63
|
+
filter_items item
|
|
64
|
+
|
|
65
|
+
get_engine.reply item
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
#
|
|
69
|
+
# The base implementation is just empty, feel free to override it
|
|
70
|
+
# if you need to filter workitems.
|
|
71
|
+
#
|
|
72
|
+
# One example :
|
|
73
|
+
#
|
|
74
|
+
# class MyListener
|
|
75
|
+
# include WorkItemListener
|
|
76
|
+
#
|
|
77
|
+
# protected
|
|
78
|
+
#
|
|
79
|
+
# #
|
|
80
|
+
# # MyListener doesn't accept launchitems
|
|
81
|
+
# #
|
|
82
|
+
# def filter_items (item)
|
|
83
|
+
# raise "launchitems not allowed" \
|
|
84
|
+
# if item.is_a?(OpenWFE::LaunchItem)
|
|
85
|
+
# end
|
|
86
|
+
# end
|
|
87
|
+
#
|
|
88
|
+
def filter_items (item)
|
|
89
|
+
|
|
90
|
+
#raise(
|
|
91
|
+
# "listener of class '#{self.class.name}' "+
|
|
92
|
+
# "doesn't accept launchitems")
|
|
93
|
+
end
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
end
|
|
97
|
+
|