/tools/Ruby/lib/ruby/1.8/wsdl/xmlSchema/complexType.rb

http://github.com/agross/netopenspace · Ruby · 139 lines · 113 code · 19 blank · 7 comment · 15 complexity · f519c24fe309f570ef81a911bab3774a MD5 · raw file

  1. # WSDL4R - XMLSchema complexType definition for WSDL.
  2. # Copyright (C) 2002, 2003 NAKAMURA, Hiroshi <nahi@ruby-lang.org>.
  3. # This program is copyrighted free software by NAKAMURA, Hiroshi. You can
  4. # redistribute it and/or modify it under the same terms of Ruby's license;
  5. # either the dual license version in 2003, or any later version.
  6. require 'wsdl/info'
  7. require 'wsdl/xmlSchema/content'
  8. require 'wsdl/xmlSchema/element'
  9. require 'xsd/namedelements'
  10. module WSDL
  11. module XMLSchema
  12. class ComplexType < Info
  13. attr_accessor :name
  14. attr_accessor :complexcontent
  15. attr_accessor :simplecontent
  16. attr_reader :content
  17. attr_accessor :final
  18. attr_accessor :mixed
  19. attr_reader :attributes
  20. def initialize(name = nil)
  21. super()
  22. @name = name
  23. @complexcontent = nil
  24. @simplecontent = nil
  25. @content = nil
  26. @final = nil
  27. @mixed = false
  28. @attributes = XSD::NamedElements.new
  29. end
  30. def targetnamespace
  31. # inner elements can be qualified
  32. # parent.is_a?(WSDL::XMLSchema::Element) ? nil : parent.targetnamespace
  33. parent.targetnamespace
  34. end
  35. def elementformdefault
  36. parent.elementformdefault
  37. end
  38. AnyAsElement = Element.new(XSD::QName.new(nil, 'any'), XSD::AnyTypeName)
  39. def each_element
  40. if content
  41. content.elements.each do |element|
  42. if element.is_a?(Any)
  43. yield(AnyAsElement)
  44. else
  45. yield(element)
  46. end
  47. end
  48. end
  49. end
  50. def find_element(name)
  51. if content
  52. content.elements.each do |element|
  53. if element.is_a?(Any)
  54. return AnyAsElement if name == AnyAsElement.name
  55. else
  56. return element if name == element.name
  57. end
  58. end
  59. end
  60. nil
  61. end
  62. def find_element_by_name(name)
  63. if content
  64. content.elements.each do |element|
  65. if element.is_a?(Any)
  66. return AnyAsElement if name == AnyAsElement.name.name
  67. else
  68. return element if name == element.name.name
  69. end
  70. end
  71. end
  72. nil
  73. end
  74. def sequence_elements=(elements)
  75. @content = Sequence.new
  76. elements.each do |element|
  77. @content << element
  78. end
  79. end
  80. def all_elements=(elements)
  81. @content = All.new
  82. elements.each do |element|
  83. @content << element
  84. end
  85. end
  86. def parse_element(element)
  87. case element
  88. when AllName
  89. @content = All.new
  90. when SequenceName
  91. @content = Sequence.new
  92. when ChoiceName
  93. @content = Choice.new
  94. when ComplexContentName
  95. @complexcontent = ComplexContent.new
  96. when SimpleContentName
  97. @simplecontent = SimpleContent.new
  98. when AttributeName
  99. o = Attribute.new
  100. @attributes << o
  101. o
  102. else
  103. nil
  104. end
  105. end
  106. def parse_attr(attr, value)
  107. case attr
  108. when FinalAttrName
  109. @final = value.source
  110. when MixedAttrName
  111. @mixed = (value.source == 'true')
  112. when NameAttrName
  113. @name = XSD::QName.new(targetnamespace, value.source)
  114. else
  115. nil
  116. end
  117. end
  118. end
  119. end
  120. end