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.
Files changed (291) hide show
  1. data/README.txt +24 -0
  2. data/bin/validate-workflow.rb +89 -0
  3. data/examples/about_state.rb +81 -0
  4. data/examples/bigflow.rb +19 -0
  5. data/examples/csv_weather.rb +23 -0
  6. data/examples/engine_template.rb +247 -0
  7. data/examples/flowtracing.rb +24 -0
  8. data/examples/homeworkreview.rb +68 -0
  9. data/examples/kotoba.rb +22 -0
  10. data/examples/mano_tracker.rb +172 -0
  11. data/examples/openwferu.rb +58 -0
  12. data/examples/quotereporter.rb +157 -0
  13. data/examples/scheduler_cron_usage.rb +48 -0
  14. data/examples/scheduler_usage.rb +56 -0
  15. data/lib/openwfe.rb +41 -0
  16. data/lib/openwfe/contextual.rb +111 -0
  17. data/lib/openwfe/def.rb +46 -0
  18. data/lib/openwfe/engine.rb +37 -0
  19. data/lib/openwfe/engine/engine.rb +756 -0
  20. data/lib/openwfe/engine/expool_methods.rb +172 -0
  21. data/lib/openwfe/engine/file_persisted_engine.rb +105 -0
  22. data/lib/openwfe/engine/participant_methods.rb +133 -0
  23. data/lib/openwfe/engine/status_methods.rb +353 -0
  24. data/lib/openwfe/engine/update_exp_methods.rb +112 -0
  25. data/lib/openwfe/exceptions.rb +51 -0
  26. data/lib/openwfe/expool/errorjournal.rb +476 -0
  27. data/lib/openwfe/expool/expressionpool.rb +1144 -0
  28. data/lib/openwfe/expool/expstorage.rb +403 -0
  29. data/lib/openwfe/expool/history.rb +174 -0
  30. data/lib/openwfe/expool/journal.rb +224 -0
  31. data/lib/openwfe/expool/journal_replay.rb +321 -0
  32. data/lib/openwfe/expool/parser.rb +242 -0
  33. data/lib/openwfe/expool/representation.rb +121 -0
  34. data/lib/openwfe/expool/threadedexpstorage.rb +188 -0
  35. data/lib/openwfe/expool/wfidgen.rb +388 -0
  36. data/lib/openwfe/expool/yamlexpstorage.rb +224 -0
  37. data/lib/openwfe/expressions/condition.rb +244 -0
  38. data/lib/openwfe/expressions/environment.rb +246 -0
  39. data/lib/openwfe/expressions/expressionmap.rb +258 -0
  40. data/lib/openwfe/expressions/fe_cancel.rb +109 -0
  41. data/lib/openwfe/expressions/fe_command.rb +241 -0
  42. data/lib/openwfe/expressions/fe_concurrence.rb +662 -0
  43. data/lib/openwfe/expressions/fe_cron.rb +259 -0
  44. data/lib/openwfe/expressions/fe_cursor.rb +259 -0
  45. data/lib/openwfe/expressions/fe_define.rb +192 -0
  46. data/lib/openwfe/expressions/fe_do.rb +168 -0
  47. data/lib/openwfe/expressions/fe_equals.rb +291 -0
  48. data/lib/openwfe/expressions/fe_filter.rb +129 -0
  49. data/lib/openwfe/expressions/fe_filter_definition.rb +168 -0
  50. data/lib/openwfe/expressions/fe_fqv.rb +250 -0
  51. data/lib/openwfe/expressions/fe_if.rb +303 -0
  52. data/lib/openwfe/expressions/fe_iterator.rb +145 -0
  53. data/lib/openwfe/expressions/fe_listen.rb +371 -0
  54. data/lib/openwfe/expressions/fe_losfor.rb +111 -0
  55. data/lib/openwfe/expressions/fe_misc.rb +421 -0
  56. data/lib/openwfe/expressions/fe_participant.rb +269 -0
  57. data/lib/openwfe/expressions/fe_reserve.rb +212 -0
  58. data/lib/openwfe/expressions/fe_save.rb +274 -0
  59. data/lib/openwfe/expressions/fe_sequence.rb +117 -0
  60. data/lib/openwfe/expressions/fe_set.rb +139 -0
  61. data/lib/openwfe/expressions/fe_sleep.rb +166 -0
  62. data/lib/openwfe/expressions/fe_step.rb +159 -0
  63. data/lib/openwfe/expressions/fe_subprocess.rb +168 -0
  64. data/lib/openwfe/expressions/fe_timeout.rb +127 -0
  65. data/lib/openwfe/expressions/fe_wait.rb +78 -0
  66. data/lib/openwfe/expressions/fe_when.rb +142 -0
  67. data/lib/openwfe/expressions/filter.rb +104 -0
  68. data/lib/openwfe/expressions/flowexpression.rb +847 -0
  69. data/lib/openwfe/expressions/iterator.rb +221 -0
  70. data/lib/openwfe/expressions/merge.rb +84 -0
  71. data/lib/openwfe/expressions/raw.rb +547 -0
  72. data/lib/openwfe/expressions/rprocdef.rb +375 -0
  73. data/lib/openwfe/expressions/time.rb +333 -0
  74. data/lib/openwfe/expressions/timeout.rb +178 -0
  75. data/lib/openwfe/expressions/value.rb +126 -0
  76. data/lib/openwfe/filterdef.rb +259 -0
  77. data/lib/openwfe/flowexpressionid.rb +357 -0
  78. data/lib/openwfe/listeners/listener.rb +97 -0
  79. data/lib/openwfe/listeners/listeners.rb +139 -0
  80. data/lib/openwfe/listeners/socketlisteners.rb +272 -0
  81. data/lib/openwfe/logging.rb +122 -0
  82. data/lib/openwfe/omixins.rb +95 -0
  83. data/lib/openwfe/orest/controlclient.rb +119 -0
  84. data/lib/openwfe/orest/definitions.rb +113 -0
  85. data/lib/openwfe/orest/exception.rb +60 -0
  86. data/lib/openwfe/orest/oldrestservlet.rb +279 -0
  87. data/lib/openwfe/orest/osocket.rb +148 -0
  88. data/lib/openwfe/orest/restclient.rb +176 -0
  89. data/lib/openwfe/orest/workitem.rb +206 -0
  90. data/lib/openwfe/orest/worklistclient.rb +272 -0
  91. data/lib/openwfe/orest/xmlcodec.rb +670 -0
  92. data/lib/openwfe/participants.rb +38 -0
  93. data/lib/openwfe/participants/enoparticipants.rb +230 -0
  94. data/lib/openwfe/participants/participant.rb +141 -0
  95. data/lib/openwfe/participants/participantmap.rb +249 -0
  96. data/lib/openwfe/participants/participants.rb +407 -0
  97. data/lib/openwfe/participants/soapparticipants.rb +135 -0
  98. data/lib/openwfe/participants/socketparticipants.rb +202 -0
  99. data/lib/openwfe/participants/storeparticipants.rb +254 -0
  100. data/lib/openwfe/rudefinitions.rb +130 -0
  101. data/lib/openwfe/service.rb +103 -0
  102. data/lib/openwfe/storage/yamlcustom.rb +106 -0
  103. data/lib/openwfe/storage/yamlfilestorage.rb +245 -0
  104. data/lib/openwfe/tools/flowtracer.rb +81 -0
  105. data/lib/openwfe/util/dollar.rb +217 -0
  106. data/lib/openwfe/util/irb.rb +86 -0
  107. data/lib/openwfe/util/observable.rb +144 -0
  108. data/lib/openwfe/util/ometa.rb +62 -0
  109. data/lib/openwfe/util/workqueue.rb +124 -0
  110. data/lib/openwfe/util/xml.rb +418 -0
  111. data/lib/openwfe/utils.rb +554 -0
  112. data/lib/openwfe/version.rb +37 -0
  113. data/lib/openwfe/workitem.rb +499 -0
  114. data/lib/openwfe/worklist/oldrest.rb +244 -0
  115. data/lib/openwfe/worklist/storelocks.rb +293 -0
  116. data/lib/openwfe/worklist/storeparticipant.rb +44 -0
  117. data/lib/openwfe/worklist/worklist.rb +297 -0
  118. data/test/README.txt +27 -0
  119. data/test/back_0916_test.rb +111 -0
  120. data/test/bm/bm_1_xml_vs_prog.rb +56 -0
  121. data/test/bm/bm_2_step.rb +109 -0
  122. data/test/bm/ft_0f_5ms.rb +35 -0
  123. data/test/bm/ft_26_load.rb +210 -0
  124. data/test/bm/ft_26b_load.rb +86 -0
  125. data/test/bm/ft_26c_load.rb +97 -0
  126. data/test/bm/ft_26d_load.rb +97 -0
  127. data/test/bm/ft_recu.rb +71 -0
  128. data/test/clone_test.rb +122 -0
  129. data/test/concurrence_test.rb +77 -0
  130. data/test/condition_test.rb +155 -0
  131. data/test/console_test.rb +12 -0
  132. data/test/cron_ltest.rb +15 -0
  133. data/test/description_test.rb +87 -0
  134. data/test/eno_test.rb +76 -0
  135. data/test/expmap_test.rb +54 -0
  136. data/test/expool_20031219_0916.tgz +0 -0
  137. data/test/fe_lookup_att_test.rb +62 -0
  138. data/test/fei_test.rb +181 -0
  139. data/test/file_persisted_engine_test.rb +64 -0
  140. data/test/file_persistence_test.rb +134 -0
  141. data/test/filep_cancel_test.rb +123 -0
  142. data/test/filter_test.rb +109 -0
  143. data/test/flowtestbase.rb +351 -0
  144. data/test/ft_0.rb +68 -0
  145. data/test/ft_0b_sequence.rb +36 -0
  146. data/test/ft_0c_testname.rb +33 -0
  147. data/test/ft_0d_participant.rb +30 -0
  148. data/test/ft_0e_multibody.rb +34 -0
  149. data/test/ft_10_loop.rb +134 -0
  150. data/test/ft_11_ppd.rb +415 -0
  151. data/test/ft_11b_ppd.rb +54 -0
  152. data/test/ft_12_blockparticipant.rb +97 -0
  153. data/test/ft_13_eno.rb +52 -0
  154. data/test/ft_14_subprocess.rb +88 -0
  155. data/test/ft_14b_subprocess.rb +192 -0
  156. data/test/ft_14c_subprocess.rb +68 -0
  157. data/test/ft_15_iterator.rb +216 -0
  158. data/test/ft_15b_iterator.rb +74 -0
  159. data/test/ft_16_fqv.rb +73 -0
  160. data/test/ft_17_condition.rb +84 -0
  161. data/test/ft_18_pname.rb +56 -0
  162. data/test/ft_1_unset.rb +175 -0
  163. data/test/ft_1b_unset.rb +39 -0
  164. data/test/ft_20_cron.rb +53 -0
  165. data/test/ft_21_cron.rb +87 -0
  166. data/test/ft_21b_cron_pause.rb +82 -0
  167. data/test/ft_22_history.rb +74 -0
  168. data/test/ft_23_when.rb +77 -0
  169. data/test/ft_23b_when.rb +70 -0
  170. data/test/ft_23c_wait.rb +80 -0
  171. data/test/ft_23d_cww.rb +58 -0
  172. data/test/ft_24_def.rb +44 -0
  173. data/test/ft_25_cancel.rb +89 -0
  174. data/test/ft_27_getflowpos.rb +147 -0
  175. data/test/ft_28_fileparticipant.rb +63 -0
  176. data/test/ft_29_httprb.rb +106 -0
  177. data/test/ft_2_concurrence.rb +135 -0
  178. data/test/ft_2b_concurrence.rb +188 -0
  179. data/test/ft_2c_concurrence.rb +64 -0
  180. data/test/ft_30_socketlistener.rb +203 -0
  181. data/test/ft_31_flowname.rb +40 -0
  182. data/test/ft_32_journal.rb +91 -0
  183. data/test/ft_32c_journal.rb +102 -0
  184. data/test/ft_32d_journal.rb +84 -0
  185. data/test/ft_33_description.rb +107 -0
  186. data/test/ft_34_cancelwfid.rb +80 -0
  187. data/test/ft_35_localdefs.rb +75 -0
  188. data/test/ft_36_subprocids.rb +97 -0
  189. data/test/ft_37_pnames.rb +70 -0
  190. data/test/ft_38_tag.rb +127 -0
  191. data/test/ft_38b_tag.rb +161 -0
  192. data/test/ft_38c_tag.rb +100 -0
  193. data/test/ft_39_reserve.rb +63 -0
  194. data/test/ft_39b_reserve.rb +84 -0
  195. data/test/ft_3_equals.rb +170 -0
  196. data/test/ft_3b_lookup_vf.rb +83 -0
  197. data/test/ft_40_defined.rb +61 -0
  198. data/test/ft_41_case.rb +110 -0
  199. data/test/ft_42_environments.rb +75 -0
  200. data/test/ft_43_pat10.rb +85 -0
  201. data/test/ft_44_save.rb +70 -0
  202. data/test/ft_44b_restore.rb +212 -0
  203. data/test/ft_45_citerator.rb +214 -0
  204. data/test/ft_46_pparams.rb +62 -0
  205. data/test/ft_47_filter.rb +160 -0
  206. data/test/ft_48_fe_filter.rb +88 -0
  207. data/test/ft_49_condition.rb +126 -0
  208. data/test/ft_4_misc.rb +237 -0
  209. data/test/ft_50_xml_attribute.rb +155 -0
  210. data/test/ft_51_stack.rb +55 -0
  211. data/test/ft_52_obs_participant.rb +123 -0
  212. data/test/ft_53_null_noop_participant.rb +62 -0
  213. data/test/ft_54_listen.rb +288 -0
  214. data/test/ft_54b_listen.rb +66 -0
  215. data/test/ft_54c_listen.rb +99 -0
  216. data/test/ft_55_ptimeout.rb +59 -0
  217. data/test/ft_56_timeout.rb +59 -0
  218. data/test/ft_57_a.rb +145 -0
  219. data/test/ft_58_ejournal.rb +151 -0
  220. data/test/ft_59_ps.rb +150 -0
  221. data/test/ft_59b_ps_for_pat.rb +58 -0
  222. data/test/ft_5_time.rb +118 -0
  223. data/test/ft_60_ecancel.rb +161 -0
  224. data/test/ft_61_elsub.rb +51 -0
  225. data/test/ft_62_procparticipant.rb +71 -0
  226. data/test/ft_63_pause.rb +124 -0
  227. data/test/ft_64_alias.rb +102 -0
  228. data/test/ft_64_clone.rb +69 -0
  229. data/test/ft_65_stringlaunch.rb +59 -0
  230. data/test/ft_66_subforget.rb +70 -0
  231. data/test/ft_67_schedlaunch.rb +116 -0
  232. data/test/ft_68_ifparticipant.rb +70 -0
  233. data/test/ft_69_cancelmissing.rb +51 -0
  234. data/test/ft_6_lambda.rb +64 -0
  235. data/test/ft_70_lookupvar.rb +55 -0
  236. data/test/ft_71_log.rb +60 -0
  237. data/test/ft_72_lookup_processes.rb +76 -0
  238. data/test/ft_73_cancel_sub.rb +139 -0
  239. data/test/ft_74_block_and_workitem_dup.rb +63 -0
  240. data/test/ft_75_ruby_attributes.rb +87 -0
  241. data/test/ft_76_merge_isolate.rb +88 -0
  242. data/test/ft_77_segments.rb +35 -0
  243. data/test/ft_78_eval.rb +150 -0
  244. data/test/ft_79_tticket.rb +187 -0
  245. data/test/ft_79b_tticket.rb +172 -0
  246. data/test/ft_79c_outcome.rb +56 -0
  247. data/test/ft_7_lose.rb +104 -0
  248. data/test/ft_7b_lose.rb +78 -0
  249. data/test/ft_80_spname.rb +91 -0
  250. data/test/ft_81_exp.rb +60 -0
  251. data/test/ft_82_trecu.rb +46 -0
  252. data/test/ft_83_badpause.rb +58 -0
  253. data/test/ft_84_updateexp.rb +198 -0
  254. data/test/ft_85_dolhash.rb +43 -0
  255. data/test/ft_86_dollar_fv.rb +68 -0
  256. data/test/ft_87_define.rb +74 -0
  257. data/test/ft_8_forget.rb +44 -0
  258. data/test/ft_9_cursor.rb +145 -0
  259. data/test/ft_9b_cursor.rb +105 -0
  260. data/test/ft_tests.rb +124 -0
  261. data/test/hash_test.rb +75 -0
  262. data/test/hparticipant_test.rb +164 -0
  263. data/test/lookup_att_test.rb +90 -0
  264. data/test/lookup_vf_test.rb +94 -0
  265. data/test/misc_test.rb +90 -0
  266. data/test/nut_0_irb.rb +20 -0
  267. data/test/obs_test.rb +142 -0
  268. data/test/orest_test.rb +251 -0
  269. data/test/param_test.rb +290 -0
  270. data/test/participant_test.rb +101 -0
  271. data/test/pending.rb +23 -0
  272. data/test/ps_representation.rb +133 -0
  273. data/test/rake_ltest.rb +38 -0
  274. data/test/rake_qtest.rb +68 -0
  275. data/test/raw_prog_test.rb +412 -0
  276. data/test/restart_cron_test.rb +136 -0
  277. data/test/restart_paused_test.rb +98 -0
  278. data/test/restart_sleep_test.rb +140 -0
  279. data/test/restart_tests.rb +18 -0
  280. data/test/restart_when_test.rb +112 -0
  281. data/test/ruby_procdef_test.rb +132 -0
  282. data/test/rutest_utils.rb +63 -0
  283. data/test/sec_test.rb +205 -0
  284. data/test/slock_test.rb +80 -0
  285. data/test/storage_test.rb +44 -0
  286. data/test/test.rb +3 -0
  287. data/test/timeout_test.rb +105 -0
  288. data/test/util_xml_test.rb +112 -0
  289. data/test/wfid_test.rb +175 -0
  290. data/test/wi_test.rb +75 -0
  291. metadata +433 -0
