Welcome to the "trac"-ing site of soap4r!
[soap4r] [httpclient] [openpgp4u] [pkcs1] [logger] [csv] [vtr]

Changeset 1820

Show
Ignore:
Timestamp:
05/30/07 23:49:09 (1 year ago)
Author:
nahi
Message:
  • sort complextype definitions according to those base-derived class order. closes #349.
Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/lib/wsdl/soap/classDefCreator.rb

    r1805 r1820  
    106106 
    107107  def dump_complextype 
    108     definitions = @complextypes.collect { |type| 
    109       dump_complextypedef(type.name, type) if type.abstract 
    110     }.compact 
    111     definitions += @complextypes.collect { |type| 
    112       dump_complextypedef(type.name, type) unless type.abstract 
    113     }.compact 
    114     definitions.join("\n") 
     108    definitions = sort_dependency(@complextypes).collect { |type| 
     109      dump_complextypedef(type.name, type) 
     110    }.compact.join("\n") 
    115111  end 
    116112 
     
    372368    end 
    373369  end 
     370 
     371  def sort_dependency(types) 
     372    dep = {} 
     373    root = [] 
     374    types.each do |type| 
     375      if type.complexcontent and (base = type.complexcontent.base) 
     376        dep[base] ||= [] 
     377        dep[base] << type 
     378      else 
     379        root << type 
     380      end 
     381    end 
     382    sorted = [] 
     383    root.each do |type| 
     384      sorted.concat(collect_dependency(type, dep)) 
     385      dep.delete(type.name) 
     386    end 
     387    sorted.concat(dep.values.flatten) 
     388    sorted 
     389  end 
     390 
     391  def collect_dependency(type, dep) 
     392    result = [type] 
     393    return result unless dep.key?(type.name) 
     394    dep[type.name].each do |deptype| 
     395      result.concat(collect_dependency(deptype, dep)) 
     396    end 
     397    result 
     398  end 
    374399end 
    375400