openwferu 0.9.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (55) hide show
  1. data/README +47 -0
  2. data/lib/codec.rb +571 -0
  3. data/lib/controlclient.rb +115 -0
  4. data/lib/definitions.rb +112 -0
  5. data/lib/exception.rb +60 -0
  6. data/lib/flowexpressionid.rb +137 -0
  7. data/lib/openwferu.rb +43 -0
  8. data/lib/osocket.rb +138 -0
  9. data/lib/otime.rb +171 -0
  10. data/lib/restclient.rb +155 -0
  11. data/lib/ru/contextual.rb +63 -0
  12. data/lib/ru/dollar.rb +163 -0
  13. data/lib/ru/engine.rb +130 -0
  14. data/lib/ru/environment.rb +140 -0
  15. data/lib/ru/expressionmap.rb +120 -0
  16. data/lib/ru/expressionpool.rb +339 -0
  17. data/lib/ru/expressionstorage.rb +97 -0
  18. data/lib/ru/fe_base.rb +105 -0
  19. data/lib/ru/fe_concurrence.rb +122 -0
  20. data/lib/ru/fe_define.rb +101 -0
  21. data/lib/ru/fe_misc.rb +96 -0
  22. data/lib/ru/fe_participant.rb +75 -0
  23. data/lib/ru/fe_raw.rb +173 -0
  24. data/lib/ru/fe_subprocess.rb +84 -0
  25. data/lib/ru/fe_time.rb +135 -0
  26. data/lib/ru/fe_utils.rb +123 -0
  27. data/lib/ru/fe_value.rb +225 -0
  28. data/lib/ru/flowexpression.rb +250 -0
  29. data/lib/ru/logging.rb +85 -0
  30. data/lib/ru/participant.rb +67 -0
  31. data/lib/ru/participantmap.rb +93 -0
  32. data/lib/ru/participants.rb +74 -0
  33. data/lib/ru/rudefinitions.rb +70 -0
  34. data/lib/ru/ruutils.rb +68 -0
  35. data/lib/ru/scheduler.rb +478 -0
  36. data/lib/ru/schedulers.rb +63 -0
  37. data/lib/ru/service.rb +64 -0
  38. data/lib/test.rb +220 -0
  39. data/lib/utils.rb +94 -0
  40. data/lib/workitem.rb +250 -0
  41. data/lib/worklistclient.rb +276 -0
  42. data/test/dollartest.rb +79 -0
  43. data/test/feitest.rb +130 -0
  44. data/test/flowtestbase.rb +86 -0
  45. data/test/ft_0.rb +161 -0
  46. data/test/ft_1_unset.rb +152 -0
  47. data/test/ft_2_concurrence.rb +34 -0
  48. data/test/ft_3_equals.rb +84 -0
  49. data/test/ft_4_misc.rb +128 -0
  50. data/test/ft_5_time.rb +56 -0
  51. data/test/misctest.rb +46 -0
  52. data/test/runtest.rb +21 -0
  53. data/test/rutest_utils.rb +15 -0
  54. data/test/timetest.rb +111 -0
  55. metadata +100 -0
