def apply
key = (attribute(:ref) || attribute_text).to_s
if name != 'ref'
key = name
tree[1]['ref'] = key
end
key2, value = iterative_var_lookup(key)
tree[1]['ref'] = key2 if key2
tree[1]['original_ref'] = key if key2 != key
unless value
@h['participant'] =
@context.plist.lookup_info(tree[1]['ref'], h.applied_workitem)
value = key2 if ( ! @h['participant']) && (key2 != key)
end
if value.is_a?(Array) && value.size == 2 && value.last.is_a?(Hash)
@h['participant'] = value
end
unless value || @h['participant']
@h['state'] = 'failed'
persist_or_raise
raise("unknown participant or subprocess '#{tree[1]['ref']}'")
end
new_exp = if @h['participant']
@h['participant'] = nil if @h['participant'].respond_to?(:consume)
tree[0] = 'participant'
@h['name'] = 'participant'
Ruote::Exp::ParticipantExpression.new(@context, @h)
else
tree[0] = 'subprocess'
@h['name'] = 'subprocess'
Ruote::Exp::SubprocessExpression.new(@context, @h)
end
new_exp.apply
end