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

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

Video extension to Greenstone

File size: 4.9 KB
Line 
1# WSDL4R - WSDL to ruby mapping library.
2# Copyright (C) 2002-2005 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 'logger'
10require 'xsd/qname'
11require 'wsdl/importer'
12require 'wsdl/soap/classDefCreator'
13require 'wsdl/soap/servantSkeltonCreator'
14require 'wsdl/soap/driverCreator'
15require 'wsdl/soap/clientSkeltonCreator'
16require 'wsdl/soap/standaloneServerStubCreator'
17require 'wsdl/soap/cgiStubCreator'
18
19
20module WSDL
21module SOAP
22
23
24class WSDL2Ruby
25 attr_accessor :location
26 attr_reader :opt
27 attr_accessor :logger
28 attr_accessor :basedir
29
30 def run
31 unless @location
32 raise RuntimeError, "WSDL location not given"
33 end
34 @wsdl = import(@location)
35 @name = @wsdl.name ? @wsdl.name.name : 'default'
36 create_file
37 end
38
39private
40
41 def initialize
42 @location = nil
43 @opt = {}
44 @logger = Logger.new(STDERR)
45 @basedir = nil
46 @wsdl = nil
47 @name = nil
48 end
49
50 def create_file
51 create_classdef if @opt.key?('classdef')
52 create_servant_skelton(@opt['servant_skelton']) if @opt.key?('servant_skelton')
53 create_cgi_stub(@opt['cgi_stub']) if @opt.key?('cgi_stub')
54 create_standalone_server_stub(@opt['standalone_server_stub']) if @opt.key?('standalone_server_stub')
55 create_driver(@opt['driver']) if @opt.key?('driver')
56 create_client_skelton(@opt['client_skelton']) if @opt.key?('client_skelton')
57 end
58
59 def create_classdef
60 @logger.info { "Creating class definition." }
61 @classdef_filename = @name + '.rb'
62 check_file(@classdef_filename) or return
63 write_file(@classdef_filename) do |f|
64 f << WSDL::SOAP::ClassDefCreator.new(@wsdl).dump
65 end
66 end
67
68 def create_client_skelton(servicename)
69 @logger.info { "Creating client skelton." }
70 servicename ||= @wsdl.services[0].name.name
71 @client_skelton_filename = servicename + 'Client.rb'
72 check_file(@client_skelton_filename) or return
73 write_file(@client_skelton_filename) do |f|
74 f << shbang << "\n"
75 f << "require '#{@driver_filename}'\n\n" if @driver_filename
76 f << WSDL::SOAP::ClientSkeltonCreator.new(@wsdl).dump(
77 create_name(servicename))
78 end
79 end
80
81 def create_servant_skelton(porttypename)
82 @logger.info { "Creating servant skelton." }
83 @servant_skelton_filename = (porttypename || @name + 'Servant') + '.rb'
84 check_file(@servant_skelton_filename) or return
85 write_file(@servant_skelton_filename) do |f|
86 f << "require '#{@classdef_filename}'\n\n" if @classdef_filename
87 f << WSDL::SOAP::ServantSkeltonCreator.new(@wsdl).dump(
88 create_name(porttypename))
89 end
90 end
91
92 def create_cgi_stub(servicename)
93 @logger.info { "Creating CGI stub." }
94 servicename ||= @wsdl.services[0].name.name
95 @cgi_stubFilename = servicename + '.cgi'
96 check_file(@cgi_stubFilename) or return
97 write_file(@cgi_stubFilename) do |f|
98 f << shbang << "\n"
99 if @servant_skelton_filename
100 f << "require '#{@servant_skelton_filename}'\n\n"
101 end
102 f << WSDL::SOAP::CGIStubCreator.new(@wsdl).dump(create_name(servicename))
103 end
104 end
105
106 def create_standalone_server_stub(servicename)
107 @logger.info { "Creating standalone stub." }
108 servicename ||= @wsdl.services[0].name.name
109 @standalone_server_stub_filename = servicename + '.rb'
110 check_file(@standalone_server_stub_filename) or return
111 write_file(@standalone_server_stub_filename) do |f|
112 f << shbang << "\n"
113 f << "require '#{@servant_skelton_filename}'\n\n" if @servant_skelton_filename
114 f << WSDL::SOAP::StandaloneServerStubCreator.new(@wsdl).dump(
115 create_name(servicename))
116 end
117 end
118
119 def create_driver(porttypename)
120 @logger.info { "Creating driver." }
121 @driver_filename = (porttypename || @name) + 'Driver.rb'
122 check_file(@driver_filename) or return
123 write_file(@driver_filename) do |f|
124 f << "require '#{@classdef_filename}'\n\n" if @classdef_filename
125 f << WSDL::SOAP::DriverCreator.new(@wsdl).dump(
126 create_name(porttypename))
127 end
128 end
129
130 def write_file(filename)
131 if @basedir
132 filename = File.join(basedir, filename)
133 end
134 File.open(filename, "w") do |f|
135 yield f
136 end
137 end
138
139 def check_file(filename)
140 if @basedir
141 filename = File.join(basedir, filename)
142 end
143 if FileTest.exist?(filename)
144 if @opt.key?('force')
145 @logger.warn {
146 "File '#{filename}' exists but overrides it."
147 }
148 true
149 else
150 @logger.warn {
151 "File '#{filename}' exists. #{$0} did not override it."
152 }
153 false
154 end
155 else
156 @logger.info { "Creates file '#{filename}'." }
157 true
158 end
159 end
160
161 def shbang
162 "#!/usr/bin/env ruby"
163 end
164
165 def create_name(name)
166 name ? XSD::QName.new(@wsdl.targetnamespace, name) : nil
167 end
168
169 def import(location)
170 WSDL::Importer.import(location)
171 end
172end
173
174
175end
176end
Note: See TracBrowser for help on using the repository browser.