File: complexType.rb

package info (click to toggle)
ruby-soap4r 2.0.5-6
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 5,016 kB
  • sloc: ruby: 52,729; xml: 266; sh: 42; javascript: 20; makefile: 11; perl: 10
file content (193 lines) | stat: -rw-r--r-- 3,855 bytes parent folder | download | duplicates (5)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
# WSDL4R - XMLSchema complexType definition for WSDL.
# Copyright (C) 2000-2007  NAKAMURA, Hiroshi <nahi@ruby-lang.org>.

# This program is copyrighted free software by NAKAMURA, Hiroshi.  You can
# redistribute it and/or modify it under the same terms of Ruby's license;
# either the dual license version in 2003, or any later version.


require 'wsdl/info'
require 'wsdl/xmlSchema/element'
require 'xsd/namedelements'


module WSDL
module XMLSchema


class ComplexType < Info
  attr_accessor :name
  attr_accessor :complexcontent
  attr_accessor :simplecontent
  attr_reader :content
  attr_accessor :final
  attr_accessor :mixed
  attr_accessor :abstract

  def initialize(name = nil)
    super()
    @name = name
    @complexcontent = nil
    @simplecontent = nil
    @content = nil
    @final = nil
    @mixed = false
    @abstract = false
    @attributes = XSD::NamedElements.new
  end

  def targetnamespace
    # inner elements can be qualified
    # parent.is_a?(WSDL::XMLSchema::Element) ? nil : parent.targetnamespace
    parent.targetnamespace
  end

  def elementformdefault
    parent.elementformdefault
  end

  def have_any?
    if c = @complexcontent || @content
      c.have_any?
    else
      false
    end
  end

  def choice?
    if c = @complexcontent || @content
      c.choice?
    else
      false
    end
  end

  def base
    if c = @complexcontent || @simplecontent
      c.base
    end
  end

  def elements
    if c = @complexcontent || @content
      c.elements
    else
      XSD::NamedElements::Empty
    end
  end

  def attributes
    attrs = nil
    if @complexcontent
      attrs = @complexcontent.attributes + @attributes
    elsif @simplecontent
      attrs = @simplecontent.attributes + @attributes
    else
      attrs = @attributes
    end
    found = XSD::NamedElements.new
    attrs.each do |attr|
      case attr
      when Attribute
        found << attr
      when AttributeGroup
        if attr.attributes
          found.concat(attr.attributes)
        end
      when AnyAttribute
        # ignored
      else
        warn("unknown attribute: #{attr}")
      end
    end
    found
  end

  def nested_elements
    if c = @complexcontent || @content
      c.nested_elements
    else
      XSD::NamedElements::Empty
    end
  end

  def find_element(name)
    return nil if name.nil?
    elements.each do |element|
      return element if name == element.name
    end
    nil
  end

  def find_element_by_name(name)
    return nil if name.nil?
    elements.each do |element|
      return element if name == element.name.name
    end
    nil
  end

  def sequence_elements=(elements)
    @content = Sequence.new
    elements.each do |element|
      @content << element
    end
  end

  def all_elements=(elements)
    @content = All.new
    elements.each do |element|
      @content << element
    end
  end

  def parse_element(element)
    case element
    when AllName
      @content = All.new
    when SequenceName
      @content = Sequence.new
    when ChoiceName
      @content = Choice.new
    when GroupName
      @content = Group.new
    when ComplexContentName
      @complexcontent = ComplexContent.new
    when SimpleContentName
      @simplecontent = SimpleContent.new
    when AttributeName
      o = Attribute.new
      @attributes << o
      o
    when AttributeGroupName
      o = AttributeGroup.new
      @attributes << o
      o
    when AnyAttributeName
      o = AnyAttribute.new
      @attributes << o
      o
    else
      nil
    end
  end

  def parse_attr(attr, value)
    case attr
    when AbstractAttrName
      @abstract = to_boolean(value)
    when FinalAttrName
      @final = value.source
    when MixedAttrName
      @mixed = to_boolean(value)
    when NameAttrName
      @name = XSD::QName.new(targetnamespace, value.source)
    else
      nil
    end
  end
end


end
end