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,148 @@
1
+ #
2
+ #--
3
+ # Copyright (c) 2006-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
+ 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
+
@@ -0,0 +1,176 @@
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 'base64'
39
+ require 'net/http'
40
+ require 'rexml/document'
41
+
42
+ require 'openwfe/version'
43
+
44
+
45
+ module OpenWFE
46
+
47
+ #
48
+ # A basic REST client for OpenWFE services (control and worklist)
49
+ #
50
+ class RestClient
51
+
52
+ attr_reader \
53
+ :host, :port, :resource, :session_id
54
+
55
+ def initialize (url, username, password)
56
+
57
+ split_url(url)
58
+ @username = username
59
+
60
+ connect(password)
61
+ end
62
+
63
+ #
64
+ # Closes this REST client
65
+ #
66
+ def close
67
+ get('endWorkSession', nil, {})
68
+ end
69
+
70
+ protected
71
+
72
+ def decode (reply)
73
+
74
+ raise "Error : #{reply.code} - #{reply.body}" \
75
+ if reply.code != "200"
76
+
77
+ begin
78
+ xml = REXML::Document.new reply.body
79
+ OpenWFE::XmlCodec::decode xml.root
80
+ rescue Exception => e
81
+ if $DEBUG
82
+ #puts
83
+ #puts e.to_s
84
+ puts
85
+ puts "failed to decode reply :"
86
+ puts
87
+ puts reply.body
88
+ puts
89
+ end
90
+ raise e
91
+ end
92
+ end
93
+
94
+ #
95
+ # GETs a REST operation
96
+ #
97
+ def get (action, subResourceName, params)
98
+
99
+ @httpclient.get(
100
+ compute_resource(action, subResourceName, params))
101
+ end
102
+
103
+ #
104
+ # POSTs a REST operation
105
+ #
106
+ def post (action, subResourceName, params, data)
107
+
108
+ @httpclient.post(
109
+ compute_resource(action, subResourceName, params),
110
+ data.to_s)
111
+ end
112
+
113
+ private
114
+
115
+ def split_url (url)
116
+
117
+ @host = nil
118
+ @port = nil
119
+ @resource = nil
120
+
121
+ url = url[7..-1] if url[0..6] == 'http://'
122
+
123
+ i = url.index('/')
124
+ unless i
125
+ @resource = '/defaultrestresource'
126
+ else
127
+ @resource = url[i..-1]
128
+ url = url[0..i]
129
+ end
130
+
131
+ @host, @port = url.split(':')
132
+
133
+ if @port == nil
134
+ @port = 5080
135
+ else
136
+ @port = Integer(@port[0..-2])
137
+ end
138
+ end
139
+
140
+ def connect (password)
141
+
142
+ @httpclient = Net::HTTP.new(@host, @port)
143
+
144
+ hs = {}
145
+ hs['Authorization'] = \
146
+ 'Basic ' + Base64.encode64(@username+":"+password).strip
147
+ hs['RestClient'] = "openwfe-ruby #{OPENWFERU_VERSION}"
148
+ hs['User-Agent'] = "openwfe-ruby #{OPENWFERU_VERSION}"
149
+
150
+ #puts "@resource is '#{@resource}'"
151
+ #puts "hs is '#{hs.inspect}'"
152
+
153
+ r = @httpclient.get(@resource, hs)
154
+
155
+ #xml = REXML::Document.new(r.body)
156
+ #@session_id = Integer(xml.root.attributes["id"])
157
+
158
+ @session_id = decode r
159
+ end
160
+
161
+ def compute_resource (action, sub_resource_name, params)
162
+
163
+ reso = @resource.dup
164
+ reso += "/#{sub_resource_name}" if sub_resource_name
165
+
166
+ reso += "?session=#{@session_id.to_s}&action=#{action}"
167
+
168
+ params.each { |k, v|
169
+ reso += "&#{k.to_s}=#{v.to_s}"
170
+ } if params
171
+
172
+ reso
173
+ end
174
+ end
175
+ end
176
+
@@ -0,0 +1,206 @@
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
+ require 'base64'
41
+
42
+ require 'openwfe/utils'
43
+
44
+
45
+ module OpenWFE
46
+
47
+ #--
48
+ # HISTORY ITEM
49
+ #
50
+ # (currently not used in OpenWFEru itself :( )
51
+ #++
52
+
53
+ #
54
+ # HistoryItem instances are used to keep track of what happened to
55
+ # a workitem.
56
+ #
57
+ class HistoryItem
58
+
59
+ attr_accessor \
60
+ :date,
61
+ :author,
62
+ :host,
63
+ :text,
64
+ :wfd_name,
65
+ :wfd_revision,
66
+ :wf_instance_id,
67
+ :expression_id
68
+
69
+ def dup
70
+ OpenWFE::fulldup(self)
71
+ end
72
+ end
73
+
74
+
75
+ #--
76
+ # STORES
77
+ #++
78
+
79
+ #
80
+ # Models the information about a store as viewed by the current user
81
+ # (upon calling the listStores or getStoreNames methods)
82
+ #
83
+ class Store
84
+
85
+ attr_accessor :name, :workitem_count, :permissions
86
+
87
+ def initialize ()
88
+ super()
89
+ #@name = nil
90
+ #@workitem_count = nil
91
+ #@permissions = nil
92
+ end
93
+
94
+ #
95
+ # Returns true if the current user may read headers and workitems
96
+ # from this store
97
+ #
98
+ def may_read? ()
99
+ return @permissions.index('r') > -1
100
+ end
101
+
102
+ #
103
+ # Returns true if the current user may modify workitems (and at least
104
+ # proceed/forward them) in this store
105
+ #
106
+ def may_write? ()
107
+ @permissions.index('w') > -1
108
+ end
109
+
110
+ #
111
+ # Returns true if the current user may browse the headers of this
112
+ # store
113
+ #
114
+ def may_browse? ()
115
+ @permissions.index('b') > -1
116
+ end
117
+
118
+ #
119
+ # Returns true if the current user may delegate workitems to this store
120
+ #
121
+ def may_delegate? ()
122
+ @permissions.index('d') > -1
123
+ end
124
+ end
125
+
126
+ #
127
+ # A header is a summary of a workitem, returned by the getHeader
128
+ # worklist method.
129
+ #
130
+ # (Only used when accessing an OpenWFEja engine)
131
+ #
132
+ class Header < InFlowWorkItem
133
+
134
+ attr_accessor :locked
135
+ end
136
+
137
+
138
+ #--
139
+ # MISC ATTRIBUTES
140
+ #
141
+ # in openwfe-ruby, OpenWFE attributes are immediately mapped to
142
+ # Ruby instances, but some attributes still deserve their own class
143
+ #
144
+ # (Only used when accessing an OpenWFEja engine)
145
+ #++
146
+
147
+ #
148
+ # a wrapper for some binary content
149
+ #
150
+ class Base64Attribute
151
+
152
+ attr_accessor :content
153
+
154
+ def initialize (base64content)
155
+
156
+ @content = base64content
157
+ end
158
+
159
+ #
160
+ # dewraps (decode) the current content and returns it
161
+ #
162
+ def dewrap ()
163
+
164
+ Base64.decode64(@content)
165
+ end
166
+
167
+ #
168
+ # wraps some binary content and stores it in this attribute
169
+ # (class method)
170
+ #
171
+ def Base64Attribute.wrap (binaryData)
172
+
173
+ Base64Attribute.new(Base64.encode64(binaryData))
174
+ end
175
+ end
176
+
177
+
178
+ #--
179
+ # LAUNCHABLE
180
+ #++
181
+
182
+ #
183
+ # A worklist will return list of Launchable instances indicating
184
+ # what processes (URL) a user may launch on which engine.
185
+ #
186
+ # (Only used when accessing an OpenWFEja engine)
187
+ #
188
+ class Launchable
189
+
190
+ attr_accessor :url, :engine_id
191
+ end
192
+
193
+
194
+ #
195
+ # Expression, somehow equivalent to FlowExpression, but only used
196
+ # by the control interface.
197
+ #
198
+ # (Only used when accessing an OpenWFEja engine)
199
+ #
200
+ class Expression
201
+
202
+ attr_accessor :id, :apply_time, :state, :state_since
203
+ end
204
+
205
+ end
206
+