@@ -0,0 +1,95 @@
1
+ #
2
+ #--
3
+ # Copyright (c) 2007-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
+ # $Id: utils.rb 3454 2006-10-08 16:51:00Z jmettraux $
34
+ #
35
+
36
+ #
37
+ # "made in Japan"
38
+ #
39
+ # john.mettraux@openwfe.org
40
+ #
41
+
42
+ require 'openwfe/flowexpressionid'
43
+
44
+
45
+ module OpenWFE
46
+
47
+ #
48
+ # A few methods about FlowExpressionIds
49
+ #
50
+ module FeiMixin
51
+
52
+ protected
53
+
54
+ #
55
+ # Makes sure to return a FlowExpressionId instance.
56
+ #
57
+ def extract_fei (object)
58
+
59
+ if object.is_a?(FlowExpressionId)
60
+
61
+ object
62
+
63
+ elsif object.is_a?(FlowExpression) or
64
+ object.is_a?(InFlowItem)
65
+
66
+ object.fei
67
+
68
+ elsif object.is_a?(String)
69
+
70
+ FlowExpressionId.to_fei object
71
+
72
+ else
73
+
74
+ raise \
75
+ "cannot extract FlowExpressionId "+
76
+ "out of #{object.inspect}"
77
+ end
78
+ end
79
+
80
+ #
81
+ # A small method for ensuring we have a workflow instance id.
82
+ #
83
+ def extract_wfid (o, parent=false)
84
+
85
+ case o
86
+ #when String then o
87
+ when FlowExpressionId then o.wfid(parent)
88
+ when FlowExpression then o.fei.wfid(parent)
89
+ else o.to_s
90
+ end
91
+ end
92
+ end
93
+
94
+ end
95
+
@@ -0,0 +1,119 @@
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
+ require 'openwfe/orest/xmlcodec'
39
+ require 'openwfe/orest/restclient'
40
+ require 'openwfe/orest/definitions'
41
+
42
+
43
+ module OpenWFE
44
+
45
+ #
46
+ # This client is used to connect to an OpenWFE engine to call
47
+ # 'control methods' for monitoring process instances, freezing or
48
+ # cancelling them
49
+ #
50
+ class ControlClient < RestClient
51
+
52
+ def initialize (url, username, password)
53
+
54
+ super(url, username, password)
55
+ end
56
+
57
+ #
58
+ # Returns the list of controlable expressions
59
+ #
60
+ def list_expressions ()
61
+
62
+ r = self.get('listexpressions', nil, nil)
63
+ decode(r)
64
+ end
65
+
66
+ #
67
+ # Returns the list of expressions currently applied for a given
68
+ # workflow instance
69
+ #
70
+ def get_flow_position (workflowInstanceId)
71
+
72
+ params = {}
73
+ params['id'] = workflowInstanceId
74
+
75
+ r = self.get('getflowposition', nil, params)
76
+ decode(r)
77
+ end
78
+ alias :get_flow_stack :get_flow_position
79
+
80
+ #
81
+ # Cancels a given expression (and potentially its whole subtree)
82
+ #
83
+ def cancel_expression (flowExpressionId)
84
+
85
+ fei = OpenWFE.encode(flowExpressionId)
86
+
87
+ params = {}
88
+
89
+ decode(self.post('cancelexpression', nil, params, fei))
90
+ end
91
+
92
+ #
93
+ # Freezes an expression (and potentially its whole subtree)
94
+ #
95
+ def freeze_expression (flowExpressionId)
96
+
97
+ fei = OpenWFE.encode(flowExpressionId)
98
+
99
+ params = {}
100
+
101
+ decode(self.post('freezeexpression', nil, params, fei))
102
+ end
103
+
104
+ #
105
+ # Unfreezes an expression (and potentially its whole subtree)
106
+ #
107
+ def unfreeze_expression (flowExpressionId)
108
+
109
+ fei = OpenWFE.encode(flowExpressionId)
110
+
111
+ params = {}
112
+
113
+ decode(self.post('unfreezeexpression', nil, params, fei))
114
+ end
115
+
116
+ end
117
+
118
+ end
119
+
@@ -0,0 +1,113 @@
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
+
@@ -0,0 +1,60 @@
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
+ # john.mettraux@openwfe.org
38
+ #
39
+
40
+
41
+ module OpenWFE
42
+
43
+ #
44
+ # EXCEPTION(S)
45
+ #
46
+
47
+ class OwfeException < RuntimeError
48
+
49
+ def initialize ()
50
+ super.initialize()
51
+ end
52
+
53
+ def initialize (message)
54
+ super.initialize(message)
55
+ end
56
+
57
+ end
58
+
59
+ end
60
+
@@ -0,0 +1,279 @@
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
+ #
36
+ # "made in Japan"
37
+ #
38
+ # John Mettraux at openwfe.org
39
+ #
40
+
41
+ require 'thread'
42
+ require 'webrick'
43
+ require 'rexml/document'
44
+ require 'openwfe/orest/xmlcodec'
45
+
46
+
47
+ module OpenWFE
48
+
49
+ #
50
+ # A common parent class for the worklist and the engine old-style (2002)
51
+ # REST interface.
52
+ #
53
+ class OldRestServlet < WEBrick::HTTPServlet::AbstractServlet
54
+
55
+ MUTEX = Mutex.new
56
+ CT = "Content-Type"
57
+
58
+ def initialize (server, params)
59
+
60
+ super
61
+
62
+ @auth_system = params[:AuthSystem] || {}
63
+
64
+ @realm_name = get_realm_name
65
+
66
+ @last_given_session_id = -1
67
+ @sessions = {}
68
+ end
69
+
70
+ #
71
+ # this default implementation returns "no_realm".
72
+ #
73
+ def get_realm_name
74
+ "no_realm"
75
+ end
76
+
77
+ def service req, res
78
+
79
+ if req.request_method == 'POST'
80
+ class << req
81
+ def parse_query
82
+ @query = WEBrick::HTTPUtils::parse_query(@query_string)
83
+ end
84
+ end
85
+ end
86
+
87
+ username = authenticate req, res
88
+
89
+ if req.query_string == nil
90
+
91
+ get_new_session username, req, res
92
+ return
93
+ end
94
+
95
+ req.attributes['username'] = username
96
+
97
+ action = req.query["action"]
98
+ action = action.downcase if action
99
+
100
+ if action == "endworksession"
101
+ end_work_session req, res
102
+ return
103
+ end
104
+
105
+ action_method = "do__#{action}".intern
106
+
107
+ unless self.respond_to?(action_method)
108
+ action_not_implemented action, res
109
+ return
110
+ end
111
+
112
+ begin
113
+ self.send action_method, req, res
114
+ rescue Exception => e
115
+ reply_with_exception res, e
116
+ end
117
+ end
118
+
119
+ #
120
+ # Returns always the same servlet instance.
121
+ #
122
+ def self.get_instance (server, *options)
123
+ MUTEX.synchronize do
124
+ return @__instance__ if @__instance__
125
+ @__instance__ = self.new(server, *options)
126
+ end
127
+ end
128
+
129
+ protected
130
+
131
+ def reply_with_error (res, code, error_message)
132
+
133
+ res.status = code
134
+ res[CT] = "text/plain"
135
+ res.body = error_message
136
+ end
137
+
138
+ def reply_with_exception (res, exception)
139
+
140
+ message = exception.message
141
+
142
+ ms = message.split
143
+
144
+ code = 500
145
+ body = message
146
+
147
+ if ms.length > 1 and ms[0].to_i != 0
148
+ code = Integer(ms[0])
149
+ body = message[4..-1]
150
+ end
151
+
152
+ message << "\n"
153
+ message << OpenWFE::exception_to_s(exception)
154
+ message << "\n"
155
+
156
+ reply_with_error(res, code, body)
157
+ end
158
+
159
+ def reply_with_xml (res, code, xml)
160
+
161
+ res.status = code
162
+ res[CT] = "application/xml"
163
+
164
+ if xml.kind_of?(REXML::Element)
165
+ doc = REXML::Document.new
166
+ doc << xml
167
+ xml = OpenWFE::xml_to_s(doc)
168
+ end
169
+
170
+ res.body = xml
171
+ end
172
+
173
+ def end_work_session (req, res)
174
+
175
+ sid = req.query['session']
176
+ @sessions.delete(Integer(sid)) if sid
177
+
178
+ @logger.debug "end_work_session() #{sid}"
179
+ #@logger.debug "end_work_session() sessions : #{@sessions.size}"
180
+
181
+ reply_with_xml(res, 200, REXML::Element.new('bye'))
182
+ end
183
+
184
+ def authenticate req, res
185
+
186
+ user = nil
187
+
188
+ WEBrick::HTTPAuth::basic_auth(req, res, @realm_name) do |u, p|
189
+
190
+ user = get_session_user req
191
+
192
+ if user
193
+ true
194
+ else
195
+ user = u
196
+ _authenticate u, p
197
+ end
198
+ end
199
+
200
+ user
201
+ end
202
+
203
+ def _authenticate user, pass
204
+
205
+ if @auth_system.kind_of?(Hash)
206
+ @auth_system[user] == pass
207
+ elsif @auth_system.kind_of?(Proc)
208
+ @auth_system.call user, pass
209
+ elsif @auth_system.respond_to?(:authenticate)
210
+ @auth_system.authenticate user, pass
211
+ else
212
+ false
213
+ end
214
+ end
215
+
216
+ def determine_agent (req)
217
+
218
+ req.addr.join "|"
219
+ end
220
+
221
+ def get_new_session username, req, res
222
+
223
+ sid = new_session_id
224
+
225
+ @sessions[sid] = [
226
+ username,
227
+ determine_agent(req),
228
+ Time.now.to_i
229
+ ]
230
+
231
+ @logger.debug "get_new_session() #{sid}"
232
+ #@logger.debug "get_new_session() sessions : #{@sessions.size}"
233
+
234
+ esess = REXML::Element.new 'session'
235
+ esess.add_attribute 'id', sid
236
+
237
+ reply_with_xml res, 200, esess
238
+ end
239
+
240
+ def action_not_implemented action, res
241
+
242
+ reply_with_error(
243
+ res, 404, "action '#{action}' is not implemented.")
244
+ end
245
+
246
+ def new_session_id
247
+ MUTEX.synchronize do
248
+
249
+ id = Integer(Time.new.to_f * 100000)
250
+
251
+ id = @last_given_session_id + 1 \
252
+ if id <= @last_given_session_id
253
+
254
+ @last_given_session_id = id
255
+ id
256
+ end
257
+ end
258
+
259
+ def get_session_user (req)
260
+
261
+ sid = req.query['session']
262
+
263
+ @logger.debug "get_session_user() sid : #{sid}"
264
+
265
+ return nil unless sid
266
+
267
+ s = @sessions[Integer(sid)]
268
+
269
+ return nil unless s
270
+
271
+ username, agent, last_seen = s
272
+
273
+ return username if agent == determine_agent(req)
274
+
275
+ nil
276
+ end
277
+ end
278
+ end
279
+