Parent

Files

Class/Module Index [+]

Quicksearch

WSDL::XMLSchema::ComplexType

Attributes

abstract[RW]
complexcontent[RW]
content[R]
final[RW]
mixed[RW]
name[RW]
simplecontent[RW]

Public Class Methods

new(name = nil) click to toggle source
# File lib/wsdl/xmlSchema/complexType.rb, line 27
def initialize(name = nil)
  super()
  @name = name
  @complexcontent = nil
  @simplecontent = nil
  @content = nil
  @final = nil
  @mixed = false
  @abstract = false
  @attributes = XSD::NamedElements.new
end

Public Instance Methods

all_elements=(elements) click to toggle source
# File lib/wsdl/xmlSchema/complexType.rb, line 137
def all_elements=(elements)
  @content = All.new
  elements.each do |element|
    @content << element
  end
end
attributes() click to toggle source
# File lib/wsdl/xmlSchema/complexType.rb, line 79
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
base() click to toggle source
# File lib/wsdl/xmlSchema/complexType.rb, line 65
def base
  if c = @complexcontent || @simplecontent
    c.base
  end
end
check_type() click to toggle source
# File lib/wsdl/soap/complexType.rb, line 22
def check_type
  if have_any?
    :TYPE_STRUCT
  elsif content
    if attributes.empty? and map_as_array?
      if name == ::SOAP::Mapping::MapQName
        :TYPE_MAP
      else
        :TYPE_ARRAY
      end
    else
      :TYPE_STRUCT
    end
  elsif complexcontent
    complexcontent.check_type
  elsif simplecontent
    :TYPE_SIMPLE
  elsif !attributes.empty?
    :TYPE_STRUCT
  else # empty complexType definition (seen in partner.wsdl of salesforce)
    :TYPE_EMPTY
  end
end
child_defined_complextype(name) click to toggle source
# File lib/wsdl/soap/complexType.rb, line 71
def child_defined_complextype(name)
  ele = nil
  case compoundtype
  when :TYPE_STRUCT, :TYPE_MAP
    unless ele = find_element(name)
      if name.namespace.nil?
        ele = find_element_by_name(name.name)
      end
    end
  when :TYPE_ARRAY
    e = elements
    if e.size == 1
      ele = e[0]
    else
      raise RuntimeError.new("Assert: must not reach.")
    end
  else
    raise RuntimeError.new("Assert: Not implemented.")
  end
  unless ele
    raise RuntimeError.new("Cannot find #{name} as a children of #{@name}.")
  end
  ele.local_complextype
end
child_type(name = nil) click to toggle source
# File lib/wsdl/soap/complexType.rb, line 46
def child_type(name = nil)
  case compoundtype
  when :TYPE_STRUCT
    if ele = find_element(name)
      ele.type
    elsif ele = find_element_by_name(name.name)
      ele.type
    end
  when :TYPE_ARRAY
    @contenttype ||= content_arytype
  when :TYPE_MAP
    item_ele = find_element_by_name("item") or
      raise RuntimeError.new("'item' element not found in Map definition.")
    content = item_ele.local_complextype or
      raise RuntimeError.new("No complexType definition for 'item'.")
    if ele = content.find_element(name)
      ele.type
    elsif ele = content.find_element_by_name(name.name)
      ele.type
    end
  else
    raise NotImplementedError.new("Unknown kind of complexType.")
  end
end
choice?() click to toggle source
# File lib/wsdl/xmlSchema/complexType.rb, line 57
def choice?
  if c = @complexcontent || @content
    c.choice?
  else
    false
  end
end
compoundtype() click to toggle source
# File lib/wsdl/soap/complexType.rb, line 18
def compoundtype
  @compoundtype ||= check_type
end
elementformdefault() click to toggle source
# File lib/wsdl/xmlSchema/complexType.rb, line 45
def elementformdefault
  parent.elementformdefault
end
elements() click to toggle source
# File lib/wsdl/xmlSchema/complexType.rb, line 71
def elements
  if c = @complexcontent || @content
    c.elements
  else
    XSD::NamedElements::Empty
  end
end
find_aryelement() click to toggle source
# File lib/wsdl/soap/complexType.rb, line 124
def find_aryelement
  unless compoundtype == :TYPE_ARRAY
    raise RuntimeError.new("Assert: not for array")
  end
  if map_as_array?
    return nested_elements[0]
  end
  nil # use default item name
end
find_arytype() click to toggle source
# File lib/wsdl/soap/complexType.rb, line 111
def find_arytype
  unless compoundtype == :TYPE_ARRAY
    raise RuntimeError.new("Assert: not for array")
  end
  if arytype = find_soapenc_arytype
    return arytype
  end
  if map_as_array?
    return element_simpletype(elements[0])
  end
  raise RuntimeError.new("Assert: Unknown array definition.")
end
find_element(name) click to toggle source
# File lib/wsdl/xmlSchema/complexType.rb, line 114
def find_element(name)
  return nil if name.nil?
  elements.each do |element|
    return element if name == element.name
  end
  nil
end
find_element_by_name(name) click to toggle source
# File lib/wsdl/xmlSchema/complexType.rb, line 122
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
find_soapenc_arytype() click to toggle source
# File lib/wsdl/soap/complexType.rb, line 96
def find_soapenc_arytype
  unless compoundtype == :TYPE_ARRAY
    raise RuntimeError.new("Assert: not for array")
  end
  if complexcontent
    if complexcontent.restriction
      complexcontent.restriction.attributes.each do |attribute|
        if attribute.ref == ::SOAP::AttrArrayTypeName
          return attribute.arytype
        end
      end
    end
  end
end
have_any?() click to toggle source
# File lib/wsdl/xmlSchema/complexType.rb, line 49
def have_any?
  if c = @complexcontent || @content
    c.have_any?
  else
    false
  end
end
nested_elements() click to toggle source
# File lib/wsdl/xmlSchema/complexType.rb, line 106
def nested_elements
  if c = @complexcontent || @content
    c.nested_elements
  else
    XSD::NamedElements::Empty
  end
end
parse_attr(attr, value) click to toggle source
# File lib/wsdl/xmlSchema/complexType.rb, line 175
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
parse_element(element) click to toggle source
# File lib/wsdl/xmlSchema/complexType.rb, line 144
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
sequence_elements=(elements) click to toggle source
# File lib/wsdl/xmlSchema/complexType.rb, line 130
def sequence_elements=(elements)
  @content = Sequence.new
  elements.each do |element|
    @content << element
  end
end
targetnamespace() click to toggle source
# File lib/wsdl/xmlSchema/complexType.rb, line 39
def targetnamespace
  # inner elements can be qualified
  # parent.is_a?(WSDL::XMLSchema::Element) ? nil : parent.targetnamespace
  parent.targetnamespace
end

[Validate]

Generated with the Darkfish Rdoc Generator 2.