=begin WSDL4R - WSDL operation definition. Copyright (C) 2002, 2003 NAKAMURA, Hiroshi. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PRATICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. =end require 'wsdl/info' module WSDL class Operation < Info class NameInfo attr_reader :op_name attr_reader :optype_name attr_reader :parts def initialize(op_name, optype_name, parts) @op_name = op_name @optype_name = optype_name @parts = parts end end attr_reader :name # required attr_reader :parameter_order # optional attr_reader :input attr_reader :output attr_reader :fault attr_reader :type # required def initialize super @name = nil @type = nil @parameter_order = nil @input = nil @output = nil @fault = nil end def targetnamespace parent.targetnamespace end def input_info op_name = @name optype_name = XSD::QName.new(targetnamespace, input.name ? input.name.name : @name.name) NameInfo.new(op_name, optype_name, inputparts) end def output_info op_name = @name optype_name = XSD::QName.new(targetnamespace, output.name ? output.name.name : @name.name) NameInfo.new(op_name, optype_name, outputparts) end def inputparts sort_parts(input.find_message.parts) end def outputparts sort_parts(output.find_message.parts) end def faultparts sort_parts(fault.find_message.parts) end def outputname XSD::QName.new(targetnamespace, output.name ? output.name.name : @name.name + 'Response') end def parse_element(element) case element when InputName o = Param.new @input = o o when OutputName o = Param.new @output = o o when FaultName o = Param.new @fault = o o when DocumentationName o = Documentation.new o else nil end end def parse_attr(attr, value) case attr when NameAttrName @name = XSD::QName.new(targetnamespace, value) when TypeAttrName @type = value when ParameterOrderAttrName @parameter_order = value.split(/\s+/) else nil end end private def sort_parts(parts) return parts.dup unless parameter_order result = [] parameter_order.each do |orderitem| if (ele = parts.find { |part| part.name == orderitem }) result << ele end end if result.length == 0 return parts.dup end if parts.length != result.length raise RuntimeError.new("Incomplete prarmeterOrder list.") end result end end end