source: extensions/gsdl-video/trunk/installed/cmdline/lib/ruby/1.8/wsdl/operation.rb@ 18425

Last change on this file since 18425 was 18425, checked in by davidb, 15 years ago

Video extension to Greenstone

File size: 2.6 KB
Line 
1# WSDL4R - WSDL operation definition.
2# Copyright (C) 2002, 2003 NAKAMURA, Hiroshi <[email protected]>.
3
4# This program is copyrighted free software by NAKAMURA, Hiroshi. You can
5# redistribute it and/or modify it under the same terms of Ruby's license;
6# either the dual license version in 2003, or any later version.
7
8
9require 'wsdl/info'
10
11
12module WSDL
13
14
15class Operation < Info
16 class NameInfo
17 attr_reader :op_name
18 attr_reader :optype_name
19 attr_reader :parts
20 def initialize(op_name, optype_name, parts)
21 @op_name = op_name
22 @optype_name = optype_name
23 @parts = parts
24 end
25 end
26
27 attr_reader :name # required
28 attr_reader :parameter_order # optional
29 attr_reader :input
30 attr_reader :output
31 attr_reader :fault
32 attr_reader :type # required
33
34 def initialize
35 super
36 @name = nil
37 @type = nil
38 @parameter_order = nil
39 @input = nil
40 @output = nil
41 @fault = []
42 end
43
44 def targetnamespace
45 parent.targetnamespace
46 end
47
48 def input_info
49 typename = input.find_message.name
50 NameInfo.new(@name, typename, inputparts)
51 end
52
53 def output_info
54 typename = output.find_message.name
55 NameInfo.new(@name, typename, outputparts)
56 end
57
58 def inputparts
59 sort_parts(input.find_message.parts)
60 end
61
62 def inputname
63 XSD::QName.new(targetnamespace, input.name ? input.name.name : @name.name)
64 end
65
66 def outputparts
67 sort_parts(output.find_message.parts)
68 end
69
70 def outputname
71 XSD::QName.new(targetnamespace,
72 output.name ? output.name.name : @name.name + 'Response')
73 end
74
75 def parse_element(element)
76 case element
77 when InputName
78 o = Param.new
79 @input = o
80 o
81 when OutputName
82 o = Param.new
83 @output = o
84 o
85 when FaultName
86 o = Param.new
87 @fault << o
88 o
89 when DocumentationName
90 o = Documentation.new
91 o
92 else
93 nil
94 end
95 end
96
97 def parse_attr(attr, value)
98 case attr
99 when NameAttrName
100 @name = XSD::QName.new(targetnamespace, value.source)
101 when TypeAttrName
102 @type = value
103 when ParameterOrderAttrName
104 @parameter_order = value.source.split(/\s+/)
105 else
106 nil
107 end
108 end
109
110private
111
112 def sort_parts(parts)
113 return parts.dup unless parameter_order
114 result = []
115 parameter_order.each do |orderitem|
116 if (ele = parts.find { |part| part.name == orderitem })
117 result << ele
118 end
119 end
120 if result.length == 0
121 return parts.dup
122 end
123 # result length can be shorter than parts's.
124 # return part must not be a part of the parameterOrder.
125 result
126 end
127end
128
129
130end
Note: See TracBrowser for help on using the repository browser.