openwferu-extras 0.9.13 → 0.9.14
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.
@@ -43,12 +43,15 @@ require_gem 'activerecord'
|
|
43
43
|
|
44
44
|
require 'openwfe/workitem'
|
45
45
|
require 'openwfe/flowexpressionid'
|
46
|
+
require 'openwfe/engine/engine'
|
46
47
|
require 'openwfe/participants/participant'
|
47
48
|
|
48
49
|
|
49
50
|
module OpenWFE
|
50
51
|
module Extras
|
51
52
|
|
53
|
+
MUTEX = Mutex.new
|
54
|
+
|
52
55
|
#
|
53
56
|
# The migration for ActiveParticipant and associated classes.
|
54
57
|
#
|
@@ -70,14 +73,19 @@ module Extras
|
|
70
73
|
t.column :wf_name, :string
|
71
74
|
t.column :wf_revision, :string
|
72
75
|
t.column :participant_name, :string
|
73
|
-
t.column :
|
76
|
+
t.column :store_name, :string
|
77
|
+
t.column :dispatch_time, :timestamp
|
78
|
+
t.column :last_modified, :timestamp
|
74
79
|
end
|
75
80
|
create_table :fields do |t|
|
76
81
|
t.column :key, :string, :null => false
|
77
|
-
t.column :
|
82
|
+
t.column :svalue, :string
|
83
|
+
t.column :yvalue, :text
|
78
84
|
t.column :workitem_id, :integer, :null => false
|
79
85
|
end
|
80
|
-
add_index :fields, [ :workitem_id, :key], :unique => true
|
86
|
+
add_index :fields, [ :workitem_id, :key ], :unique => true
|
87
|
+
add_index :fields, :key
|
88
|
+
add_index :fields, :svalue
|
81
89
|
end
|
82
90
|
def self.down
|
83
91
|
drop_table :workitems
|
@@ -132,25 +140,35 @@ module Extras
|
|
132
140
|
#
|
133
141
|
# This is a 'static' method :
|
134
142
|
#
|
135
|
-
# awi = OpenWFE::
|
143
|
+
# awi = OpenWFE::Extras::Workitem.from_owfe_workitem(wi)
|
136
144
|
#
|
137
145
|
# (This method will not save the 'ActiveWorkitem').
|
138
146
|
#
|
139
|
-
def
|
147
|
+
def Workitem.from_owfe_workitem (wi, store_name=nil)
|
148
|
+
|
149
|
+
i = nil
|
150
|
+
|
151
|
+
MUTEX.synchronize do
|
152
|
+
|
153
|
+
i = Workitem.new
|
154
|
+
i.fei = wi.fei.to_s
|
155
|
+
i.wfid = wi.fei.wfid
|
156
|
+
i.wf_name = wi.fei.workflow_definition_name
|
157
|
+
i.wf_revision = wi.fei.workflow_definition_revision
|
158
|
+
i.participant_name = wi.participant_name
|
159
|
+
i.dispatch_time = wi.dispatch_time
|
160
|
+
i.last_modified = nil
|
161
|
+
|
162
|
+
i.store_name = store_name
|
140
163
|
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
i.participant_name = wi.participant_name
|
164
|
+
wi.attributes.each do |k, v|
|
165
|
+
i.fields << Field.new_field(k, v)
|
166
|
+
end
|
167
|
+
|
168
|
+
i.save!
|
147
169
|
|
148
|
-
wi.attributes.each do |k, v|
|
149
|
-
f = Field.new
|
150
|
-
f.key = k
|
151
|
-
f.value = v
|
152
|
-
i.fields << f
|
153
170
|
end
|
171
|
+
|
154
172
|
i
|
155
173
|
end
|
156
174
|
|
@@ -163,6 +181,7 @@ module Extras
|
|
163
181
|
wi.fei = full_fei
|
164
182
|
wi.participant_name = participant_name
|
165
183
|
wi.attributes = fields_hash
|
184
|
+
# don't care about dispatch_time and last_modified
|
166
185
|
wi
|
167
186
|
end
|
168
187
|
|
@@ -180,6 +199,26 @@ module Extras
|
|
180
199
|
h
|
181
200
|
end
|
182
201
|
|
202
|
+
#
|
203
|
+
# Replaces the current fields of this workitem with the given hash.
|
204
|
+
#
|
205
|
+
# This method modifies the content of the db.
|
206
|
+
#
|
207
|
+
def replace_fields (fhash)
|
208
|
+
|
209
|
+
fields.delete_all
|
210
|
+
|
211
|
+
fhash.each do |k, v|
|
212
|
+
fields << Field.new_field(k, v)
|
213
|
+
end
|
214
|
+
|
215
|
+
#f = Field.new_field("___map_type", "smap")
|
216
|
+
#
|
217
|
+
# an old trick for backward compatibility with OpenWFEja
|
218
|
+
|
219
|
+
save!
|
220
|
+
end
|
221
|
+
|
183
222
|
#
|
184
223
|
# Returns the Field instance with the given key. This method accept
|
185
224
|
# symbols as well as strings as its parameter.
|
@@ -207,6 +246,49 @@ module Extras
|
|
207
246
|
|
208
247
|
alias :forward :reply
|
209
248
|
alias :proceed :reply
|
249
|
+
|
250
|
+
#
|
251
|
+
# Opening engine to update its reply method to accept these
|
252
|
+
# active record workitems.
|
253
|
+
#
|
254
|
+
class OpenWFE::Engine
|
255
|
+
|
256
|
+
alias :oldreply :reply
|
257
|
+
|
258
|
+
def reply (workitem)
|
259
|
+
|
260
|
+
if workitem.is_a?(Workitem)
|
261
|
+
|
262
|
+
oldreply(workitem.as_owfe_workitem)
|
263
|
+
workitem.destroy
|
264
|
+
else
|
265
|
+
|
266
|
+
oldreply(workitem)
|
267
|
+
end
|
268
|
+
end
|
269
|
+
|
270
|
+
alias :forward :reply
|
271
|
+
alias :proceed :reply
|
272
|
+
end
|
273
|
+
|
274
|
+
#
|
275
|
+
# Returns all the workitems belonging to the stores listed
|
276
|
+
# in the parameter storename_list.
|
277
|
+
# The result is a Hash whose keys are the store names and whose
|
278
|
+
# values are list of workitems.
|
279
|
+
#
|
280
|
+
def Workitem.find_in_stores (storename_list)
|
281
|
+
|
282
|
+
workitems = find_all_by_store_name(storename_list)
|
283
|
+
|
284
|
+
result = {}
|
285
|
+
|
286
|
+
workitems.each do |wi|
|
287
|
+
(result[wi.store_name] ||= []) << wi
|
288
|
+
end
|
289
|
+
|
290
|
+
result
|
291
|
+
end
|
210
292
|
end
|
211
293
|
|
212
294
|
#
|
@@ -215,7 +297,7 @@ module Extras
|
|
215
297
|
class Field < ActiveRecord::Base
|
216
298
|
|
217
299
|
belongs_to :workitem
|
218
|
-
serialize :
|
300
|
+
serialize :yvalue
|
219
301
|
|
220
302
|
#
|
221
303
|
# A quick method for doing
|
@@ -228,12 +310,30 @@ module Extras
|
|
228
310
|
#
|
229
311
|
# wi.fields << Field.new_field("toto", "b")
|
230
312
|
#
|
313
|
+
# This method does not save the new Field.
|
314
|
+
#
|
231
315
|
def self.new_field (key, value)
|
316
|
+
|
232
317
|
f = Field.new
|
233
318
|
f.key = key
|
234
319
|
f.value = value
|
235
320
|
f
|
236
321
|
end
|
322
|
+
|
323
|
+
def value= (v)
|
324
|
+
|
325
|
+
if v.is_a?(String)
|
326
|
+
self.svalue = v
|
327
|
+
else
|
328
|
+
self.yvalue = v
|
329
|
+
end
|
330
|
+
end
|
331
|
+
|
332
|
+
def value
|
333
|
+
|
334
|
+
return self.svalue if self.svalue
|
335
|
+
self.yvalue
|
336
|
+
end
|
237
337
|
end
|
238
338
|
|
239
339
|
|
@@ -280,13 +380,7 @@ module Extras
|
|
280
380
|
#
|
281
381
|
def consume (workitem)
|
282
382
|
|
283
|
-
|
284
|
-
#
|
285
|
-
# turns the workitem into an 'active' one
|
286
|
-
|
287
|
-
awi.save
|
288
|
-
#
|
289
|
-
# and saves it in the db.
|
383
|
+
Workitem.from_owfe_workitem(workitem)
|
290
384
|
end
|
291
385
|
|
292
386
|
#
|
@@ -320,12 +414,42 @@ module Extras
|
|
320
414
|
end
|
321
415
|
|
322
416
|
#
|
323
|
-
#
|
417
|
+
# An extension of ActiveParticipant. It has a 'store_name' and it
|
418
|
+
# makes sure to flag every workitem it 'consumes' with that name
|
419
|
+
# (in its 'store_name' column/field).
|
420
|
+
#
|
421
|
+
# This is the participant used mainly in 'densha' for human users.
|
324
422
|
#
|
325
423
|
class ActiveStoreParticipant < ActiveParticipant
|
326
424
|
include Enumerable
|
327
425
|
|
426
|
+
def initialize (store_name)
|
427
|
+
|
428
|
+
super()
|
429
|
+
@store_name = store_name
|
430
|
+
end
|
431
|
+
|
432
|
+
#
|
433
|
+
# This is the method called by the OpenWFEru engine to hand a
|
434
|
+
# workitem to this participant.
|
435
|
+
#
|
436
|
+
def consume (workitem)
|
437
|
+
|
438
|
+
Workitem.from_owfe_workitem(workitem, @store_name)
|
439
|
+
end
|
440
|
+
|
441
|
+
#
|
442
|
+
# Iterates over the workitems currently in this store.
|
443
|
+
#
|
328
444
|
def each (&block)
|
445
|
+
|
446
|
+
return unless block
|
447
|
+
|
448
|
+
wis = Workitem.find_by_store_name @store_name
|
449
|
+
|
450
|
+
wis.each do |wi|
|
451
|
+
block.call wi
|
452
|
+
end
|
329
453
|
end
|
330
454
|
end
|
331
455
|
|
@@ -38,9 +38,11 @@
|
|
38
38
|
#
|
39
39
|
|
40
40
|
require 'csv'
|
41
|
+
require 'open-uri'
|
41
42
|
|
42
43
|
require 'openwfe/utils'
|
43
44
|
require 'openwfe/util/dollar'
|
45
|
+
require 'openwfe/workitem'
|
44
46
|
|
45
47
|
include OpenWFE
|
46
48
|
|
@@ -204,24 +206,49 @@ module Extras
|
|
204
206
|
end
|
205
207
|
end
|
206
208
|
|
207
|
-
|
209
|
+
workitem
|
208
210
|
end
|
209
211
|
|
210
212
|
#
|
211
213
|
# Passes a simple Hash instance though the csv table
|
212
214
|
#
|
213
215
|
def transform (hash)
|
216
|
+
|
214
217
|
wi = InFlowWorkItem.new()
|
215
218
|
wi.attributes = hash
|
216
|
-
|
219
|
+
|
220
|
+
transform_wi(nil, wi).attributes
|
221
|
+
end
|
222
|
+
|
223
|
+
#
|
224
|
+
# Outputs back this table as a CSV String
|
225
|
+
#
|
226
|
+
def to_csv
|
227
|
+
|
228
|
+
s = ""
|
229
|
+
s << @header.to_csv
|
230
|
+
s << "\n"
|
231
|
+
@rows.each do |row|
|
232
|
+
s << row.join(",")
|
233
|
+
s << "\n"
|
234
|
+
end
|
235
|
+
s
|
217
236
|
end
|
218
237
|
|
219
238
|
protected
|
220
239
|
|
221
240
|
def to_csv_array (csv_data)
|
222
241
|
|
223
|
-
return csv_data if csv_data.kind_of?
|
224
|
-
|
242
|
+
return csv_data if csv_data.kind_of?(Array)
|
243
|
+
|
244
|
+
if csv_data.is_a?(URI)
|
245
|
+
csv_data = csv_data.to_s
|
246
|
+
end
|
247
|
+
if OpenWFE::parse_uri(csv_data)
|
248
|
+
csv_data = open(csv_data)
|
249
|
+
end
|
250
|
+
|
251
|
+
CSV::Reader.parse(csv_data)
|
225
252
|
end
|
226
253
|
|
227
254
|
def matches? (row, fexp, wi)
|
@@ -262,7 +289,7 @@ module Extras
|
|
262
289
|
|
263
290
|
#puts "__row matches"
|
264
291
|
|
265
|
-
|
292
|
+
true
|
266
293
|
end
|
267
294
|
|
268
295
|
def regex_compare (value, cell)
|
@@ -314,9 +341,9 @@ module Extras
|
|
314
341
|
def resolve_in_header (in_header)
|
315
342
|
|
316
343
|
in_header = "f:#{in_header}" \
|
317
|
-
if points_to_nothing?
|
344
|
+
if points_to_nothing?(in_header)
|
318
345
|
|
319
|
-
|
346
|
+
"${#{in_header}}"
|
320
347
|
end
|
321
348
|
|
322
349
|
def apply (row, fexp, wi)
|
@@ -347,7 +374,6 @@ module Extras
|
|
347
374
|
elsif type == "f"
|
348
375
|
wi.set_attribute(target, value)
|
349
376
|
elsif type == "r"
|
350
|
-
#instance_eval(value)
|
351
377
|
OpenWFE::instance_eval_safely(self, value, 3)
|
352
378
|
end
|
353
379
|
end
|
@@ -380,12 +406,13 @@ module Extras
|
|
380
406
|
end
|
381
407
|
|
382
408
|
def empty_row? (row)
|
409
|
+
|
383
410
|
return true unless row
|
384
411
|
return true if (row.length == 1 and not row[0])
|
385
412
|
row.each do |cell|
|
386
413
|
return false if cell
|
387
414
|
end
|
388
|
-
|
415
|
+
true
|
389
416
|
end
|
390
417
|
|
391
418
|
def points_to_nothing? (label)
|
@@ -418,7 +445,7 @@ module Extras
|
|
418
445
|
names.each do |name|
|
419
446
|
return label[i+1..-1] if s == name
|
420
447
|
end
|
421
|
-
|
448
|
+
nil
|
422
449
|
end
|
423
450
|
|
424
451
|
class Header
|
@@ -440,6 +467,18 @@ module Extras
|
|
440
467
|
end
|
441
468
|
# else don't add
|
442
469
|
end
|
470
|
+
|
471
|
+
def to_csv
|
472
|
+
|
473
|
+
s = ""
|
474
|
+
@ins.each do |_in|
|
475
|
+
s << "in:#{_in}," if _in
|
476
|
+
end
|
477
|
+
@outs.each do |out|
|
478
|
+
s << "out:#{out}," if out
|
479
|
+
end
|
480
|
+
s[0..-2]
|
481
|
+
end
|
443
482
|
end
|
444
483
|
end
|
445
484
|
|
metadata
CHANGED
@@ -3,8 +3,8 @@ rubygems_version: 0.9.0
|
|
3
3
|
specification_version: 1
|
4
4
|
name: openwferu-extras
|
5
5
|
version: !ruby/object:Gem::Version
|
6
|
-
version: 0.9.
|
7
|
-
date: 2007-
|
6
|
+
version: 0.9.14
|
7
|
+
date: 2007-09-18 00:00:00 +09:00
|
8
8
|
summary: OpenWFEru extras (sqs, csv, ...)
|
9
9
|
require_paths:
|
10
10
|
- lib
|