@@ -0,0 +1,250 @@
1
+ #
2
+ # Copyright (c) 2006, John Mettraux, OpenWFE.org
3
+ # All rights reserved.
4
+ #
5
+ # Redistribution and use in source and binary forms, with or without
6
+ # modification, are permitted provided that the following conditions are met:
7
+ #
8
+ # . Redistributions of source code must retain the above copyright notice, this
9
+ # list of conditions and the following disclaimer.
10
+ #
11
+ # . Redistributions in binary form must reproduce the above copyright notice,
12
+ # this list of conditions and the following disclaimer in the documentation
13
+ # and/or other materials provided with the distribution.
14
+ #
15
+ # . Neither the name of the "OpenWFE" nor the names of its contributors may be
16
+ # used to endorse or promote products derived from this software without
17
+ # specific prior written permission.
18
+ #
19
+ # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
20
+ # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
21
+ # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
22
+ # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
23
+ # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
24
+ # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
25
+ # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
26
+ # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
27
+ # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
28
+ # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
29
+ # POSSIBILITY OF SUCH DAMAGE.
30
+ #
31
+ # $Id: definitions.rb 2725 2006-06-02 13:26:32Z jmettraux $
32
+ #
33
+
34
+ #
35
+ # "made in Japan"
36
+ #
37
+ # John Mettraux at openwfe.org
38
+ #
39
+
40
+ require 'ru/rudefinitions'
41
+ require 'ru/contextual'
42
+ require 'ru/dollar'
43
+ require 'ru/logging'
44
+
45
+
46
+ module OpenWFEru
47
+
48
+ #
49
+ # FlowExpression
50
+ #
51
+
52
+ class FlowExpression
53
+ include Contextual, Logging
54
+
55
+ attr_accessor \
56
+ :fei, \
57
+ :parent_id, \
58
+ :environment_id, \
59
+ :attributes, \
60
+ :children, \
61
+ :apply_time
62
+
63
+ def initialize (fei, parent_id, env_id, app_context, attributes)
64
+
65
+ @fei = fei
66
+ @parent_id = parent_id
67
+ @environment_id = env_id
68
+ @application_context = app_context
69
+ @attributes = attributes
70
+
71
+ @apply_time = nil
72
+
73
+ #ldebug do
74
+ # "initialize()\n"+
75
+ # "self : #{@fei}\n"+
76
+ # "parent : #{@parent_id}"
77
+ #end
78
+ end
79
+
80
+ #
81
+ # the two most important methods for flow expressions
82
+
83
+ def apply (workitem)
84
+ get_parent().reply(workitem) if @parent_id
85
+ end
86
+
87
+ def reply (workitem)
88
+ #
89
+ # a default implementation
90
+ #
91
+ reply_to_parent(workitem)
92
+ end
93
+
94
+ def reply_to_parent (workitem)
95
+ get_expression_pool.reply_to_parent(self, workitem)
96
+ end
97
+
98
+ #
99
+ # some convenience methods
100
+
101
+ def get_parent ()
102
+ get_expression_pool().fetch(@parent_id)
103
+ end
104
+
105
+ def get_expression_pool ()
106
+ @application_context[S_EXPRESSION_POOL]
107
+ end
108
+
109
+ def get_expression_map ()
110
+ @application_context[S_EXPRESSION_MAP]
111
+ end
112
+
113
+ def store_itself ()
114
+ get_expression_pool().update(self)
115
+ end
116
+
117
+ def get_environment ()
118
+ return nil if not @environment_id
119
+ return get_expression_pool().fetch(@environment_id)
120
+ end
121
+
122
+ #
123
+ # Returns true if the expression's environment was generated
124
+ # for itself (usually DefineExpression do have such envs)
125
+ #
126
+ def owns_its_environment? ()
127
+
128
+ #ldebug { "owns_its_environment?() #{@fei.to_debug_s}" }
129
+
130
+ return false if not @environment_id
131
+
132
+ ei = @fei.dup()
133
+ vi = @environment_id.dup()
134
+
135
+ ei.expressionName = "neutral"
136
+ vi.expressionName = "neutral"
137
+
138
+ #ldebug do
139
+ # "owns_its_environment?()\n"+
140
+ # " exp #{ei.to_debug_s}\n"+
141
+ # " env #{vi.to_debug_s}"
142
+ #end
143
+
144
+ return ei == vi
145
+ end
146
+
147
+ def set_variable (varname, value)
148
+ get_environment()[varname] = value
149
+ end
150
+
151
+ def lookup_variable (varname)
152
+ return get_environment()[varname]
153
+ end
154
+
155
+ def delete_variable (varname)
156
+ get_environment().delete(varname)
157
+ end
158
+
159
+ def lookup_attribute (attname, workitem)
160
+ text = @attributes[attname]
161
+ return nil if not text
162
+ return OpenWFEru::dosub(text, self, workitem)
163
+ end
164
+
165
+ def lookup_boolean_attribute (attname, workitem, default=false)
166
+ value = lookup_attribute(attname, workitem)
167
+ return default if not value
168
+ return value.downcase == 'true'
169
+ end
170
+
171
+ def lookup_attributes (attributes, workitem)
172
+ result = {}
173
+ attributes.each do |k, v|
174
+ result[k] = OpenWFEru::dosub(v, self, workitem)
175
+ end
176
+ return result
177
+ end
178
+
179
+ def list_attributes (workitem)
180
+ result = {}
181
+ @attributes.each do |k, v|
182
+ result[k] = OpenWFEru::dosub(v, self, workitem)
183
+ ldebug { "list_attributes() added '#{k}' -> '#{result[k]}'" }
184
+ end
185
+ return result
186
+ end
187
+
188
+ #
189
+ # creates a new environment just for this expression
190
+ #
191
+ def new_environment ()
192
+
193
+ ldebug { "new_environment() for #{@fei.to_debug_s}" }
194
+
195
+ @environment_id = @fei.dup
196
+ @environment_id.expressionName = EN_ENVIRONMENT
197
+
198
+ parent_fei = nil
199
+ parent = nil
200
+ parent = get_expression_pool().fetch(@parent_id) if @parent_id
201
+ parent_fei = parent.environment_id if parent
202
+
203
+ env = Environment\
204
+ .new(@environment_id, parent_fei, nil, @application_context, nil)
205
+
206
+ ldebug { "new_environment() is #{env.fei.to_debug_s}" }
207
+
208
+ env.store_itself()
209
+ end
210
+
211
+ #
212
+ # takes care of removing all the children
213
+ #
214
+ def clean_children
215
+ @children.each do |children_fei|
216
+ get_expression_pool.remove(children_fei)
217
+ end
218
+ end
219
+
220
+ #
221
+ # some eye candy
222
+ #
223
+ def to_s
224
+ s = "* #{@fei.to_debug_s}"
225
+
226
+ if @parent_id
227
+ s << "\n `--p--> #{@parent_id.to_debug_s}"
228
+ end
229
+
230
+ if @environment_id
231
+ s << "\n `--e--> #{@environment_id.to_debug_s}"
232
+ end
233
+
234
+ if @children
235
+ @children.each do |c|
236
+ sc = if c.kind_of?(OpenWFE::FlowExpressionId)
237
+ c.to_debug_s
238
+ else
239
+ ">#{c.to_s}<"
240
+ end
241
+ s << "\n `--c--> #{sc}"
242
+ end
243
+ end
244
+
245
+ return s
246
+ end
247
+ end
248
+
249
+ end
250
+
data/lib/ru/logging.rb ADDED
@@ -0,0 +1,85 @@
1
+ #
2
+ # Copyright (c) 2006, John Mettraux, OpenWFE.org
3
+ # All rights reserved.
4
+ #
5
+ # Redistribution and use in source and binary forms, with or without
6
+ # modification, are permitted provided that the following conditions are met:
7
+ #
8
+ # . Redistributions of source code must retain the above copyright notice, this
9
+ # list of conditions and the following disclaimer.
10
+ #
11
+ # . Redistributions in binary form must reproduce the above copyright notice,
12
+ # this list of conditions and the following disclaimer in the documentation
13
+ # and/or other materials provided with the distribution.
14
+ #
15
+ # . Neither the name of the "OpenWFE" nor the names of its contributors may be
16
+ # used to endorse or promote products derived from this software without
17
+ # specific prior written permission.
18
+ #
19
+ # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
20
+ # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
21
+ # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
22
+ # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
23
+ # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
24
+ # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
25
+ # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
26
+ # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
27
+ # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
28
+ # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
29
+ # POSSIBILITY OF SUCH DAMAGE.
30
+ #
31
+ # $Id: definitions.rb 2725 2006-06-02 13:26:32Z jmettraux $
32
+ #
33
+
34
+ #
35
+ # "made in Japan"
36
+ #
37
+ # John Mettraux at openwfe.org
38
+ #
39
+
40
+ require 'logger'
41
+ require 'ru/rudefinitions'
42
+
43
+ module OpenWFEru
44
+
45
+ module Logging
46
+
47
+ def init_default_logging (filename)
48
+ log = Logger.new(filename)
49
+ @application_context[S_LOGGER] = log
50
+ end
51
+
52
+ def ldebug (&block)
53
+ log = get_logger
54
+ log.debug(who(), &block) if log
55
+ end
56
+
57
+ def linfo (&block)
58
+ log = get_logger
59
+ log.info(who(), &block) if log
60
+ end
61
+
62
+ def lwarn (&block)
63
+ log = get_logger
64
+ log.warn(who(), &block) if log
65
+ end
66
+
67
+ private
68
+
69
+ def get_logger
70
+ return @application_context[S_LOGGER] if @application_context
71
+ return Logger.new(STDOUT)
72
+ end
73
+
74
+ def who
75
+ if respond_to?(:service_name)
76
+ "#{self.class} '#{self.service_name}'"
77
+ else
78
+ "#{self.class}"
79
+ end
80
+ end
81
+
82
+ end
83
+
84
+ end
85
+
@@ -0,0 +1,67 @@
1
+ #
2
+ # Copyright (c) 2006, John Mettraux, OpenWFE.org
3
+ # All rights reserved.
4
+ #
5
+ # Redistribution and use in source and binary forms, with or without
6
+ # modification, are permitted provided that the following conditions are met:
7
+ #
8
+ # . Redistributions of source code must retain the above copyright notice, this
9
+ # list of conditions and the following disclaimer.
10
+ #
11
+ # . Redistributions in binary form must reproduce the above copyright notice,
12
+ # this list of conditions and the following disclaimer in the documentation
13
+ # and/or other materials provided with the distribution.
14
+ #
15
+ # . Neither the name of the "OpenWFE" nor the names of its contributors may be
16
+ # used to endorse or promote products derived from this software without
17
+ # specific prior written permission.
18
+ #
19
+ # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
20
+ # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
21
+ # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
22
+ # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
23
+ # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
24
+ # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
25
+ # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
26
+ # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
27
+ # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
28
+ # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
29
+ # POSSIBILITY OF SUCH DAMAGE.
30
+ #
31
+ # $Id: definitions.rb 2725 2006-06-02 13:26:32Z jmettraux $
32
+ #
33
+
34
+ #
35
+ # "made in Japan"
36
+ #
37
+ # John Mettraux at openwfe.org
38
+ #
39
+
40
+ require 'ru/contextual'
41
+
42
+
43
+ module OpenWFEru
44
+
45
+ #
46
+ # The 'participant' concept is displayed as a module, so that
47
+ # other pieces of code may easily 'mix it in'.
48
+ #
49
+ module Participant
50
+ include Contextual
51
+
52
+ #
53
+ # a participant will be receiving workitems via this method
54
+ #
55
+ def consume (workitem)
56
+ end
57
+
58
+ #
59
+ # when the workflow engine is cancelling a workflow branch, the
60
+ # already activated participants are notified via this method
61
+ #
62
+ def cancel (cancelitem)
63
+ end
64
+ end
65
+
66
+ end
67
+
@@ -0,0 +1,93 @@
1
+ #
2
+ # Copyright (c) 2006, John Mettraux, OpenWFE.org
3
+ # All rights reserved.
4
+ #
5
+ # Redistribution and use in source and binary forms, with or without
6
+ # modification, are permitted provided that the following conditions are met:
7
+ #
8
+ # . Redistributions of source code must retain the above copyright notice, this
9
+ # list of conditions and the following disclaimer.
10
+ #
11
+ # . Redistributions in binary form must reproduce the above copyright notice,
12
+ # this list of conditions and the following disclaimer in the documentation
13
+ # and/or other materials provided with the distribution.
14
+ #
15
+ # . Neither the name of the "OpenWFE" nor the names of its contributors may be
16
+ # used to endorse or promote products derived from this software without
17
+ # specific prior written permission.
18
+ #
19
+ # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
20
+ # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
21
+ # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
22
+ # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
23
+ # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
24
+ # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
25
+ # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
26
+ # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
27
+ # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
28
+ # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
29
+ # POSSIBILITY OF SUCH DAMAGE.
30
+ #
31
+ # $Id: definitions.rb 2725 2006-06-02 13:26:32Z jmettraux $
32
+ #
33
+
34
+ #
35
+ # "made in Japan"
36
+ #
37
+ # John Mettraux at openwfe.org
38
+ #
39
+
40
+ require 'workitem'
41
+ require 'ru/service'
42
+
43
+
44
+ module OpenWFEru
45
+
46
+ class ParticipantMap < Service
47
+
48
+ attr_accessor \
49
+ :participants
50
+
51
+ def initialize (service_name, application_context)
52
+ super(service_name, application_context)
53
+
54
+ @participants = []
55
+ end
56
+
57
+ def register_participant (regex, participant)
58
+
59
+ regex = Regexp.new(regex) if not regex.kind_of? Regexp
60
+
61
+ participant.application_context = @application_context
62
+
63
+ @participants << [ regex, participant ]
64
+ end
65
+
66
+ def lookup_participant (participant_name)
67
+
68
+ @participants.each do |tuple|
69
+ return tuple[1] if tuple[0].match(participant_name)
70
+ end
71
+
72
+ return nil
73
+ end
74
+
75
+ def dispatch (participant_name, workitem)
76
+
77
+ participant = lookup_participant(participant_name)
78
+
79
+ raise "Didn't find participant named '#{participant_name}'" \
80
+ if not participant
81
+
82
+ workitem.participantName = participant_name
83
+
84
+ if workitem.kind_of? OpenWFE::CancelItem
85
+ participant.cancel(workitem)
86
+ else
87
+ participant.consume(workitem)
88
+ end
89
+ end
90
+ end
91
+
92
+ end
93
+
@@ -0,0 +1,74 @@
1
+ #
2
+ # Copyright (c) 2006, John Mettraux, OpenWFE.org
3
+ # All rights reserved.
4
+ #
5
+ # Redistribution and use in source and binary forms, with or without
6
+ # modification, are permitted provided that the following conditions are met:
7
+ #
8
+ # . Redistributions of source code must retain the above copyright notice, this
9
+ # list of conditions and the following disclaimer.
10
+ #
11
+ # . Redistributions in binary form must reproduce the above copyright notice,
12
+ # this list of conditions and the following disclaimer in the documentation
13
+ # and/or other materials provided with the distribution.
14
+ #
15
+ # . Neither the name of the "OpenWFE" nor the names of its contributors may be
16
+ # used to endorse or promote products derived from this software without
17
+ # specific prior written permission.
18
+ #
19
+ # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
20
+ # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
21
+ # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
22
+ # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
23
+ # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
24
+ # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
25
+ # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
26
+ # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
27
+ # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
28
+ # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
29
+ # POSSIBILITY OF SUCH DAMAGE.
30
+ #
31
+ # $Id: definitions.rb 2725 2006-06-02 13:26:32Z jmettraux $
32
+ #
33
+
34
+ #
35
+ # "made in Japan"
36
+ #
37
+ # John Mettraux at openwfe.org
38
+ #
39
+
40
+ require 'ru/participant'
41
+ require 'ru/rudefinitions'
42
+
43
+
44
+ #
45
+ # some base participant implementations
46
+
47
+ module OpenWFEru
48
+
49
+ class LocalParticipant
50
+ include Participant
51
+
52
+ def reply_to_engine (workitem)
53
+ @application_context[S_EXPRESSION_POOL]\
54
+ .reply(workitem.lastExpressionId, workitem)
55
+ end
56
+ end
57
+
58
+ class PrintParticipant < LocalParticipant
59
+
60
+ def consume (workitem)
61
+
62
+ tracer = @application_context['__tracer']
63
+
64
+ if tracer
65
+ tracer << workitem.participantName
66
+ else
67
+ puts workitem.participantName
68
+ end
69
+
70
+ reply_to_engine(workitem)
71
+ end
72
+ end
73
+ end
74
+
@@ -0,0 +1,70 @@
1
+ #
2
+ # Copyright (c) 2006, John Mettraux, OpenWFE.org
3
+ # All rights reserved.
4
+ #
5
+ # Redistribution and use in source and binary forms, with or without
6
+ # modification, are permitted provided that the following conditions are met:
7
+ #
8
+ # . Redistributions of source code must retain the above copyright notice, this
9
+ # list of conditions and the following disclaimer.
10
+ #
11
+ # . Redistributions in binary form must reproduce the above copyright notice,
12
+ # this list of conditions and the following disclaimer in the documentation
13
+ # and/or other materials provided with the distribution.
14
+ #
15
+ # . Neither the name of the "OpenWFE" nor the names of its contributors may be
16
+ # used to endorse or promote products derived from this software without
17
+ # specific prior written permission.
18
+ #
19
+ # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
20
+ # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
21
+ # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
22
+ # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
23
+ # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
24
+ # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
25
+ # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
26
+ # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
27
+ # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
28
+ # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
29
+ # POSSIBILITY OF SUCH DAMAGE.
30
+ #
31
+ # $Id: definitions.rb 2725 2006-06-02 13:26:32Z jmettraux $
32
+ #
33
+
34
+ #
35
+ # "made in Japan"
36
+ #
37
+
38
+ module OpenWFEru
39
+
40
+ OPENWFE_VERSION = '1.7.2pre17'
41
+
42
+ #
43
+ # service names
44
+
45
+ S_LOGGER = 'logger'
46
+
47
+ S_EXPRESSION_MAP = 'expressionMap'
48
+ S_EXPRESSION_POOL = 'expressionPool'
49
+ S_EXPRESSION_STORAGE = 'expressionStorage'
50
+ S_PARTICIPANT_MAP = 'participantMap'
51
+ S_SCHEDULER = 'scheduler'
52
+
53
+ #
54
+ # some field names
55
+
56
+ FIELD_RESULT = '__result__'
57
+
58
+ #
59
+ # some special expression names
60
+
61
+ EN_ENVIRONMENT = 'environment'
62
+
63
+ #
64
+ # some expression attribute names
65
+
66
+ A_SYNC = 'sync'
67
+ A_FORGET = 'forget'
68
+
69
+ end
70
+
data/lib/ru/ruutils.rb ADDED
@@ -0,0 +1,68 @@
1
+ #
2
+ # Copyright (c) 2006, John Mettraux, OpenWFE.org
3
+ # All rights reserved.
4
+ #
5
+ # Redistribution and use in source and binary forms, with or without
6
+ # modification, are permitted provided that the following conditions are met:
7
+ #
8
+ # . Redistributions of source code must retain the above copyright notice, this
9
+ # list of conditions and the following disclaimer.
10
+ #
11
+ # . Redistributions in binary form must reproduce the above copyright notice,
12
+ # this list of conditions and the following disclaimer in the documentation
13
+ # and/or other materials provided with the distribution.
14
+ #
15
+ # . Neither the name of the "OpenWFE" nor the names of its contributors may be
16
+ # used to endorse or promote products derived from this software without
17
+ # specific prior written permission.
18
+ #
19
+ # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
20
+ # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
21
+ # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
22
+ # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
23
+ # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
24
+ # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
25
+ # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
26
+ # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
27
+ # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
28
+ # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
29
+ # POSSIBILITY OF SUCH DAMAGE.
30
+ #
31
+ # $Id: definitions.rb 2725 2006-06-02 13:26:32Z jmettraux $
32
+ #
33
+
34
+ #
35
+ # made somewhere over Japan
36
+ #
37
+ # John Mettraux at openwfe.org
38
+ #
39
+
40
+
41
+ module OpenWFEru
42
+
43
+ #
44
+ # Returns true if the given string starts with the 'start' string.
45
+ #
46
+ def OpenWFEru.starts_with (string, start)
47
+ #
48
+ # my favourite way of doing that would be by adding this
49
+ # method to the String class, but that could be intrusive
50
+ # (as OpenWFEru is meant at first as an embeddable workflow engine).
51
+ #
52
+ return false if not string
53
+ return false if string.length < start.length
54
+ return string[0, start.length] == start
55
+ end
56
+
57
+ #
58
+ # Attempts at displaying a nice stack trace
59
+ #
60
+ def OpenWFEru.exception_to_s (exception)
61
+ s = ""
62
+ s << "#{exception}\n"
63
+ s << exception.backtrace.join("\n")
64
+ return s
65
+ end
66
+
67
+ end
68
+