Compare commits

..

958 Commits

Author SHA1 Message Date
Tony Tam
eafcc43295 Merge pull request #851 from swagger-api/develop_2.0
merge from develop 2.0 for release
2015-06-09 01:13:42 -07:00
fehguy
570383d5d5 updated name, disabled test 2015-06-09 00:41:08 -07:00
fehguy
3d2f09a693 updated versions 2015-06-09 00:25:09 -07:00
Tony Tam
33c2b1b623 Merge pull request #849 from wing328/fix_podfile
Fix objc podfile in sample
2015-06-09 00:18:24 -07:00
wing328
207776cec6 udpate podfile 2015-06-09 15:14:37 +08:00
Tony Tam
3b3738e587 Merge pull request #847 from wing328/fix_indentation
Fix indentation
2015-06-08 23:43:09 -07:00
wing328
680078dc58 fix csharp refer to apiinvoker 2015-06-09 13:52:01 +08:00
wing328
a593271de1 rollback flash apiinvoker based on 8ee8eddcff 2015-06-09 13:33:30 +08:00
wing328
7fd996bc86 update php sample 2015-06-09 13:31:14 +08:00
wing328
d155ddd026 rollback java spring mvc template 2015-06-09 13:15:03 +08:00
wing328
fc38b9bb79 rollback akkascala to another commit (637ee77d66) 2015-06-09 13:13:56 +08:00
wing328
29c41adddf rollback java jxrs template 2015-06-09 13:11:16 +08:00
wing328
180d48e89d rollback java template 2015-06-09 13:08:32 +08:00
wing328
900f39686d rollback grovvy template 2015-06-09 13:07:45 +08:00
wing328
46c5b776ed rollback csharp template 2015-06-09 13:04:34 +08:00
wing328
7b6480f7f8 rollback codegen template 2015-06-09 13:04:03 +08:00
wing328
f610958209 rollback asyncscala template 2015-06-09 13:03:29 +08:00
wing328
ab9daaacd6 rollback android template 2015-06-09 13:02:54 +08:00
wing328
a8f6044c9b rollback akka-scala template 2015-06-09 13:01:50 +08:00
wing328
6efef51036 rollback validator template 2015-06-09 13:01:11 +08:00
wing328
6617af5209 rollback tizen template 2015-06-09 13:00:42 +08:00
wing328
410144ea1c rollback swift template 2015-06-09 13:00:13 +08:00
wing328
d8060f47a8 rollback swagger-static template 2015-06-09 12:58:41 +08:00
wing328
f2ee63da3b rollback scalatra template 2015-06-09 12:57:31 +08:00
wing328
b636d2a2c9 rollback scala template 2015-06-09 12:56:26 +08:00
wing328
7d6fdf96c0 rollback retroit template 2015-06-09 12:54:48 +08:00
wing328
b1f5c0314e rollback objc templates 2015-06-09 12:53:33 +08:00
wing328
eede02a6ab rollback nodejs and htmldocs template 2015-06-09 12:51:52 +08:00
wing328
eee8685847 rollback flash template 2015-06-09 12:47:18 +08:00
wing328
6253bbff3d roll back qt5cpp template 2015-06-09 12:42:07 +08:00
wing328
263b4080ee rollback python3 template 2015-06-09 12:40:45 +08:00
wing328
50ae9659ad rollback php template 2015-06-09 12:37:30 +08:00
wing328
2e12ac5957 rollback perl template 2015-06-09 12:34:38 +08:00
wing328
5f6622c70d rollback ruby template 2015-06-09 12:33:30 +08:00
wing328
d5cbbae182 rollback ruby swagger template 2015-06-09 12:26:02 +08:00
wing328
0dd8670724 rollback python template 2015-06-09 12:22:59 +08:00
Tony Tam
915ad77d03 Merge branch 'develop_2.0' 2015-06-08 16:22:15 -07:00
Tony Tam
f025dda4e2 merged 2015-06-08 16:21:58 -07:00
Ron
1644956a9c Merge pull request #843 from swagger-api/repackage
merge repackage into development
2015-06-08 19:13:10 -04:00
Tony Tam
b1cea25237 updated version 2015-06-08 16:07:31 -07:00
Tony Tam
c1ddb84839 restored imports 2015-06-08 16:04:04 -07:00
Tony Tam
445d0f7928 rebuilt 2015-06-08 15:48:49 -07:00
Tony Tam
637ee77d66 added script, fixed templates 2015-06-08 15:40:05 -07:00
Ron
fb989fcd0e Integrated UI with the generator's packaging process 2015-06-08 16:25:37 -04:00
Tony Tam
64ea3f8177 rebuilt 2015-06-07 20:50:35 -07:00
Tony Tam
aaa0603e29 rebuilt, added back imports 2015-06-07 20:47:22 -07:00
Tony Tam
450edae160 fixed imports 2015-06-07 20:35:56 -07:00
Tony Tam
4f0198dd13 rebuilt, fixed test imports 2015-06-07 20:30:41 -07:00
Ron
56714e6c07 Code fixes after reformatting 2015-06-07 23:20:34 -04:00
Ron
aa0586c666 Dependency update 2015-06-07 11:56:34 -04:00
Ron
8ee8eddcff Code reformatting 2015-06-07 11:56:26 -04:00
Ron
1c2d0656b0 Code reformatting 2015-06-07 11:56:08 -04:00
Ron
22d7db2cb4 url changes 2015-06-07 11:46:11 -04:00
Ron
96107193e9 updated reverb references 2015-06-07 11:18:49 -04:00
Ron
1a39678206 Refactoring 2015-06-07 11:05:00 -04:00
Tony Tam
6c57810128 rebuilt 2015-06-07 00:08:01 -07:00
Tony Tam
8c340d52a4 updated packages 2015-06-06 23:58:36 -07:00
Tony Tam
1df3ed4487 repackaged 2015-06-06 23:44:20 -07:00
Tony Tam
0c1657d744 updated package 2015-06-06 23:43:34 -07:00
Tony Tam
44af46c9b3 updated files 2015-06-06 23:11:28 -07:00
Tony Tam
18eb3cde97 updated files 2015-06-06 23:11:20 -07:00
Ron
776508759d Merge pull request #834 from xhh/fix-package
Fix package name for generator/online/Generator.java
2015-06-05 23:26:43 -04:00
xhh
6a7fa67581 Fix package name in test 2015-06-06 10:43:04 +08:00
xhh
3f97d63886 Fix package name for generator/online/Generator.java 2015-06-06 09:01:08 +08:00
Tony Tam
c3d2a581c9 Merge pull request #790 from xhh/java-accept-contenttype
Minor improvement to Java API client accept and content-type header
2015-06-05 17:51:23 -07:00
xhh
d345283ab5 Merge branch 'develop_2.0' into java-accept-contenttype
Conflicts:
	modules/swagger-codegen/src/main/java/com/wordnik/swagger/codegen/languages/JavaClientCodegen.java
	modules/swagger-codegen/src/main/resources/Java/ApiClient.mustache
	modules/swagger-codegen/src/main/resources/Java/api.mustache
	samples/client/petstore/java/src/main/java/io/swagger/client/ApiClient.java
	samples/client/petstore/java/src/main/java/io/swagger/client/api/PetApi.java
	samples/client/petstore/java/src/main/java/io/swagger/client/api/StoreApi.java
	samples/client/petstore/java/src/main/java/io/swagger/client/api/UserApi.java
	samples/client/petstore/java/src/test/java/io/swagger/client/ApiClientTest.java
2015-06-06 08:46:19 +08:00
Tony Tam
ddbef8b25d implemented processOpts to avoid clobbering by superclass 2015-06-05 11:40:30 -07:00
Tony Tam
d2cb05f14f Merge pull request #797 from geekerzp/develop_2.0_python_auth
[Python] Add authentication support (API key, HTTP basic)
2015-06-05 09:15:54 -07:00
Tony Tam
3fe2169ffa Merge branch 'Hadou1-Generic_API_Exception' into develop_2.0 2015-06-05 08:46:22 -07:00
Tony Tam
ab5b2da21a Merge branch 'Generic_API_Exception' of ssh://github.com/Hadou1/swagger-codegen into Hadou1-Generic_API_Exception 2015-06-05 08:46:02 -07:00
Tony Tam
b4f153c202 Merge pull request #826 from xhh/java-auth
[Java] Add authentication support (API key, HTTP basic)
2015-06-05 08:45:08 -07:00
Tony Tam
0d09d43257 Merge pull request #823 from wing328/fix_file_rename
[C#] Fix ApiException file name
2015-06-05 08:43:08 -07:00
Tony Tam
98c303042e Merge pull request #829 from wing328/php_support_map
[PHP] bug fix for map, added test case
2015-06-05 08:41:58 -07:00
wing328
d0f9345c5a fix php map, add test case for get inventory 2015-06-05 21:57:12 +08:00
xhh
fffc5d7c35 Move authentications into ApiClient 2015-06-05 20:00:32 +08:00
Fredrik Gustafsson
e737964f66 minor refactoring 2015-06-05 13:51:52 +02:00
Fredrik Gustafsson
8f2e84d263 Merge branch 'develop_2.0' into Generic_API_Exception
Conflicts:
	modules/swagger-codegen/src/main/resources/csharp/apiException.mustache
2015-06-05 12:47:48 +02:00
xhh
947935f3d9 Merge remote-tracking branch 'origin/develop_2.0' into java-auth
Conflicts:
	modules/swagger-codegen/src/main/java/com/wordnik/swagger/codegen/languages/JavaClientCodegen.java
	modules/swagger-codegen/src/main/resources/Java/ApiClient.mustache
	modules/swagger-codegen/src/main/resources/Java/api.mustache
	samples/client/petstore/java/src/main/java/io/swagger/client/ApiClient.java
	samples/client/petstore/java/src/main/java/io/swagger/client/Configuration.java
	samples/client/petstore/java/src/main/java/io/swagger/client/api/PetApi.java
	samples/client/petstore/java/src/main/java/io/swagger/client/api/StoreApi.java
	samples/client/petstore/java/src/main/java/io/swagger/client/api/UserApi.java
	samples/client/petstore/java/src/test/java/io/swagger/client/ConfigurationTest.java
	samples/client/petstore/java/src/test/java/io/swagger/petstore/test/PetApiTest.java
2015-06-05 18:43:49 +08:00
Fredrik Gustafsson
277287a341 Merge branch 'develop_2.0' of https://github.com/Hadou1/swagger-codegen into develop_2.0
Conflicts:
	modules/swagger-codegen/src/main/resources/csharp/api.mustache
2015-06-05 12:33:49 +02:00
wing328
5a75eba42b regenerated perl sample 2015-06-05 18:30:58 +08:00
Fredrik Gustafsson
31c6a0a9da Extended the api-class generation by a interface generation 2015-06-05 12:29:25 +02:00
Fredrik Gustafsson
a1f156ca19 Updated 'api.mustache' to generate asynchronous methods aswell 2015-06-05 11:39:15 +02:00
geekerzp
eb90b907e7 rebuild python client 2015-06-05 17:02:38 +08:00
wing328
61a7d848f7 rename files in csharp and perl to fix issue 2015-06-05 17:00:11 +08:00
xhh
d70742119b Update unit tests 2015-06-05 16:45:19 +08:00
xhh
622b5c179a Merge remote-tracking branch 'origin/develop_2.0' into java-accept-contenttype
Conflicts:
	modules/swagger-codegen/src/main/java/com/wordnik/swagger/codegen/languages/JavaClientCodegen.java
	modules/swagger-codegen/src/main/resources/Java/ApiClient.mustache
	modules/swagger-codegen/src/main/resources/Java/api.mustache
	samples/client/petstore/java/src/main/java/io/swagger/client/ApiClient.java
	samples/client/petstore/java/src/main/java/io/swagger/client/api/PetApi.java
	samples/client/petstore/java/src/main/java/io/swagger/client/api/StoreApi.java
	samples/client/petstore/java/src/main/java/io/swagger/client/api/UserApi.java
2015-06-05 16:31:21 +08:00
geekerzp
ddc5293e6a updated api.mustache of python. 2015-06-05 16:19:49 +08:00
geekerzp
a30f537f5f fixed typo 2015-06-05 16:19:49 +08:00
geekerzp
813c0119aa added test case for 500 response of python client 2015-06-05 16:19:49 +08:00
geekerzp
8ef4c4401e updated rest.mustache of python client 2015-06-05 16:19:48 +08:00
geekerzp
5fbda0e206 added test case for 404 response of python client 2015-06-05 16:19:48 +08:00
geekerzp
fbe327ac2f Updated PythonClientCodegen.java
* updated method apiFileFolder.
* udpated method modelFileFolder.
2015-06-05 16:19:48 +08:00
geekerzp
ab6f327f35 Updated python client.
* Rename `ResponseError` exception to `ApiException`
* Use `File.separatorChar` to build file path in
  PythonClientCodegen.java
* Rename `config.py` module to `configuration.py`
* Rename `swagger.py` module to `api_client.py`
2015-06-05 16:19:48 +08:00
geekerzp
51887c64b5 Updated python codegen.
Use File.separatorChar to create invokerPacakge variable instread of '\'
char.
2015-06-05 16:17:29 +08:00
geekerzp
654a73c5a8 rebuild python client 2015-06-05 16:17:29 +08:00
geekerzp
eac884d85b updated ApiClient of python sdk. 2015-06-05 16:16:48 +08:00
geekerzp
d7aaaea0df updated config.py of python client. 2015-06-05 16:15:57 +08:00
geekerzp
b09250ed33 added authentication for python client.
completed.
2015-06-05 16:15:57 +08:00
geekerzp
0ca97e4b68 added authentication for python client.
Not completed
2015-06-05 16:15:14 +08:00
Tony Tam
59ca8bd986 Merge pull request #821 from geekerzp/develop_2.0_objc_test
[Objc] Update test case
2015-06-05 00:55:57 -07:00
Tony Tam
e1393d1912 Merge pull request #817 from who/develop_2.0
[Android] Enabling cli config options for android generator
2015-06-05 00:53:20 -07:00
Tony Tam
ddb3bd5477 Merge pull request #816 from geekerzp/develop_2.0_objc_auth
[Objc] Add authentication support (API key, HTTP basic)
2015-06-05 00:52:35 -07:00
Tony Tam
2ec18a1397 Merge branch 'wing328-php_object_support' into develop_2.0 2015-06-05 00:52:06 -07:00
Tony Tam
34072faccd merged 2015-06-05 00:51:52 -07:00
Tony Tam
26d9215e43 Merge pull request #808 from wing328/csharp_api_instance
[C#] Added ApiClient (Pluggable) and authentication (API key and HTTP basic auth)
2015-06-05 00:42:44 -07:00
Tony Tam
496e06a373 Merge pull request #806 from geekerzp/develop_2.0_python_https
[Python] Verified HTTPS with SSL/TLS cert.
2015-06-05 00:42:13 -07:00
Tony Tam
513bd17610 Merge pull request #803 from wing328/objc_fix_filepath
[ObjC] Minor fix to output path
2015-06-05 00:41:52 -07:00
Tony Tam
d9fcb777c1 Merge pull request #799 from wing328/perl_apiinvoker_instance
[Perl] Make API client more pluggable (ref: #778)
2015-06-05 00:41:26 -07:00
Tony Tam
05700a6799 Merge pull request #794 from wing328/php_debug_switch
[PHP] add debug switch
2015-06-05 00:40:32 -07:00
Tony Tam
29bd743391 Merge pull request #793 from geekerzp/develop_2.0_objc_apiclient
Make objc client more pluggable
2015-06-05 00:40:17 -07:00
Tony Tam
13e14652e3 Merge pull request #787 from geekerzp/develop_2.0_python_apiclient
[Python] Make API client more pluggable
2015-06-05 00:38:11 -07:00
Tony Tam
b41e88e83a Merge pull request #785 from wing328/csharp_add_restsharp_dll
[C#] Added RestSharp.dll and updated compile.bat
2015-06-05 00:38:05 -07:00
Tony Tam
cbc4da58ab Merge pull request #783 from xhh/ruby-auth
[Ruby] Add authentication support (API key, HTTP basic)
2015-06-05 00:36:12 -07:00
Tony Tam
aecb4adf4a Merge pull request #791 from xhh/java-api-client
[Java] Make API client more pluggable
2015-06-05 00:36:05 -07:00
wing328
ba227b7e72 rename api client 2015-06-04 21:19:16 +08:00
wing328
0423e0a2df support object response 2015-06-04 21:12:26 +08:00
wing328
afe816efb6 remove unused file 2015-06-04 20:30:41 +08:00
geekerzp
58feda7c8e Updated test case testCreateAndGetPet of objc client. 2015-06-04 16:44:12 +08:00
Fredrik Gustafsson
217765998d Extended the APIException by ErrorContent from response body 2015-06-03 16:23:45 +02:00
xhh
0ffe53933d Bug fix: "null" was used as post body for empty form parameters
The form parameters could be empty when all of them are optional and no
values are assigned to them.
2015-06-03 21:17:42 +08:00
xhh
cf4b4de970 Skip null header/form parameters
and fix the bug of getting file name for file parameter
2015-06-03 20:26:14 +08:00
xhh
2e285ed562 Support skipping SSL certification verification
in Ruby clients by e.g.:

    SwaggerClient::Swagger.configure do |config|
      config.verify_ssl = false
    end
2015-06-03 12:49:09 +08:00
wing328
9b919c54dd added http basic auth test 2015-06-03 11:21:10 +08:00
xhh
9618960558 Merge branch 'develop_2.0' into ruby-auth 2015-06-03 11:19:40 +08:00
wing328
fceaed34e4 rename apiclient 2015-06-03 10:19:07 +08:00
xhh
eb4973237b Add comments to code 2015-06-03 10:09:36 +08:00
wing328
9c747e3e37 fix query parameters 2015-06-03 09:21:45 +08:00
wing328
3d16d8b2b6 fix header 2015-06-03 08:34:45 +08:00
Andrew B
1a75489b42 Enabling cli config options for android generator 2015-06-02 09:04:50 -07:00
xhh
24c29acc09 Merge branch 'develop_2.0' into java-api-client
Conflicts:
	modules/swagger-codegen/src/main/java/com/wordnik/swagger/codegen/languages/JavaClientCodegen.java
2015-06-02 22:36:55 +08:00
Ole Lensmar
2662167372 Merge pull request #805 from hyeghiazaryan/develop_2.0
Support for file based config. Implementation for #616.
2015-06-02 09:33:52 -04:00
Ole Lensmar
e98320862c Merge pull request #706 from 0legg/feature/retrofit-templates
[WIP] add template for Retrofit and Gson
2015-06-02 09:09:41 -04:00
wing328
2d6a7092e3 removed unused file 2015-06-02 20:43:11 +08:00
wing328
7080983521 return exception instead of null for 404, add properties to api exception class 2015-06-02 17:25:38 +08:00
xhh
19540ed7f0 Store response headers and body in ApiException 2015-06-02 15:33:44 +08:00
geekerzp
699df0029b updated comments for objc client. 2015-06-02 15:33:33 +08:00
geekerzp
86971ee752 added comments for objc client 2015-06-02 11:50:47 +08:00
Hrachya Yeghiazaryan
d258a6c1c2 Merge branch 'develop_2.0' of https://github.com/hyeghiazaryan/swagger-codegen into develop_2.0 2015-06-01 10:44:23 -07:00
hrachya
3e0913a813 removing generic header comments 2015-06-01 10:43:23 -07:00
wing328
762a3279ea clean up test.php 2015-06-01 14:50:57 +08:00
wing328
f357f4c9d7 fix default header 2015-06-01 14:24:09 +08:00
wing328
8d708c2442 add test case for default header 2015-05-31 11:17:59 +08:00
wing328
83d069d053 add support for obj, remove null from serialized json string 2015-05-31 09:49:24 +08:00
geekerzp
b5429d9e8e Added authentication for objc client. 2015-05-30 18:04:20 +08:00
Richie Azaria
0996901e72 add documentation -c option and config-help 2015-05-29 13:01:42 -07:00
Oleg Godovykh
ec08d31031 add template for Retrofit and Gson 2015-05-29 12:23:18 -04:00
Ron
ca46405850 Update README.md 2015-05-29 08:53:06 -04:00
Ron
7d7ed15fdc Update README.md 2015-05-29 08:52:48 -04:00
Ron
34315f7338 Create LICENSE 2015-05-29 08:52:29 -04:00
Ron
26a22a30a1 Create LICENSE 2015-05-29 08:52:03 -04:00
Fredrik Gustafsson
41e4fc79ae Extended the api-class generation by a interface generation 2015-05-29 12:19:28 +02:00
Fredrik Gustafsson
049299f07f Updated 'api.mustache' to generate asynchronous methods aswell 2015-05-29 10:53:48 +02:00
wing328
5f36ad3b75 add authentication support 2015-05-29 16:43:27 +08:00
geekerzp
18cf6bcfa6 Updated python client.
Verified HTTPS with SSL/TLS.
2015-05-29 15:09:19 +08:00
xhh
a8c526efd5 Add unit tests for Configuration and ApiClient 2015-05-29 12:08:42 +08:00
xhh
62c8f9e1e2 Rebuild Java Petstore sample 2015-05-29 12:08:42 +08:00
xhh
ac134c0afa Make ApiClient more pluggable for Java
- Rename ApiInvoker to ApiClient
- Make ApiClient pluggable by allowing setting the ApiClient field of
  API classes
- Introduce a Configuration class, containing the default
  ApiClient (which is also customizable)
- Move basePath from API class to ApiClient
- Change static methods in ApiClient to instance level
2015-05-29 12:08:42 +08:00
xhh
a29c3abeb8 Use File.separatorChar in Ruby generator, add comments 2015-05-29 12:05:47 +08:00
xhh
623a1278cf Add test case for API key auth 2015-05-29 11:57:46 +08:00
xhh
e52694cde0 Regenerate Ruby Petstore sample 2015-05-29 11:57:46 +08:00
xhh
95813714a5 Add support of HTTP basic and API key auth to Ruby codegen 2015-05-29 11:57:46 +08:00
xhh
6a6473ede3 Allow omitting username/password for HTTP basic auth 2015-05-29 11:55:48 +08:00
xhh
e10e1f5249 Refactor auth method naming, add comments 2015-05-29 11:29:06 +08:00
xhh
6eb1a89205 Add authentication helper methods and test cases 2015-05-29 11:28:03 +08:00
xhh
4d25d264c4 Merge remote-tracking branch 'origin/develop_2.0' into java-auth
Conflicts:
	modules/swagger-codegen/src/main/resources/Java/apiInvoker.mustache
	samples/client/petstore/java/src/main/java/io/swagger/client/ApiInvoker.java
2015-05-29 10:08:50 +08:00
hrachya
ba7025d54b Adding config-help command 2015-05-28 15:02:32 -07:00
hrachya
1f360961e0 Simplifying CliOption class 2015-05-28 14:55:36 -07:00
hrachya
08647b337f fixing property name 2015-05-28 13:08:52 -07:00
hrachya
c5a7800ec6 fixing typo 2015-05-28 13:02:30 -07:00
hrachya
26a2290078 adding classPrefix, sourceFolder, projectName cli options to objc 2015-05-28 13:01:54 -07:00
wing328
2edcd82094 minor fix to output path 2015-05-28 19:16:26 +08:00
wing328
165efdbdbb rename apiinvoker to apiclient, add configuration, make apiclient an instance 2015-05-28 18:24:03 +08:00
wing328
412fcf11f9 update file separator 2015-05-28 15:19:05 +08:00
wing328
e993d08563 rename APIClient to ApiClient, APIClientException to APIException 2015-05-28 15:06:31 +08:00
wing328
61bc652229 use file separator 2015-05-28 14:34:39 +08:00
wing328
699f6fff44 update file path 2015-05-28 14:18:05 +08:00
wing328
1a868abdfa rename APIClient to ApiClient 2015-05-28 10:51:36 +08:00
hrachya
c9c58cbe4c new -c/--config option for swagger-cli to specify json config file path
setting options passed in config file if those were allowed by lang specific CodegenConfig
2015-05-27 17:37:07 -07:00
hrachya
c3055c7cc4 Adding Config and ConfigParser classes 2015-05-27 17:30:42 -07:00
hrachya
2cca1a8c2c Changing templateDir back to explicit option for cli 2015-05-27 17:22:44 -07:00
hrachya
a9e767cbd8 Rolling back changes to deprecated class 2015-05-27 17:19:34 -07:00
Ron
1657f2e5f7 Merge pull request #801 from rlo2014/develop_2.0
Removing comment (// do some magic!) that is no longer necessary and …
2015-05-27 19:48:51 -04:00
rlo2014
e93a377982 Removing comment (// do some magic!) that is no longer necessary and confusing. After olensmar refactor of jax-rs codegen, magic/implementation should be placed in the delegate/implementation as opposed to the api itself. Any logic put in api itself will be overwritten with the next code gen, whereas the delegate implemenation will remain intact. 2015-05-27 14:55:28 -07:00
wing328
2c12312b97 update user agent and add more test cases 2015-05-27 22:44:56 +08:00
wing328
866b546cfd make api client pluggable 2015-05-27 17:56:39 +08:00
hrachya
74f5c769f9 removing extra file, was committed by mistake 2015-05-26 17:10:19 -07:00
hrachya
1e09f5149e Add 'invokerPackage', 'groupId', 'arifactId', 'artifactVersion', 'sourceFolder' command line options for java (and all the derived ones jaxrs, spring-mvc ...)
Add processOpts override to process java  specific options
Move supporting file initialization from constructor to processOpts, since it uses some of the options that are not yet set in the constructor
Add setters
2015-05-26 17:05:53 -07:00
hrachya
e08a5a9d83 Add 'modelPackage' and 'apiPackage' as command line options
Add setters for modelPackage and apiPackage
2015-05-26 17:01:07 -07:00
hrachya
d7dec5a43d Use new functionality to add 't' as a command line option to set 'templateDir' 2015-05-26 16:02:27 -07:00
hrachya
33436d62c3 Get all cliOptions for available codegen configs and add to command line options
Add all the specified ones to clientOpts properties
2015-05-26 15:57:01 -07:00
hrachya
9f1504062a add List<CliOption> cliOptions() method to CodegenConfig interface with default implementation in DefaultCodegen 2015-05-26 15:52:25 -07:00
hrachya
f8cafaaee7 new CliOption class for wrapping org.apache.commons.cli.Option 2015-05-26 15:49:32 -07:00
wing328
4d1d163a73 update php template to debug curl 2015-05-26 23:52:35 +08:00
wing328
171bf969c7 add debug switch to configuration 2015-05-26 23:20:34 +08:00
geekerzp
ca145297e9 Updated ApiClient of objc sdk.
When create api instance, if we don't pass the `apiClient` parameter,
then get api client instance from the pool.
2015-05-26 18:00:45 +08:00
wing328
c2c43bba37 make datetime nullable 2015-05-26 17:48:52 +08:00
xhh
951b7a9075 Do not use JSON as default Accept header when no produces present 2015-05-26 10:35:49 +08:00
wing328
f807e34b2b refactor csharp (no compile error) 2015-05-25 18:21:17 +08:00
xhh
aa03be7f76 Clean up old code 2015-05-25 17:25:32 +08:00
xhh
ed14c515bf Add comments to string utility methods 2015-05-25 16:01:57 +08:00
geekerzp
2d545c7f0b updated ApiClient of python sdk.
Change staticmethod to instance method.
2015-05-25 15:29:31 +08:00
geekerzp
3beeb6125e updated ApiClient of python sdk.
When create api instance, if we don't pass the `api_client` parameter,
then use the default api_client in `config` module.
2015-05-25 14:31:55 +08:00
xhh
19a8ac4841 Add unit tests 2015-05-25 12:32:24 +08:00
xhh
85d0e08a80 Rebuild Java Petstore client 2015-05-25 12:31:54 +08:00
xhh
fff8972a77 Extract utility methods to the StringUtil class
and ignore case when comparing Accept/Content-Type
2015-05-25 12:29:41 +08:00
wing328
92dd5cab93 add restsharp.dll, update compile.bat 2015-05-25 11:44:08 +08:00
xhh
141b580c8c Minor improvement to Java API client accept and content-type header 2015-05-24 08:52:14 +08:00
Tony Tam
095771d345 Merge pull request #738 from tomtit/issue429
Fixes #429: Handling of composed models has been added.
2015-05-23 15:10:38 -07:00
Alexey Nechaev
5d581c3b03 Fixes #429: Handling of composed models has been added. 2015-05-24 00:54:25 +03:00
Tony Tam
087c28dae4 rebuilt client 2015-05-23 09:04:46 -07:00
Tony Tam
85c37fbe27 fix for #781 2015-05-23 09:04:40 -07:00
Tony Tam
ad9b790712 updated sample 2015-05-23 09:04:06 -07:00
Tony Tam
82436c5b44 Merge pull request #780 from geekerzp/develop_2.0_objc_contenttype
Minor improvement to Objc API Client 'accept' and 'content-type' header
2015-05-23 08:54:53 -07:00
Tony Tam
156afa7795 Merge pull request #778 from wing328/php_apiclient_instance
[PHP] Make API client more pluggable
2015-05-23 08:54:33 -07:00
Tony Tam
74dc05bbf5 Merge pull request #776 from wing328/php53_fix_warning
[PHP] Fix warning/error related to PHP5.3
2015-05-23 08:53:52 -07:00
Tony Tam
b6d206aff7 Merge pull request #774 from geekerzp/develop_2.0_python_contenttype
Minor improvement to Python API Client 'accept' and 'content-type' header
2015-05-23 08:53:34 -07:00
Tony Tam
e3c116312b Merge pull request #773 from hyperworks/master
Adds isPrimitiveType flag to CodegenParameter.
2015-05-23 08:53:06 -07:00
Tony Tam
5527932a8e Merge branch 'xhh-ruby-void-response' into develop_2.0 2015-05-23 08:52:15 -07:00
Tony Tam
3cb9d094d3 Merge branch 'ruby-void-response' of ssh://github.com/xhh/swagger-codegen into xhh-ruby-void-response 2015-05-23 08:49:28 -07:00
Tony Tam
d83a275b6e Merge branch 'develop_2.0' of github.com:swagger-api/swagger-codegen into develop_2.0 2015-05-23 08:48:40 -07:00
Tony Tam
98d5dd727b Merge branch 'tkQubo-feature/swift-PromiseKit' into develop_2.0 2015-05-23 08:48:28 -07:00
Tony Tam
565f054b79 merged 2015-05-23 08:48:18 -07:00
Tony Tam
f4aee62fb4 Merge pull request #775 from wing328/csharp_fix_object_type
[C#] Fix "object' type for response
2015-05-23 08:43:14 -07:00
Tony Tam
864f0f5a3a Merge branch 'sosso-origin/develop_2.0' into develop_2.0 2015-05-23 08:34:01 -07:00
Tony Tam
d447c423b5 updated test to get expected value 2015-05-23 08:33:48 -07:00
Tony Tam
f9ed8a9a08 updated test to get expected value 2015-05-23 08:33:40 -07:00
Tony Tam
3638d79291 updated test to get expected value 2015-05-23 08:33:27 -07:00
geekerzp
2514f3aa08 update SWGApiClient.h of objc client. 2015-05-23 15:29:38 +08:00
geekerzp
3d3cbe115e minor improvement to objc client accept and content-type header 2015-05-23 15:22:12 +08:00
wing328
691838c47d add test case for api client instance 2015-05-23 10:35:19 +08:00
wing328
612abf134b api client as instance (not static class) 2015-05-22 22:09:51 +08:00
geekerzp
87a730b5a2 Merge branch 'develop_2.0' into develop_2.0_objc_contenttype
Conflicts:
	samples/client/petstore/objc/client/SWGPetApi.m
2015-05-22 17:32:57 +08:00
geekerzp
8d0efd812c updated unittests of python client 2015-05-22 15:50:09 +08:00
geekerzp
245ce642ce add test cases for ApiClient.select_header_accept and
ApiClient.select_header_content_type of python client.
2015-05-22 15:28:36 +08:00
wing328
df4b952312 fix object type without ref for CSharp 2015-05-22 14:12:53 +08:00
xhh
43cfc7d401 Setup authentications in test cases 2015-05-22 12:07:08 +08:00
xhh
16ba2a54ea Add test cases for API key and HTTP basic auth 2015-05-22 11:17:44 +08:00
geekerzp
bc9abceef3 removed temp files from python client 2015-05-22 11:12:35 +08:00
geekerzp
8a311d693b updated python client samples 2015-05-22 10:50:11 +08:00
geekerzp
52807c0724 minor improvement to python client accept and content-type header 2015-05-22 10:45:38 +08:00
William Cheng
fa15f58506 fix warning/error in php5.3 2015-05-22 05:15:46 +08:00
xhh
f616605e7e Regenerate Java Petstore sample 2015-05-21 22:09:08 +08:00
xhh
3d4b5a10c9 Add support of HTTP basic and API key auth to Java codegen 2015-05-21 22:05:46 +08:00
Ron
2b7bbd9513 Merge pull request #772 from tomtit/issue771
Fixes #771: Unit test has been fixed after merge.
2015-05-21 06:07:00 -06:00
Chakrit Wichian
89e3bcc4bb Adds isPrimitiveType flag to CodegenParameter.
This is required in some languages like Obj-C where there is no automatic value boxing and
handling of primitive types require extra work compared to non-primitive types.

Case in point: BOOL type. To assign BOOL into a dictionary, one needs to box it into an
(NSValue *) instance, so to build a dictionary for sending form data, for example, you
cannot do this in the template:

    dict["{{paramName}}"] = {{paramName}};

Because if the parameter ends up being of type BOOL, an error about boxing values will be
generated:

    BOOL boolValue = NO;
    dict["boolValue"] = boolValue;
                        ^---------------- Cannot do the assignment here.

The fix is to wrap it in @() like so:

    BOOL boolValue = NO;
    dict["boolValue"] = @(boolValue);

So a flag is needed in CodegenParameter so we can selectively emit the right boxing or
non-boxing assignment in the templates.
2015-05-21 15:28:57 +07:00
Alexey Nechaev
a590239df9 Fixes #771: Unit test has been fixed after merge. 2015-05-21 10:49:20 +03:00
Tony Tam
0c3f7a54cd Merge pull request #770 from swagger-api/jaxrs-interface-generation
Jaxrs interface generation
2015-05-20 22:52:00 -07:00
Tony Tam
99a11636da rebuilt 2015-05-20 22:51:30 -07:00
Tony Tam
3a2f258517 Merge branch 'geekerzp-develop_2.0_python_urllib3' into develop_2.0 2015-05-20 22:51:09 -07:00
Tony Tam
3629a190ae merged 2015-05-20 22:50:59 -07:00
Tony Tam
715a9b8678 merged 2015-05-20 22:50:41 -07:00
Tony Tam
4187be2dc3 Merge pull request #767 from geekerzp/develop_2.0_python_model
Pretty print for models of python client
2015-05-20 22:46:41 -07:00
Tony Tam
dd70a13c02 Merge branch 'wing328-php_auth_setting' into develop_2.0 2015-05-20 22:46:02 -07:00
Tony Tam
c8a56add5d merged 2015-05-20 22:45:52 -07:00
Tony Tam
01ebdb6122 Merge pull request #763 from tomtit/issue728
Fixed #728: Handling of recursive model definitions has been improved.
2015-05-20 22:42:37 -07:00
Tony Tam
e66f9d7fce Merge pull request #760 from geekerzp/develop_2.0_objc_required_parameter
Fix required parameter validation for Objc
2015-05-20 22:42:10 -07:00
Tony Tam
35f63b3f6a Merge branch 'wing328-php-improve-header' into develop_2.0 2015-05-20 22:41:23 -07:00
Tony Tam
9bf9b3edb7 rebuilt 2015-05-20 22:41:09 -07:00
Tony Tam
92b1a13438 Merge branch 'swinz-develop_2.0_fixSpringMVCRequestParamDefaultValue' into develop_2.0 2015-05-20 22:37:59 -07:00
Tony Tam
515f5440a1 merged 2015-05-20 22:37:51 -07:00
Tony Tam
632480787d Merge branch 'develop_2.0' of github.com:swagger-api/swagger-codegen into develop_2.0 2015-05-20 22:35:23 -07:00
Tony Tam
e4faa82cfa Merge branch 'geekerzp-develop_2.0_objc_iso8601' into develop_2.0 2015-05-20 22:35:12 -07:00
Tony Tam
779915a51f rebuilt 2015-05-20 22:34:54 -07:00
Tony Tam
c509bbcb99 updated 2015-05-20 22:34:29 -07:00
Tony Tam
8231e7e36a Merge branch 'develop_2.0_objc_iso8601' of ssh://github.com/geekerzp/swagger-codegen into geekerzp-develop_2.0_objc_iso8601 2015-05-20 22:29:26 -07:00
Tony Tam
ee145aebe7 Merge pull request #743 from lugaru1234/model_ids_with_dots
Fixed #593: Python code failure caused by Model IDs with dots has been fixed
2015-05-20 22:27:53 -07:00
Tony Tam
11dd7784f8 rebuilt 2015-05-20 22:20:51 -07:00
Tony Tam
6fe6a6daa7 Merge branch 'develop_2.0' of github.com:swagger-api/swagger-codegen into develop_2.0 2015-05-20 22:16:55 -07:00
Tony Tam
e921b7cbdc Merge branch 'Helmsdown-mime-type-fixes' into develop_2.0 2015-05-20 22:16:38 -07:00
Tony Tam
fd928a3d16 merged 2015-05-20 22:16:24 -07:00
Tony Tam
5a4d3317c2 Merge pull request #723 from swinz/develop_2.0_fixSpringMVCHeaderRequired
SpringMVC template is ignoring the required attribute in swagger definition when generating RequestHeader annotation
2015-05-20 22:14:29 -07:00
Tony Tam
ab23cccab4 Merge branch 'develop_2.0' of github.com:swagger-api/swagger-codegen into develop_2.0 2015-05-20 22:13:03 -07:00
Tony Tam
7d4cc82077 Merge branch 'who-feature/android-maven-artifact-publishing' into develop_2.0 2015-05-20 22:12:45 -07:00
Tony Tam
e58f8db9aa merged 2015-05-20 22:12:37 -07:00
Tony Tam
b059910a01 Merge pull request #700 from wing328/csharp_restcsharp
Use RestSharp for CSharp API client
2015-05-20 21:52:28 -07:00
Ole Lensmar
19de558f4a Merge branches 'develop_2.0' and 'jaxrs-interface-generation' of https://github.com/swagger-api/swagger-codegen into jaxrs-interface-generation
Conflicts:
	modules/swagger-codegen/src/main/java/com/wordnik/swagger/codegen/DefaultCodegen.java
2015-05-20 22:51:49 -06:00
Tony Tam
2d9772e7a9 Merge branch 'tomtit-issue646' into develop_2.0 2015-05-20 21:48:14 -07:00
Tony Tam
0c1bdc0fd6 merged 2015-05-20 21:48:03 -07:00
Tony Tam
e592d1b46b Merge pull request #660 from denyago/master
Improve README for OS X Users with random Java versions
2015-05-20 21:42:40 -07:00
Tony Tam
8dbb1aa8e9 Merge pull request #654 from kvelakur/master
Issue #642 - Removing the unnecesary \n added to generated example reque...
2015-05-20 21:42:25 -07:00
Tony Tam
ef5cb5021b Merge branch 'cchafer-akka-scala' into develop_2.0 2015-05-20 21:41:24 -07:00
Tony Tam
ff81789b37 merged 2015-05-20 21:41:17 -07:00
Tony Tam
e6efcdb6af added files, updated parser version 2015-05-20 21:39:09 -07:00
xhh
9cf4c66331 Update method returning value comment 2015-05-21 11:30:30 +08:00
Tony Tam
956a3c024c Merge pull request #766 from swagger-api/core-1.5.2-M2-compatibility
updated core dependency version to 1.5.2-M2 with related fixes
2015-05-20 17:55:01 -07:00
Ole Lensmar
efb40e149f brought back scala tests 2015-05-20 18:23:44 -06:00
Ole Lensmar
a6876b8028 Merge branches 'core-1.5.2-M2-compatibility' and 'jaxrs-interface-generation' of https://github.com/swagger-api/swagger-codegen into jaxrs-interface-generation 2015-05-20 18:14:54 -06:00
Ole Lensmar
713e7a6584 updated core dependency version to 1.5.2-M2 with related fixes 2015-05-20 18:06:37 -06:00
Ole Lensmar
778ce0b9f6 Merge branches 'develop_2.0' and 'jaxrs-interface-generation' of https://github.com/swagger-api/swagger-codegen into jaxrs-interface-generation 2015-05-20 17:03:51 -06:00
Ole Lensmar
05268c2742 added system property for setting impl folder 2015-05-20 16:50:26 -06:00
Ole Lensmar
17d8d14cc8 defaulted sources to go to src/gen/main and added possibility to set impl folder via system property at command-line 2015-05-20 16:49:50 -06:00
wing328
4f310cd7b1 update function comment 2015-05-20 22:13:24 +08:00
geekerzp
9ff0d90853 Updated python models.
Overwrite the instance method `__repr__`,
make the `pprint` method output properties infos of the models.
2015-05-20 22:05:34 +08:00
wing328
6e13403a37 fix http basic auth, add test cases for new api client without host 2015-05-20 21:55:16 +08:00
xhh
8bf84aabe5 Add test case for nil return value 2015-05-20 21:13:20 +08:00
xhh
50a767ef03 Regenerate Ruby Petstore sample 2015-05-20 21:13:02 +08:00
xhh
4702285184 Correct indentation 2015-05-20 21:08:14 +08:00
xhh
dde73d592d Return nil in Ruby clients for operations that have no response type defined 2015-05-20 21:06:42 +08:00
wing328
9a1dedbe76 add test case (getPetbyId), remove old authenetication (only supports header) 2015-05-20 18:43:34 +08:00
wing328
20439e646f add test case and prefix support 2015-05-20 18:25:35 +08:00
wing328
06c7a6a109 add todo for oauth, support multiple api key 2015-05-20 17:13:52 +08:00
wing328
278a653154 add authentication 2015-05-20 17:13:52 +08:00
geekerzp
3a8b149f09 minor improvement to objc api client accept and content-type header 2015-05-20 15:52:00 +08:00
Tony Tam
deca6a0329 Merge pull request #662 from xhh/ruby-module-structure
Organize the generated Ruby code into a module structure
2015-05-19 20:16:52 -07:00
kubo_takaichi
7205407818 Add another date formatter (which should be externalized though) 2015-05-20 11:27:45 +09:00
kubo_takaichi
2f6b975669 Remove final mark 2015-05-20 11:27:45 +09:00
kubo_takaichi
16a4b60526 Handle NSNull 2015-05-20 11:27:45 +09:00
kubo_takaichi
9cf1835230 Fix bug 2015-05-20 11:27:45 +09:00
kubo_takaichi
3623a0dd56 Modify Cartfile 2015-05-20 11:27:45 +09:00
kubo_takaichi
e0c0d2a72a Remove dependency on SwiftyJSON 2015-05-20 11:27:45 +09:00
kubo_takaichi
dbfc46658f Add once-removed Array extension method 2015-05-20 11:27:45 +09:00
kubo_takaichi
bb3ec04ed1 Introduce Decoders class 2015-05-20 11:27:45 +09:00
kubo_takaichi
be7fccce68 Update JSONEncodable implementations 2015-05-20 11:27:45 +09:00
kubo_takaichi
f21d8503d5 Add manager storage to prevent request cancellation 2015-05-20 11:27:45 +09:00
kubo_takaichi
063e6d062d Introduce decodable array and dictionary 2015-05-20 11:27:45 +09:00
kubo_takaichi
0b7d758077 Add extension methods for primitives 2015-05-20 11:27:45 +09:00
kubo_takaichi
5dfa753f5c Do refactor and add extension methods 2015-05-20 11:27:45 +09:00
kubo_takaichi
23d714f2f1 Add swift code generator 2015-05-20 11:27:45 +09:00
kubo_takaichi
f627c81399 Remove some characters from param name and operation id
(since swagger-doc emits improper characters)
2015-05-20 11:27:45 +09:00
xhh
0fb1918196 Revert unnecessary changes on whitespace 2015-05-20 10:13:29 +08:00
xhh
312f1c6f25 Avoid the importPath field 2015-05-20 09:23:45 +08:00
xhh
792059f195 Avoid warnings for ruby gem building 2015-05-20 09:23:45 +08:00
xhh
70c74d282f Fix tests 2015-05-20 09:23:45 +08:00
xhh
ab4975b7f1 Regenerate petstore ruby sample 2015-05-20 09:23:44 +08:00
xhh
6eaaa5cc69 Include base_object model into module structure 2015-05-20 09:23:44 +08:00
xhh
f766614b4d Clean old files generated 2015-05-20 09:23:44 +08:00
xhh
fcf1327c1f Rename swagger-client to swagger_client
according to guides from rubygems: http://guides.rubygems.org/name-your-gem/
2015-05-20 09:23:44 +08:00
xhh
b140f1f152 Fix example code in README.md of Ruby petstore sample 2015-05-20 09:23:44 +08:00
xhh
87904e8b69 Set version dynamically in ruby codegen
Conflicts:
	modules/swagger-codegen/src/main/resources/ruby/swagger/version.mustache
	samples/client/petstore/ruby/lib/swagger/version.rb
2015-05-20 09:23:44 +08:00
xhh
194e9e6f05 Make petstore tests pass 2015-05-20 09:23:43 +08:00
xhh
8dd7d3aacd Regenerate ruby petstore sample code 2015-05-20 09:23:43 +08:00
xhh
104bcc1f89 Organize generated Ruby code into a module 2015-05-20 09:23:43 +08:00
Fake Bob Dobbs
a55c03013d use the defaultValue for spring mvc RequestHeader annotations; carry over the required value if set for RequestPart annotations 2015-05-19 11:47:34 -04:00
Fake Bob Dobbs
b783363c56 move the defaultValues for Forms and Headers as well 2015-05-19 11:45:48 -04:00
Alexey Nechaev
f0e4ea1780 Fixed #728: Handling of recursive model definitions has been improved. 2015-05-19 18:36:03 +03:00
Tony Tam
6a336f2e1e Merge pull request #758 from xhh/fix-android-form-test
Fix test of updatePetWithForm for Android Petstore sample
2015-05-19 08:29:48 -07:00
Ron
312637c94b Merge pull request #762 from wing328/update_readme
Update README.md with new generators
2015-05-19 07:21:52 -06:00
William Cheng
e717f74a0a update readme with new generators 2015-05-19 21:15:09 +08:00
Nadezhda Makarkina
3dde19bb59 Fixed #593: Python code failure caused by Model IDs with dots has been fixed 2015-05-19 14:31:42 +03:00
geekerzp
a0abea4b72 added required parameters check for objc 2015-05-19 17:12:46 +08:00
wing328
5744bd0138 better exception using InvalidArgumentException 2015-05-19 16:21:06 +08:00
xhh
db9ca1a485 Fix test of updatePetWithForm for Android Petstore sample 2015-05-19 15:42:29 +08:00
wing328
af260cba41 update api client to support default header 2015-05-19 15:33:03 +08:00
geekerzp
a77ae51318 update python tests 2015-05-19 15:21:09 +08:00
wing328
5aad44e628 added back test case for updatePetWithForm 2015-05-19 10:15:36 +08:00
wing328
41e178e268 better accept and content-type for php, added test cases 2015-05-18 22:16:54 +08:00
Tony Tam
e068ad4494 Merge pull request #756 from wing328/perl_improve_accept_header
[Perl] better logic for accept and content-type, added test cases
2015-05-18 06:36:11 -07:00
wing328
7fc2f74851 remove commented code 2015-05-18 16:39:33 +08:00
wing328
abbea5ec4c better logic for accept and content-type, added test cases 2015-05-18 16:23:46 +08:00
Tony Tam
72a4d2df2f Merge pull request #755 from wing328/ruby_cleanup_sample
[Ruby] Cleanup Ruby Petstore sample and bug fix
2015-05-17 21:41:21 -07:00
William Cheng
05ac516ffa clean up ruby sample, remove commented code, bug fix 2015-05-18 04:30:26 +08:00
Tony Tam
01423d4a6b Merge pull request #753 from wing328/ruby_model_improve
[Ruby] bug fixes for posting with sub-models and enhancements (refactoring)
2015-05-17 09:34:20 -07:00
William Cheng
3de9b4bfc8 remove (duplicated) object_to_http_body and object_to_hash from swagger.rb 2015-05-17 23:47:55 +08:00
William Cheng
92a2011207 fix post model, update rspec 2015-05-17 23:38:51 +08:00
William Cheng
8710fbfde7 add base object 2015-05-17 23:36:13 +08:00
Ron
0c94b89e42 Merge pull request #750 from sebest/patch-1
Fix a typo in the README
2015-05-17 07:33:48 +02:00
Sebastien Estienne
9e382ecf9a Fix a typo in the README 2015-05-16 22:05:44 -07:00
Tony Tam
0e0e265a2a Merge pull request #746 from wing328/ruby_fix_contenttype
Minor improvement to Ruby API Client 'accept' and 'content-type' header
2015-05-16 09:13:58 -07:00
Tony Tam
d6ac7c5ecf Merge pull request #659 from wing328/add_php_unit_test
Bug fix for PHP client POST (model) and add more PHP test cases
2015-05-16 09:13:35 -07:00
Tony Tam
8501ffe240 Merge pull request #716 from ponelat/fix/click-on-return-type-in-dynamic-html
Fix/click on return type in dynamic html
2015-05-16 09:11:26 -07:00
Tony Tam
919bab0765 Merge pull request #717 from ponelat/fix/dyn-html-pos-error
Fix dynamic-html positioning of parameters
2015-05-16 08:56:51 -07:00
Ron
3e719d087f Merge pull request #715 from ponelat/fix/dead-css-include
html: build and remove dead css include
2015-05-16 17:23:49 +02:00
Tony Tam
472e2afd8e Merge pull request #749 from wing328/perl_add_unittest
Add unit testing for Perl
2015-05-16 06:56:53 -07:00
geekerzp
68b0259c47 updated readme.md of python 2015-05-16 18:05:06 +08:00
geekerzp
9809ce1d18 updated python unittests 2015-05-16 17:30:42 +08:00
William Cheng
7a5db5e665 add pom.xml for perl integration test 2015-05-16 16:44:32 +08:00
Tony Tam
6ec7cf5a9d updated request process 2015-05-16 01:09:01 -07:00
Tony Tam
f4cbd88e2c fixed ordering 2015-05-16 00:45:42 -07:00
William Cheng
9904c0e09f add unit testing for pet 2015-05-16 15:37:58 +08:00
Fake Bob Dobbs
e4f5243e54 add defaultValues value to the SpringMVC RequestParam annotation 2015-05-15 17:17:46 -04:00
Fake Bob Dobbs
33138c139f A parameter's default value is not flowing from the swagger definition to the actual API implementation. This change makes the property from the swagger def json available to the templates. 2015-05-15 16:55:49 -04:00
Tony Tam
a2d2deeb0c Merge branch 'develop_2.0' of github.com:swagger-api/swagger-codegen into develop_2.0 2015-05-15 11:27:16 -07:00
Tony Tam
b4674d6fc5 template updates, tests 2015-05-15 11:27:03 -07:00
wing328
1f6a19b684 minor improvement to ruby api client accept and content-type header 2015-05-15 20:58:59 +08:00
geekerzp
c06cb38d64 updated objc client to support iso8601 datetime format 2015-05-15 17:49:56 +08:00
Josh Ponelat
3bc319d534 dynamic-html: refactor parameters view 2015-05-15 09:28:57 +02:00
Josh Ponelat
30496ffdc3 html: remove dead css line 2015-05-15 09:22:40 +02:00
Josh Ponelat
3544136ab1 dynamic-html: make sure clicking on return type works 2015-05-15 09:21:54 +02:00
geekerzp
6826a1d7df updated readme.mustache in python client 2015-05-15 14:51:51 +08:00
geekerzp
d798b943f5 added python 2.7 and python 3.4 test environments 2015-05-15 14:38:06 +08:00
wing328
4466b6e15e add test case for upload file, improve error handling 2015-05-15 11:08:33 +08:00
Tony Tam
0248d6fd9f Merge pull request #677 from wing328/fix_swagger_type2
Fix PHP swagger type
2015-05-14 11:50:57 -04:00
Tony Tam
bc66894553 Merge pull request #688 from xhh/scala-form-params
Add form parameters support to Scala codegen
2015-05-14 11:50:42 -04:00
wing328
c12673a407 fix error handling for 4xx, 5xx returned by server 2015-05-14 14:16:12 +08:00
geekerzp
86e48ceef8 refactor python client using urllib3 2015-05-14 10:45:05 +08:00
Ole Lensmar
adcd0f4bb8 changed interface to abstract class instead so we can use Override annotation to warn if we get dead methods when the definitions changes 2015-05-13 15:58:20 -07:00
Ole Lensmar
75b39e812e refactored to create separate serviceinterface, implementation and corresponding factory. JaxRs class uses the factory to find the implementation. Also fixed possibility for a code generator to control which API files that should be overwritten 2015-05-12 13:18:35 -04:00
Tony Tam
622d883344 fixed input type 2015-05-12 06:57:37 -04:00
Tony Tam
8519480f2c removed some cruft 2015-05-12 06:50:45 -04:00
Tony Tam
f9db729e75 added qt5 2015-05-12 06:05:09 -04:00
Tony Tam
0b2eced6a3 rebuilt 2015-05-12 06:05:00 -04:00
Tony Tam
dae01b5043 template update 2015-05-12 06:04:44 -04:00
Tony Tam
1912973d36 enabled qt5 2015-05-12 06:04:23 -04:00
Tony Tam
037a00720f added qt5 samples, script 2015-05-12 06:04:10 -04:00
Tony Tam
c2ee64e669 fixed version 2015-05-12 06:03:45 -04:00
Tony Tam
e703fc7982 fixed version 2015-05-12 06:03:37 -04:00
Tony Tam
5a1fa6ee65 added qt5 c++ templates 2015-05-12 05:56:12 -04:00
Tony Tam
d6016757cb Merge pull request #705 from wing328/fix_required_parameter
Fix required parameter validation for Java, Android, PHP and Ruby
2015-05-12 05:48:22 -04:00
Tony Tam
08184aab1d Merge pull request #679 from xhh/petstore-scala-tests
Fix tests for Scala petstore sample
2015-05-12 05:48:11 -04:00
Tony Tam
e33fbc67ad Merge pull request #648 from geekerzp/develop_2.0_objc_naming
Updated naming convention in objc client.
2015-05-12 05:47:51 -04:00
Tony Tam
f80238ae2d Merge pull request #737 from wing328/perl_codegen
Add templates for Perl
2015-05-12 05:47:25 -04:00
Ron
75ff9089af Merge pull request #739 from tomtit/revert726
Reverted JsonUtil.mustache for JavaClientCodegen after PR #726.
2015-05-12 09:42:37 +02:00
wing328
2f5f2b367b update package name to confirm to csharp convention, fix default header 2015-05-12 12:45:59 +08:00
Alexey Nechaev
66dea18b61 Reverted JsonUtil.mustache after PR #726. 2015-05-08 12:47:35 +00:00
Lorinda Brandon
bae40ded74 Update README.md 2015-05-07 19:23:49 -04:00
William Cheng
fc43828c20 update type mapping, update test.pl to use local file for testing upload 2015-05-08 03:58:02 +08:00
William Cheng
063a1ffd36 update type list in deserialize 2015-05-08 03:58:02 +08:00
William Cheng
1d4735f76d update subroutine argument 2015-05-08 03:58:01 +08:00
William Cheng
c03250132d update error message, update test script 2015-05-08 03:58:01 +08:00
William Cheng
48844442fc test post body (model), fix to_hash attribute mapping 2015-05-08 03:58:01 +08:00
William Cheng
f69fb40c71 add methods for static variable 2015-05-08 03:58:01 +08:00
William Cheng
0a34793f5a add inheritance to object (model) 2015-05-08 03:58:00 +08:00
William Cheng
07cd23edac seralization and deserialization work, get_pet_by_id and
update_pet_with_form work
2015-05-08 03:58:00 +08:00
William Cheng
a7ef1262e5 fix all swagger.pl syntax issue 2015-05-08 03:58:00 +08:00
William Cheng
c5fcf3ba2c remove pl files 2015-05-08 03:58:00 +08:00
William Cheng
d206035e0f add perl support - api template, bin, codegen 2015-05-08 03:57:59 +08:00
russellb337
2eeb96116d simplifying diff 2015-05-07 12:16:44 -07:00
russellb337
2edfb96c36 swagger codegen should honor global mime types 2015-05-07 12:02:25 -07:00
Tony Tam
c7e22b7a3b Merge pull request #726 from who/feature/gson-for-android-client
Feature: Use gson for android-client instead of jackson
2015-05-07 06:26:37 -07:00
Andrew B
20ced771ba Restoring the pom.xml so integration tests work 2015-05-07 01:09:25 -07:00
Andrew B
01b7385a5e Implementing gson in android client templates 2015-05-06 22:54:25 -07:00
wing328
070a6203e0 remove php comment 2015-05-07 13:35:19 +08:00
who
902c56f09b Initial commit of jackson-to-gson 2015-05-06 17:46:54 -07:00
russellb337
129086eea7 merge latest from develop_2.0 to fork 2015-05-06 13:44:10 -07:00
Tony Tam
157da246c0 added async test sample 2015-05-06 12:56:45 -07:00
Fake Bob Dobbs
321dfb7311 For SpringMVC, RequestHeader annotations are not setting the required attribute, even when required is false (RequestHeader uses default of true). This change always sets the required param 2015-05-06 09:05:57 -04:00
Tony Tam
65097a4908 Merge pull request #680 from geekerzp/develop_2.0_python_testing
Bug fix for deserialize model issue and added unit tests for python client
2015-05-04 21:11:35 -07:00
Tony Tam
df2cbfd0e9 Merge pull request #720 from akras14/master
Fixes a bug with Node.js example generating invalid package.json and swa...
2015-05-04 16:07:26 -07:00
Alex Kras
df95114a93 Fixes a bug with Node.js example generating invalid package.json and swagger.json
Currently string "... You can find out more about Swagger at <a href=\"http://swagger.io\">http://swagger.io</a> or ... " gets URL encoded, resuling in Node js throwing "Unable to parse" error.

Use of {{{ }}} forces mustache to skip URL encoding
http://mustache.github.io/mustache.5.html#Partials
2015-05-04 15:07:03 -07:00
Anthony Sosso
f7d30c847f Java: support x-www-form-urlencoded for PUT, POST, DELETE 2015-05-01 15:25:54 -07:00
who
b94eb443ea Adding some tests that were accidentally deleted 2015-04-30 12:52:21 -07:00
Ron
b70f5bc98b Merge pull request #709 from eerwitt/update_documentation_links
Found the 2.0.17 tag under 2.0.17 instead of v2.0.17.
2015-04-30 21:27:15 +03:00
e3
9876e792f1 Found the 2.0.17 tag under 2.0.17 instead of v2.0.17. 2015-04-30 11:22:45 -07:00
Ron
e3f09ae4cc Merge pull request #708 from eerwitt/update_documentation_links
Linked to the 2.0.18 tag instead of the no longer existing 2.0.17.
2015-04-30 21:21:32 +03:00
e3
cd2e030dc1 Linked to the 2.0.18 tag instead of the no longer existing 2.0.17. 2015-04-30 11:16:16 -07:00
who
6be2c06ed3 Adding maven publish functionality for android client 2015-04-30 10:34:43 -07:00
wing328
2e85871a4b remove hello.txt (created by mvn test) 2015-04-30 17:12:25 +08:00
wing328
47a8ef3031 fix required parameters in ruby 2015-04-30 17:01:36 +08:00
wing328
93e4ef0eec fix required parameters check for php 2015-04-30 16:52:33 +08:00
wing328
303378c5eb fix android required parameter check 2015-04-30 16:29:21 +08:00
Andrew B
5082f69631 Adding maven publish functionality for android client 2015-04-29 22:08:27 -07:00
Tony Tam
abe072c83d Merge pull request #703 from MaorBril/master
Added support for Basic Auth
2015-04-29 21:09:48 -07:00
maorb
5fbd0afdc5 Added support for Basic Auth 2015-04-29 18:19:16 -07:00
Tony Tam
4725dfb121 Merge pull request #702 from 0legg/feature/android-gradle
Jar and aar support for Android
2015-04-29 17:50:09 -07:00
Oleg Godovykh
14c2d14fc2 provide both jar and aar 2015-04-29 14:18:44 -04:00
Oleg Godovykh
119a981701 add possibility to create aar library 2015-04-29 13:39:00 -04:00
wing328
fb3088b765 fixed required parameter in java api 2015-04-29 17:31:38 +08:00
wing328
e7b170bf3c better comment on csharp api, add ParameterToString to handle date 2015-04-29 16:27:08 +08:00
wing328
96d837274e udpate csharp template with better comment and ParameterToString 2015-04-29 11:00:05 +08:00
wing328
8818c209df udpate csharp client with restsharp 2015-04-29 10:56:24 +08:00
wing328
5c057e1306 refactor csharp client using restsharp, getpetbyid working 2015-04-29 10:55:49 +08:00
Tony Tam
6c23a21312 Merge pull request #675 from marcinkiewiczblazej/issue-674
Fix for issue #674
2015-04-28 15:21:51 -07:00
Tony Tam
2f8e0bb09c Merge pull request #699 from 0legg/feature/android-gradle
Replace maven settings for Android client with gradle
2015-04-28 15:13:23 -07:00
Oleg Godovykh
b6495a9fc2 replace maven settings for Android client with gradle 2015-04-28 17:49:59 -04:00
Tony Tam
8952759eda Merge pull request #693 from lugaru1234/multiple_tags_operations
Generation of operations with multiple tags has been fixed #356
2015-04-28 07:03:23 -07:00
Tony Tam
c96f5f6fa8 added excludes for logback.xml per https://github.com/swagger-api/swagger-codegen/issues/689 2015-04-27 22:51:52 -07:00
Nadezhda Makarkina
b0d2d1116b Generation of operations with multiple tags has been fixed #356 2015-04-27 13:25:08 +03:00
xhh
4a55223a8f Add form parameters support to Scala codegen 2015-04-24 23:57:17 +08:00
geekerzp
3aa9982b23 Fixed issue that it will throw error when deserialize model in python client. 2015-04-23 18:19:08 +08:00
geekerzp
7d706f6a00 Added pom.xml for python client. 2015-04-23 18:09:32 +08:00
geekerzp
161aeb393b Add image file for python unit tests. 2015-04-23 17:38:57 +08:00
geekerzp
f9195a8a0e Added unit tests for python client. 2015-04-23 17:13:26 +08:00
Alexey Nechaev
9a36174685 Clean up of '\n' escaping. 2015-04-23 11:50:07 +03:00
xhh
4f5f6a9e8f Include Scala petstore sample into integration test 2015-04-23 15:27:44 +08:00
xhh
78072f753c Fix tests for Scala petstore sample 2015-04-23 09:38:27 +08:00
wing328
d5a3cc7300 fix php swagger type 2015-04-23 00:42:36 +08:00
Alexey Nechaev
fc0be6d503 Fixes #646: Example field handling has been fixed. 2015-04-22 16:17:28 +03:00
Alexey Nechaev
699973dcfe Group and version are avaiable from parent pom. 2015-04-22 16:11:16 +03:00
Blazej Marcinkiewicz
465266e219 Updated Java Spring MVC query param generation to include 'required' parameter if it's available. 2015-04-22 11:52:46 +02:00
Tony Tam
5c935a4c29 Merge pull request #668 from wing328/fix_swagger_type
[CSharp] Bug fix for swagger type
2015-04-21 10:01:35 -07:00
wing328
95ff0b9313 remove pettest, which is for testing only 2015-04-21 23:16:54 +08:00
wing328
eed04560c0 fix string? 2015-04-21 23:16:17 +08:00
William Cheng
2c0e8f6079 fix csharp model name issue 2015-04-21 22:42:13 +08:00
geekerzp
152eabbd6a Fixed PetstoreClient.xccheckout. 2015-04-21 16:33:28 +08:00
geekerzp
60ab624b23 Updated xcode project for petstore 2015-04-21 16:23:08 +08:00
geekerzp
4dd793c0ac Updated naming convention in objc client. 2015-04-21 16:23:08 +08:00
Tony Tam
7f4916f333 Merge pull request #664 from geekerzp/develop_2.0_python_content_type
Fixed encoding issue for request json body in python client.
2015-04-20 21:46:06 -07:00
Tony Tam
bf4d0a5466 Merge pull request #663 from wing328/better_method_doc
Better method documentation
2015-04-20 21:43:41 -07:00
geekerzp
d053d464dd Fixed encoding issue for request json body in python client. 2015-04-20 18:05:16 +08:00
William Cheng
5465708a42 add method documentation to android and scala 2015-04-19 23:51:46 +08:00
William Cheng
3622cfd169 add method documentation for objc client 2015-04-19 23:41:26 +08:00
William Cheng
ae389a8993 update python method documentation 2015-04-19 23:23:09 +08:00
Denis Yagofarov
1d175c1c7d + advices for OS X Users 2015-04-18 22:41:18 +03:00
wing328
7e37f3294a bug fix for post (model) and update php test cases 2015-04-17 20:01:58 +08:00
Karthik Velakur
1e273640b4 Issue #642 - Removing the unnecesary \n added to generated example requests 2015-04-16 13:26:52 -04:00
Tony Tam
cbbe29cf70 Merge pull request #651 from wing328/method_name_style
Update method name based on style guide
2015-04-16 10:09:47 -07:00
wing328
c87579e1f7 fix rspec due to change of optional parameter in ruby method 2015-04-17 01:03:15 +08:00
wing328
c30ed059fe update php api test with SwaggerClient.php 2015-04-17 00:26:06 +08:00
wing328
676c4d0835 add back php unit testing and readme to PHP SwaggerClient sample code 2015-04-17 00:26:06 +08:00
wing328
4c717829b3 update test.php, remove old SwaggerPetstore-php 2015-04-17 00:26:06 +08:00
wing328
8512259d02 update method name based on style guide, update petstore sample 2015-04-17 00:26:06 +08:00
Tony Tam
e45b04ef32 Merge pull request #649 from xhh/ruby-optional-params
Add support of optional parameters to Ruby codegen
2015-04-16 09:11:28 -07:00
xhh
de21088619 Support optional body parameter 2015-04-16 18:20:36 +08:00
xhh
61bf7f49cc Remove redundant blank lines 2015-04-16 15:56:08 +08:00
xhh
a819e4d523 Support optional parameters in Ruby client
* Pass optional parameters via the `opts` Hash
* Handle query parameters in a way similar to header/form parameters to
  support parameter name normalization, e.g. the "additional_metadata"
  key is passed for "additionalMetadata"
* Rename variables to be consistent: `query_params`, `header_params` and
  `form_params`
* Remove unnecessary blank lines
2015-04-16 15:56:08 +08:00
Tony Tam
57ca71fcc9 Merge pull request #626 from wing328/fix_ruby_rspec
Fixed Ruby rspec
2015-04-15 22:56:54 -07:00
Tony Tam
a03574e119 Merge pull request #631 from xhh/ruby-config
Fix hard-coded values in Ruby client: scheme, host and base_path
2015-04-15 22:54:46 -07:00
Tony Tam
19d7dad33c Merge pull request #618 from wing328/python3_codegen
Added back python 3 codegen
2015-04-15 22:53:15 -07:00
Tony Tam
2cd8ba9875 Merge branch 'geekerzp-develop_2.0_objc_tests' into develop_2.0 2015-04-15 22:49:05 -07:00
Tony Tam
dc11c94514 Merge branch 'develop_2.0_objc_tests' of https://github.com/geekerzp/swagger-codegen into geekerzp-develop_2.0_objc_tests 2015-04-15 22:46:46 -07:00
Tony Tam
037fe442dc Merge branch 'geekerzp-develop_2.0_objc_optional_property' into develop_2.0 2015-04-15 22:44:03 -07:00
Tony Tam
0525d66b86 regenerated 2015-04-15 22:43:48 -07:00
Tony Tam
a168c4bf06 Merge branch 'develop_2.0_objc_optional_property' of https://github.com/geekerzp/swagger-codegen into geekerzp-develop_2.0_objc_optional_property 2015-04-15 22:12:01 -07:00
Tony Tam
a465edd890 Merge pull request #645 from who/develop_2.0
[PHP Templates] Fixing a bug which was preventing payloads to serialize into JSON
2015-04-15 16:51:24 -07:00
who
164a01ed12 Fixing a bug which was preventing payloads to serialize into JSON 2015-04-15 16:17:21 -07:00
Tony Tam
39602c4b2b Merge pull request #644 from hyeghiazaryan/develop_2.0
Adding defaultHeaders dictionary to generated API classes.
2015-04-15 14:24:20 -07:00
hrachya
33dfcd247d Adding defaultHeaders dictionary to generated API classes. defaultHeaders will be merged with headerParams before sending the request.
fix for https://github.com/swagger-api/swagger-codegen/issues/638
2015-04-15 13:02:09 -07:00
Tony Tam
1617b76e27 Merge pull request #637 from hyeghiazaryan/develop_2.0
Adding import for Foundation.h to SWGQueryParamCollection.h
2015-04-15 10:08:21 -07:00
geekerzp
0a9df88e53 Using propertyIsOptional to implement optional property instead of
using `Optional` protocol in objc client.
2015-04-15 17:53:45 +08:00
geekerzp
989641892e Remove outdated tests in objc client 2015-04-15 15:10:46 +08:00
hrachya
21fcbc7acb Adding import for Foundation.h to SWGQueryParamCollection.h
fix for https://github.com/swagger-api/swagger-codegen/issues/636
2015-04-14 13:20:38 -07:00
Tony Tam
dfa17d2291 Merge pull request #630 from who/develop_2.0
Making default PHP namespace generic and fix issues 628 and 635
2015-04-14 12:35:44 -07:00
who
f4a2eff4b7 Fixing nested model deserialization - Issue #635 2015-04-14 12:24:59 -07:00
Tony Tam
f9fd511eb0 Merge pull request #634 from hyeghiazaryan/develop_2.0
Adding toParamName override to ObjcClientCodegen.java
2015-04-14 11:36:25 -07:00
hrachya
ff71a2cc60 Adding toParamName override to ObjcClientCodegen.java
fix for https://github.com/swagger-api/swagger-codegen/issues/633
2015-04-14 11:23:09 -07:00
xhh
41371bd901 Initialize a default configuration object 2015-04-14 15:03:21 +08:00
xhh
7db7b146be Fix hard-coded values in Ruby client: scheme, host and base_path 2015-04-14 12:32:25 +08:00
who
de25d63838 Making the default PHP package name more generic instead of being specific to Petstore 2015-04-13 16:27:30 -07:00
who
42829ffb13 A proposed fix for Issue #628 2015-04-13 13:14:10 -07:00
Tony Tam
444666a365 Merge pull request #629 from who/develop_2.0
Correct usage of strpos in PHP APIClient mustache template
2015-04-13 12:30:41 -07:00
who
41db8798af correct usage of strpos 2015-04-13 12:22:38 -07:00
Tony Tam
33bd614a42 Merge pull request #625 from geekerzp/develop_2.0_python_form_params
Fixed request content-type in python client
2015-04-13 10:26:17 -07:00
Tony Tam
10ad0b48dc Merge pull request #623 from wing328/php_fix_double
Fixed "double" response type in PHP client
2015-04-13 10:24:54 -07:00
wing328
4a0314849e fix ruby spec 2015-04-13 22:23:52 +08:00
geekerzp
10a9d298d7 Fixed request content-type in objc client.
In api.mustache the name of content-type is `Content-Type`,
but in swagger.mustache the name of content-type is `Content-type`.
2015-04-13 17:30:43 +08:00
William Cheng
13d513f02b fix double in php client response 2015-04-12 23:06:07 +08:00
Tony Tam
7f84deaf30 Merge branch 'develop_2.0' of github.com:swagger-api/swagger-codegen into develop_2.0 2015-04-10 23:07:27 -07:00
Tony Tam
765a5c6aa1 added uniqueness for nickname, #612 2015-04-10 23:07:00 -07:00
Tony Tam
f7c195a7ac updated pom for #612 2015-04-10 23:06:47 -07:00
Tony Tam
252cb18aeb Merge pull request #619 from geekerzp/develop_2.0_python_package
Update Python codegen to support packaging via Setuptools
2015-04-10 21:03:08 -07:00
Tony Tam
54a5ecb101 Merge pull request #620 from geekerzp/develop_2.0_objc_content_type
Fixed request content-type in objc client
2015-04-10 21:01:25 -07:00
geekerzp
63ca000482 fixed request content-type to multipart/form-data when upload file is null 2015-04-11 11:46:55 +08:00
geekerzp
00aa844964 update readme.md 2015-04-11 10:38:32 +08:00
geekerzp
e6bf58a707 package python sdk using setuptools 2015-04-11 10:38:32 +08:00
William Cheng
ccc0653923 add python 3 codegen 2015-04-10 19:42:09 +08:00
Tony Tam
70c14092f9 Merge pull request #610 from xhh/ruby-gemspec
Generate Ruby gemspec
2015-04-09 07:37:26 -06:00
Tony Tam
a1e62ea4b1 Merge pull request #611 from wing328/csharp_date_iso8601
Updated CSharp client to support ISO8601 format
2015-04-09 07:26:12 -06:00
wing328
22f72e2b23 update comment for escapeString 2015-04-09 16:05:13 +08:00
wing328
a0756bf6f2 remove composer.lock 2015-04-09 15:57:25 +08:00
wing328
78e1fb231e remove php vendor 2015-04-09 15:56:19 +08:00
wing328
5cbe5d60aa add iso8601 support to csharp, add more comments, add PATCH support 2015-04-09 15:55:13 +08:00
xhh
e9c5c1434b Fix spec 2015-04-09 11:37:48 +08:00
xhh
817a74d4df Add README.md file containing instructions on Ruby petstore sample 2015-04-09 11:34:10 +08:00
xhh
02fa04aec8 Generate gemspec for Ruby client 2015-04-09 11:34:09 +08:00
xhh
7cd8d0a1ac Restructure gemspec related files to ease importing the files 2015-04-09 11:34:09 +08:00
Tony Tam
7dcdaca288 Merge pull request #609 from geekerzp/develop_2.0_python_better_import
Better import for python client
2015-04-08 21:15:38 -06:00
geekerzp
3259a1d814 Fixed module name in __init__.py in python client. 2015-04-09 10:37:15 +08:00
geekerzp
806c26d54f Merge branch 'develop_2.0' into develop_2.0_python_better_import
Conflicts:
	modules/swagger-codegen/src/main/java/com/wordnik/swagger/codegen/languages/PythonClientCodegen.java
2015-04-09 09:31:50 +08:00
geekerzp
f2ecc271b5 Better import for python client. 2015-04-09 09:21:21 +08:00
Tony Tam
a05251da51 Merge pull request #601 from geekerzp/develop_2.0_python_unicode
Support unicode string in python client.
2015-04-08 06:56:19 -06:00
Tony Tam
555ef7677d Merge pull request #600 from wing328/python_variable_naming
Fixed parameter name, better naming convention for python client
2015-04-08 05:04:02 -06:00
Tony Tam
eb2ec92b66 Merge pull request #604 from wing328/php_fix_warning
Fixed PHP5.3 warning
2015-04-08 05:01:54 -06:00
Tony Tam
e1a3540caf fixed version 2015-04-08 05:00:10 -06:00
Tony Tam
c1d51266b3 fixed version 2015-04-08 04:51:54 -06:00
William Cheng
9de22c8146 update petstore php sample 2015-04-08 12:00:37 +08:00
William Cheng
eb0fccd1d2 fixed content-type check for model 2015-04-08 11:54:57 +08:00
William Cheng
cb2f5d3e25 fix php warning in php5.3 2015-04-08 11:33:09 +08:00
Tony Tam
73665a2b67 Merge pull request #602 from wing328/php_unit_test
Added unit testing for PHP Petstore client
2015-04-07 09:41:56 -06:00
geekerzp
24d5dc093f Support unicode string in python client. 2015-04-07 15:33:05 +08:00
William Cheng
18476114b9 update test case for php, add readme.md 2015-04-07 04:02:09 +08:00
William Cheng
bd07425b25 update php test case for PetApi 2015-04-07 03:59:20 +08:00
William Cheng
49ad6f47a5 fix parameter name, better naming convention for python client 2015-04-07 01:37:32 +08:00
Tony Tam
b85c8bbe7f rebuilt client 2015-04-06 08:08:36 -06:00
Tony Tam
e8ae9178af merged 2015-04-06 08:02:37 -06:00
Tony Tam
12d4e812a6 removed samples 2015-04-06 08:02:02 -06:00
Tony Tam
07030e1f42 Merge branch 'develop_2.0' 2015-04-06 08:01:24 -06:00
Tony Tam
c04f947a85 prepare for release 2015-04-06 08:00:16 -06:00
Tony Tam
d55aaffc48 Merge pull request #597 from wing328/php_package
Updated PHP codegen to support packaging via Composer
2015-04-06 07:44:00 -06:00
Tony Tam
b9514a40de Merge pull request #585 from wing328/ruby_fix_path_variable
Fixed Ruby path variable url-encoded twice, removed duplicated path variable replacement
2015-04-06 07:42:58 -06:00
William Cheng
ed43a38db2 Merge branch 'ruby_fix_path_variable' of https://github.com/wing328/swagger-codegen into ruby_fix_path_variable 2015-04-06 19:06:50 +08:00
William Cheng
2967cc3801 moved store spec into a separate file, update order id to 5 (as the
order with ID 2 is no longer found)
2015-04-06 19:05:19 +08:00
William Cheng
9c5153e8c8 fix test cases 2015-04-06 18:52:30 +08:00
William Cheng
0a4fc6a40f update ruby petstore sample 2015-04-06 18:52:30 +08:00
William Cheng
a717aba826 fixed path variable double uri-encoded issue 2015-04-06 18:52:30 +08:00
wing328
5c335beb60 removed description testing for Category 2015-04-06 18:28:43 +08:00
wing328
8d6d1cb329 recovered APIclient due to merge 2015-04-06 18:10:43 +08:00
wing328
6b2035e353 Merge branch 'php_package' of https://github.com/wing328/swagger-codegen into php_package
Conflicts:
	modules/swagger-codegen/src/main/resources/php/APIClient.mustache
	samples/client/petstore/php/SwaggerPetstore-php/lib/APIClient.php
	samples/client/petstore/php/SwaggerPetstore-php/lib/PetApi.php
	samples/client/petstore/php/SwaggerPetstore-php/lib/StoreApi.php
	samples/client/petstore/php/SwaggerPetstore-php/lib/UserApi.php
	samples/client/petstore/php/SwaggerPetstore-php/lib/models/Category.php
	samples/client/petstore/php/SwaggerPetstore-php/lib/models/Order.php
	samples/client/petstore/php/SwaggerPetstore-php/lib/models/Pet.php
	samples/client/petstore/php/SwaggerPetstore-php/lib/models/Tag.php
	samples/client/petstore/php/SwaggerPetstore-php/lib/models/User.php
2015-04-06 18:05:10 +08:00
wing328
3811a5a209 resolve conflict during rebase 2015-04-06 18:03:15 +08:00
wing328
c1046cc87b add php packaging support 2015-04-06 17:59:42 +08:00
Tony Tam
2bb42a1147 updated version 2015-04-05 16:12:04 -07:00
Tony Tam
1b4367ffba updated readme 2015-04-05 13:50:49 -07:00
Tony Tam
b4df8477d8 updated parser version 2015-04-05 13:48:48 -07:00
Tony Tam
27c7e69fba updated templates 2015-04-05 13:42:20 -07:00
Tony Tam
5a5bb6edbf Merge branch 'geekerzp-develop_2.0_objc_form_params' into develop_2.0 2015-04-04 22:12:41 -07:00
Tony Tam
448462552f updated logic, merged 2015-04-04 22:12:30 -07:00
Tony Tam
14cbc2d90d Merge branch 'develop_2.0_objc_form_params' of https://github.com/geekerzp/swagger-codegen into geekerzp-develop_2.0_objc_form_params 2015-04-04 21:34:26 -07:00
Tony Tam
dfa2c22e0c Merge pull request #566 from geoand/Apache_HttpClient_Connection_Manager
Switched SingleClientConnManager with ThreadSafeClientConnManager.
2015-04-04 21:33:38 -07:00
Tony Tam
a57588caa1 Merge pull request #588 from wing328/csharp_response_warning
Eliminated warning related to response in CSharp API files
2015-04-04 21:00:31 -07:00
Tony Tam
fad7246e05 removed file 2015-04-04 20:59:57 -07:00
Tony Tam
a0c9296ee8 name rebuilds, tests 2015-04-04 20:04:10 -07:00
Tony Tam
0c2e464c71 updated jetty version 2015-04-04 17:49:36 -07:00
Tony Tam
15236ef376 updated ruby template 2015-04-04 17:45:22 -07:00
Tony Tam
950bfff1c1 fixed serialization of arrays 2015-04-04 17:20:18 -07:00
Tony Tam
bba91c7e92 added android tests 2015-04-04 17:20:04 -07:00
Tony Tam
33c87e8e72 added sample 2015-04-04 17:02:16 -07:00
Tony Tam
ba2ccf788c name rebuilds, tests 2015-04-04 17:00:22 -07:00
Tony Tam
e114875f02 updated test 2015-04-04 16:58:28 -07:00
Tony Tam
09346c761b added script 2015-04-04 16:28:53 -07:00
Tony Tam
f0e41bf43e template updates 2015-04-04 16:28:43 -07:00
Tony Tam
9c75304832 updated to overwrite files 2015-04-04 16:28:33 -07:00
Tony Tam
02fd96a24a added spring-mvc sample 2015-04-04 13:46:35 -07:00
Tony Tam
568ca26747 renamed folder 2015-04-04 11:53:02 -07:00
Tony Tam
1e82fc5d24 removed old code 2015-04-04 11:49:40 -07:00
Tony Tam
d9f8fcb7a4 fixes for #501 2015-04-04 00:02:34 -07:00
Tony Tam
17ca7c4648 ahhhh scala 2015-04-03 23:18:03 -07:00
Tony Tam
acf2c8cc9d removed printlns 2015-04-03 23:12:50 -07:00
Tony Tam
43c88f51c6 fixed #497 2015-04-03 23:04:18 -07:00
Tony Tam
60e5899dc3 updated codegen 2015-04-03 23:02:38 -07:00
Tony Tam
f75312105d added property file 2015-04-03 22:41:00 -07:00
Tony Tam
610143f4ad fix for #577, added newline replacement 2015-04-03 22:22:31 -07:00
Tony Tam
2cc9b10a1e Merge branch 'develop_2.0' of github.com:swagger-api/swagger-codegen into develop_2.0 2015-04-03 22:15:10 -07:00
Tony Tam
f3ab28b92d fix for #589, escape text for parameter description 2015-04-03 22:15:00 -07:00
wing328
660d336646 fix warning related to csharp response, better code format for csharp api 2015-04-03 23:10:10 +08:00
Tony Tam
15c25c8277 Merge pull request #587 from geekerzp/develop_2.0_python_user_agent
Fixed user agent in python client
2015-04-03 07:34:19 -07:00
geekerzp
b4d4fa1a43 Update python sample code. 2015-04-03 18:21:33 +08:00
geekerzp
d4ac668cd4 Set default User-Agent for Python client. 2015-04-03 18:04:05 +08:00
Tony Tam
38e34e0dd6 Merge pull request #584 from wing328/ruby_fix_accept
Fixed Ruby header: "Accept", "Content-Type"
2015-04-02 21:56:44 -07:00
Tony Tam
9159892965 updated templates 2015-04-02 18:32:16 -07:00
Tony Tam
eda1a44fa3 updated parser 2015-04-02 18:30:00 -07:00
Camille Chafer
65b6d210bc Examples updated with names lower-camelized 2015-04-02 18:02:21 +02:00
Camille Chafer
6c4765fd00 Parameters names where camelized with first letter not lower 2015-04-02 18:00:25 +02:00
Camille Chafer
ef3811390f Some fixes for Wordnik & Petstore examples 2015-04-02 17:46:26 +02:00
Camille Chafer
2ce55115a6 Add wordnik and petstore examples 2015-04-02 16:26:16 +02:00
Camille Chafer
0811e0bce3 Add Akka-Scala client generator. This client uses Spray as Http Client. 2015-04-02 16:22:52 +02:00
William Cheng
40d512fe43 fix test cases 2015-04-02 21:37:54 +08:00
William Cheng
e73957e790 update ruby petstore sample 2015-04-02 21:12:01 +08:00
William Cheng
b773d40034 fixed path variable double uri-encoded issue 2015-04-02 16:15:08 +08:00
Tony Tam
b6be19b266 Merge pull request #582 from guptasu/develop_2.0
Fixed the compile time error in the generated code caused due to unescaped new line characters.
2015-04-01 20:58:01 -07:00
William Cheng
1c0cb7f884 fix syntax 2015-04-02 06:12:07 +08:00
William Cheng
bc24e5e290 update ruby accept header 2015-04-02 05:23:53 +08:00
Sunny Gupta
80259fbcc4 Fixed the compile time error in the generated code caused due to unescaped new line characters.
Since the description text is not being escaped, if there is a new line character, it will cause a new line to be added to the source code. This can cause compile time error if the new line character is part of a string (e.g. java string) and there is no '+' sign explicitly added to the code. Note: The code was doing escapeText for properties but not for models. This patch fixes that.
2015-04-01 12:33:44 -07:00
Tony Tam
64292cdc9b Merge branch 'develop_2.0' of github.com:swagger-api/swagger-codegen into develop_2.0 2015-04-01 07:41:54 -07:00
Tony Tam
df771b5a4d updated springfox templates 2015-04-01 07:41:45 -07:00
Tony Tam
8b8e8d70f9 Merge pull request #580 from wing328/php_content_type
Fix content-type and accept in PHP API
2015-04-01 07:29:57 -07:00
William Cheng
27dfa12335 remove csharp model files (lower case) 2015-04-01 17:43:36 +08:00
Tony Tam
13ee40a4b8 added test script 2015-03-31 21:48:12 -07:00
Tony Tam
df9efe5734 added script 2015-03-31 21:48:04 -07:00
Tony Tam
f142474a54 updated templates 2015-03-31 21:47:30 -07:00
Tony Tam
084d448fd4 Merge branch 'develop_2.0' of github.com:swagger-api/swagger-codegen into develop_2.0 2015-03-31 21:00:34 -07:00
Tony Tam
1385a157e9 moved count 2015-03-31 21:00:15 -07:00
Tony Tam
fe3c3cc8bc fix for #578 2015-03-31 20:59:57 -07:00
Tony Tam
97e44679d3 Merge pull request #579 from xhh/fix-android-datetime-pattern
Fix date time format for Android client
2015-03-31 20:12:59 -07:00
xhh
d5ad4c4ae7 Fix date time format for Android client
According to Android's docs (https://developer.android.com/reference/java/text/SimpleDateFormat.html)
the `SimpleDateFormat` class in Android does not accept `XXX` as the timezone, it uses `Z` instead.

Also updated the date time format of Android and Java clients to include milliseconds.
2015-04-01 10:22:04 +08:00
Tony Tam
6ac497d774 rebuilt 2015-03-31 16:12:42 -07:00
Tony Tam
cd2c8f6527 Merge branch 'develop_2.0' of github.com:swagger-api/swagger-codegen into develop_2.0 2015-03-31 16:08:53 -07:00
Tony Tam
d4b9a41786 added ruby 2015-03-31 16:08:47 -07:00
Tony Tam
93fef67c7e added required check 2015-03-31 16:08:37 -07:00
Tony Tam
f72e5907bb formatting 2015-03-31 16:08:09 -07:00
Tony Tam
01c956caba cleanup 2015-03-31 16:07:56 -07:00
Tony Tam
5f07fb0b03 sorted 2015-03-31 16:07:37 -07:00
Tony Tam
f17968d5b3 fixed required flag 2015-03-31 16:07:24 -07:00
Tony Tam
055c4397e9 renamed 2015-03-31 16:07:07 -07:00
Tony Tam
62a99115fc renamed 2015-03-31 16:06:52 -07:00
Tony Tam
7483a06226 renamed 2015-03-31 16:06:46 -07:00
Tony Tam
f265ce361a Merge pull request #556 from FindTheBest/develop_2.0
Python Binding Request Headers
2015-03-31 15:58:34 -07:00
Tony Tam
744952aee4 formatting 2015-03-31 15:57:50 -07:00
Tony Tam
66591f567c Merge pull request #576 from wing328/ruby_petstore_test
Fix Ruby rspec
2015-03-31 15:47:54 -07:00
William Cheng
03c48af9e6 Fix content-type and accept in PHP API 2015-04-01 04:26:32 +08:00
Tony Tam
3096c6c3ce updated versions 2015-03-31 08:47:35 -07:00
William Cheng
cb2f1e1bb1 update test case for StoreApi.getOrderById (id: 1 => 2) 2015-03-31 14:37:59 +08:00
William Cheng
59140bd3f3 remove commented unused code from response spec 2015-03-31 14:17:58 +08:00
James Ebentier
ce700b9421 Fixing one more issue with the defaultHeaders merging and removing unnecessary code 2015-03-30 12:47:56 -07:00
James Ebentier
761ab22f08 Adding Self to setDefaultHeader method signature 2015-03-30 12:28:17 -07:00
William Cheng
0ee39c67fe fix rspec, update ruby client default configuration 2015-03-31 01:28:33 +08:00
James Ebentier
148b2daaa3 Python Formatting: removing semicolons from the python code 2015-03-30 08:42:12 -07:00
geekerzp
a927d679f0 fixed issue that it throw exceptions when request with form parameters
in objective-c client
2015-03-30 17:42:47 +08:00
Tony Tam
a4ce6d7074 updated scripts 2015-03-29 20:55:26 -07:00
Tony Tam
3739d2876e removed file 2015-03-29 20:50:23 -07:00
Tony Tam
0c50d9807e added jaxrs 2015-03-29 20:50:10 -07:00
Tony Tam
5e83b6602e updated templates for baseName 2015-03-29 20:49:51 -07:00
Tony Tam
5ab425e82d rebuilt 2015-03-29 20:42:20 -07:00
Tony Tam
b5be12a25b Merge branch 'wing328-add_csharp_codegen' into develop_2.0 2015-03-29 20:03:25 -07:00
Tony Tam
367f81d52d Merge branch 'add_csharp_codegen' of https://github.com/wing328/swagger-codegen into wing328-add_csharp_codegen 2015-03-29 20:03:16 -07:00
Tony Tam
b10445f3f6 Merge pull request #561 from wing328/ruby_doc
Update ruby api files with better documentation
2015-03-29 19:58:21 -07:00
Tony Tam
1e7862a466 Merge pull request #574 from geekerzp/develop_2.0_python_urlencode
Fixed issue that query parameters double url encoded in python client
2015-03-29 19:56:02 -07:00
Tony Tam
943efce971 rebuilt 2015-03-29 19:43:29 -07:00
Tony Tam
e7675e48ed updated snapshot 2015-03-29 19:42:12 -07:00
Tony Tam
63efc4f442 removed println 2015-03-29 19:41:58 -07:00
Tony Tam
a5c92be360 updated sample 2015-03-29 19:41:37 -07:00
Tony Tam
8de8f48679 fix for Optional 2015-03-29 19:41:24 -07:00
Tony Tam
63fae85ff4 updated sample 2015-03-29 19:40:54 -07:00
geekerzp
8f6afda99a fixed issue that query parameters double url encoded 2015-03-30 10:34:01 +08:00
Tony Tam
510254e5a3 fixed required flag 2015-03-29 19:17:54 -07:00
wing328
9981daad61 add back php petstore samples 2015-03-30 09:39:37 +08:00
wing328
c1824b5387 fix parameter name in API, update petstore sample 2015-03-30 09:31:49 +08:00
Tony Tam
517c0a4f52 Merge pull request #558 from geekerzp/develop_2.0_objc_jsonmodel
Add JSONModel to objective-c client
2015-03-29 08:53:14 -07:00
Tony Tam
cab50ccb59 Merge pull request #548 from xhh/java-android-user-agent
Set default User-Agent for Java and Android clients
2015-03-29 08:52:56 -07:00
Tony Tam
e51f548807 Merge pull request #559 from wing328/java_doc
Update Java documentation for methods (endpoints)
2015-03-29 08:52:32 -07:00
Tony Tam
8a214838e5 Merge pull request #565 from wing328/php_doc
Update PHP documentation for method
2015-03-29 08:52:01 -07:00
geekerzp
37118cab47 Merge branch 'develop_2.0' into develop_2.0_objc_jsonmodel
Conflicts:
	samples/client/petstore/objc/PetstoreClient/PetstoreClientTests/PetApiTest.m
2015-03-29 18:15:02 +08:00
geekerzp
e6d7517e63 Update api-body.mustache, api-header.mustache,
apiBodyResponseWithContainer.mustache and apiNonPrimitiveResponse.mustache
templates in objective-c client.

* Update `asDictionary` method to `toDictionary` method which provided by
  JSONModel.
* Update `initWithValues` method to `initWithDictionary` method which
  provided by JSONModel.
2015-03-29 18:06:52 +08:00
xhh
90db8e2147 Add setUserAgent method to Java and Android clients 2015-03-29 09:55:20 +08:00
xhh
65883a5d85 Set default User-Agent for Java and Android clients 2015-03-29 09:55:19 +08:00
Tony Tam
7383520639 added objc target 2015-03-28 10:48:18 -07:00
Tony Tam
49e9c74324 Merge pull request #572 from swagger-api/issue-567
Issue 570
2015-03-28 10:46:17 -07:00
Tony Tam
492ab20c00 fix for issue 567, added reserved words, rebuilt client 2015-03-28 10:42:02 -07:00
Tony Tam
92621f2f2d fix for issue 567, added reserved words, rebuilt client 2015-03-28 10:41:51 -07:00
Tony Tam
f2ce5ef273 Merge pull request #571 from lanwen/cli-doc
update docs and bash about CLI usage, deprecate old cli classes
2015-03-28 08:50:46 -07:00
William Cheng
836f7ecb95 rebase with develop_2.0 2015-03-28 22:55:15 +08:00
MerkushevKirill
0dcd307333 update docs and bash about CLI usage, deprecate old cli classes
(after #547)
2015-03-28 12:34:44 +03:00
William Cheng
c2b3e68f8c rebase on develop_2.0 2015-03-28 16:48:07 +08:00
William Cheng
11c8e2268a Merge branch 'java_doc' of https://github.com/wing328/swagger-codegen into java_doc 2015-03-28 16:48:02 +08:00
William Cheng
a12cc1c544 remove {{newline}} as it has no impact at all 2015-03-28 16:43:16 +08:00
William Cheng
27e1b1c4b2 update java doc 2015-03-28 16:43:15 +08:00
Tony Tam
a62cd193ad Merge pull request #569 from swagger-api/issue-567
updated camelize function for #567
2015-03-27 23:23:02 -07:00
Tony Tam
0686a91690 updated camelize function for #567 2015-03-27 23:18:54 -07:00
Tony Tam
4f6d5f6265 Merge pull request #568 from swagger-api/feature/objc-templates
Feature/objc templates
2015-03-27 23:04:16 -07:00
Tony Tam
99271e77ab added multi-param args 2015-03-27 22:55:06 -07:00
Tony Tam
c9a2a14da5 added queryParamCollection 2015-03-27 22:17:50 -07:00
Tony Tam
236a1147b7 minor comment 2015-03-27 09:53:40 -07:00
gandrianakis
7eba8670e3 Switched SingleClientConnManager with ThreadSafeClientConnManager.
The SingleClientConnManager cannot be used safely in multi-threaded environments
2015-03-27 18:41:16 +02:00
William Cheng
bdd1d1621f remove {{newLine}} and replace tab wtih 2 spaces 2015-03-27 23:55:26 +08:00
Tony Tam
98c8f867e5 enabled java test 2015-03-27 08:52:22 -07:00
William Cheng
bfb35aa3ee remove {{newline}} as it has no impact at all 2015-03-27 23:49:27 +08:00
William Cheng
6ab51bcb4e remove tab with 2 spaces in php api template 2015-03-27 23:11:13 +08:00
William Cheng
1c547e9598 update php documentation 2015-03-27 22:40:59 +08:00
geekerzp
19c05eefab Merge branch 'develop_2.0' into develop_2.0_objc_jsonmodel
Conflicts:
	pom.xml
2015-03-27 17:27:58 +08:00
Tony Tam
3d12c8847f Merge pull request #562 from swagger-api/feature/java-client
Feature/java client
2015-03-26 23:31:47 -07:00
Tony Tam
5d6d563a8e updated versions 2015-03-26 23:17:17 -07:00
Tony Tam
442be8624c rebuilt client, added tests 2015-03-26 23:10:10 -07:00
Tony Tam
287bb7d936 fixed builder, error msg 2015-03-26 23:09:47 -07:00
Tony Tam
ddb1d6e0d3 removed 404 handling 2015-03-26 23:09:29 -07:00
Tony Tam
8b98a92805 adds tests, fixes for java templates 2015-03-26 20:32:59 -07:00
William Cheng
8b4a077f8a Merge branch 'ruby_doc' of https://github.com/wing328/swagger-codegen into ruby_doc 2015-03-27 02:12:33 +08:00
William Cheng
3d53cfc298 better ruby method argument format 2015-03-27 02:11:49 +08:00
William Cheng
fb2ab79455 update ruby doc 2015-03-27 02:11:49 +08:00
William Cheng
731bfc1fc6 Merge branch 'java_doc' of https://github.com/wing328/swagger-codegen into java_doc 2015-03-27 02:00:05 +08:00
William Cheng
ae52a62c09 update java doc 2015-03-27 01:59:05 +08:00
russellb337
62d4516fe7 Merge remote-tracking branch 'upstream/develop_2.0' into develop_2.0 2015-03-26 09:06:35 -07:00
William Cheng
9ba1398831 better ruby method argument format 2015-03-26 20:20:28 +08:00
William Cheng
a4690d76db update ruby doc 2015-03-26 19:55:48 +08:00
William Cheng
fe11b064af update java doc 2015-03-26 16:27:00 +08:00
Tony Tam
a2dc767559 Update .travis.yml 2015-03-25 20:57:48 -07:00
geekerzp
93e19e48db update swagger-core version to 1.5.4-M1-SNAPSHOT 2015-03-26 11:23:47 +08:00
geekerzp
fbe069cf5c add jsonmodel in objective-c client 2015-03-26 10:07:33 +08:00
Tony Tam
20add5b58e updated tests, jetty 2015-03-25 16:16:03 -07:00
Tony Tam
b7c2c3448e renamed package 2015-03-25 12:12:04 -07:00
Tony Tam
f577345b14 fixed examples, readme 2015-03-25 12:11:40 -07:00
James Ebentier
bf46da7c14 Python: modifying request headers in ApiClient to act like those in Java and PHP 2015-03-25 11:44:46 -07:00
Tony Tam
d2f5b9ea65 added recursion check 2015-03-25 11:11:04 -07:00
Tony Tam
e8052f0505 Merge pull request #550 from swagger-api/feature/ios-templates
added command-line tests
2015-03-25 09:27:42 -07:00
Tony Tam
be373f88d4 fixed test errors 2015-03-25 09:27:12 -07:00
Tony Tam
ceffa10ab7 added command-line tests 2015-03-24 23:24:13 -07:00
Tony Tam
b36f3c98ca Merge pull request #547 from lanwen/cli
add - new command line interface in distribution module
2015-03-24 20:34:34 -07:00
Tony Tam
f459982560 Merge pull request #549 from swagger-api/feature/ios-templates
Feature/ios templates
2015-03-24 19:59:54 -07:00
Tony Tam
56104566fc added void response 2015-03-24 19:57:51 -07:00
Tony Tam
85463f049c rebuilt sample 2015-03-24 19:56:45 -07:00
Tony Tam
30acfc1869 added sys property 2015-03-24 19:56:38 -07:00
Tony Tam
2ce0049ce4 updated templates to fix petstore build error 2015-03-24 19:56:28 -07:00
Tony Tam
e82ecf695d added array support 2015-03-24 19:56:04 -07:00
Tony Tam
dc9a00809c Merge branch 'develop_2.0' of github.com:swagger-api/swagger-codegen into develop_2.0 2015-03-24 17:13:02 -07:00
Tony Tam
31418b3936 added property for app name 2015-03-24 17:12:20 -07:00
Tony Tam
db14a3fd05 added property for app name 2015-03-24 17:02:12 -07:00
Tony Tam
de0e108d27 added property for app name 2015-03-24 17:02:03 -07:00
Tony Tam
b8cd52aa07 Merge pull request #540 from lanwen/develop_2.0
rft - only codestyle, remove wildcard imports and use string-utils from apache
2015-03-24 16:56:01 -07:00
Tony Tam
16403950d5 Merge pull request #545 from wing328/ruby_better_naming
Update ruby codgen for better naming convention
2015-03-24 16:53:20 -07:00
MerkushevKirill
8ba444141e add - new command line interface in distribution module
can replace Codegen and MetaGenerator classes. Provides a bit different cli interface
based on refactored pom from #541,
affects #349

```
usage: swagger <command> [<args>]

The most commonly used swagger commands are:
    generate   Generate code with chosen lang
    help       Display help information
    langs      Shows available langs
    meta       MetaGenerator. Generator for creating a new template set and configuration for Codegen.  The output will be based on the language you specify, and includes default templates to include.
 ```
  **generate** and **meta** commands have same as current cli options
2015-03-25 01:59:55 +03:00
William Cheng
fb3e44ecc4 break down ruby reservedWord list into multiple lines 2015-03-24 16:34:41 +08:00
William Cheng
8107162540 update ruby codgen for better naming convention 2015-03-24 16:24:31 +08:00
MerkushevKirill
ee096569c4 rft - only codestyle with indents, remove wildcard imports and use string-utils from apache 2015-03-24 11:13:01 +03:00
Tony Tam
81e1fd53e2 Merge pull request #544 from geekerzp/develop_2.0_python_key_map
Support attribute key mapping in python client
2015-03-23 22:18:25 -07:00
geekerzp
07237f8eb9 add model attribute name json key mapping in python clent 2015-03-24 11:55:20 +08:00
Tony Tam
9442e23fd9 Merge pull request #543 from wing328/remove_old_php_sample
Remove old model files in PHP petstore
2015-03-23 20:35:13 -07:00
russellb337
970facaa8a merge latest from develop_2.0 to fork 2015-03-23 17:01:49 -07:00
russellb337
fe92889b10 merge latest from develop_2.0 to to fork 2015-03-23 17:01:35 -07:00
Tony Tam
fe82d7dc05 Merge pull request #542 from mrwanny/fix_MissingTag_StringIndexOutOfBoundsException
fix StringIndexOutOfBoundsException when tag is not provided
2015-03-23 16:22:01 -07:00
Wanny
915fcf9b92 fix cleanup 2015-03-23 16:08:26 -07:00
Wanny
31e8d58b1d fix StringIndexOutOfBoundsException when tag is not provided 2015-03-23 15:29:39 -07:00
William Cheng
87b85e5b93 remove old php model files 2015-03-24 02:33:08 +08:00
Tony Tam
823ac04abb Merge pull request #534 from Juliens/master
add version in properties
2015-03-23 08:47:06 -07:00
Tony Tam
0cf1c3c74a Merge pull request #536 from wing328/android_better_naming
better naming convention for android-java codegen
2015-03-23 08:44:01 -07:00
William Cheng
fd602af180 better naming convention for android-java codegen 2015-03-23 15:41:24 +08:00
Tony Tam
048bea6249 Merge pull request #535 from wing328/java_beter_naming
Better variable and model property naming for Java
2015-03-22 21:19:01 -07:00
Tony Tam
601a519cb6 Merge pull request #530 from FindTheBest/master
PHP Request Headers and Deserialization
2015-03-22 21:17:10 -07:00
Tony Tam
f1f9805a01 Merge pull request #527 from geekerzp/develop_2.0_python
Support iso8601 datetime format in Python client
2015-03-22 19:35:18 -07:00
William Cheng
62d28ebca5 better variable and model property naming for java 2015-03-22 23:24:43 +08:00
Julien SALLEYRON
c46f3f9ee4 add version in properties 2015-03-21 20:12:44 +01:00
Tony Tam
f008b75e99 Merge pull request #528 from wing328/php_better_variable_naming
PHP better naming convention
2015-03-21 08:18:46 -07:00
Tony Tam
38204b2237 Merge pull request #531 from geekerzp/develop_2.0_python_datetime
Update santizeForSerialization to normalize parameters for Python client
2015-03-21 08:18:00 -07:00
Tony Tam
d71785470b Merge pull request #532 from xhh/android-form-params
Add support of form parameter to Android client
2015-03-21 08:16:20 -07:00
xhh
b5a4d5be04 Add support of form parameter to Android client
* Handle form parameters in a way similar to Java client.
* Handle file uploading.
* Normalize query, header and form parameters with the
  ApiInvoker.parameterToString method, which formats Date value to ISO 8601.
2015-03-21 22:20:28 +08:00
geekerzp
f085860eb1 Update sanitizeForSerialization to sanitize parameters to Python client
* Refactor santizeForSerialzation to static method.
* Sanitize header/query/form/body parameters.
* Sanitize datetime.datetime and datetime.date to iso8601 format string.
* Sanitize swagger model to dict.
2015-03-21 14:58:32 +08:00
James Ebentier
8323fdf8e8 Fixing deserialization bug in PHP bindings 2015-03-20 15:35:09 -07:00
James Ebentier
0c3f06604d Correcting spelling error in comment 2015-03-20 14:54:53 -07:00
James Ebentier
e782ea2c05 Default Headers: allowing the setting of defaultHeaders on ApiClient 2015-03-20 14:45:12 -07:00
Tony Tam
9062016bf0 Merge pull request #529 from mrwanny/add_springdox
Add server codegen for springdox
2015-03-20 14:17:31 -07:00
Wanny
2301e604b3 clean up README.md 2015-03-20 13:53:07 -07:00
Wanny
34eab98ce4 Merge branch 'develop_2.0' into add_springdox 2015-03-20 13:47:08 -07:00
Wanny
00c1018d79 add basi Springdox server generation 2015-03-20 13:45:01 -07:00
William Cheng
c36e5a96fe update php codegen with better naming convention 2015-03-20 21:56:41 +08:00
geekerzp
c024a4c099 use dateutil to parse string to datetime in python 2015-03-20 14:38:18 +08:00
Tony Tam
92e5574ec1 Merge pull request #526 from swagger-api/feature/example-generator
Feature/example generator
2015-03-19 15:49:47 -07:00
Tony Tam
cdf8648d3b made noservice option 2015-03-19 14:59:32 -07:00
Tony Tam
de56f76284 rebuilt sample 2015-03-19 14:52:45 -07:00
Tony Tam
ae1d43dc84 added more instructions, service template 2015-03-19 14:47:43 -07:00
Tony Tam
531e2d7032 added example generator, updated signatures to match 2015-03-19 14:45:22 -07:00
Tony Tam
32fe6b0333 Merge branch 'develop_2.0' of github.com:swagger-api/swagger-codegen into develop_2.0 2015-03-19 09:04:16 -07:00
Tony Tam
75714ac518 added default for filename generation 2015-03-19 09:04:12 -07:00
Tony Tam
8262d30202 Merge pull request #459 from geoand/objc-dictionary-fix-dev2_0
Fixed bug that prevented Objective-C code from compiling when using a Sw...
2015-03-19 08:52:25 -07:00
Tony Tam
d332cdf200 Merge pull request #522 from wing328/ruby_user_agent
Fix User-Agent in Ruby API cleint
2015-03-19 08:32:59 -07:00
Tony Tam
f6c18cd50f Merge pull request #524 from wing328/php_property_mapping
Add Attribute Mapping to PHP model
2015-03-19 08:28:02 -07:00
William Cheng
ab8d62214a add attributemap to php model, update php petstore sample 2015-03-19 20:58:22 +08:00
William Cheng
a149bb9120 update ruby petstore example 2015-03-19 17:17:39 +08:00
William Cheng
02283fae46 udpate ruby api client to support user-agent 2015-03-19 17:09:27 +08:00
gandrianakis
c82b31aa61 Reintroduce objc dictionary fix to updated develop_2.0 branch 2015-03-19 11:07:54 +02:00
gandrianakis
37303745df Merge branch 'develop_2.0' into objc-dictionary-fix-dev2_0
Conflicts:
	modules/swagger-codegen/src/main/java/com/wordnik/swagger/codegen/DefaultCodegen.java
2015-03-19 10:59:47 +02:00
gandrianakis
e5357df67a Merge remote-tracking branch 'upstream/master' into objc-dictionary-fix-dev2_0 2015-03-19 10:45:27 +02:00
Tony Tam
c109c11bea added yaml output 2015-03-18 23:26:45 -07:00
Tony Tam
3a8c798596 Merge branch 'develop_2.0' of github.com:swagger-api/swagger-codegen into develop_2.0 2015-03-18 23:25:48 -07:00
Tony Tam
9311bdf972 added yaml generator 2015-03-18 23:24:47 -07:00
Tony Tam
925caa223a Merge pull request #482 from FindTheBest/master
Python: fixing an issue in swagger python code generation
2015-03-18 22:59:26 -07:00
Tony Tam
95e7265bd7 Merge pull request #498 from burmanm/issue_495
Fix NPE with resourcePath = /, issue #495
2015-03-18 22:58:45 -07:00
Tony Tam
93afc3bd95 Merge pull request #516 from wing328/ruby_header_param
Bug fix for ruby header parameter and better code format
2015-03-18 22:58:31 -07:00
Tony Tam
cbdb31048e updated to release version 2015-03-18 22:40:41 -07:00
Tony Tam
6b1f176a66 Merge pull request #417 from Helmsdown/additional-codegen-properties
Add API Version to Codegen Additional Properties
2015-03-18 17:05:59 -07:00
Tony Tam
f2ee9b39e9 Merge pull request #519 from swagger-api/feature/swagger-tools
updated nodejs server to swagger-tools, supports 2.0 spec
2015-03-18 16:30:57 -07:00
Tony Tam
b6e5c55817 updated nodejs server to swagger-tools, supports 2.0 spec 2015-03-18 16:10:54 -07:00
Tony Tam
963d92e23f Merge pull request #518 from cchafer/add_response_headers
Add defined response headers in CodegenResponse. at this time, only the ...
2015-03-18 14:10:08 -07:00
Camille Chafer
081757c592 headers list is CodegenResponse is always defined (no null list) 2015-03-18 19:01:45 +01:00
Camille Chafer
ac78c15fbf Add defined response headers in CodegenResponse. at this time, only the headers of the 'default' response are included in the operation. 2015-03-18 18:38:27 +01:00
Tony Tam
dd78de1ed8 updated basePath, contextPath 2015-03-18 09:34:38 -07:00
Tony Tam
64fbcb6045 rebuilt client 2015-03-18 09:34:19 -07:00
Tony Tam
86c6892eb6 rebuilt samples 2015-03-18 09:32:45 -07:00
Tony Tam
9cfbd8bde0 updated sample 2015-03-18 09:32:18 -07:00
Tony Tam
1e1d193556 Merge pull request #517 from xhh/java-param-to-str
Add parameterToString to normalize parameters for Java client
2015-03-18 07:12:32 -07:00
xhh
f8a5e900f8 Add parameterToString to normalize parameters for Java client
* Convert values to string for query/header/form parameters.
* For parameter of type Date, convert to ISO 8601 format.
* Also add utility methods to parse date in ISO 8601 format.
2015-03-18 18:58:13 +08:00
William Cheng
d0dcb2fb43 fix bug with ruby header parameter, remove extra linebreak in generated
code
2015-03-18 16:33:00 +08:00
Tony Tam
bb45790375 Merge pull request #513 from wing328/add_ruby_to_readme
update README with ruby on the codegen usage
2015-03-17 17:51:54 -07:00
Tony Tam
369689d001 merged 2015-03-17 16:30:59 -07:00
Tony Tam
df39fe5d08 added Json schema fields 2015-03-17 16:30:42 -07:00
sosso
b73340ab83 Java: properly add request headers
https://jersey.java.net/nonav/apidocs/1.8/jersey/com/sun/jersey/api/client/PartialRequestBuilder.html#header(java.lang.String, java.lang.Object)

We were running into issues with our headers not making it into our requests.  Upon some research, it appears that Jersey's header() method returns the builder object, meaning we have to do this assignment to properly construct the request.  After making the change, our requests work as expected.
2015-03-17 11:39:32 -07:00
William Cheng
a1d02785af update README with ruby on the codegen usage 2015-03-18 00:14:39 +08:00
Tony Tam
4f32e9dbff Merge pull request #502 from FindTheBest/develop_2.0
PHP Generated Models
2015-03-17 08:51:02 -07:00
Tony Tam
b6ca69f57a Merge pull request #510 from xhh/patch-2
update null comparison for query params in Java
2015-03-17 07:10:52 -07:00
Tony Tam
62992c2de1 Merge pull request #509 from wing328/ruby_form_parameter
update ruby client to support form parameters, add PATCH support
2015-03-17 07:05:09 -07:00
Xu Hui Hui
b2da6dc8a2 update null comparison for query params in Java
to make it clear and also allow a query parameter to be set with string value: "null" (4 characters string)
2015-03-17 16:34:01 +08:00
Tony Tam
c96853d5aa Merge pull request #507 from cchafer/security_schemes_definition
Adding defintion of security schemes in CodegenSecurity
2015-03-16 22:13:19 -07:00
Tony Tam
c215d8ab91 fix and tests for #503 2015-03-16 22:10:35 -07:00
Tony Tam
46d1950fbd removed unnecessary file 2015-03-16 21:04:21 -07:00
Tony Tam
03b764d404 Merge branch 'develop_2.0' of github.com:swagger-api/swagger-codegen into develop_2.0 2015-03-16 20:54:14 -07:00
Tony Tam
a8aebec9ba removed description 2015-03-16 20:54:08 -07:00
Tony Tam
fd72ff56bf fixed context path 2015-03-16 20:54:01 -07:00
Tony Tam
ebec85fd54 added context path 2015-03-16 20:53:48 -07:00
Tony Tam
fd792ef180 added more helpful error trace 2015-03-16 20:53:34 -07:00
Tony Tam
486186e042 Merge pull request #505 from wing328/php_support_user_agent
update User-agent in PHP API client
2015-03-16 20:44:46 -07:00
Tony Tam
8111d4e909 Merge pull request #506 from wing328/ruby_codegen
Add ruby codegen, update sample (petstore) for ruby
2015-03-16 19:49:21 -07:00
William Cheng
fc9d632522 update ruby client to support form parameters, add PATCH support, update
ruby petstore client
2015-03-17 05:24:43 +08:00
Camille Chafer
d580d294b6 Adding defintion of security schemes in CodegenSecurity 2015-03-16 11:58:29 +01:00
William Cheng
e9227ad7e5 add ruby codegen, update sample (petstore) for ruby 2015-03-16 18:47:22 +08:00
Tony Tam
156ec2a2dd Merge pull request #485 from wing328/fix_php_string_response
minor bug fixes and enhancement to Swagger.php
2015-03-15 21:02:37 -07:00
William Cheng
186310b553 Merge branch 'fix_php_string_response' of https://github.com/wing328/swagger-codegen into fix_php_string_response
Conflicts:
	modules/swagger-codegen/src/main/resources/php/Swagger.mustache
	samples/client/petstore/php/Swagger.php
2015-03-15 22:08:44 +08:00
William Cheng
bcdee4e038 update php petstore sample code 2015-03-15 22:06:42 +08:00
William Cheng
6bc8de1230 rebase on develop_2.0 2015-03-15 22:02:16 +08:00
William Cheng
b8166f283a update php to support user agent 2015-03-15 16:33:57 +08:00
Tony Tam
ad7a5967ff Merge pull request #504 from wing328/php_param_supppor_datetime
PHP parameters to suppport datetime (ISO8601)
2015-03-14 22:41:54 -07:00
William Cheng
a0dc2097eb update php api client to support datetime (iso8601) for parameters
(header, path, url, form)
2015-03-14 23:48:05 +08:00
James Ebentier
24842d4a29 PHP Models: fixing an issue with commas being where they shouldn't 2015-03-13 10:53:42 -07:00
James Ebentier
0854ca5ce5 PHP Models: updating the models generated for PHP styling 2015-03-13 10:53:19 -07:00
James Ebentier
6ca34e362d PHP Models: updating the models generated for PHP to be array accessable and have a simple constructor 2015-03-13 10:51:45 -07:00
Tony Tam
470ba201d8 build error fix 2015-03-13 10:45:12 -07:00
Tony Tam
fc52ab972b Merge pull request #494 from FindTheBest/develop_2.0
Fixing bug in new APIClientException
2015-03-13 09:44:02 -07:00
Tony Tam
7aca1cfb3f Merge pull request #486 from wing328/php_fix_deserialize
Bug fixes for Swagger.php deserialize function
2015-03-13 09:39:50 -07:00
Ron
d9b247f302 Merge pull request #500 from jwyterlin/patch-1
Update README.md
2015-03-13 09:38:18 -04:00
Jhonathan Wyterlin
c1e45a5931 Update README.md 2015-03-13 10:35:59 -03:00
Michael Burman
4748af4d59 Fix NPE with resourcePath = /, issue #495
(cherry picked from commit 01515e4ded6fa59da87d109dd8056c1b4a64e0f7)
2015-03-13 14:38:19 +02:00
James Ebentier
575967b5de Fixing bug in new APIClientException
This new exception had a typo in it for the construct class declaration.
2015-03-12 13:23:46 -07:00
Tony Tam
6c57d6a76e Merge pull request #491 from FindTheBest/develop_2.0
PHP Bindings: exposing response and response info in Exceptions
2015-03-12 12:23:34 -07:00
James Ebentier
56ff34dc47 PHP Bindings: exposing response and response info to be accessible through thrown exceptions when non 200 response code is received 2015-03-12 12:12:07 -07:00
David Valdez
5b72653d7f Update README.md 2015-03-12 12:07:24 -07:00
Tony Tam
0a949e26f0 Merge pull request #487 from wing328/update_php_form
form parameter(single quote), add more comments
2015-03-11 08:44:26 -07:00
William Cheng
5347915c12 form parameter(single quote), add more comment 2015-03-11 21:14:17 +08:00
William Cheng
d0edb836ac fix syntax error at 223, update array comparision (case insensitive) 2015-03-11 15:47:28 +08:00
James Ebentier
c75cd55e2c Merge remote-tracking branch 'wordnik/master' 2015-03-10 13:05:16 -07:00
Tony Tam
911be4360a Merge pull request #483 from wing328/add_patch_php
Add PATCH support to PHP API client
2015-03-10 11:42:57 -07:00
Tony Tam
939b4c713d per #458 2015-03-10 11:42:31 -07:00
Tony Tam
e6abc2a881 Merge pull request #458 from djvaldez/master
Update README.md - fixed incorrect flag for custom generator class
2015-03-10 11:40:34 -07:00
Tony Tam
b2977cd29b Merge pull request #477 from wing328/fix_php_basename
use baseName for parameter name in PHP api
2015-03-10 11:39:28 -07:00
Tony Tam
da6f0eec84 Merge pull request #481 from godaddy/develop_2.0
Develop 2.0 - Fix for python3 client deserialize passing wrong parameter
2015-03-10 11:38:59 -07:00
William Cheng
7555dda2bf add logic to handle all 2xx response code, bug fix for string response,
bug fix for showing error message using serialize
2015-03-11 01:37:39 +08:00
William Cheng
941f6e7757 add PATCH support to PHP API client 2015-03-10 18:13:55 +08:00
Tony Tam
1887170dad updated links 2015-03-09 18:50:23 -07:00
James Ebentier
b2cfb77222 Python: fixing an issue in swagger python code generation where attribute classes aren't respected 2015-03-09 18:18:20 -07:00
Brad Figler
5d77321dca syncing remote 2.0 branch 2015-03-09 20:47:48 +00:00
Brad Figler
f20522a586 Merge remote branch 'upstream/master' 2015-03-09 19:10:14 +00:00
Brad Figler
17435212ed Properly serailze the correct object type versus the parent objClass 2015-03-09 19:00:35 +00:00
Tony Tam
6207c2b5e9 fix for #475 building on java8 2015-03-09 10:09:33 -07:00
Tony Tam
b6f7f85baa updated links 2015-03-09 09:32:22 -07:00
Tony Tam
9c77742046 updated links 2015-03-09 09:31:34 -07:00
Tony Tam
e9d0619358 updated versions 2015-03-09 08:59:16 -07:00
William Cheng
7c23eedf07 use baseName for parameter name in PHP api 2015-03-09 23:15:12 +08:00
Ron
27c6af3491 Update README.md 2015-03-07 16:34:39 -05:00
Tony Tam
dc5ee9dcf5 added reserved words 2015-03-04 20:44:26 -08:00
Tony Tam
07ff6a2278 Merge pull request #468 from cor3ntin/fix_base_path_upstream
Fix {{basePath}} value in support files.
2015-03-04 07:25:29 -08:00
Tony Tam
dce9a81536 Merge pull request #467 from cor3ntin/security_upstream
Expose Security schemes of operations.
2015-03-04 07:25:00 -08:00
Corentin Jabot
156055fdd5 Fix {{basePath}} value in support files.
Make {{basePath}} value in support files be the
same as in operation files, aka host/path, instead of /path.
2015-03-04 15:01:07 +01:00
Corentin Jabot
3a5c03c778 Expose Security schemes of operations.
A template can now refer to the type ( oath2.0, apiKey, basic )
as well as the name of the security schemes it rquires.

Usage :

{{#operations}}
{{#authMethods}}
{{type}}  {{name}}
{{/authMethods}}
{{/operations}}
2015-03-04 14:54:48 +01:00
Tony Tam
9ce4156e4c Merge pull request #455 from cchafer/responses
Implements CodegenResponse, and return default response in Operaiton.Responses (#293)
2015-03-03 17:34:47 -08:00
Tony Tam
f82afe0026 Merge pull request #452 from herveDarritchon/develop_2.0
Defect (Issue #445) : change the call of initialCaps for getter and setter proper generation
2015-03-03 17:33:01 -08:00
Ron
c3bb458ed9 Merge pull request #463 from yzats/patch-3
Fixed spelling errors in README.md
2015-03-03 18:45:46 -05:00
yzats
5c2c8e1d76 Update README.md
Fix spelling errors
2015-03-03 12:42:15 -08:00
Tony Tam
ced95d658f added instructions for the meta generator 2015-03-02 23:37:21 -08:00
Tony Tam
a724cd0780 added meta generator 2015-03-02 23:28:59 -08:00
Tony Tam
6b823b88d9 moved logic into abstract class for extensions 2015-03-02 17:29:29 -08:00
Tony Tam
8fb180133a merged from master 2015-03-02 10:59:35 -08:00
Tony Tam
e877abf153 Merge pull request #461 from natechadwick/master
The --auth parameter was setup to ignore values.
2015-03-01 13:45:50 -08:00
nate
dd0ccff58a Minor typo in help text. 2015-03-01 14:18:11 -05:00
nate
a793d5c6cc Changed the --auth parameter to require a value so it is not ignored. 2015-03-01 14:13:08 -05:00
gandrianakis
d313d4da3f Fixed bug that prevented Objective-C code from compiling when using a Swagger 'map' type 2015-02-27 10:11:35 +02:00
David Valdez
dfc8f7c60f Update README.md 2015-02-26 12:42:41 -08:00
Camille Chafer
c15ac0b6d4 Each type used by any response is now added to the imports list 2015-02-25 17:12:28 +01:00
Camille Chafer
f9a16d856c Add 'default' response (200) to responses list, and add Types to the CodegenResponse object (#293). In the same time, clarify, simplfy and factorize code. 2015-02-25 16:46:33 +01:00
Camille Chafer
5713dce00a add missing types on the Responses Object implementation( CodegenResponse.java) (part of #293) 2015-02-25 16:39:10 +01:00
Tony Tam
23e848b437 added ignored test for #453, nested containers 2015-02-25 07:35:05 -08:00
Tony Tam
5b01e78a72 Merge branch 'godaddy-master' into develop_2.0 2015-02-24 23:23:40 -08:00
Tony Tam
eb68d0bdbd Merge branch 'master' of https://github.com/godaddy/swagger-codegen into godaddy-master 2015-02-24 23:23:19 -08:00
Tony Tam
05297e05a5 made annotations FQ to avoid collisions 2015-02-24 21:12:08 -08:00
Tony Tam
1a0d2d19f5 updated template 2015-02-24 18:07:13 -08:00
Tony Tam
292fc99bd5 fixed response types 2015-02-24 11:03:00 -08:00
Hervé Darritchon
b339db65be Pull request #452 : Add some unit tests for this PR 2015-02-24 09:23:07 +01:00
Tony Tam
e5c70d5961 updated online version, added tag example 2015-02-23 23:23:37 -08:00
Hervé Darritchon
69be95d586 Defect (Issue #445) : change the call of initialCaps for getter and setter with Introspector.decapitalize from pakage java.beans. 2015-02-24 08:20:49 +01:00
Tony Tam
c82dfa3a64 updated version 2015-02-23 23:03:18 -08:00
Tony Tam
4fd4c17036 Merge pull request #451 from swagger-api/develop_2.0
Merged from develop_2.0
2015-02-23 22:51:46 -08:00
Tony Tam
4bd227271a updated version 2015-02-23 22:45:06 -08:00
Tony Tam
5c31d68fee updated to add resolve flag 2015-02-23 22:42:45 -08:00
Tony Tam
bfc1ed3081 added async scala generator #440 2015-02-22 08:57:40 -08:00
Tony Tam
1c7c39c1ab added logback 2015-02-22 08:56:31 -08:00
Tony Tam
4ce0a65ad5 fix for #444, paths on windows 2015-02-22 08:56:03 -08:00
Tony Tam
784afee7b7 prepare for next dev version 2015-02-17 22:06:25 -08:00
Tony Tam
f89e04d210 Update README.md 2015-02-17 22:04:12 -08:00
Tony Tam
12531943d0 Merge pull request #438 from swagger-api/develop_2.0
merged to master for patch release
2015-02-17 21:48:20 -08:00
Tony Tam
3061cd8277 put parser back to 1.0.0 2015-02-17 21:41:36 -08:00
Tony Tam
686f3656c5 updated to new patch 2015-02-17 21:38:02 -08:00
Tony Tam
9ae106affd rebuilt clients 2015-02-17 21:37:51 -08:00
Tony Tam
2550539495 added shade plugin to properly include service descriptions 2015-02-17 18:54:57 -08:00
Tony Tam
06164cdc51 updated file separator replacement 2015-02-17 15:04:06 -08:00
Tony Tam
583a932fba Merge pull request #436 from kreymerman/patch-python-codegen
Fix StringIndexOutOfBoundsException on Windows
2015-02-17 15:02:58 -08:00
Mikhail Kreymerman
fdd485608f fixed StringIndexOutOfBoundsException on Windows 2015-02-17 23:00:23 +01:00
Tony Tam
0307d3818a added friendly download links 2015-02-17 12:59:31 -08:00
Tony Tam
9a473ceae6 enabled url-only reading of specs 2015-02-17 12:43:10 -08:00
Tony Tam
12365b9591 removed cruft 2015-02-17 12:43:01 -08:00
Tony Tam
c832889db8 added slf4j, updated server gen logic 2015-02-17 11:15:08 -08:00
Tony Tam
39487d9917 disabled outdated routes, made languages GET method dynamic 2015-02-17 10:29:35 -08:00
Tony Tam
aa37542411 added version to make swagger valid 2015-02-17 10:29:06 -08:00
Tony Tam
279f43d697 Update README.md 2015-02-17 08:57:39 -08:00
Tony Tam
fee6de5974 Merge branch 'geoand-jackson_array' into develop_2.0 2015-02-17 07:08:55 -08:00
gandrianakis
5fa98b12b8 Fixed bug that did not allow json arrays to be deserialized by Jackson 2015-02-17 15:17:32 +02:00
Tony Tam
ff94196295 updated to snapshot version 2015-02-16 22:16:40 -08:00
Tony Tam
0195749f3b merged 2015-02-16 22:08:52 -08:00
Tony Tam
577aad3364 added file 2015-02-16 22:02:27 -08:00
Tony Tam
05c6cc756c remove cruft 2015-02-16 22:01:33 -08:00
russellb337
bd91922072 Add API Version to Codeine Additional Properties
Also updated htmlDocs template so html documentation shows API version.
2015-02-06 16:26:33 -08:00
Dan Peschman
ec995838fb python3: support PATCH verb for partial updates - http://tools.ietf.org/html/rfc5789 2015-01-24 21:58:33 +00:00
Dan Peschman
4198779b5b python3: support datetime produced by datetime.isoformat like '2015-01-17T00:15:29.515' 2015-01-17 00:41:37 +00:00
Dan Peschman
711d2c8cf4 revert previous: no special handling for '' in python3 parseDatetime 2015-01-16 23:44:02 +00:00
Dan Peschman
42ad403e5e python3 parseDatetime: return None if passed '' 2015-01-16 23:09:54 +00:00
Dan Peschman
527fca5a8b python3 parseDatetime: return None if passed None 2015-01-15 23:19:01 +00:00
Dan Peschman
60bd56b91c python3: support more iso8601 datetime formats - http://xml2rfc.ietf.org/public/rfc/html/rfc3339.html#date.and.time.format.examples 2015-01-15 22:42:59 +00:00
1079 changed files with 69276 additions and 30421 deletions

15
.gitignore vendored
View File

@@ -22,9 +22,22 @@ samples/server-generator/scalatra/output
samples/server-generator/node/output/node_modules
samples/server-generator/scalatra/target
samples/server-generator/scalatra/output/.history
samples/client/petstore/qt5cpp/PetStore/moc_*
samples/client/petstore/qt5cpp/PetStore/*.o
samples/client/petstore/objc/PetstoreClient.xcworkspace/xcuserdata
samples/client/petstore/qt5cpp/build-*
samples/client/petstore/qt5cpp/PetStore/PetStore
samples/client/petstore/qt5cpp/PetStore/Makefile
samples/client/petstore/java/hello.txt
samples/client/petstore/android-java/hello.txt
samples/client/petstore/objc/Build
samples/client/petstore/objc/Pods
samples/server/petstore/nodejs/node_modules
target
.idea
.lib
atlassian-ide-plugin.xml
.DS_Store
samples/client/petstore/php/SwaggerClient-php/composer.lock
samples/client/petstore/php/SwaggerClient-php/vendor/

View File

@@ -1,3 +1,4 @@
sudo: false
language: java
script: mvn verify
jdk:

11
LICENSE Normal file
View File

@@ -0,0 +1,11 @@
Copyright 2015 SmartBear Software
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at [apache.org/licenses/LICENSE-2.0](http://www.apache.org/licenses/LICENSE-2.0)
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

185
README.md
View File

@@ -5,20 +5,15 @@
## Overview
This is the swagger codegen project, which allows generation of client libraries automatically from a Swagger-compliant server.
## What's Swagger?
The goal of Swagger™ is to define a standard, language-agnostic interface to REST APIs which allows both humans and computers to discover and understand the capabilities of the service without access to source code, documentation, or through network traffic inspection. When properly defined via Swagger, a consumer can understand and interact with the remote service with a minimal amount of implementation logic. Similar to what interfaces have done for lower-level programming, Swagger removes the guesswork in calling the service.
Check out [Swagger-Spec](https://github.com/swagger-api/swagger-spec) for additional information about the Swagger project, including additional libraries with support for other languages and more.
## Compatability
## Compatibility
The Swagger Specification has undergone 3 revisions since initial creation in 2010. The swagger-codegen project has the following compatibilies with the swagger specification:
Swagger Codegen Version | Release Date | Swagger Spec compatability | Notes
Swagger Codegen Version | Release Date | Swagger Spec compatibility | Notes
----------------------- | ------------ | -------------------------- | -----
2.1.0-M1 | 2015-02-16 | 1.0, 1.1, 1.2, 2.0 | [tag v2.1.0-M1](https://github.com/swagger-api/swagger-codegen/tree/v2.1.0-M1)
2.1.0 | 2015-06-09 | 1.0, 1.1, 1.2, 2.0 | [master](https://github.com/swagger-api/swagger-codegen)
2.0.17 | 2014-08-22 | 1.1, 1.2 | [tag v2.0.17](https://github.com/swagger-api/swagger-codegen/tree/v2.0.17)
1.0.4 | 2012-04-12 | 1.0, 1.1 | [tag v1.0.4](https://github.com/swagger-api/swagger-codegen/tree/swagger-codegen_2.9.1-1.1)
@@ -29,6 +24,17 @@ You need the following installed and available in your $PATH:
* [Java 7](http://java.oracle.com)
* [Apache maven 3.0.3 or greater](http://maven.apache.org/)
#### OS X Users
Don't forget to install Java 7. You probably have 1.6 or 1.8.
Export JAVA_HOME in order to user proper Java version:
```
export JAVA_HOME=`/usr/libexec/java_home -v 1.7`
export PATH=${JAVA_HOME}/bin:$PATH
```
#### Building
After cloning the project, you can build it from source with this command:
@@ -46,29 +52,59 @@ You can build a client against the swagger sample [petstore](http://petstore.swa
This will run the generator with this command:
```
java -jar modules/swagger-codegen-distribution/target/swagger-codegen-distribution-2.1.0-M1.jar \
java -jar modules/swagger-codegen-cli/target/swagger-codegen-cli.jar generate \
-i http://petstore.swagger.io/v2/swagger.json \
-l java \
-o samples/client/petstore/java
```
With a number of options. You can get the options with the -h flag:
With a number of options. You can get the options with the `help generate` command:
```
usage: Codegen
-a,--auth addes authorization headers when fetching the
swagger definitions remotely. Pass in a
URL-encoded string of name:header with a comma
separating multiple values
-d,--debug-info prints additional info for debugging
-h,--help shows this message
-i,--input-spec <arg> location of the swagger spec, as URL or file
-l,--lang <arg> client language to generate.
Available languages include:
[android, java, jaxrs, nodejs, objc, scalatra,
scala, dynamic-html, html, swagger, tizen, php,
python]
-o,--output <arg> where to write the generated files
-t,--template-dir <arg> folder containing the template files
NAME
swagger generate - Generate code with chosen lang
SYNOPSIS
swagger generate [(-a <authorization> | --auth <authorization>)]
[(-c <configuration file> | --config <configuration file>)]
[-D <system properties>]
(-i <spec file> | --input-spec <spec file>)
(-l <language> | --lang <language>)
[(-o <output directory> | --output <output directory>)]
[(-t <template directory> | --template-dir <template directory>)]
[(-v | --verbose)]
OPTIONS
-a <authorization>, --auth <authorization>
adds authorization headers when fetching the swagger definitions
remotely. Pass in a URL-encoded string of name:header with a comma
separating multiple values
-c <configuration file>, --config <configuration file>
Path to json configuration file. File content should be in a json
format {"optionKey":"optionValue", "optionKey1":"optionValue1"...}
Supported options can be different for each language. Run
config-help -l {lang} command for language specific config options.
-D <system properties>
sets specified system properties in the format of
name=value,name=value
-i <spec file>, --input-spec <spec file>
location of the swagger spec, as URL or file (required)
-l <language>, --lang <language>
client language to generate (maybe class name in classpath,
required)
-o <output directory>, --output <output directory>
where to write the generated files (current dir by default)
-t <template directory>, --template-dir <template directory>
folder containing the template files
-v, --verbose
verbose mode
```
You can then compile and run the client, as well as unit tests against it:
@@ -91,7 +127,17 @@ It's just as easy--just use the `-i` flag to point to either a server or file.
### Modifying the client library format
Don't like the default swagger client syntax? Want a different language supported? No problem! Swagger codegen processes mustache templates with the [jmustache](https://github.com/samskivert/jmustache) engine. You can modify our templates or make your own.
You can look at `src/main/resources/${your-language}` for examples. To make your own templates, create your own files and use the `-t` flag to specify your tempalte folder. It actually is that easy.
You can look at `modules/swagger-codegen/src/main/resources/${your-language}` for examples. To make your own templates, create your own files and use the `-t` flag to specify your template folder. It actually is that easy.
### Making your own codegen modules
If you're starting a project with a new language and don't see what you need, swagger-codegen can help you create a project to generate your own libraries:
```
java -jar modules/swagger-codegen-distribution/target/swagger-codegen-cli.jar meta \
-o output/myLibrary -n myClientCodegen -p com.my.company.codegen
```
This will write, in the folder `output/myLibrary`, all the files you need to get started, including a README.md. Once modified and compiled, you can load your library with the codegen and generate clients with your own, custom-rolled logic.
### Where is Javascript???
See our [javascript library](http://github.com/swagger-api/swagger-js)--it's completely dynamic and doesn't require
@@ -114,30 +160,93 @@ Great for creating libraries on your ci server, from the [Swagger Editor](http:/
There are different aspects of customizing the code generator beyond just creating or modifying templates. Each language has a supporting configuration file to handle different type mappings, etc:
```
$ ls -1 modules/swagger-codegen/src/main/java/com/wordnik/swagger/codegen/languages/
$ ls -1 modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/
AkkaScalaClientCodegen.java
AndroidClientCodegen.java
AsyncScalaClientCodegen.java
CSharpClientCodegen.java
JavaClientCodegen.java
JaxRSServerCodegen.java
NodeJSServerCodegen.java
ObjcClientCodegen.java
PerlClientCodegen.java
PhpClientCodegen.java
Python3ClientCodegen.java
PythonClientCodegen.java
Qt5CPPGenerator.java
RetrofitClientCodegen.java
RubyClientCodegen.java
ScalaClientCodegen.java
ScalatraServerCodegen.java
SpringMVCServerCodegen.java
StaticDocCodegen.java
StaticHtmlGenerator.java
SwaggerGenerator.java
SwaggerYamlGenerator.java
SwiftGenerator.java
TizenClientCodegen.java
```
Each of these files creates reasonable defaults so you can get running quickly. But if you want to configure package names, prefixes, model folders, etc., you may want to extend these.
Each of these files creates reasonable defaults so you can get running quickly. But if you want to configure package names, prefixes, model folders, etc. you can use a json config file to pass the values.
```
java -jar modules/swagger-codegen-cli/target/swagger-codegen-cli.jar generate \
-i http://petstore.swagger.io/v2/swagger.json \
-l java \
-o samples/client/petstore/java \
-c path/to/config.json
```
Supported config options can be different per language. Running `config-help -l {lang}` will show available options.
```
java -jar modules/swagger-codegen-cli/target/swagger-codegen-cli.jarr config-help -l java
```
Output
```
CONFIG OPTIONS
modelPackage
package for generated models
apiPackage
package for generated api classes
invokerPackage
root package for generated code
groupId
groupId in generated pom.xml
artifactId
artifactId in generated pom.xml
artifactVersion
artifact version in generated pom.xml
sourceFolder
source folder for generated code
```
Your config file for java can look like
```
{
"groupId":"com.my.company",
"artifactId":"MyClent",
"artifactVersion":"1.2.0"
}
```
For all the unspecified options default values will be used.
Another way to override default options is to extend config class for specific language.
To change, for example, the prefix for the Objective-C generated files, simply subclass the ObjcClientCodegen.java:
```
package com.mycompany.swagger.codegen;
import com.wordnik.swagger.codegen.languages.*;
import io.swagger.codegen.languages.*;
public class MyObjcCodegen extends ObjcClientCodegen {
static {
@@ -149,7 +258,7 @@ public class MyObjcCodegen extends ObjcClientCodegen {
and specify the `classname` when running the generator:
```
-i com.mycompany.swagger.codegen.MyObjcCodegen
-l com.mycompany.swagger.codegen.MyObjcCodegen
```
Your subclass will now be loaded and overrides the `PREFIX` value in the superclass.
@@ -189,7 +298,7 @@ You can also use the codegen to generate a server for a couple different framewo
### node.js
```
java -jar modules/swagger-codegen-distribution/target/swagger-codegen-distribution-2.1.0-M1.jar \
java -jar modules/swagger-codegen-cli/target/swagger-codegen-cli.jar generate \
-i http://petstore.swagger.io/v2/swagger.json \
-l nodejs \
-o samples/server/petstore/nodejs
@@ -201,7 +310,7 @@ java -jar modules/swagger-codegen-distribution/target/swagger-codegen-distributi
### scala scalatra
```
java -jar modules/swagger-codegen-distribution/target/swagger-codegen-distribution-2.1.0-M1.jar \
java -jar modules/swagger-codegen-cli/target/swagger-codegen-cli.jar generate \
-i http://petstore.swagger.io/v2/swagger.json \
-l scalatra \
-o samples/server/petstore/scalatra
@@ -210,12 +319,20 @@ java -jar modules/swagger-codegen-distribution/target/swagger-codegen-distributi
### java jax-rs
```
java -jar modules/swagger-codegen-distribution/target/swagger-codegen-distribution-2.1.0-M1.jar \
java -jar modules/swagger-codegen-cli/target/swagger-codegen-cli.jar generate \
-i http://petstore.swagger.io/v2/swagger.json \
-l jaxrs \
-o samples/server/petstore/jaxrs
```
### java spring-mvc
```
java -jar modules/swagger-codegen-cli/target/swagger-codegen-cli.jar generate \
-i http://petstore.swagger.io/v2/swagger.json \
-l spring-mvc \
-o samples/server/petstore/spring-mvc
```
### To build the codegen library
This will create the swagger-codegen library from source.
@@ -229,7 +346,7 @@ Note! The templates are included in the library generated. If you want to modi
License
-------
Copyright 2015 Reverb Technologies, Inc.
Copyright 2015 SmartBear Software
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.

View File

@@ -1,6 +0,0 @@
val version = scala.util.Properties.scalaPropOrElse("version.number", "unknown").toString match {
case s if s startsWith "2.10" => "2.10"
case s if s startsWith "2.11" => "2.11"
case e: String => e
}
println(version)

31
bin/akka-scala-petstore.sh Executable file
View File

@@ -0,0 +1,31 @@
#!/bin/sh
SCRIPT="$0"
while [ -h "$SCRIPT" ] ; do
ls=`ls -ld "$SCRIPT"`
link=`expr "$ls" : '.*-> \(.*\)$'`
if expr "$link" : '/.*' > /dev/null; then
SCRIPT="$link"
else
SCRIPT=`dirname "$SCRIPT"`/"$link"
fi
done
if [ ! -d "${APP_DIR}" ]; then
APP_DIR=`dirname "$SCRIPT"`/..
APP_DIR=`cd "${APP_DIR}"; pwd`
fi
executable="./modules/swagger-codegen-cli/target/swagger-codegen-cli.jar"
if [ ! -f "$executable" ]
then
mvn clean package
fi
# if you've executed sbt assembly previously it will use that instead.
export JAVA_OPTS="${JAVA_OPTS} -XX:MaxPermSize=256M -Xmx1024M -DloggerPath=conf/log4j.properties"
ags="$@ generate -t modules/swagger-codegen/src/main/resources/akka-scala -i modules/swagger-codegen/src/test/resources/2_0/petstore.json -l akka-scala -o samples/client/petstore/akka-scala"
java $JAVA_OPTS -jar $executable $ags

View File

@@ -19,13 +19,18 @@ fi
cd $APP_DIR
./bin/android-java-petstore.sh
./bin/csharp-petstore.sh
./bin/dynamic-html.sh
./bin/html.sh
./bin/html-petstore.sh
./bin/jaxrs-petstore-server.sh
./bin/java-petstore-filemap.sh
./bin/java-petstore.sh
./bin/qt5-petstore.sh
./bin/perl-petstore.sh
./bin/php-petstore.sh
./bin/python-petstore.sh
./bin/retrofit-petstore.sh
./bin/ruby-petstore.sh
./bin/objc-petstore.sh
./bin/scala-petstore.sh
./bin/spring-mvc-petstore-server.sh
./bin/tizen-petstore.sh

View File

@@ -17,12 +17,7 @@ if [ ! -d "${APP_DIR}" ]; then
APP_DIR=`cd "${APP_DIR}"; pwd`
fi
root=./modules/swagger-codegen-distribution/pom.xml
# gets version of swagger-codegen
version=$(sed '/<project>/,/<\/project>/d;/<version>/!d;s/ *<\/\?version> *//g' $root | sed -n '2p' | sed -e 's,.*<version>\([^<]*\)</version>.*,\1,g')
executable="./modules/swagger-codegen-distribution/target/swagger-codegen-distribution-$version.jar"
executable="./modules/swagger-codegen-cli/target/swagger-codegen-cli.jar"
if [ ! -f "$executable" ]
then
@@ -31,6 +26,6 @@ fi
# if you've executed sbt assembly previously it will use that instead.
export JAVA_OPTS="${JAVA_OPTS} -XX:MaxPermSize=256M -Xmx1024M -DloggerPath=conf/log4j.properties"
ags="$@ -i modules/swagger-codegen/src/test/resources/2_0/petstore.json -l android -o samples/client/petstore/android-java"
ags="$@ generate -t modules/swagger-codegen/src/main/resources/android-java -i modules/swagger-codegen/src/test/resources/2_0/petstore.json -l android -o samples/client/petstore/android-java"
java $JAVA_OPTS -jar $executable $ags

View File

@@ -17,12 +17,7 @@ if [ ! -d "${APP_DIR}" ]; then
APP_DIR=`cd "${APP_DIR}"; pwd`
fi
root=./modules/swagger-codegen-distribution/pom.xml
# gets version of swagger-codegen
version=$(sed '/<project>/,/<\/project>/d;/<version>/!d;s/ *<\/\?version> *//g' $root | sed -n '2p' | sed -e 's,.*<version>\([^<]*\)</version>.*,\1,g')
executable="./modules/swagger-codegen-distribution/target/swagger-codegen-distribution-$version.jar"
executable="./modules/swagger-codegen-cli/target/swagger-codegen-cli.jar"
if [ ! -f "$executable" ]
then
@@ -31,6 +26,6 @@ fi
# if you've executed sbt assembly previously it will use that instead.
export JAVA_OPTS="${JAVA_OPTS} -XX:MaxPermSize=256M -Xmx1024M -DloggerPath=conf/log4j.properties"
ags="$@ -i modules/swagger-codegen/src/test/resources/2_0/wordnik.json -l android -o samples/client/wordnik/android-java"
ags="$@ generate -i modules/swagger-codegen/src/test/resources/2_0/wordnik.json -l android -o samples/client/wordnik/android-java"
java $JAVA_OPTS -jar $executable $ags

31
bin/csharp-petstore.sh Executable file
View File

@@ -0,0 +1,31 @@
#!/bin/sh
SCRIPT="$0"
while [ -h "$SCRIPT" ] ; do
ls=`ls -ld "$SCRIPT"`
link=`expr "$ls" : '.*-> \(.*\)$'`
if expr "$link" : '/.*' > /dev/null; then
SCRIPT="$link"
else
SCRIPT=`dirname "$SCRIPT"`/"$link"
fi
done
if [ ! -d "${APP_DIR}" ]; then
APP_DIR=`dirname "$SCRIPT"`/..
APP_DIR=`cd "${APP_DIR}"; pwd`
fi
executable="./modules/swagger-codegen-cli/target/swagger-codegen-cli.jar"
if [ ! -f "$executable" ]
then
mvn clean package
fi
# if you've executed sbt assembly previously it will use that instead.
export JAVA_OPTS="${JAVA_OPTS} -XX:MaxPermSize=256M -Xmx1024M -DloggerPath=conf/log4j.properties"
ags="$@ generate -i modules/swagger-codegen/src/test/resources/2_0/petstore.json -l csharp -o samples/client/petstore/csharp"
java $JAVA_OPTS -jar $executable $ags

View File

@@ -17,12 +17,7 @@ if [ ! -d "${APP_DIR}" ]; then
APP_DIR=`cd "${APP_DIR}"; pwd`
fi
root=./modules/swagger-codegen-distribution/pom.xml
# gets version of swagger-codegen
version=$(sed '/<project>/,/<\/project>/d;/<version>/!d;s/ *<\/\?version> *//g' $root | sed -n '2p' | sed -e 's,.*<version>\([^<]*\)</version>.*,\1,g')
executable="./modules/swagger-codegen-distribution/target/swagger-codegen-distribution-$version.jar"
executable="./modules/swagger-codegen-cli/target/swagger-codegen-cli.jar"
if [ ! -f "$executable" ]
then
@@ -31,6 +26,6 @@ fi
# if you've executed sbt assembly previously it will use that instead.
export JAVA_OPTS="${JAVA_OPTS} -XX:MaxPermSize=256M -Xmx1024M -DloggerPath=conf/log4j.properties"
ags="$@ -i modules/swagger-codegen/src/test/resources/2_0/petstore.json -l dynamic-html -o samples/dynamic-html"
ags="$@ generate -i modules/swagger-codegen/src/test/resources/2_0/petstore.json -l dynamic-html -o samples/dynamic-html"
java $JAVA_OPTS -jar $executable $ags

View File

@@ -17,12 +17,7 @@ if [ ! -d "${APP_DIR}" ]; then
APP_DIR=`cd "${APP_DIR}"; pwd`
fi
root=./modules/swagger-codegen-distribution/pom.xml
# gets version of swagger-codegen
version=$(sed '/<project>/,/<\/project>/d;/<version>/!d;s/ *<\/\?version> *//g' $root | sed -n '2p' | sed -e 's,.*<version>\([^<]*\)</version>.*,\1,g')
executable="./modules/swagger-codegen-distribution/target/swagger-codegen-distribution-$version.jar"
executable="./modules/swagger-codegen-cli/target/swagger-codegen-cli.jar"
if [ ! -f "$executable" ]
then
@@ -31,6 +26,6 @@ fi
# if you've executed sbt assembly previously it will use that instead.
export JAVA_OPTS="${JAVA_OPTS} -XX:MaxPermSize=256M -Xmx1024M -DloggerPath=conf/log4j.properties"
ags="$@ -i modules/swagger-codegen/src/test/resources/2_0/petstore.json -l html -o samples/html"
ags="$@ generate -i modules/swagger-codegen/src/test/resources/2_0/petstore.json -l html -o samples/html"
java $JAVA_OPTS -jar $executable $ags

View File

@@ -17,12 +17,7 @@ if [ ! -d "${APP_DIR}" ]; then
APP_DIR=`cd "${APP_DIR}"; pwd`
fi
root=./modules/swagger-codegen-distribution/pom.xml
# gets version of swagger-codegen
version=$(sed '/<project>/,/<\/project>/d;/<version>/!d;s/ *<\/\?version> *//g' $root | sed -n '2p' | sed -e 's,.*<version>\([^<]*\)</version>.*,\1,g')
executable="./modules/swagger-codegen-distribution/target/swagger-codegen-distribution-$version.jar"
executable="./modules/swagger-codegen-cli/target/swagger-codegen-cli.jar"
if [ ! -f "$executable" ]
then
@@ -31,6 +26,6 @@ fi
# if you've executed sbt assembly previously it will use that instead.
export JAVA_OPTS="${JAVA_OPTS} -XX:MaxPermSize=256M -Xmx1024M -DloggerPath=conf/log4j.properties"
ags="$@ -i modules/swagger-codegen/src/test/resources/2_0/petstore.json -l java -o samples/client/petstore/java"
ags="$@ generate -i modules/swagger-codegen/src/test/resources/2_0/petstore.json -l java -o samples/client/petstore/java"
java $JAVA_OPTS -jar $executable $ags

View File

@@ -17,12 +17,7 @@ if [ ! -d "${APP_DIR}" ]; then
APP_DIR=`cd "${APP_DIR}"; pwd`
fi
root=./modules/swagger-codegen-distribution/pom.xml
# gets version of swagger-codegen
version=$(sed '/<project>/,/<\/project>/d;/<version>/!d;s/ *<\/\?version> *//g' $root | sed -n '2p' | sed -e 's,.*<version>\([^<]*\)</version>.*,\1,g')
executable="./modules/swagger-codegen-distribution/target/swagger-codegen-distribution-$version.jar"
executable="./modules/swagger-codegen-cli/target/swagger-codegen-cli.jar"
if [ ! -f "$executable" ]
then
@@ -31,6 +26,6 @@ fi
# if you've executed sbt assembly previously it will use that instead.
export JAVA_OPTS="${JAVA_OPTS} -XX:MaxPermSize=256M -Xmx1024M -DloggerPath=conf/log4j.properties"
ags="$@ -i modules/swagger-codegen/src/test/resources/2_0/wordnik.json -l java -o samples/client/wordnik/java"
ags="$@ generate -i modules/swagger-codegen/src/test/resources/2_0/wordnik.json -l java -o samples/client/wordnik/java"
java $JAVA_OPTS -jar $executable $ags

View File

@@ -17,12 +17,7 @@ if [ ! -d "${APP_DIR}" ]; then
APP_DIR=`cd "${APP_DIR}"; pwd`
fi
root=./modules/swagger-codegen-distribution/pom.xml
# gets version of swagger-codegen
version=$(sed '/<project>/,/<\/project>/d;/<version>/!d;s/ *<\/\?version> *//g' $root | sed -n '2p' | sed -e 's,.*<version>\([^<]*\)</version>.*,\1,g')
executable="./modules/swagger-codegen-distribution/target/swagger-codegen-distribution-$version.jar"
executable="./modules/swagger-codegen-cli/target/swagger-codegen-cli.jar"
if [ ! -f "$executable" ]
then
@@ -31,6 +26,6 @@ fi
# if you've executed sbt assembly previously it will use that instead.
export JAVA_OPTS="${JAVA_OPTS} -XX:MaxPermSize=256M -Xmx1024M -DloggerPath=conf/log4j.properties"
ags="$@ -i modules/swagger-codegen/src/test/resources/2_0/petstore.json -l jaxrs -o samples/server/petstore/jaxrs"
ags="$@ generate -t modules/swagger-codegen/src/main/resources/JavaJaxRS -i modules/swagger-codegen/src/test/resources/2_0/petstore.json -l jaxrs -o samples/server/petstore/jaxrs -Dswagger.codegen.jaxrs.impl.source=src/main/java"
java $JAVA_OPTS -jar $executable $ags

View File

@@ -17,12 +17,7 @@ if [ ! -d "${APP_DIR}" ]; then
APP_DIR=`cd "${APP_DIR}"; pwd`
fi
root=./modules/swagger-codegen-distribution/pom.xml
# gets version of swagger-codegen
version=$(sed '/<project>/,/<\/project>/d;/<version>/!d;s/ *<\/\?version> *//g' $root | sed -n '2p' | sed -e 's,.*<version>\([^<]*\)</version>.*,\1,g')
executable="./modules/swagger-codegen-distribution/target/swagger-codegen-distribution-$version.jar"
executable="./modules/swagger-codegen-cli/target/swagger-codegen-cli.jar"
if [ ! -f "$executable" ]
then
@@ -31,6 +26,6 @@ fi
# if you've executed sbt assembly previously it will use that instead.
export JAVA_OPTS="${JAVA_OPTS} -XX:MaxPermSize=256M -Xmx1024M -DloggerPath=conf/log4j.properties"
ags="$@ -i modules/swagger-codegen/src/test/resources/2_0/petstore.json -l nodejs -o samples/server/petstore/nodejs"
ags="$@ generate -i modules/swagger-codegen/src/test/resources/2_0/petstore.json -l nodejs -o samples/server/petstore/nodejs"
java $JAVA_OPTS -jar $executable $ags
java $JAVA_OPTS -Dservice -jar $executable $ags

View File

@@ -17,12 +17,7 @@ if [ ! -d "${APP_DIR}" ]; then
APP_DIR=`cd "${APP_DIR}"; pwd`
fi
root=./modules/swagger-codegen-distribution/pom.xml
# gets version of swagger-codegen
version=$(sed '/<project>/,/<\/project>/d;/<version>/!d;s/ *<\/\?version> *//g' $root | sed -n '2p' | sed -e 's,.*<version>\([^<]*\)</version>.*,\1,g')
executable="./modules/swagger-codegen-distribution/target/swagger-codegen-distribution-$version.jar"
executable="./modules/swagger-codegen-cli/target/swagger-codegen-cli.jar"
if [ ! -f "$executable" ]
then
@@ -31,6 +26,6 @@ fi
# if you've executed sbt assembly previously it will use that instead.
export JAVA_OPTS="${JAVA_OPTS} -XX:MaxPermSize=256M -Xmx1024M -DloggerPath=conf/log4j.properties"
ags="$@ -i modules/swagger-codegen/src/test/resources/2_0/petstore.json -l objc -o samples/client/petstore/objc"
ags="$@ generate -t modules/swagger-codegen/src/main/resources/objc -i modules/swagger-codegen/src/test/resources/2_0/petstore.json -l objc -o samples/client/petstore/objc"
java $JAVA_OPTS -jar $executable $ags
java -DappName=PetstoreClient $JAVA_OPTS -jar $executable $ags

View File

@@ -17,12 +17,7 @@ if [ ! -d "${APP_DIR}" ]; then
APP_DIR=`cd "${APP_DIR}"; pwd`
fi
root=./modules/swagger-codegen-distribution/pom.xml
# gets version of swagger-codegen
version=$(sed '/<project>/,/<\/project>/d;/<version>/!d;s/ *<\/\?version> *//g' $root | sed -n '2p' | sed -e 's,.*<version>\([^<]*\)</version>.*,\1,g')
executable="./modules/swagger-codegen-distribution/target/swagger-codegen-distribution-$version.jar"
executable="./modules/swagger-codegen-cli/target/swagger-codegen-cli.jar"
if [ ! -f "$executable" ]
then
@@ -31,6 +26,6 @@ fi
# if you've executed sbt assembly previously it will use that instead.
export JAVA_OPTS="${JAVA_OPTS} -XX:MaxPermSize=256M -Xmx1024M -DloggerPath=conf/log4j.properties"
ags="$@ -i modules/swagger-codegen/src/test/resources/2_0/wordnik.json -l objc -o samples/client/wordnik/objc"
ags="$@ generate -i modules/swagger-codegen/src/test/resources/2_0/wordnik.json -l objc -o samples/client/wordnik/objc"
java $JAVA_OPTS -jar $executable $ags

31
bin/perl-petstore.sh Executable file
View File

@@ -0,0 +1,31 @@
#!/bin/sh
SCRIPT="$0"
while [ -h "$SCRIPT" ] ; do
ls=`ls -ld "$SCRIPT"`
link=`expr "$ls" : '.*-> \(.*\)$'`
if expr "$link" : '/.*' > /dev/null; then
SCRIPT="$link"
else
SCRIPT=`dirname "$SCRIPT"`/"$link"
fi
done
if [ ! -d "${APP_DIR}" ]; then
APP_DIR=`dirname "$SCRIPT"`/..
APP_DIR=`cd "${APP_DIR}"; pwd`
fi
executable="./modules/swagger-codegen-cli/target/swagger-codegen-cli.jar"
if [ ! -f "$executable" ]
then
mvn clean package
fi
# if you've executed sbt assembly previously it will use that instead.
export JAVA_OPTS="${JAVA_OPTS} -XX:MaxPermSize=256M -Xmx1024M -DloggerPath=conf/log4j.properties"
ags="$@ generate -i modules/swagger-codegen/src/test/resources/2_0/petstore.json -l perl -o samples/client/petstore/perl"
java $JAVA_OPTS -jar $executable $ags

View File

@@ -17,12 +17,7 @@ if [ ! -d "${APP_DIR}" ]; then
APP_DIR=`cd "${APP_DIR}"; pwd`
fi
root=./modules/swagger-codegen-distribution/pom.xml
# gets version of swagger-codegen
version=$(sed '/<project>/,/<\/project>/d;/<version>/!d;s/ *<\/\?version> *//g' $root | sed -n '2p' | sed -e 's,.*<version>\([^<]*\)</version>.*,\1,g')
executable="./modules/swagger-codegen-distribution/target/swagger-codegen-distribution-$version.jar"
executable="./modules/swagger-codegen-cli/target/swagger-codegen-cli.jar"
if [ ! -f "$executable" ]
then
@@ -31,6 +26,6 @@ fi
# if you've executed sbt assembly previously it will use that instead.
export JAVA_OPTS="${JAVA_OPTS} -XX:MaxPermSize=256M -Xmx1024M -DloggerPath=conf/log4j.properties"
ags="$@ -i modules/swagger-codegen/src/test/resources/2_0/petstore.json -l php -o samples/client/petstore/php"
ags="$@ generate -t modules/swagger-codegen/src/main/resources/php -i modules/swagger-codegen/src/test/resources/2_0/petstore.json -l php -o samples/client/petstore/php"
java $JAVA_OPTS -jar $executable $ags

View File

@@ -17,12 +17,7 @@ if [ ! -d "${APP_DIR}" ]; then
APP_DIR=`cd "${APP_DIR}"; pwd`
fi
root=./modules/swagger-codegen-distribution/pom.xml
# gets version of swagger-codegen
version=$(sed '/<project>/,/<\/project>/d;/<version>/!d;s/ *<\/\?version> *//g' $root | sed -n '2p' | sed -e 's,.*<version>\([^<]*\)</version>.*,\1,g')
executable="./modules/swagger-codegen-distribution/target/swagger-codegen-distribution-$version.jar"
executable="./modules/swagger-codegen-cli/target/swagger-codegen-cli.jar"
if [ ! -f "$executable" ]
then
@@ -31,6 +26,6 @@ fi
# if you've executed sbt assembly previously it will use that instead.
export JAVA_OPTS="${JAVA_OPTS} -XX:MaxPermSize=256M -Xmx1024M -DloggerPath=conf/log4j.properties"
ags="$@ -i modules/swagger-codegen/src/test/resources/2_0/petstore.json -l python -o samples/client/petstore/python"
ags="$@ generate -t modules/swagger-codegen/src/main/resources/python -i modules/swagger-codegen/src/test/resources/2_0/petstore.json -l python -o samples/client/petstore/python"
java $JAVA_OPTS -jar $executable $ags

31
bin/python3-petstore.sh Executable file
View File

@@ -0,0 +1,31 @@
#!/bin/sh
SCRIPT="$0"
while [ -h "$SCRIPT" ] ; do
ls=`ls -ld "$SCRIPT"`
link=`expr "$ls" : '.*-> \(.*\)$'`
if expr "$link" : '/.*' > /dev/null; then
SCRIPT="$link"
else
SCRIPT=`dirname "$SCRIPT"`/"$link"
fi
done
if [ ! -d "${APP_DIR}" ]; then
APP_DIR=`dirname "$SCRIPT"`/..
APP_DIR=`cd "${APP_DIR}"; pwd`
fi
executable="./modules/swagger-codegen-cli/target/swagger-codegen-cli.jar"
if [ ! -f "$executable" ]
then
mvn clean package
fi
# if you've executed sbt assembly previously it will use that instead.
export JAVA_OPTS="${JAVA_OPTS} -XX:MaxPermSize=256M -Xmx1024M -DloggerPath=conf/log4j.properties"
ags="$@ generate -t modules/swagger-codegen/src/main/resources/python3 -i modules/swagger-codegen/src/test/resources/2_0/petstore.json -l python3 -o samples/client/petstore/python3"
java $JAVA_OPTS -jar $executable $ags

31
bin/qt5-petstore.sh Executable file
View File

@@ -0,0 +1,31 @@
#!/bin/sh
SCRIPT="$0"
while [ -h "$SCRIPT" ] ; do
ls=`ls -ld "$SCRIPT"`
link=`expr "$ls" : '.*-> \(.*\)$'`
if expr "$link" : '/.*' > /dev/null; then
SCRIPT="$link"
else
SCRIPT=`dirname "$SCRIPT"`/"$link"
fi
done
if [ ! -d "${APP_DIR}" ]; then
APP_DIR=`dirname "$SCRIPT"`/..
APP_DIR=`cd "${APP_DIR}"; pwd`
fi
executable="./modules/swagger-codegen-cli/target/swagger-codegen-cli.jar"
if [ ! -f "$executable" ]
then
mvn clean package
fi
# if you've executed sbt assembly previously it will use that instead.
export JAVA_OPTS="${JAVA_OPTS} -XX:MaxPermSize=256M -Xmx1024M -DloggerPath=conf/log4j.properties"
ags="$@ generate -t modules/swagger-codegen/src/main/resources/qt5cpp -i modules/swagger-codegen/src/test/resources/2_0/petstore.json -l qt5cpp -o samples/client/petstore/qt5cpp"
java $JAVA_OPTS -jar $executable $ags

31
bin/retrofit-petstore.sh Executable file
View File

@@ -0,0 +1,31 @@
#!/bin/sh
SCRIPT="$0"
while [ -h "$SCRIPT" ] ; do
ls=`ls -ld "$SCRIPT"`
link=`expr "$ls" : '.*-> \(.*\)$'`
if expr "$link" : '/.*' > /dev/null; then
SCRIPT="$link"
else
SCRIPT=`dirname "$SCRIPT"`/"$link"
fi
done
if [ ! -d "${APP_DIR}" ]; then
APP_DIR=`dirname "$SCRIPT"`/..
APP_DIR=`cd "${APP_DIR}"; pwd`
fi
executable="./modules/swagger-codegen-cli/target/swagger-codegen-cli.jar"
if [ ! -f "$executable" ]
then
mvn clean package
fi
# if you've executed sbt assembly previously it will use that instead.
export JAVA_OPTS="${JAVA_OPTS} -XX:MaxPermSize=256M -Xmx1024M -DloggerPath=conf/log4j.properties"
ags="$@ generate -t modules/swagger-codegen/src/main/resources/retrofit -i modules/swagger-codegen/src/test/resources/2_0/petstore.json -l retrofit -o samples/client/petstore/retrofit"
java $JAVA_OPTS -jar $executable $ags

31
bin/ruby-petstore.sh Executable file
View File

@@ -0,0 +1,31 @@
#!/bin/sh
SCRIPT="$0"
while [ -h "$SCRIPT" ] ; do
ls=`ls -ld "$SCRIPT"`
link=`expr "$ls" : '.*-> \(.*\)$'`
if expr "$link" : '/.*' > /dev/null; then
SCRIPT="$link"
else
SCRIPT=`dirname "$SCRIPT"`/"$link"
fi
done
if [ ! -d "${APP_DIR}" ]; then
APP_DIR=`dirname "$SCRIPT"`/..
APP_DIR=`cd "${APP_DIR}"; pwd`
fi
executable="./modules/swagger-codegen-cli/target/swagger-codegen-cli.jar"
if [ ! -f "$executable" ]
then
mvn clean package
fi
# if you've executed sbt assembly previously it will use that instead.
export JAVA_OPTS="${JAVA_OPTS} -XX:MaxPermSize=256M -Xmx1024M -DloggerPath=conf/log4j.properties"
ags="$@ generate -t modules/swagger-codegen/src/main/resources/ruby -i modules/swagger-codegen/src/test/resources/2_0/petstore.json -l ruby -o samples/client/petstore/ruby"
java $JAVA_OPTS -jar $executable $ags

31
bin/scala-async-petstore.sh Executable file
View File

@@ -0,0 +1,31 @@
#!/bin/sh
SCRIPT="$0"
while [ -h "$SCRIPT" ] ; do
ls=`ls -ld "$SCRIPT"`
link=`expr "$ls" : '.*-> \(.*\)$'`
if expr "$link" : '/.*' > /dev/null; then
SCRIPT="$link"
else
SCRIPT=`dirname "$SCRIPT"`/"$link"
fi
done
if [ ! -d "${APP_DIR}" ]; then
APP_DIR=`dirname "$SCRIPT"`/..
APP_DIR=`cd "${APP_DIR}"; pwd`
fi
executable="./modules/swagger-codegen-cli/target/swagger-codegen-cli.jar"
if [ ! -f "$executable" ]
then
mvn clean package
fi
# if you've executed sbt assembly previously it will use that instead.
export JAVA_OPTS="${JAVA_OPTS} -XX:MaxPermSize=256M -Xmx1024M -DloggerPath=conf/log4j.properties"
ags="$@ generate -t modules/swagger-codegen/src/main/resources/asyncscala -i modules/swagger-codegen/src/test/resources/2_0/petstore.json -l async-scala -o samples/client/petstore/async-scala"
java $JAVA_OPTS -jar $executable $ags

View File

@@ -17,12 +17,7 @@ if [ ! -d "${APP_DIR}" ]; then
APP_DIR=`cd "${APP_DIR}"; pwd`
fi
root=./modules/swagger-codegen-distribution/pom.xml
# gets version of swagger-codegen
version=$(sed '/<project>/,/<\/project>/d;/<version>/!d;s/ *<\/\?version> *//g' $root | sed -n '2p' | sed -e 's,.*<version>\([^<]*\)</version>.*,\1,g')
executable="./modules/swagger-codegen-distribution/target/swagger-codegen-distribution-$version.jar"
executable="./modules/swagger-codegen-cli/target/swagger-codegen-cli.jar"
if [ ! -f "$executable" ]
then
@@ -31,6 +26,6 @@ fi
# if you've executed sbt assembly previously it will use that instead.
export JAVA_OPTS="${JAVA_OPTS} -XX:MaxPermSize=256M -Xmx1024M -DloggerPath=conf/log4j.properties"
ags="$@ -i modules/swagger-codegen/src/test/resources/2_0/petstore.json -l scala -o samples/client/petstore/scala"
ags="$@ generate -t modules/swagger-codegen/src/main/resources/scala -i modules/swagger-codegen/src/test/resources/2_0/petstore.json -l scala -o samples/client/petstore/scala"
java $JAVA_OPTS -jar $executable $ags

View File

@@ -17,12 +17,7 @@ if [ ! -d "${APP_DIR}" ]; then
APP_DIR=`cd "${APP_DIR}"; pwd`
fi
root=./modules/swagger-codegen-distribution/pom.xml
# gets version of swagger-codegen
version=$(sed '/<project>/,/<\/project>/d;/<version>/!d;s/ *<\/\?version> *//g' $root | sed -n '2p' | sed -e 's,.*<version>\([^<]*\)</version>.*,\1,g')
executable="./modules/swagger-codegen-distribution/target/swagger-codegen-distribution-$version.jar"
executable="./modules/swagger-codegen-cli/target/swagger-codegen-cli.jar"
if [ ! -f "$executable" ]
then
@@ -31,6 +26,6 @@ fi
# if you've executed sbt assembly previously it will use that instead.
export JAVA_OPTS="${JAVA_OPTS} -XX:MaxPermSize=256M -Xmx1024M -DloggerPath=conf/log4j.properties"
ags="$@ -i modules/swagger-codegen/src/test/resources/2_0/wordnik.json -l scala -o samples/client/wordnik/scala"
ags="$@ generate -i modules/swagger-codegen/src/test/resources/2_0/wordnik.json -l scala -o samples/client/wordnik/scala"
java $JAVA_OPTS -jar $executable $ags

View File

@@ -17,12 +17,7 @@ if [ ! -d "${APP_DIR}" ]; then
APP_DIR=`cd "${APP_DIR}"; pwd`
fi
root=./modules/swagger-codegen-distribution/pom.xml
# gets version of swagger-codegen
version=$(sed '/<project>/,/<\/project>/d;/<version>/!d;s/ *<\/\?version> *//g' $root | sed -n '2p' | sed -e 's,.*<version>\([^<]*\)</version>.*,\1,g')
executable="./modules/swagger-codegen-distribution/target/swagger-codegen-distribution-$version.jar"
executable="./modules/swagger-codegen-cli/target/swagger-codegen-cli.jar"
if [ ! -f "$executable" ]
then
@@ -31,6 +26,6 @@ fi
# if you've executed sbt assembly previously it will use that instead.
export JAVA_OPTS="${JAVA_OPTS} -XX:MaxPermSize=256M -Xmx1024M -DloggerPath=conf/log4j.properties"
ags="$@ -i modules/swagger-codegen/src/test/resources/2_0/petstore.json -l scalatra -o samples/server/petstore/scalatra"
ags="$@ generate -t modules/swagger-codegen/src/main/resources/scalatra -i modules/swagger-codegen/src/test/resources/2_0/petstore.json -l scalatra -o samples/server/petstore/scalatra"
java $JAVA_OPTS -jar $executable $ags

View File

@@ -0,0 +1,31 @@
#!/bin/sh
SCRIPT="$0"
while [ -h "$SCRIPT" ] ; do
ls=`ls -ld "$SCRIPT"`
link=`expr "$ls" : '.*-> \(.*\)$'`
if expr "$link" : '/.*' > /dev/null; then
SCRIPT="$link"
else
SCRIPT=`dirname "$SCRIPT"`/"$link"
fi
done
if [ ! -d "${APP_DIR}" ]; then
APP_DIR=`dirname "$SCRIPT"`/..
APP_DIR=`cd "${APP_DIR}"; pwd`
fi
executable="./modules/swagger-codegen-cli/target/swagger-codegen-cli.jar"
if [ ! -f "$executable" ]
then
mvn clean package
fi
# if you've executed sbt assembly previously it will use that instead.
export JAVA_OPTS="${JAVA_OPTS} -XX:MaxPermSize=256M -Xmx1024M -DloggerPath=conf/log4j.properties"
ags="$@ generate -t modules/swagger-codegen/src/main/resources/JavaSpringMVC -i modules/swagger-codegen/src/test/resources/2_0/petstore.json -l spring-mvc -o samples/server/petstore/spring-mvc"
java $JAVA_OPTS -jar $executable $ags

31
bin/swift-petstore.sh Executable file
View File

@@ -0,0 +1,31 @@
#!/bin/sh
SCRIPT="$0"
while [ -h "$SCRIPT" ] ; do
ls=`ls -ld "$SCRIPT"`
link=`expr "$ls" : '.*-> \(.*\)$'`
if expr "$link" : '/.*' > /dev/null; then
SCRIPT="$link"
else
SCRIPT=`dirname "$SCRIPT"`/"$link"
fi
done
if [ ! -d "${APP_DIR}" ]; then
APP_DIR=`dirname "$SCRIPT"`/..
APP_DIR=`cd "${APP_DIR}"; pwd`
fi
executable="./modules/swagger-codegen-cli/target/swagger-codegen-cli.jar"
if [ ! -f "$executable" ]
then
mvn clean package
fi
# if you've executed sbt assembly previously it will use that instead.
export JAVA_OPTS="${JAVA_OPTS} -XX:MaxPermSize=256M -Xmx1024M -DloggerPath=conf/log4j.properties"
ags="$@ generate -t modules/swagger-codegen/src/main/resources/swift -i modules/swagger-codegen/src/test/resources/2_0/petstore.json -l swift -o samples/client/petstore/swift"
java -DappName=PetstoreClient $JAVA_OPTS -jar $executable $ags

View File

@@ -17,12 +17,7 @@ if [ ! -d "${APP_DIR}" ]; then
APP_DIR=`cd "${APP_DIR}"; pwd`
fi
root=./modules/swagger-codegen-distribution/pom.xml
# gets version of swagger-codegen
version=$(sed '/<project>/,/<\/project>/d;/<version>/!d;s/ *<\/\?version> *//g' $root | sed -n '2p' | sed -e 's,.*<version>\([^<]*\)</version>.*,\1,g')
executable="./modules/swagger-codegen-distribution/target/swagger-codegen-distribution-$version.jar"
executable="./modules/swagger-codegen-cli/target/swagger-codegen-cli.jar"
if [ ! -f "$executable" ]
then
@@ -31,6 +26,6 @@ fi
# if you've executed sbt assembly previously it will use that instead.
export JAVA_OPTS="${JAVA_OPTS} -XX:MaxPermSize=256M -Xmx1024M -DloggerPath=conf/log4j.properties"
ags="$@ -i modules/swagger-codegen/src/test/resources/2_0/petstore.json -l tizen -o samples/client/petstore/tizen"
ags="$@ generate -t modules/swagger-codegen/src/main/resources/tizen -i modules/swagger-codegen/src/test/resources/2_0/petstore.json -l tizen -o samples/client/petstore/tizen"
java $JAVA_OPTS -jar $executable $ags

View File

@@ -0,0 +1,104 @@
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<parent>
<groupId>io.swagger</groupId>
<artifactId>swagger-codegen-project</artifactId>
<version>2.1.2</version>
<relativePath>../..</relativePath>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>swagger-codegen-cli</artifactId>
<packaging>jar</packaging>
<name>swagger-codegen (executable)</name>
<build>
<finalName>swagger-codegen-cli</finalName>
<resources>
<resource>
<directory>src/main/resources</directory>
<excludes>
<exclude>logback.xml</exclude>
</excludes>
</resource>
</resources>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifest>
<mainClass>io.swagger.codegen.SwaggerCodegen</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>2.3</version>
<executions>
<execution>
<id>reduced-pom</id>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<minimizeJar>false</minimizeJar>
<createDependencyReducedPom>true</createDependencyReducedPom>
<dependencyReducedPomLocation>
${java.io.tmpdir}/dependency-reduced-pom.xml
</dependencyReducedPomLocation>
</configuration>
</execution>
<execution>
<id>process-resources</id>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<transformers>
<transformer
implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer"/>
</transformers>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>io.swagger</groupId>
<artifactId>swagger-codegen</artifactId>
<version>${project.version}</version>
</dependency>
<!--https://github.com/airlift/airline-->
<dependency>
<groupId>io.airlift</groupId>
<artifactId>airline</artifactId>
<version>0.7</version>
</dependency>
<dependency>
<groupId>com.googlecode.lambdaj</groupId>
<artifactId>lambdaj</artifactId>
<version>2.3.3</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-simple</artifactId>
<version>${slf4j-version}</version>
</dependency>
</dependencies>
</project>

View File

@@ -0,0 +1,37 @@
package io.swagger.codegen;
import io.airlift.airline.Cli;
import io.airlift.airline.Help;
import io.swagger.codegen.cmd.ConfigHelp;
import io.swagger.codegen.cmd.Generate;
import io.swagger.codegen.cmd.Langs;
import io.swagger.codegen.cmd.Meta;
/**
* User: lanwen
* Date: 24.03.15
* Time: 17:56
* <p>
* Command line interface for swagger codegen
* use `swagger-codegen-cli.jar help` for more info
*
* @since 2.1.3-M1
*/
public class SwaggerCodegen {
public static void main(String[] args) {
Cli.CliBuilder<Runnable> builder = Cli.<Runnable>builder("swagger")
.withDescription("Swagger code generator CLI. More info on swagger.io")
.withDefaultCommand(Langs.class)
.withCommands(
Generate.class,
Meta.class,
Langs.class,
Help.class,
ConfigHelp.class
);
builder.build().parse(args).run();
}
}

View File

@@ -0,0 +1,52 @@
package io.swagger.codegen.cmd;
import io.airlift.airline.Command;
import io.airlift.airline.Option;
import io.swagger.codegen.CliOption;
import io.swagger.codegen.CodegenConfig;
import java.util.ServiceLoader;
import static java.util.ServiceLoader.load;
@Command(name = "config-help", description = "Config help for chosen lang")
public class ConfigHelp implements Runnable {
@Option(name = {"-l", "--lang"}, title = "language", required = true,
description = "language to get config help for")
private String lang;
/**
* Tries to load config class with SPI first, then with class name directly from classpath
*
* @param name name of config, or full qualified class name in classpath
* @return config class
*/
private static CodegenConfig forName(String name) {
ServiceLoader<CodegenConfig> loader = load(CodegenConfig.class);
for (CodegenConfig config : loader) {
if (config.getName().equals(name)) {
return config;
}
}
// else try to load directly
try {
return (CodegenConfig) Class.forName(name).newInstance();
} catch (Exception e) {
throw new RuntimeException("Can't load config class with name ".concat(name), e);
}
}
@Override
public void run() {
System.out.println();
CodegenConfig config = forName(lang);
System.out.println("CONFIG OPTIONS");
for (CliOption langCliOption : config.cliOptions()) {
System.out.println("\t" + langCliOption.getOpt());
System.out.println("\t " + langCliOption.getDescription());
System.out.println();
}
}
}

View File

@@ -0,0 +1,158 @@
package io.swagger.codegen.cmd;
import config.Config;
import config.ConfigParser;
import io.airlift.airline.Command;
import io.airlift.airline.Option;
import io.swagger.codegen.CliOption;
import io.swagger.codegen.ClientOptInput;
import io.swagger.codegen.ClientOpts;
import io.swagger.codegen.CodegenConfig;
import io.swagger.codegen.DefaultGenerator;
import io.swagger.models.Swagger;
import io.swagger.parser.SwaggerParser;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.File;
import java.util.ServiceLoader;
import static java.util.ServiceLoader.load;
import static org.apache.commons.lang3.StringUtils.isNotEmpty;
/**
* User: lanwen
* Date: 24.03.15
* Time: 20:22
*/
@Command(name = "generate", description = "Generate code with chosen lang")
public class Generate implements Runnable {
public static final Logger LOG = LoggerFactory.getLogger(Generate.class);
public static final String TEMPLATE_DIR_PARAM = "templateDir";
@Option(name = {"-v", "--verbose"}, description = "verbose mode")
private boolean verbose;
@Option(name = {"-l", "--lang"}, title = "language", required = true,
description = "client language to generate (maybe class name in classpath, required)")
private String lang;
@Option(name = {"-o", "--output"}, title = "output directory",
description = "where to write the generated files (current dir by default)")
private String output = "";
@Option(name = {"-i", "--input-spec"}, title = "spec file", required = true,
description = "location of the swagger spec, as URL or file (required)")
private String spec;
@Option(name = {"-t", "--template-dir"}, title = "template directory",
description = "folder containing the template files")
private String templateDir;
@Option(name = {"-a", "--auth"}, title = "authorization",
description = "adds authorization headers when fetching the swagger definitions remotely. " +
"Pass in a URL-encoded string of name:header with a comma separating multiple values")
private String auth;
@Option(name = {"-D"}, title = "system properties", description = "sets specified system properties in " +
"the format of name=value,name=value")
private String systemProperties;
@Option(name = {"-c", "--config"}, title = "configuration file", description = "Path to json configuration file. " +
"File content should be in a json format {\"optionKey\":\"optionValue\", \"optionKey1\":\"optionValue1\"...} " +
"Supported options can be different for each language. Run config-help -l {lang} command for language specific config options.")
private String configFile;
/**
* Tries to load config class with SPI first, then with class name directly from classpath
*
* @param name name of config, or full qualified class name in classpath
* @return config class
*/
private static CodegenConfig forName(String name) {
ServiceLoader<CodegenConfig> loader = load(CodegenConfig.class);
for (CodegenConfig config : loader) {
if (config.getName().equals(name)) {
return config;
}
}
// else try to load directly
try {
return (CodegenConfig) Class.forName(name).newInstance();
} catch (Exception e) {
throw new RuntimeException("Can't load config class with name ".concat(name), e);
}
}
@Override
public void run() {
verbosed(verbose);
setSystemProperties();
ClientOptInput input = new ClientOptInput();
if (isNotEmpty(auth)) {
input.setAuth(auth);
}
CodegenConfig config = forName(lang);
config.setOutputDir(new File(output).getAbsolutePath());
if (null != templateDir) {
config.additionalProperties().put(TEMPLATE_DIR_PARAM, new File(templateDir).getAbsolutePath());
}
if (null != configFile) {
Config genConfig = ConfigParser.read(configFile);
if (null != genConfig) {
for (CliOption langCliOption : config.cliOptions()) {
if (genConfig.hasOption(langCliOption.getOpt())) {
config.additionalProperties().put(langCliOption.getOpt(), genConfig.getOption(langCliOption.getOpt()));
}
}
}
}
input.setConfig(config);
Swagger swagger = new SwaggerParser().read(spec, input.getAuthorizationValues(), true);
new DefaultGenerator().opts(input.opts(new ClientOpts()).swagger(swagger)).generate();
}
private void setSystemProperties() {
if (systemProperties != null && systemProperties.length() > 0) {
for (String property : systemProperties.split(",")) {
int ix = property.indexOf('=');
if (ix > 0 && ix < property.length() - 1) {
System.setProperty(property.substring(0, ix), property.substring(ix + 1));
}
}
}
}
/**
* If true parameter, adds system properties which enables debug mode in generator
*
* @param verbose - if true, enables debug mode
*/
private void verbosed(boolean verbose) {
if (!verbose) {
return;
}
LOG.info("\nVERBOSE MODE: ON. Additional debug options are injected" +
"\n - [debugSwagger] prints the swagger specification as interpreted by the codegen" +
"\n - [debugModels] prints models passed to the template engine" +
"\n - [debugOperations] prints operations passed to the template engine" +
"\n - [debugSupportingFiles] prints additional data passed to the template engine");
System.setProperty("debugSwagger", "");
System.setProperty("debugModels", "");
System.setProperty("debugOperations", "");
System.setProperty("debugSupportingFiles", "");
}
}

View File

@@ -0,0 +1,23 @@
package io.swagger.codegen.cmd;
import ch.lambdaj.collection.LambdaIterable;
import io.airlift.airline.Command;
import io.swagger.codegen.CodegenConfig;
import static ch.lambdaj.Lambda.on;
import static ch.lambdaj.collection.LambdaCollections.with;
import static java.util.ServiceLoader.load;
/**
* User: lanwen
* Date: 24.03.15
* Time: 20:25
*/
@Command(name = "langs", description = "Shows available langs")
public class Langs implements Runnable {
@Override
public void run() {
LambdaIterable<String> langs = with(load(CodegenConfig.class)).extract(on(CodegenConfig.class).getName());
System.out.printf("Available languages: %s%n", langs);
}
}

View File

@@ -0,0 +1,147 @@
package io.swagger.codegen.cmd;
import ch.lambdaj.function.convert.Converter;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
import com.samskivert.mustache.Mustache;
import io.airlift.airline.Command;
import io.airlift.airline.Option;
import io.swagger.codegen.DefaultGenerator;
import io.swagger.codegen.SupportingFile;
import org.apache.commons.io.FileUtils;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.File;
import java.io.IOException;
import java.io.Reader;
import java.util.List;
import java.util.Map;
import static ch.lambdaj.collection.LambdaCollections.with;
import static com.google.common.base.Joiner.on;
/**
* User: lanwen
* Date: 24.03.15
* Time: 20:22
*/
@Command(name = "meta", description = "MetaGenerator. Generator for creating a new template set " +
"and configuration for Codegen. The output will be based on the language you " +
"specify, and includes default templates to include.")
public class Meta implements Runnable {
private static final Logger LOG = LoggerFactory.getLogger(Meta.class);
private static final String TEMPLATE_DIR_CLASSPATH = "codegen";
private static final String MUSTACHE_EXTENSION = ".mustache";
@Option(name = {"-o", "--output"}, title = "output directory",
description = "where to write the generated files (current dir by default)")
private String outputFolder = "";
@Option(name = {"-n", "--name"}, title = "name",
description = "the human-readable name of the generator")
private String name = "default";
@Option(name = {"-p", "--package"}, title = "package",
description = "the package to put the main class into (defaults to io.swagger.codegen)")
private String targetPackage = "io.swagger.codegen";
@Override
public void run() {
final File targetDir = new File(outputFolder);
LOG.info("writing to folder [{}]", targetDir.getAbsolutePath());
String mainClass = StringUtils.capitalize(name) + "Generator";
List<SupportingFile> supportingFiles = ImmutableList.of(
new SupportingFile("pom.mustache", "", "pom.xml"),
new SupportingFile("generatorClass.mustache",
on(File.separator).join("src/main/java", asPath(targetPackage)), mainClass.concat(".java")),
new SupportingFile("README.mustache", "", "README.md"),
new SupportingFile("api.template", "src/main/resources" + File.separator + name, "api.mustache"),
new SupportingFile("model.template", "src/main/resources" + File.separator + name, "model.mustache"),
new SupportingFile("services.mustache",
"src/main/resources/META-INF/services", "io.swagger.codegen.CodegenConfig")
);
Map<String, Object> data = new ImmutableMap.Builder<String, Object>()
.put("generatorPackage", targetPackage)
.put("generatorClass", mainClass)
.put("name", name)
.put("fullyQualifiedGeneratorClass", targetPackage + "." + mainClass).build();
with(supportingFiles).convert(processFiles(targetDir, data));
}
/**
* Converter method to process supporting files: execute with mustache,
* or simply copy to destination directory
*
* @param targetDir - destination directory
* @param data - map with additional params needed to process templates
* @return converter object to pass to lambdaj
*/
private Converter<SupportingFile, File> processFiles(final File targetDir, final Map<String, Object> data) {
return new Converter<SupportingFile, File>() {
private DefaultGenerator generator = new DefaultGenerator();
@Override
public File convert(SupportingFile support) {
try {
File destinationFolder = new File(new File(targetDir.getAbsolutePath()), support.folder);
File outputFile = new File(destinationFolder, support.destinationFilename);
String template = generator
.readTemplate(new File(TEMPLATE_DIR_CLASSPATH, support.templateFile).getPath());
String formatted = template;
if (support.templateFile.endsWith(MUSTACHE_EXTENSION)) {
LOG.info("writing file to {}", outputFile.getAbsolutePath());
formatted = Mustache.compiler().withLoader(loader(generator))
.defaultValue("")
.compile(template)
.execute(data);
} else {
LOG.info("copying file to {}", outputFile.getAbsolutePath());
}
FileUtils.writeStringToFile(outputFile, formatted);
return outputFile;
} catch (IOException e) {
throw new RuntimeException("Can't generate project", e);
}
}
};
}
/**
* Creates mustache loader for template using classpath loader
*
* @param generator - class with reader getter
* @return loader for template
*/
private Mustache.TemplateLoader loader(final DefaultGenerator generator) {
return new Mustache.TemplateLoader() {
public Reader getTemplate(String name) {
return generator.getTemplateReader(TEMPLATE_DIR_CLASSPATH
+ File.separator + name.concat(MUSTACHE_EXTENSION));
}
};
}
/**
* Converts package name to path on file system
*
* @param packageName - package name to convert
* @return relative path
*/
private String asPath(String packageName) {
return packageName.replace(".", File.separator);
}
}

View File

@@ -0,0 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<layout class="ch.qos.logback.classic.PatternLayout">
<Pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</Pattern>
</layout>
</appender>
<logger name="io.swagger" level="debug"/>
<root level="error">
<appender-ref ref="STDOUT"/>
</root>
</configuration>

View File

@@ -1,62 +0,0 @@
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<parent>
<groupId>com.wordnik</groupId>
<artifactId>swagger-codegen-project</artifactId>
<version>2.1.0-M1</version>
<relativePath>../..</relativePath>
</parent>
<modelVersion>4.0.0</modelVersion>
<groupId>com.wordnik</groupId>
<artifactId>swagger-codegen-distribution</artifactId>
<packaging>jar</packaging>
<name>swagger-codegen (executable)</name>
<version>2.1.0-M1</version>
<build>
<testSourceDirectory>src/test/scala</testSourceDirectory>
<outputDirectory>target/classes</outputDirectory>
<testOutputDirectory>target/test-classes</testOutputDirectory>
<defaultGoal>install</defaultGoal>
<directory>target</directory>
<finalName>${project.artifactId}-${project.version}</finalName>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>2.3</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<minimizeJar>false</minimizeJar>
<createDependencyReducedPom>true</createDependencyReducedPom>
<dependencyReducedPomLocation>
${java.io.tmpdir}/dependency-reduced-pom.xml
</dependencyReducedPomLocation>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifest>
<mainClass>com.wordnik.swagger.codegen.Codegen</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>com.wordnik</groupId>
<artifactId>swagger-codegen</artifactId>
<version>${project.parent.version}</version>
</dependency>
</dependencies>
</project>

View File

@@ -1,7 +0,0 @@
package com.wordnik.swagger.codegen;
public class Readme {
public String getInfo() {
return "See the documentation for swagger-codegen";
}
}

View File

@@ -1,341 +1,357 @@
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<parent>
<groupId>com.wordnik</groupId>
<artifactId>swagger-codegen-project</artifactId>
<version>2.1.0-M1</version>
<relativePath>../..</relativePath>
</parent>
<modelVersion>4.0.0</modelVersion>
<groupId>com.wordnik</groupId>
<artifactId>swagger-codegen</artifactId>
<packaging>jar</packaging>
<name>swagger-codegen (core library)</name>
<version>2.1.0-M1</version>
<build>
<sourceDirectory>src/main/java</sourceDirectory>
<defaultGoal>install</defaultGoal>
<extensions>
<extension>
<groupId>org.jvnet.wagon-svn</groupId>
<artifactId>wagon-svn</artifactId>
<version>1.8</version>
</extension>
<extension>
<groupId>org.apache.maven.wagon</groupId>
<artifactId>wagon-ssh-external</artifactId>
<version>1.0-alpha-6</version>
</extension>
<extension>
<groupId>org.apache.maven.wagon</groupId>
<artifactId>wagon-webdav</artifactId>
<version>1.0-beta-1</version>
</extension>
</extensions>
<directory>target</directory>
<finalName>${project.artifactId}-${project.version}</finalName>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.3.2</version>
<executions>
<execution>
<goals>
<goal>java</goal>
</goals>
</execution>
</executions>
<configuration>
<mainClass>com.wordnik.swagger.codegen.Codegen</mainClass>
</configuration>
</plugin>
<plugin>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}/lib</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>net.alchim31.maven</groupId>
<artifactId>scala-maven-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>add-source</goal>
<goal>compile</goal>
<goal>testCompile</goal>
</goals>
</execution>
</executions>
<configuration>
<configuration>
<recompileMode>incremental</recompileMode>
</configuration>
<jvmArgs>
<jvmArg>-Xmx384m</jvmArg>
</jvmArgs>
<args>
<arg>-target:jvm-1.6</arg>
<arg>-deprecation</arg>
</args>
<launchers>
<launcher>
<id>run-scalatest</id>
<mainClass>org.scalatest.tools.Runner</mainClass>
<args>
<arg>-p</arg>
<arg>${project.build.testOutputDirectory}</arg>
</args>
<jvmArgs>
<jvmArg>-Xmx512m</jvmArg>
</jvmArgs>
</launcher>
</launchers>
</configuration>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.0</version>
<configuration>
<source>1.6</source>
<target>1.6</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.4</version>
<configuration>
<archive>
<manifestEntries>
<mode>development</mode>
<url>${project.url}</url>
<implementation-version>${project.version}</implementation-version>
<package>com.wordnik</package>
</manifestEntries>
</archive>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-site-plugin</artifactId>
<version>2.1</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-release-plugin</artifactId>
<version>2.1</version>
</plugin>
</plugins>
<pluginManagement>
<plugins>
<plugin>
<groupId>net.alchim31.maven</groupId>
<artifactId>scala-maven-plugin</artifactId>
<version>${scala-maven-plugin-version}</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-gpg-plugin</artifactId>
<configuration>
<releaseProfiles>release</releaseProfiles>
<goals>sign</goals>
</configuration>
</plugin>
</plugins>
</pluginManagement>
</build>
<profiles>
<profile>
<id>release-profile</id>
<properties>
<skipTests>true</skipTests>
</properties>
<build>
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<parent>
<groupId>io.swagger</groupId>
<artifactId>swagger-codegen-project</artifactId>
<version>2.1.2</version>
<relativePath>../..</relativePath>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>swagger-codegen</artifactId>
<packaging>jar</packaging>
<name>swagger-codegen (core library)</name>
<build>
<sourceDirectory>src/main/java</sourceDirectory>
<defaultGoal>install</defaultGoal>
<resources>
<resource>
<directory>src/main/resources</directory>
<excludes>
<exclude>logback.xml</exclude>
</excludes>
</resource>
</resources>
<extensions>
<extension>
<groupId>org.jvnet.wagon-svn</groupId>
<artifactId>wagon-svn</artifactId>
<version>1.8</version>
</extension>
<extension>
<groupId>org.apache.maven.wagon</groupId>
<artifactId>wagon-ssh-external</artifactId>
<version>1.0-alpha-6</version>
</extension>
<extension>
<groupId>org.apache.maven.wagon</groupId>
<artifactId>wagon-webdav</artifactId>
<version>1.0-beta-1</version>
</extension>
</extensions>
<directory>target</directory>
<finalName>${project.artifactId}-${project.version}</finalName>
<plugins>
<plugin>
<groupId>net.alchim31.maven</groupId>
<artifactId>scala-maven-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>compile</goal>
<goal>testCompile</goal>
</goals>
</execution>
</executions>
<configuration />
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
<executions>
<execution>
<id>add-source</id>
<phase>prepare-package</phase>
<goals>
<goal>add-source</goal>
</goals>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.3.2</version>
<executions>
<execution>
<goals>
<goal>java</goal>
</goals>
</execution>
</executions>
<configuration>
<sources>
<source>src/main/scala</source>
</sources>
<mainClass>io.swagger.codegen.Codegen</mainClass>
</configuration>
</execution>
</executions>
</plugin>
</plugin>
<plugin>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}/lib</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>net.alchim31.maven</groupId>
<artifactId>scala-maven-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>add-source</goal>
<goal>compile</goal>
<goal>testCompile</goal>
</goals>
</execution>
</executions>
<configuration>
<configuration>
<recompileMode>incremental</recompileMode>
</configuration>
<jvmArgs>
<jvmArg>-Xmx384m</jvmArg>
</jvmArgs>
<args>
<arg>-target:jvm-1.6</arg>
<arg>-deprecation</arg>
</args>
<launchers>
<launcher>
<id>run-scalatest</id>
<mainClass>org.scalatest.tools.Runner</mainClass>
<args>
<arg>-p</arg>
<arg>${project.build.testOutputDirectory}</arg>
</args>
<jvmArgs>
<jvmArg>-Xmx512m</jvmArg>
</jvmArgs>
</launcher>
</launchers>
</configuration>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.0</version>
<configuration>
<source>1.6</source>
<target>1.6</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.4</version>
<configuration>
<archive>
<manifestEntries>
<mode>development</mode>
<url>${project.url}</url>
<implementation-version>${project.version}</implementation-version>
<package>io.swagger</package>
</manifestEntries>
</archive>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-site-plugin</artifactId>
<version>2.1</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-release-plugin</artifactId>
<version>2.1</version>
</plugin>
</plugins>
</build>
</profile>
<profile>
<id>release-sign-artifacts</id>
<activation>
<property>
<name>performRelease</name>
<value>true</value>
</property>
</activation>
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>net.alchim31.maven</groupId>
<artifactId>scala-maven-plugin</artifactId>
<version>${scala-maven-plugin-version}</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-gpg-plugin</artifactId>
<configuration>
<releaseProfiles>release</releaseProfiles>
<goals>sign</goals>
</configuration>
</plugin>
</plugins>
</pluginManagement>
</build>
<profiles>
<profile>
<id>release-profile</id>
<properties>
<skipTests>true</skipTests>
</properties>
<build>
<plugins>
<plugin>
<groupId>net.alchim31.maven</groupId>
<artifactId>scala-maven-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>compile</goal>
<goal>testCompile</goal>
</goals>
</execution>
</executions>
<configuration>
<scala-version>${scala-version}</scala-version>
</configuration>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
<executions>
<execution>
<id>add-source</id>
<phase>prepare-package</phase>
<goals>
<goal>add-source</goal>
</goals>
<configuration>
<sources>
<source>src/main/scala</source>
</sources>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
<profile>
<id>release-sign-artifacts</id>
<activation>
<property>
<name>performRelease</name>
<value>true</value>
</property>
</activation>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-gpg-plugin</artifactId>
<executions>
<execution>
<id>sign-artifacts</id>
<phase>verify</phase>
<goals>
<goal>sign</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
</profiles>
<reporting>
<outputDirectory>target/site</outputDirectory>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-gpg-plugin</artifactId>
<executions>
<execution>
<id>sign-artifacts</id>
<phase>verify</phase>
<goals>
<goal>sign</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<version>2.9</version>
<configuration>
<aggregate>true</aggregate>
<debug>true</debug>
<links>
<link>http://java.sun.com/javaee/5/docs/api</link>
<link>http://java.sun.com/j2se/1.5.0/docs/api</link>
</links>
<excludePackageNames/>
</configuration>
</plugin>
<plugin>
<groupId>net.alchim31.maven</groupId>
<artifactId>scala-maven-plugin</artifactId>
<version>${scala-maven-plugin-version}</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jxr-plugin</artifactId>
<version>2.3</version>
<configuration>
<aggregate>true</aggregate>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-project-info-reports-plugin</artifactId>
<version>2.6</version>
<reportSets>
<reportSet>
<reports>
<report>project-team</report>
</reports>
</reportSet>
</reportSets>
</plugin>
</plugins>
</build>
</profile>
</profiles>
<reporting>
<outputDirectory>target/site</outputDirectory>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<version>2.9</version>
<configuration>
<aggregate>true</aggregate>
<debug>true</debug>
<links>
<link>http://java.sun.com/javaee/5/docs/api</link>
<link>http://java.sun.com/j2se/1.5.0/docs/api</link>
</links>
<excludePackageNames />
</configuration>
</plugin>
<plugin>
<groupId>net.alchim31.maven</groupId>
<artifactId>scala-maven-plugin</artifactId>
<version>${scala-maven-plugin-version}</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jxr-plugin</artifactId>
<version>2.3</version>
<configuration>
<aggregate>true</aggregate>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-project-info-reports-plugin</artifactId>
<version>2.6</version>
<reportSets>
<reportSet>
<reports>
<report>project-team</report>
</reports>
</reportSet>
</reportSets>
</plugin>
</plugins>
</reporting>
<dependencies>
<dependency>
<groupId>io.swagger</groupId>
<artifactId>swagger-parser</artifactId>
<version>${swagger-parser-version}</version>
</dependency>
<dependency>
<groupId>io.swagger</groupId>
<artifactId>swagger-compat-spec-parser</artifactId>
<version>${swagger-parser-version}</version>
</dependency>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>swagger-core</artifactId>
<version>${swagger-core-version}</version>
</dependency>
<dependency>
<groupId>com.samskivert</groupId>
<artifactId>jmustache</artifactId>
<version>${jmustache-version}</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>${commons-io-version}</version>
</dependency>
<dependency>
<groupId>org.apache.maven</groupId>
<artifactId>maven-plugin-tools-api</artifactId>
<version>2.0</version>
</dependency>
<dependency>
<groupId>org.apache.felix</groupId>
<artifactId>maven-bundle-plugin</artifactId>
<version>${felix-version}</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-ext</artifactId>
<version>${slf4j-version}</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>${slf4j-version}</version>
</dependency>
<dependency>
<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>
<version>${commons-lang-version}</version>
</dependency>
<dependency>
<groupId>commons-cli</groupId>
<artifactId>commons-cli</artifactId>
<version>${commons-cli-version}</version>
</dependency>
<dependency>
<groupId>org.scalatest</groupId>
<artifactId>scalatest_2.11</artifactId>
<version>${scala-test-version}</version>
<scope>test</scope>
</dependency>
</dependencies>
<repositories>
<repository>
<id>sonatype-snapshots</id>
<url>https://oss.sonatype.org/content/repositories/snapshots</url>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
</reporting>
<dependencies>
<dependency>
<groupId>io.swagger</groupId>
<artifactId>swagger-parser</artifactId>
<version>${swagger-parser-version}</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>io.swagger</groupId>
<artifactId>swagger-compat-spec-parser</artifactId>
<version>${swagger-parser-version}</version>
</dependency>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>swagger-core</artifactId>
<version>${swagger-core-version}</version>
</dependency>
<dependency>
<groupId>com.samskivert</groupId>
<artifactId>jmustache</artifactId>
<version>${jmustache-version}</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>${commons-io-version}</version>
</dependency>
<dependency>
<groupId>org.apache.maven</groupId>
<artifactId>maven-plugin-tools-api</artifactId>
<version>2.0</version>
</dependency>
<dependency>
<groupId>org.apache.felix</groupId>
<artifactId>maven-bundle-plugin</artifactId>
<version>${felix-version}</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-ext</artifactId>
<version>${slf4j-version}</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>${slf4j-version}</version>
</dependency>
<dependency>
<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>
<version>${commons-lang-version}</version>
</dependency>
<dependency>
<groupId>commons-cli</groupId>
<artifactId>commons-cli</artifactId>
<version>${commons-cli-version}</version>
</dependency>
<dependency>
<groupId>org.scalatest</groupId>
<artifactId>scalatest_2.11</artifactId>
<version>${scala-test-version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.scala-lang</groupId>
<artifactId>scala-library</artifactId>
<version>${scala-version}</version>
<scope>test</scope>
</dependency>
</dependencies>
<repositories>
<repository>
<id>sonatype-snapshots</id>
<url>https://oss.sonatype.org/content/repositories/snapshots</url>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
</project>

View File

@@ -1,104 +0,0 @@
/**
* Copyright 2015 Reverb, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.wordnik.swagger.codegen;
import com.wordnik.swagger.codegen.ClientOpts;
import com.wordnik.swagger.annotations.*;
import com.wordnik.swagger.models.Swagger;
import com.wordnik.swagger.models.auth.AuthorizationValue;
import java.util.*;
import java.net.URLEncoder;
import java.net.URLDecoder;
public class ClientOptInput {
private ClientOpts opts;
private Swagger swagger;
private List<AuthorizationValue> auths;
protected CodegenConfig config;
public ClientOptInput swagger(Swagger swagger) {
this.setSwagger(swagger);
return this;
}
public ClientOptInput opts(ClientOpts opts) {
this.setOpts(opts);
return this;
}
public void setAuth(String urlEncodedAuthString) {
List<AuthorizationValue> auths = new ArrayList<AuthorizationValue>();
if(urlEncodedAuthString != null && !"".equals(urlEncodedAuthString)) {
String[] parts = urlEncodedAuthString.split(",");
for(String part : parts) {
String[] kvPair = part.split(":");
if(kvPair.length == 2) {
auths.add(new AuthorizationValue(URLDecoder.decode(kvPair[0]), URLDecoder.decode(kvPair[1]), "header"));
}
}
}
this.auths = auths;
}
public String getAuth() {
if(auths != null) {
StringBuilder b = new StringBuilder();
for(AuthorizationValue v : auths) {
try {
if(b.toString().length() > 0)
b.append(",");
b.append(URLEncoder.encode(v.getKeyName(), "UTF-8"))
.append(":")
.append(URLEncoder.encode(v.getValue(), "UTF-8"));
}
catch (Exception e) {
// continue
e.printStackTrace();
}
}
return b.toString();
}
else
return null;
}
public List<AuthorizationValue> getAuthorizationValues() {
return auths;
}
public CodegenConfig getConfig() {
return config;
}
public void setConfig(CodegenConfig config) {
this.config = config;
}
public void setOpts(ClientOpts opts) {
this.opts = opts;
}
public ClientOpts getOpts() {
return opts;
}
public void setSwagger(Swagger swagger) {
this.swagger = swagger;
}
@ApiModelProperty(dataType="Object")
public Swagger getSwagger() {
return swagger;
}
}

View File

@@ -1,52 +0,0 @@
package com.wordnik.swagger.codegen;
import com.wordnik.swagger.codegen.auth.*;
import java.util.*;
public class ClientOpts {
protected String uri;
protected String target;
protected AuthMethod auth;
protected Map<String, String> properties = new HashMap<String, String>();
protected String outputDirectory;
public String getUri() {
return uri;
}
public void setUri(String uri) {
this.uri = uri;
}
public String getTarget() {
return target;
}
public void setTarget(String target) {
this.target = target;
}
public Map<String, String> getProperties() {
return properties;
}
public void setProperties(Map<String, String> properties) {
this.properties = properties;
}
public String getOutputDirectory() {
return outputDirectory;
}
public void setOutputDirectory(String outputDirectory) {
this.outputDirectory = outputDirectory;
}
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append("ClientOpts: {\n");
sb.append(" uri: ").append(uri).append(",");
sb.append(" auth: ").append(auth).append(",");
sb.append(properties);
sb.append("}");
return sb.toString();
}
}

View File

@@ -1,138 +0,0 @@
package com.wordnik.swagger.codegen;
import com.wordnik.swagger.codegen.languages.*;
import com.wordnik.swagger.models.Swagger;
import com.wordnik.swagger.models.auth.AuthorizationValue;
import com.wordnik.swagger.util.*;
import io.swagger.parser.SwaggerParser;
import org.apache.commons.cli.*;
import java.io.File;
import java.util.*;
public class Codegen extends DefaultGenerator {
static Map<String, CodegenConfig> configs = new HashMap<String, CodegenConfig>();
static String configString;
static {
List<CodegenConfig> extensions = getExtensions();
StringBuilder sb = new StringBuilder();
for(CodegenConfig config : extensions) {
if(sb.toString().length() != 0)
sb.append(", ");
sb.append(config.getName());
configs.put(config.getName(), config);
configString = sb.toString();
}
}
static String debugInfoOptions = "\nThe following additional debug options are available for all codegen targets:" +
"\n -DdebugSwagger prints the swagger specification as interpreted by the codegen" +
"\n -DdebugModels prints models passed to the template engine" +
"\n -DdebugOperations prints operations passed to the template engine" +
"\n -DdebugSupportingFiles prints additional data passed to the template engine";
public static void main(String[] args) {
StringBuilder sb = new StringBuilder();
Options options = new Options();
options.addOption("h", "help", false, "shows this message");
options.addOption("l", "lang", true, "client language to generate.\nAvailable languages include:\n\t[" + configString + "]");
options.addOption("o", "output", true, "where to write the generated files");
options.addOption("i", "input-spec", true, "location of the swagger spec, as URL or file");
options.addOption("t", "template-dir", true, "folder containing the template files");
options.addOption("d", "debug-info", false, "prints additional info for debugging");
options.addOption("a", "auth", false, "addes authorization headers when fetching the swagger definitions remotely. Pass in a URL-encoded string of name:header with a comma separating multiple values");
ClientOptInput clientOptInput = new ClientOptInput();
ClientOpts clientOpts = new ClientOpts();
Swagger swagger = null;
CommandLine cmd = null;
try {
CommandLineParser parser = new BasicParser();
CodegenConfig config = null;
cmd = parser.parse(options, args);
if (cmd.hasOption("d")) {
usage(options);
System.out.println(debugInfoOptions);
return;
}
if (cmd.hasOption("a"))
clientOptInput.setAuth(cmd.getOptionValue("a"));
if (cmd.hasOption("l"))
clientOptInput.setConfig(getConfig(cmd.getOptionValue("l")));
else {
usage(options);
return;
}
if (cmd.hasOption("o"))
clientOptInput.getConfig().setOutputDir(cmd.getOptionValue("o"));
if (cmd.hasOption("h")) {
if(cmd.hasOption("l")) {
config = getConfig(String.valueOf(cmd.getOptionValue("l")));
if(config != null) {
options.addOption("h", "help", true, config.getHelp());
usage(options);
return;
}
}
usage(options);
return;
}
if (cmd.hasOption("i"))
swagger = new SwaggerParser().read(cmd.getOptionValue("i"), clientOptInput.getAuthorizationValues());
if (cmd.hasOption("t"))
clientOpts.getProperties().put("templateDir", String.valueOf(cmd.getOptionValue("t")));
}
catch (Exception e) {
usage(options);
return;
}
try{
clientOptInput
.opts(clientOpts)
.swagger(swagger);
new Codegen().opts(clientOptInput).generate();
}
catch (Exception e) {
e.printStackTrace();
}
}
public static List<CodegenConfig> getExtensions() {
ServiceLoader<CodegenConfig> loader = ServiceLoader.load(CodegenConfig.class);
List<CodegenConfig> output = new ArrayList<CodegenConfig>();
Iterator<CodegenConfig> itr = loader.iterator();
while(itr.hasNext()) {
output.add(itr.next());
}
return output;
}
static void usage(Options options) {
HelpFormatter formatter = new HelpFormatter();
formatter.printHelp( "Codegen", options );
}
public static CodegenConfig getConfig(String name) {
if(configs.containsKey(name)) {
return configs.get(name);
}
else {
// see if it's a class
try {
System.out.println("loading class " + name);
Class customClass = Class.forName(name);
System.out.println("loaded");
return (CodegenConfig)customClass.newInstance();
}
catch (Exception e) {
throw new RuntimeException("can't load class " + name);
}
}
}
}

View File

@@ -1,53 +0,0 @@
package com.wordnik.swagger.codegen;
import com.wordnik.swagger.models.*;
import com.wordnik.swagger.models.properties.*;
import java.util.*;
public interface CodegenConfig {
CodegenType getTag();
String getName();
String getHelp();
Map<String, Object> additionalProperties();
String apiPackage();
String apiFileFolder();
String fileSuffix();
String outputFolder();
String templateDir();
String modelFileFolder();
String modelPackage();
String toApiName(String name);
String toModelName(String name);
String toParamName(String name);
String escapeReservedWord(String name);
String getTypeDeclaration(Property p);
String getTypeDeclaration(String name);
void processOpts();
Set<String> reservedWords();
List<SupportingFile> supportingFiles();
void setOutputDir(String dir);
String getOutputDir();
CodegenModel fromModel(String name, Model model);
CodegenOperation fromOperation(String resourcePath, String httpMethod, Operation operation);
Set<String> defaultIncludes();
Map<String, String> typeMapping();
Map<String, String> instantiationTypes();
Map<String, String> importMapping();
Map<String, String> apiTemplateFiles();
Map<String, String> modelTemplateFiles();
void processSwagger(Swagger swagger);
String toApiFilename(String name);
String toModelFilename(String name);
String toModelImport(String name);
String toApiImport(String name);
void addOperationToGroup(String tag, String resourcePath, Operation operation, CodegenOperation co, Map<String, List<CodegenOperation>> operations);
Map<String, Object> postProcessModels(Map<String, Object> objs);
Map<String, Object> postProcessOperations(Map<String, Object> objs);
Map<String, Object> postProcessSupportingFileData(Map<String, Object> objs);
}

View File

@@ -1,16 +0,0 @@
package com.wordnik.swagger.codegen;
import com.wordnik.swagger.models.*;
import com.wordnik.swagger.models.properties.*;
import java.util.*;
public class CodegenModel {
public String parent;
public String name, classname, description, classVarName, modelJson;
public String defaultValue;
public List<CodegenProperty> vars = new ArrayList<CodegenProperty>();
public Set<String> imports = new HashSet<String>();
public Boolean hasVars, emptyVars, hasMoreModels;
public ExternalDocs externalDocs;
}

View File

@@ -1,38 +0,0 @@
package com.wordnik.swagger.codegen;
import java.util.HashMap;
import java.util.Map;
public final class CodegenModelFactory {
private static final Map<CodegenModelType, Class<?>> typeMapping = new HashMap<CodegenModelType, Class<?>>();
/**
* Configure a different implementation class.
* @param type the type that shall be replaced
* @param implementation the implementation class must extend the default class and must provide a public no-arg constructor
*/
public static void setTypeMapping(CodegenModelType type, Class<?> implementation) {
if (!type.getDefaultImplementation().isAssignableFrom(implementation)) {
throw new IllegalArgumentException(implementation.getSimpleName() + " doesn't extend " + type.getDefaultImplementation().getSimpleName());
}
try {
implementation.newInstance();
} catch (Exception e) {
throw new IllegalArgumentException(e);
}
typeMapping.put(type, implementation);
}
@SuppressWarnings("unchecked")
public static <T> T newInstance(CodegenModelType type) {
Class<?> classType = typeMapping.get(type);
try {
return (T) (classType != null ? classType : type.getDefaultImplementation()).newInstance();
} catch (InstantiationException e) {
throw new RuntimeException(e);
} catch (IllegalAccessException e) {
throw new RuntimeException(e);
}
}
}

View File

@@ -1,20 +0,0 @@
package com.wordnik.swagger.codegen;
public enum CodegenModelType {
MODEL(CodegenModel.class),
OPERATION(CodegenOperation.class),
PARAMETER(CodegenParameter.class),
PROPERTY(CodegenProperty.class),
RESPONSE(CodegenResponse.class);
private final Class<?> defaultImplementation;
private CodegenModelType(Class<?> defaultImplementation) {
this.defaultImplementation = defaultImplementation;
}
public Class<?> getDefaultImplementation() {
return defaultImplementation;
}
}

View File

@@ -1,30 +0,0 @@
package com.wordnik.swagger.codegen;
import com.wordnik.swagger.models.*;
import java.util.*;
public class CodegenOperation {
public Boolean hasConsumes, hasProduces, hasParams, returnTypeIsPrimitive,
returnSimpleType, subresourceOperation, isMapContainer, isListContainer;
public String path, operationId, returnType, httpMethod, returnBaseType,
returnContainer, summary, notes, baseName, defaultResponse;
public List<Map<String, String>> consumes, produces;
public CodegenParameter bodyParam;
public List<CodegenParameter> allParams = new ArrayList<CodegenParameter>();
public List<CodegenParameter> bodyParams = new ArrayList<CodegenParameter>();
public List<CodegenParameter> pathParams = new ArrayList<CodegenParameter>();
public List<CodegenParameter> queryParams = new ArrayList<CodegenParameter>();
public List<CodegenParameter> headerParams = new ArrayList<CodegenParameter>();
public List<CodegenParameter> formParams = new ArrayList<CodegenParameter>();
public List<String> tags;
public List<CodegenResponse> responses = new ArrayList<CodegenResponse>();
public final List<CodegenProperty> responseHeaders = new ArrayList<CodegenProperty>();
public Set<String> imports = new HashSet<String>();
public List<Map<String, String>> examples;
public ExternalDocs externalDocs;
// legacy support
public String nickname;
}

View File

@@ -1,37 +0,0 @@
package com.wordnik.swagger.codegen;
public class CodegenParameter {
public Boolean isFormParam, isQueryParam, isPathParam, isHeaderParam,
isCookieParam, isBodyParam, isFile, notFile, hasMore, isContainer, secondaryParam;
public String baseName, paramName, dataType, collectionFormat, description, baseType;
/**
* Determines whether this parameter is mandatory. If the parameter is in "path",
* this property is required and its value MUST be true. Otherwise, the property
* MAY be included and its default value is false.
*/
public Boolean required;
public CodegenParameter copy() {
CodegenParameter output = new CodegenParameter();
output.isFile = this.isFile;
output.notFile = this.notFile;
output.hasMore = this.hasMore;
output.isContainer = this.isContainer;
output.secondaryParam = this.secondaryParam;
output.baseName = this.baseName;
output.paramName = this.paramName;
output.dataType = this.dataType;
output.collectionFormat = this.collectionFormat;
output.description = this.description;
output.baseType = this.baseType;
output.isFormParam = this.isFormParam;
output.isQueryParam = this.isQueryParam;
output.isPathParam = this.isPathParam;
output.isHeaderParam = this.isHeaderParam;
output.isCookieParam = this.isCookieParam;
output.isBodyParam = this.isBodyParam;
output.required = this.required;
return output;
}
}

View File

@@ -1,24 +0,0 @@
package com.wordnik.swagger.codegen;
import java.util.*;
public class CodegenProperty {
public String baseName, complexType, getter, setter, description, datatype, datatypeWithEnum,
name, min, max, defaultValue, baseType, containerType;
/** maxLength validation for strings, see http://json-schema.org/latest/json-schema-validation.html#rfc.section.5.2.1 */
public Integer maxLength;
/** minLength validation for strings, see http://json-schema.org/latest/json-schema-validation.html#rfc.section.5.2.2 */
public Integer minLength;
/** pattern validation for strings, see http://json-schema.org/latest/json-schema-validation.html#rfc.section.5.2.3 */
public String pattern;
/** A free-form property to include an example of an instance for this schema. */
public String example;
public Double minimum, maximum, exclusiveMinimum, exclusiveMaximum;
public Boolean hasMore = null, required = null, secondaryParam = null;
public Boolean isPrimitiveType, isContainer, isNotContainer;
public boolean isEnum;
public List<String> _enum;
public Map<String, Object> allowableValues;
}

View File

@@ -1,10 +0,0 @@
package com.wordnik.swagger.codegen;
import java.util.*;
public class CodegenResponse {
public String code, message;
public Boolean hasMore;
public List<Map<String, String>> examples;
Object schema;
}

View File

@@ -1,34 +0,0 @@
package com.wordnik.swagger.codegen;
import com.fasterxml.jackson.annotation.*;
import java.util.Map;
import java.util.HashMap;
public enum CodegenType {
CLIENT, SERVER, DOCUMENTATION, OTHER;
private static Map<String, CodegenType> names = new HashMap<String, CodegenType>();
static {
names.put("client", CLIENT);
names.put("server", SERVER);
names.put("documentation", DOCUMENTATION);
names.put("other", OTHER);
}
@JsonCreator
public static CodegenType forValue(String value) {
return names.get(value.toLowerCase());
}
@JsonValue
public String toValue() {
for (Map.Entry<String, CodegenType> entry : names.entrySet()) {
if (entry.getValue() == this)
return entry.getKey();
}
return null; // or fail
}
}

View File

@@ -1,901 +0,0 @@
package com.wordnik.swagger.codegen;
import com.wordnik.swagger.models.*;
import com.wordnik.swagger.models.parameters.*;
import com.wordnik.swagger.models.properties.*;
import com.wordnik.swagger.util.Json;
import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.*;
public class DefaultCodegen {
Logger LOGGER = LoggerFactory.getLogger(DefaultCodegen.class);
protected String outputFolder = "";
protected Set<String> defaultIncludes = new HashSet<String>();
protected Map<String, String> typeMapping = new HashMap<String, String>();
protected Map<String, String> instantiationTypes = new HashMap<String, String>();
protected Set<String> reservedWords = new HashSet<String>();
protected Set<String> languageSpecificPrimitives = new HashSet<String>();
protected Map<String, String> importMapping = new HashMap<String, String>();
protected String modelPackage = "", apiPackage = "", fileSuffix;
protected Map<String, String> apiTemplateFiles = new HashMap<String, String>();
protected Map<String, String> modelTemplateFiles = new HashMap<String, String>();
protected String templateDir;
protected Map<String, Object> additionalProperties = new HashMap<String, Object>();
protected List<SupportingFile> supportingFiles = new ArrayList<SupportingFile>();
public void processOpts(){
if(additionalProperties.containsKey("templateDir")) {
this.setTemplateDir((String)additionalProperties.get("templateDir"));
}
}
// override with any special post-processing
public Map<String, Object> postProcessModels(Map<String, Object> objs) {
return objs;
}
// override with any special post-processing
public Map<String, Object> postProcessOperations(Map<String, Object> objs) {
return objs;
}
// override with any special post-processing
public Map<String, Object> postProcessSupportingFileData(Map<String, Object> objs) {
return objs;
}
// override with any special handling of the entire swagger spec
public void processSwagger(Swagger swagger) {}
// override with any special text escaping logic
public String escapeText(String input) {
if(input != null) {
String output = input.replaceAll("\n", " ");
output = output.replace("\"", "\\\"");
return output;
}
return input;
}
public Set<String> defaultIncludes() {
return defaultIncludes;
}
public Map<String, String> typeMapping() {
return typeMapping;
}
public Map<String, String> instantiationTypes() {
return instantiationTypes;
}
public Set<String> reservedWords() {
return reservedWords;
}
public Set<String> languageSpecificPrimitives() {
return languageSpecificPrimitives;
}
public Map<String, String> importMapping() {
return importMapping;
}
public String modelPackage() {
return modelPackage;
}
public String apiPackage() {
return apiPackage;
}
public String fileSuffix() {
return fileSuffix;
}
public String templateDir() {
return templateDir;
}
public Map<String, String> apiTemplateFiles() {
return apiTemplateFiles;
}
public Map<String, String> modelTemplateFiles() {
return modelTemplateFiles;
}
public String apiFileFolder() {
return outputFolder + "/" + apiPackage().replaceAll("\\.", "/");
}
public String modelFileFolder() {
return outputFolder + "/" + modelPackage().replaceAll("\\.", "/");
}
public Map<String, Object> additionalProperties() {
return additionalProperties;
}
public List<SupportingFile> supportingFiles() {
return supportingFiles;
}
public String outputFolder() {
return outputFolder;
}
public void setOutputDir(String dir) {
this.outputFolder = dir;
}
public String getOutputDir() {
return outputFolder();
}
public void setTemplateDir(String templateDir) {
this.templateDir = templateDir;
}
public String toApiFilename(String name) {
return initialCaps(name) + "Api";
}
public String toModelFilename(String name) {
return name;
}
public String toVarName(String name) {
if(reservedWords.contains(name))
return escapeReservedWord(name);
else
return name;
}
public String toParamName(String name) {
if(reservedWords.contains(name)) {
return escapeReservedWord(name);
}
return name;
}
public String escapeReservedWord(String name) {
throw new RuntimeException("reserved word " + name + " not allowed");
}
public String toModelImport(String name) {
if("".equals(modelPackage()))
return name;
else
return modelPackage() + "." + name;
}
public String toApiImport(String name) {
return apiPackage() + "." + name;
}
public DefaultCodegen() {
defaultIncludes = new HashSet<String>(
Arrays.asList("double",
"int",
"long",
"short",
"char",
"float",
"String",
"boolean",
"Boolean",
"Double",
"Void",
"Integer",
"Long",
"Float")
);
typeMapping = new HashMap<String, String>();
typeMapping.put("array", "List");
typeMapping.put("map", "Map");
typeMapping.put("List", "List");
typeMapping.put("boolean", "Boolean");
typeMapping.put("string", "String");
typeMapping.put("int", "Integer");
typeMapping.put("float", "Float");
typeMapping.put("number", "BigDecimal");
typeMapping.put("DateTime", "Date");
typeMapping.put("long", "Long");
typeMapping.put("short", "Short");
typeMapping.put("char", "String");
typeMapping.put("double", "Double");
typeMapping.put("object", "Object");
typeMapping.put("integer", "Integer");
instantiationTypes = new HashMap<String, String>();
reservedWords = new HashSet<String>();
importMapping = new HashMap<String, String>();
importMapping.put("BigDecimal", "java.math.BigDecimal");
importMapping.put("UUID", "java.util.UUID");
importMapping.put("File", "java.io.File");
importMapping.put("Date", "java.util.Date");
importMapping.put("Timestamp", "java.sql.Timestamp");
importMapping.put("Map", "java.util.Map");
importMapping.put("HashMap", "java.util.HashMap");
importMapping.put("Array", "java.util.List");
importMapping.put("ArrayList", "java.util.ArrayList");
importMapping.put("List", "java.util.*");
importMapping.put("Set", "java.util.*");
importMapping.put("DateTime", "org.joda.time.*");
importMapping.put("LocalDateTime", "org.joda.time.*");
importMapping.put("LocalDate", "org.joda.time.*");
importMapping.put("LocalTime", "org.joda.time.*");
}
public String toInstantiationType(Property p) {
if (p instanceof MapProperty) {
MapProperty ap = (MapProperty) p;
String inner = getSwaggerType(ap.getAdditionalProperties());
return instantiationTypes.get("map") + "<String, " + inner + ">";
}
else if (p instanceof ArrayProperty) {
ArrayProperty ap = (ArrayProperty) p;
String inner = getSwaggerType(ap.getItems());
return instantiationTypes.get("array") + "<" + inner + ">";
}
else
return null;
}
public String toDefaultValue(Property p) {
if(p instanceof StringProperty)
return "null";
else if (p instanceof BooleanProperty)
return "null";
else if(p instanceof DateProperty)
return "null";
else if(p instanceof DateTimeProperty)
return "null";
else if (p instanceof DoubleProperty)
return "null";
else if (p instanceof FloatProperty)
return "null";
else if (p instanceof IntegerProperty)
return "null";
else if (p instanceof LongProperty)
return "null";
else if (p instanceof MapProperty) {
MapProperty ap = (MapProperty) p;
String inner = getSwaggerType(ap.getAdditionalProperties());
return "new HashMap<String, " + inner + ">() ";
}
else if (p instanceof ArrayProperty) {
ArrayProperty ap = (ArrayProperty) p;
String inner = getSwaggerType(ap.getItems());
return "new ArrayList<" + inner + ">() ";
}
else
return "null";
}
/**
* returns the swagger type for the property
**/
public String getSwaggerType(Property p) {
String datatype = null;
if(p instanceof StringProperty)
datatype = "string";
else if (p instanceof BooleanProperty)
datatype = "boolean";
else if(p instanceof DateProperty)
datatype = "date";
else if(p instanceof DateTimeProperty)
datatype = "DateTime";
else if (p instanceof DoubleProperty)
datatype = "double";
else if (p instanceof FloatProperty)
datatype = "float";
else if (p instanceof IntegerProperty)
datatype = "integer";
else if (p instanceof LongProperty)
datatype = "long";
else if (p instanceof MapProperty)
datatype = "map";
else if (p instanceof DecimalProperty)
datatype = "number";
else if (p instanceof RefProperty) {
RefProperty r = (RefProperty)p;
datatype = r.get$ref();
if(datatype.indexOf("#/definitions/") == 0)
datatype = datatype.substring("#/definitions/".length());
}
else {
if(p != null) datatype = p.getType();
}
return datatype;
}
public String initialCaps(String name) {
return Character.toUpperCase(name.charAt(0)) + name.substring(1);
}
public String getTypeDeclaration(String name) {
return name;
}
public String getTypeDeclaration(Property p) {
String swaggerType = getSwaggerType(p);
if(typeMapping.containsKey(swaggerType))
return typeMapping.get(swaggerType);
return swaggerType;
}
public String toApiName(String name) {
if(name.length() == 0)
return "DefaultApi";
return initialCaps(name) + "Api";
}
public String toModelName(String name) {
return initialCaps(name);
}
public CodegenModel fromModel(String name, Model model) {
CodegenModel m = CodegenModelFactory.newInstance(CodegenModelType.MODEL);
if(reservedWords.contains(name))
m.name = escapeReservedWord(name);
else
m.name = name;
m.description = model.getDescription();
m.classname = toModelName(name);
m.classVarName = toVarName(name);
m.modelJson = Json.pretty(model);
m.externalDocs = model.getExternalDocs();
int count = 0;
if(model instanceof ArrayModel) {
ArrayModel am = (ArrayModel) model;
ArrayProperty arrayProperty = new ArrayProperty(am.getItems());
CodegenProperty cp = fromProperty(name, arrayProperty);
if(cp.complexType != null && !defaultIncludes.contains(cp.complexType))
m.imports.add(cp.complexType);
m.parent = toInstantiationType(arrayProperty);
String containerType = cp.containerType;
if(instantiationTypes.containsKey(containerType))
m.imports.add(instantiationTypes.get(containerType));
if(typeMapping.containsKey(containerType)) {
containerType = typeMapping.get(containerType);
cp.containerType = containerType;
m.imports.add(containerType);
}
}
else if (model instanceof RefModel) {
// TODO
}
else {
ModelImpl impl = (ModelImpl) model;
if(impl.getAdditionalProperties() != null) {
MapProperty mapProperty = new MapProperty(impl.getAdditionalProperties());
CodegenProperty cp = fromProperty(name, mapProperty);
if(cp.complexType != null && !defaultIncludes.contains(cp.complexType))
m.imports.add(cp.complexType);
m.parent = toInstantiationType(mapProperty);
String containerType = cp.containerType;
if(instantiationTypes.containsKey(containerType))
m.imports.add(instantiationTypes.get(containerType));
if(typeMapping.containsKey(containerType)) {
containerType = typeMapping.get(containerType);
cp.containerType = containerType;
m.imports.add(containerType);
}
}
if(impl.getProperties() != null && impl.getProperties().size() > 0) {
m.hasVars = true;
for(String key: impl.getProperties().keySet()) {
Property prop = impl.getProperties().get(key);
if(prop == null) {
LOGGER.warn("null property for " + key);
}
else {
CodegenProperty cp = fromProperty(key, prop);
cp.required = false;
if(impl.getRequired() != null) {
for(String req : impl.getRequired()) {
if(key.equals(req))
cp.required = true;
}
}
if(cp.complexType != null && !defaultIncludes.contains(cp.complexType)) {
m.imports.add(cp.complexType);
}
m.vars.add(cp);
count += 1;
if(count != impl.getProperties().keySet().size())
cp.hasMore = new Boolean(true);
if(cp.isContainer != null) {
String arrayImport = typeMapping.get("array");
if(arrayImport != null &&
!languageSpecificPrimitives.contains(arrayImport) &&
!defaultIncludes.contains(arrayImport))
m.imports.add(arrayImport);
}
if(cp.complexType != null &&
!languageSpecificPrimitives.contains(cp.complexType) &&
!defaultIncludes.contains(cp.complexType))
m.imports.add(cp.complexType);
if(cp.baseType != null &&
!languageSpecificPrimitives.contains(cp.baseType) &&
!defaultIncludes.contains(cp.baseType))
m.imports.add(cp.baseType);
}
}
}
else {
m.emptyVars = true;
}
}
return m;
}
public CodegenProperty fromProperty(String name, Property p) {
if(p == null) {
LOGGER.error("unexpected missing property for name " + null);
return null;
}
CodegenProperty property = CodegenModelFactory.newInstance(CodegenModelType.PROPERTY);
property.name = toVarName(name);
property.baseName = name;
property.description = escapeText(p.getDescription());
property.getter = "get" + initialCaps(name);
property.setter = "set" + initialCaps(name);
property.example = p.getExample();
property.defaultValue = toDefaultValue(p);
String type = getSwaggerType(p);
if(p instanceof AbstractNumericProperty) {
AbstractNumericProperty np = (AbstractNumericProperty) p;
property.minimum = np.getMinimum();
property.maximum = np.getMaximum();
property.exclusiveMinimum = np.getExclusiveMinimum();
property.exclusiveMaximum = np.getExclusiveMaximum();
// legacy support
Map<String, Object> allowableValues = new HashMap<String, Object>();
if(np.getMinimum() != null)
allowableValues.put("min", np.getMinimum());
if(np.getMaximum() != null)
allowableValues.put("max", np.getMaximum());
property.allowableValues = allowableValues;
}
if(p instanceof StringProperty) {
StringProperty sp = (StringProperty) p;
property.maxLength = sp.getMaxLength();
property.minLength = sp.getMinLength();
property.pattern = sp.getPattern();
if(sp.getEnum() != null) {
List<String> _enum = sp.getEnum();
property._enum = _enum;
property.isEnum = true;
// legacy support
Map<String, Object> allowableValues = new HashMap<String, Object>();
allowableValues.put("values", _enum);
property.allowableValues = allowableValues;
}
}
property.datatype = getTypeDeclaration(p);
// this can cause issues for clients which don't support enums
if(property.isEnum)
property.datatypeWithEnum = StringUtils.capitalize(property.name) + "Enum";
else
property.datatypeWithEnum = property.datatype;
property.baseType = getSwaggerType(p);
if(p instanceof ArrayProperty) {
property.isContainer = true;
property.containerType = "array";
ArrayProperty ap = (ArrayProperty) p;
CodegenProperty cp = fromProperty("inner", ap.getItems());
if(cp == null) {
LOGGER.warn("skipping invalid property " + Json.pretty(p));
}
else {
property.baseType = getSwaggerType(p);
if(!languageSpecificPrimitives.contains(cp.baseType))
property.complexType = cp.baseType;
else
property.isPrimitiveType = true;
}
}
else if(p instanceof MapProperty) {
property.isContainer = true;
property.containerType = "map";
MapProperty ap = (MapProperty) p;
CodegenProperty cp = fromProperty("inner", ap.getAdditionalProperties());
property.baseType = getSwaggerType(p);
if(!languageSpecificPrimitives.contains(cp.baseType))
property.complexType = cp.baseType;
else
property.isPrimitiveType = true;
}
else {
property.isNotContainer = true;
if(languageSpecificPrimitives().contains(type))
property.isPrimitiveType = true;
else
property.complexType = property.baseType;
}
return property;
}
public CodegenOperation fromOperation(String path, String httpMethod, Operation operation){
CodegenOperation op = CodegenModelFactory.newInstance(CodegenModelType.OPERATION);
Set<String> imports = new HashSet<String>();
String operationId = operation.getOperationId();
if(operationId == null) {
String tmpPath = path;
tmpPath = tmpPath.replaceAll("\\{", "");
tmpPath = tmpPath.replaceAll("\\}", "");
String[] parts = (tmpPath + "/" + httpMethod).split("/");
StringBuilder builder = new StringBuilder();
if("/".equals(tmpPath)) {
// must be root tmpPath
builder.append("root");
}
for(int i = 0; i < parts.length; i++) {
String part = parts[i];
if(part.length() > 0) {
if(builder.toString().length() == 0)
part = Character.toLowerCase(part.charAt(0)) + part.substring(1);
else
part = initialCaps(part);
builder.append(part);
}
}
operationId = builder.toString();
LOGGER.warn("generated operationId " + operationId);
}
op.path = path;
op.operationId = operationId;
op.summary = escapeText(operation.getSummary());
op.notes = escapeText(operation.getDescription());
op.tags = operation.getTags();
Response methodResponse = null;
if(operation.getConsumes() != null && operation.getConsumes().size() > 0) {
List<Map<String, String>> c = new ArrayList<Map<String, String>>();
int count = 0;
for(String key: operation.getConsumes()) {
Map<String, String> mediaType = new HashMap<String, String>();
mediaType.put("mediaType", key);
count += 1;
if (count < operation.getConsumes().size())
mediaType.put("hasMore", "true");
c.add(mediaType);
}
op.consumes = c;
op.hasConsumes = true;
}
if(operation.getProduces() != null && operation.getProduces().size() > 0) {
List<Map<String, String>> c = new ArrayList<Map<String, String>>();
int count = 0;
for(String key: operation.getProduces()) {
Map<String, String> mediaType = new HashMap<String, String>();
mediaType.put("mediaType", key);
count += 1;
if (count < operation.getProduces().size())
mediaType.put("hasMore", "true");
c.add(mediaType);
}
op.produces = c;
op.hasProduces = true;
}
if(operation.getResponses() != null) {
for(String responseCode: new TreeSet<String>(operation.getResponses().keySet())) {
Response response = operation.getResponses().get(responseCode);
if (responseCode.startsWith("2")) {
// use the first, i.e. the smallest 2xx response status as methodResponse
methodResponse = response;
break;
}
}
if(methodResponse == null && operation.getResponses().keySet().contains("default")) {
methodResponse = operation.getResponses().get("default");
}
for(String responseCode: operation.getResponses().keySet()) {
Response response = operation.getResponses().get(responseCode);
if(response != methodResponse) {
CodegenResponse r = fromResponse(responseCode, response);
op.responses.add(r);
}
for(int i = 0; i < op.responses.size() - 1; i++) {
CodegenResponse r = op.responses.get(i);
r.hasMore = new Boolean(true);
}
}
}
if(methodResponse != null) {
if (methodResponse.getSchema() != null) {
CodegenProperty cm = fromProperty("response", methodResponse.getSchema());
Property responseProperty = methodResponse.getSchema();
if(responseProperty instanceof ArrayProperty) {
ArrayProperty ap = (ArrayProperty) responseProperty;
CodegenProperty innerProperty = fromProperty("response", ap.getItems());
op.returnBaseType = innerProperty.baseType;
}
else {
if(cm.complexType != null)
op.returnBaseType = cm.complexType;
else
op.returnBaseType = cm.baseType;
}
op.examples = toExamples(methodResponse.getExamples());
op.defaultResponse = toDefaultValue(responseProperty);
op.returnType = cm.datatype;
if(cm.isContainer != null) {
op.returnContainer = cm.containerType;
if("map".equals(cm.containerType))
op.isMapContainer = Boolean.TRUE;
else if ("list".equalsIgnoreCase(cm.containerType))
op.isListContainer = Boolean.TRUE;
}
else
op.returnSimpleType = true;
if (languageSpecificPrimitives().contains(op.returnBaseType) || op.returnBaseType == null)
op.returnTypeIsPrimitive = true;
}
addHeaders(methodResponse, op.responseHeaders);
}
if(op.returnBaseType == null) {
op.returnTypeIsPrimitive = true;
op.returnSimpleType = true;
}
if(op.returnBaseType != null &&
!defaultIncludes.contains(op.returnBaseType) &&
!languageSpecificPrimitives.contains(op.returnBaseType))
imports.add(op.returnBaseType);
List<Parameter> parameters = operation.getParameters();
CodegenParameter bodyParam = null;
List<CodegenParameter> allParams = new ArrayList<CodegenParameter>();
List<CodegenParameter> bodyParams = new ArrayList<CodegenParameter>();
List<CodegenParameter> pathParams = new ArrayList<CodegenParameter>();
List<CodegenParameter> queryParams = new ArrayList<CodegenParameter>();
List<CodegenParameter> headerParams = new ArrayList<CodegenParameter>();
List<CodegenParameter> cookieParams = new ArrayList<CodegenParameter>();
List<CodegenParameter> formParams = new ArrayList<CodegenParameter>();
if(parameters != null) {
for(Parameter param : parameters) {
CodegenParameter p = fromParameter(param, imports);
allParams.add(p);
if(param instanceof QueryParameter) {
p.isQueryParam = new Boolean(true);
queryParams.add(p.copy());
}
else if(param instanceof PathParameter) {
p.required = true;
p.isPathParam = new Boolean(true);
pathParams.add(p.copy());
}
else if(param instanceof HeaderParameter) {
p.isHeaderParam = new Boolean(true);
headerParams.add(p.copy());
}
else if(param instanceof CookieParameter) {
p.isCookieParam = new Boolean(true);
cookieParams.add(p.copy());
}
else if(param instanceof BodyParameter) {
p.isBodyParam = new Boolean(true);
bodyParam = p;
bodyParams.add(p.copy());
}
else if(param instanceof FormParameter) {
if("file".equalsIgnoreCase(((FormParameter)param).getType()))
p.isFile = true;
else
p.notFile = true;
p.isFormParam = new Boolean(true);
formParams.add(p.copy());
}
}
}
for(String i: imports) {
if(!defaultIncludes.contains(i) && !languageSpecificPrimitives.contains(i)){
op.imports.add(i);
}
}
op.bodyParam = bodyParam;
op.httpMethod = httpMethod.toUpperCase();
op.allParams = addHasMore(allParams);
op.bodyParams = addHasMore(bodyParams);
op.pathParams = addHasMore(pathParams);
op.queryParams = addHasMore(queryParams);
op.headerParams = addHasMore(headerParams);
// op.cookieParams = cookieParams;
op.formParams = addHasMore(formParams);
// legacy support
op.nickname = operationId;
if(op.allParams.size() > 0)
op.hasParams = true;
op.externalDocs = operation.getExternalDocs();
return op;
}
public CodegenResponse fromResponse(String responseCode, Response response) {
CodegenResponse r = CodegenModelFactory.newInstance(CodegenModelType.RESPONSE);
if("default".equals(responseCode))
r.code = "0";
else
r.code = responseCode;
r.message = response.getDescription();
r.schema = response.getSchema();
r.examples = toExamples(response.getExamples());
return r;
}
public CodegenParameter fromParameter(Parameter param, Set<String> imports) {
CodegenParameter p = CodegenModelFactory.newInstance(CodegenModelType.PARAMETER);
p.baseName = param.getName();
p.description = param.getDescription();
p.required = param.getRequired();
if(param instanceof SerializableParameter) {
SerializableParameter qp = (SerializableParameter) param;
Property property = null;
String collectionFormat = null;
if("array".equals(qp.getType())) {
Property inner = qp.getItems();
if(inner == null) {
LOGGER.warn("warning! No inner type supplied for array parameter \"" + qp.getName() + "\", using String");
inner = new StringProperty().description("//TODO automatically added by swagger-codegen");
}
property = new ArrayProperty(inner);
collectionFormat = qp.getCollectionFormat();
CodegenProperty pr = fromProperty("inner", inner);
p.baseType = pr.datatype;
imports.add(pr.baseType);
}
else
property = PropertyBuilder.build(qp.getType(), qp.getFormat(), null);
if(property == null) {
LOGGER.warn("warning! Property type \"" + qp.getType() + "\" not found for parameter \"" + param.getName() + "\", using String");
property = new StringProperty().description("//TODO automatically added by swagger-codegen. Type was " + qp.getType() + " but not supported");
}
CodegenProperty model = fromProperty(qp.getName(), property);
p.collectionFormat = collectionFormat;
p.dataType = model.datatype;
p.paramName = toParamName(qp.getName());
if(model.complexType != null) {
imports.add(model.complexType);
}
}
else {
BodyParameter bp = (BodyParameter) param;
Model model = bp.getSchema();
if(model instanceof ModelImpl) {
ModelImpl impl = (ModelImpl) model;
CodegenModel cm = fromModel(bp.getName(), impl);
if(cm.emptyVars != null && cm.emptyVars == false) {
p.dataType = getTypeDeclaration(cm.classname);
imports.add(p.dataType);
}
else {
// TODO: missing format, so this will not always work
Property prop = PropertyBuilder.build(impl.getType(), null, null);
CodegenProperty cp = fromProperty("property", prop);
if(cp != null) {
p.dataType = cp.datatype;
}
}
}
else if(model instanceof ArrayModel) {
// to use the built-in model parsing, we unwrap the ArrayModel
// and get a single property from it
ArrayModel impl = (ArrayModel) model;
CodegenModel cm = fromModel(bp.getName(), impl);
// get the single property
ArrayProperty ap = new ArrayProperty().items(impl.getItems());
CodegenProperty cp = fromProperty("inner", ap);
if(cp.complexType != null) {
imports.add(cp.complexType);
}
imports.add(cp.baseType);
p.dataType = cp.datatype;
p.isContainer = true;
}
else{
Model sub = bp.getSchema();
if(sub instanceof RefModel) {
String name = ((RefModel)sub).getSimpleRef();
if(typeMapping.containsKey(name))
name = typeMapping.get(name);
else {
name = toModelName(name);
if(defaultIncludes.contains(name)) {
imports.add(name);
}
imports.add(name);
name = getTypeDeclaration(name);
}
p.dataType = name;
}
}
p.paramName = toParamName(bp.getName());
}
return p;
}
protected List<Map<String, String>> toExamples(Map<String, String> examples) {
if(examples == null)
return null;
List<Map<String, String>> output = new ArrayList<Map<String, String>>();
for(String key: examples.keySet()) {
String value = examples.get(key);
Map<String, String> kv = new HashMap<String, String>();
kv.put("contentType", key);
kv.put("example", value);
output.add(kv);
}
return output;
}
private void addHeaders(Response response, List<CodegenProperty> target) {
if (response.getHeaders() != null) {
for (Map.Entry<String, Property> headers : response.getHeaders().entrySet()) {
target.add(fromProperty(headers.getKey(), headers.getValue()));
}
}
}
private List<CodegenParameter> addHasMore(List<CodegenParameter> objs) {
if(objs != null) {
for(int i = 0; i < objs.size(); i++) {
if(i > 0)
objs.get(i).secondaryParam = new Boolean(true);
if(i < objs.size() - 1)
objs.get(i).hasMore = new Boolean(true);
}
}
return objs;
}
private Map<String, Object> addHasMore(Map<String, Object> objs) {
if(objs != null) {
for(int i = 0; i < objs.size() - 1; i++) {
if(i > 0)
objs.put("secondaryParam", new Boolean(true));
if(i < objs.size() - 1)
objs.put("hasMore", true);
}
}
return objs;
}
public void addOperationToGroup(String tag, String resourcePath, Operation operation, CodegenOperation co, Map<String, List<CodegenOperation>> operations) {
List<CodegenOperation> opList = operations.get(tag);
if(opList == null) {
opList = new ArrayList<CodegenOperation>();
operations.put(tag, opList);
}
opList.add(co);
co.baseName = tag;
}
}

View File

@@ -1,381 +0,0 @@
package com.wordnik.swagger.codegen;
import com.wordnik.swagger.models.*;
import com.wordnik.swagger.util.*;
import com.samskivert.mustache.*;
import org.apache.commons.io.FileUtils;
import java.util.*;
import java.util.regex.*;
import java.io.*;
public class DefaultGenerator implements Generator {
protected CodegenConfig config;
protected ClientOptInput opts = null;
protected Swagger swagger = null;
public Generator opts(ClientOptInput opts) {
this.opts = opts;
this.swagger = opts.getSwagger();
ClientOpts clientOpts = opts.getOpts();
this.config = opts.getConfig();
this.config.additionalProperties().putAll(clientOpts.getProperties());
return this;
}
public List<File> generate() {
if(swagger == null || config == null) {
throw new RuntimeException("missing swagger input or config!");
}
if(System.getProperty("debugSwagger") != null) {
Json.prettyPrint(swagger);
}
List<File> files = new ArrayList<File>();
try {
config.processOpts();
if(swagger.getInfo() != null) {
Info info = swagger.getInfo();
if(info.getTitle() != null)
config.additionalProperties().put("appName", info.getTitle());
if(info.getDescription() != null)
config.additionalProperties().put("appDescription", info.getDescription());
if(info.getContact() != null) {
Contact contact = info.getContact();
config.additionalProperties().put("infoUrl", contact.getUrl());
if(contact.getEmail() != null)
config.additionalProperties().put("infoEmail", contact.getEmail());
}
if(info.getLicense() != null) {
License license = info.getLicense();
if(license.getName() != null)
config.additionalProperties().put("licenseInfo", license.getName());
if(license.getUrl() != null)
config.additionalProperties().put("licenseUrl", license.getUrl());
}
}
StringBuilder hostBuilder = new StringBuilder();
if(swagger.getSchemes() != null && swagger.getSchemes().size() > 0) {
hostBuilder.append(swagger.getSchemes().get(0).toValue());
hostBuilder.append("://");
}
else
hostBuilder.append("https://");
hostBuilder.append(swagger.getHost()).append(swagger.getBasePath());
String basePath = hostBuilder.toString();
List<Object> allOperations = new ArrayList<Object>();
List<Object> allModels = new ArrayList<Object>();
// models
Map<String, Model> definitions = swagger.getDefinitions();
if(definitions != null) {
for(String name: definitions.keySet()) {
Model model = definitions.get(name);
Map<String, Model> modelMap = new HashMap<String, Model>();
modelMap.put(name, model);
Map<String, Object> models = processModels(config, modelMap);
models.putAll(config.additionalProperties());
allModels.add(((List<Object>)models.get("models")).get(0));
for(String templateName : config.modelTemplateFiles().keySet()) {
String suffix = config.modelTemplateFiles().get(templateName);
String filename = config.modelFileFolder() + File.separator + config.toModelFilename(name) + suffix;
String template = readTemplate(config.templateDir() + File.separator + templateName);
Template tmpl = Mustache.compiler()
.withLoader(new Mustache.TemplateLoader() {
public Reader getTemplate (String name) {
return getTemplateReader(config.templateDir() + File.separator + name + ".mustache");
};
})
.defaultValue("")
.compile(template);
writeToFile(filename, tmpl.execute(models));
files.add(new File(filename));
}
}
}
if(System.getProperty("debugModels") != null) {
System.out.println("############ Model info ############");
Json.prettyPrint(allModels);
}
// apis
Map<String, List<CodegenOperation>> paths = processPaths(swagger.getPaths());
for(String tag : paths.keySet()) {
List<CodegenOperation> ops = paths.get(tag);
Map<String, Object> operation = processOperations(config, tag, ops);
operation.put("basePath", basePath);
operation.put("baseName", tag);
operation.put("modelPackage", config.modelPackage());
operation.putAll(config.additionalProperties());
operation.put("classname", config.toApiName(tag));
allOperations.add(operation);
for(String templateName : config.apiTemplateFiles().keySet()) {
String suffix = config.apiTemplateFiles().get(templateName);
String filename = config.apiFileFolder() +
File.separator +
config.toApiFilename(tag) +
suffix;
String template = readTemplate(config.templateDir() + File.separator + templateName);
Template tmpl = Mustache.compiler()
.withLoader(new Mustache.TemplateLoader() {
public Reader getTemplate (String name) {
return getTemplateReader(config.templateDir() + File.separator + name + ".mustache");
};
})
.defaultValue("")
.compile(template);
writeToFile(filename, tmpl.execute(operation));
files.add(new File(filename));
}
}
if(System.getProperty("debugOperations") != null) {
System.out.println("############ Operation info ############");
Json.prettyPrint(allOperations);
}
// supporting files
Map<String, Object> bundle = new HashMap<String, Object>();
bundle.putAll(config.additionalProperties());
bundle.put("apiPackage", config.apiPackage());
Map<String, Object> apis = new HashMap<String, Object>();
apis.put("apis", allOperations);
if(swagger.getBasePath() != null) {
bundle.put("basePath", swagger.getBasePath());
}
bundle.put("apiInfo", apis);
bundle.put("models", allModels);
bundle.put("apiFolder", config.apiPackage().replaceAll("\\.", "/"));
bundle.put("modelPackage", config.modelPackage());
if (swagger.getExternalDocs() != null) {
bundle.put("externalDocs", swagger.getExternalDocs());
}
for(int i = 0; i < allModels.size() - 1; i++) {
HashMap<String, CodegenModel> cm = (HashMap<String, CodegenModel>) allModels.get(i);
CodegenModel m = cm.get("model");
m.hasMoreModels = true;
}
config.postProcessSupportingFileData(bundle);
if(System.getProperty("debugSupportingFiles") != null) {
System.out.println("############ Supporting file info ############");
Json.prettyPrint(bundle);
}
for(SupportingFile support : config.supportingFiles()) {
String outputFolder = config.outputFolder();
if(support.folder != null && !"".equals(support.folder))
outputFolder += File.separator + support.folder;
File of = new File(outputFolder);
if(!of.isDirectory())
of.mkdirs();
String outputFilename = outputFolder + File.separator + support.destinationFilename;
if(support.templateFile.endsWith("mustache")) {
String template = readTemplate(config.templateDir() + File.separator + support.templateFile);
Template tmpl = Mustache.compiler()
.withLoader(new Mustache.TemplateLoader() {
public Reader getTemplate (String name) {
return getTemplateReader(config.templateDir() + File.separator + name + ".mustache");
};
})
.defaultValue("")
.compile(template);
writeToFile(outputFilename, tmpl.execute(bundle));
files.add(new File(outputFilename));
}
else {
String template = readTemplate(config.templateDir() + File.separator + support.templateFile);
FileUtils.writeStringToFile(new File(outputFilename), template);
System.out.println("copying file to " + outputFilename);
files.add(new File(outputFilename));
}
}
config.processSwagger(swagger);
}
catch (Exception e) {
e.printStackTrace();
}
return files;
}
public Map<String, List<CodegenOperation>> processPaths(Map<String, Path> paths) {
Map<String, List<CodegenOperation>> ops = new HashMap<String, List<CodegenOperation>>();
List<String> tags = null;
for(String resourcePath : paths.keySet()) {
Path path = paths.get(resourcePath);
processOperation(resourcePath, "get", path.getGet(), ops);
processOperation(resourcePath, "put", path.getPut(), ops);
processOperation(resourcePath, "post", path.getPost(), ops);
processOperation(resourcePath, "delete", path.getDelete(), ops);
processOperation(resourcePath, "patch", path.getPatch(), ops);
processOperation(resourcePath, "options", path.getOptions(), ops);
}
return ops;
}
public void processOperation(String resourcePath, String httpMethod, Operation operation, Map<String, List<CodegenOperation>> operations) {
if(operation != null) {
List<String> tags = operation.getTags();
if(tags == null) {
tags = new ArrayList<String>();
tags.add("default");
}
for(String tag : tags) {
CodegenOperation co = config.fromOperation(resourcePath, httpMethod, operation);
co.tags = new ArrayList<String>();
co.tags.add(sanitizeTag(tag));
config.addOperationToGroup(sanitizeTag(tag), resourcePath, operation, co, operations);
}
}
}
protected String sanitizeTag(String tag) {
// remove spaces and make strong case
String [] parts = tag.split(" ");
StringBuffer buf = new StringBuffer();
for(String part: parts) {
if(!"".equals(part)) {
buf.append(Character.toUpperCase(part.charAt(0)));
if(part.length() > 1)
buf.append(part.substring(1));
}
}
return buf.toString().replaceAll("[^a-zA-Z ]", "");
}
public File writeToFile(String filename, String contents) throws IOException {
System.out.println("writing file " + filename);
File output = new File(filename);
if(output.getParent() != null && !new File(output.getParent()).exists()) {
File parent = new File(output.getParent());
parent.mkdirs();
}
Writer out = new BufferedWriter(new OutputStreamWriter(
new FileOutputStream(output), "UTF-8"));
out.write(contents);
out.close();
return output;
}
public String readTemplate(String name) {
try{
Reader reader = getTemplateReader(name);
if(reader == null)
throw new RuntimeException("no file found");
java.util.Scanner s = new java.util.Scanner(reader).useDelimiter("\\A");
return s.hasNext() ? s.next() : "";
}
catch(Exception e) {
e.printStackTrace();
}
throw new RuntimeException("can't load template " + name);
}
public Reader getTemplateReader(String name) {
try{
InputStream is = this.getClass().getClassLoader().getResourceAsStream(getCPResourcePath(name));
if(is == null)
is = new FileInputStream(new File(name));
if(is == null)
throw new RuntimeException("no file found");
return new InputStreamReader(is);
}
catch(Exception e) {
e.printStackTrace();
}
throw new RuntimeException("can't load template " + name);
}
private String getCPResourcePath(String name) {
if (!"/".equals(File.separator))
return name.replaceAll(Pattern.quote(File.separator), "/");
return name;
}
public Map<String, Object> processOperations(CodegenConfig config, String tag, List<CodegenOperation> ops) {
Map<String, Object> operations = new HashMap<String, Object>();
Map<String, Object> objs = new HashMap<String, Object>();
objs.put("classname", config.toApiName(tag));
objs.put("operation", ops);
operations.put("operations", objs);
operations.put("package", config.apiPackage());
Set<String> allImports = new LinkedHashSet<String>();
for(CodegenOperation op: ops) {
allImports.addAll(op.imports);
}
List<Map<String, String>> imports = new ArrayList<Map<String, String>>();
for(String i: allImports) {
Map<String, String> im = new LinkedHashMap<String, String>();
String m = config.importMapping().get(i);
if(m == null)
m = config.toModelImport(i);
if(m != null) {
im.put("import", m);
imports.add(im);
}
}
operations.put("imports", imports);
config.postProcessOperations(operations);
return operations;
}
public Map<String, Object> processModels(CodegenConfig config, Map<String, Model> definitions) {
Map<String, Object> objs = new HashMap<String, Object>();
objs.put("package", config.modelPackage());
List<Object> models = new ArrayList<Object>();
List<Object> model = new ArrayList<Object>();
Set<String> allImports = new LinkedHashSet<String>();
for(String key: definitions.keySet()) {
Model mm = definitions.get(key);
CodegenModel cm = config.fromModel(key, mm);
Map<String, Object> mo = new HashMap<String, Object>();
mo.put("model", cm);
models.add(mo);
allImports.addAll(cm.imports);
}
objs.put("models", models);
List<Map<String, String>> imports = new ArrayList<Map<String, String>>();
for(String i: allImports) {
Map<String, String> im = new LinkedHashMap<String, String>();
String m = config.importMapping().get(i);
if(m == null)
m = config.toModelImport(i);
if(m != null && !config.defaultIncludes().contains(m)) {
im.put("import", m);
imports.add(im);
}
// add instantiation types
m = config.instantiationTypes().get(i);
if(m != null && !config.defaultIncludes().contains(m)) {
im.put("import", m);
imports.add(im);
}
}
objs.put("imports", imports);
config.postProcessModels(objs);
return objs;
}
}

View File

@@ -1,11 +0,0 @@
package com.wordnik.swagger.codegen;
import com.wordnik.swagger.models.Swagger;
import java.io.File;
import java.util.List;
public interface Generator {
Generator opts(ClientOptInput opts);
List<File> generate();
}

View File

@@ -1,13 +0,0 @@
package com.wordnik.swagger.codegen;
public class SupportingFile {
public String templateFile;
public String folder;
public String destinationFilename;
public SupportingFile(String templateFile, String folder, String destinationFilename) {
this.templateFile = templateFile;
this.folder = folder;
this.destinationFilename = destinationFilename;
}
}

View File

@@ -1,6 +0,0 @@
package com.wordnik.swagger.codegen.auth;
public interface AuthMethod {
String getType();
void setType(String type);
}

View File

@@ -1,86 +0,0 @@
#---------------------------------------------------------------------
# Global settings
#---------------------------------------------------------------------
global
log 127.0.0.1 local2
chroot /var/lib/haproxy
pidfile /var/run/haproxy.pid
maxconn 4000
user haproxy
group haproxy
daemon
#---------------------------------------------------------------------
# common defaults that all the 'listen' and 'backend' sections will
# use if not designated in their block
#---------------------------------------------------------------------
defaults
mode http
log global
option dontlognull
option httpclose
option httplog
option forwardfor
option redispatch
timeout connect 10000 # default 10 second time out if a backend is not found
timeout client 300000
timeout server 300000
maxconn 60000
retries 3
#---------------------------------------------------------------------
# main frontend which proxys to the backends
#---------------------------------------------------------------------
frontend main *:80
default_backend app
acl is_swagger_online hdr_beg(host) -i online.swagger.io
acl is_swagger_io hdr_beg(host) -i swagger.io
acl is_old hdr_beg(host) -i swagger.wordnik.com
acl is_old_editor hdr_beg(host) -i editor.swagger.wordnik.com
acl is_validator_swagger path_beg /swagger.json
# online spec validator
reqrep ([^\ ]*)\ /validator/(.*) \1\ /validator/validator/\2 if is_swagger_online
# something that didn't work
reqrep ([^\ ]*)\ /swagger.json(.*) \1\ /validator/swagger.json if is_validator_swagger
# swagger schema
reqrep ^([^\ :]*)\ /v2/schema.json(.*) \1\ /swagger-api/swagger-spec/master/schemas/v2.0/schema.json\2
acl is_swagger_spec path_beg /swagger-api/swagger-spec
# swagger docs
reqrep ^([^\ :]*)\ /swagger-core/documentation/annotations/apidocs/current(.*) \1\ /swagger-core/apidocs/\2
acl is_swagger_docs path_beg /swagger-core/apidocs
use_backend github_swagger_io if is_swagger_docs
use_backend validator if is_swagger_online
use_backend validator if is_validator_swagger
use_backend github_swagger_io if is_swagger_io !is_swagger_spec
use_backend github_swagger_spec if is_swagger_spec
redirect location http://editor.swagger.io if is_old_editor
redirect location http://swagger.io if is_old
#---------------------------------------------------------------------
# round robin balancing between the various backends
#---------------------------------------------------------------------
backend github_swagger_io
balance roundrobin
server gh1 swagger-api.github.io:80 check
backend github_swagger_spec
http-request set-header Host raw.githubusercontent.com
rspirep ^Content-type:(.*) Content-Type:\ application/json
rspirep ^Access-Control-Allow-Origin:(.*) Access-Control-Allow-Origin:*
balance roundrobin
server gh2 raw.githubusercontent.com:443 check ssl verify none
backend validator
balance roundrobin
server app1 127.0.0.1:8000 check
backend app
balance roundrobin
server app1 127.0.0.1:8000 check

View File

@@ -1,110 +0,0 @@
package com.wordnik.swagger.codegen.languages;
import com.wordnik.swagger.codegen.*;
import com.wordnik.swagger.models.properties.*;
import java.util.*;
import java.io.File;
public class AndroidClientCodegen extends DefaultCodegen implements CodegenConfig {
protected String invokerPackage = "io.swagger.client";
protected String groupId = "io.swagger";
protected String artifactId = "swagger-client";
protected String artifactVersion = "1.0.0";
protected String sourceFolder = "src/main/java";
public CodegenType getTag() {
return CodegenType.CLIENT;
}
public String getName() {
return "android";
}
public String getHelp() {
return "Generates an Android client library.";
}
public AndroidClientCodegen() {
super();
outputFolder = "generated-code/android";
modelTemplateFiles.put("model.mustache", ".java");
apiTemplateFiles.put("api.mustache", ".java");
templateDir = "android-java";
apiPackage = "io.swagger.client.api";
modelPackage = "io.swagger.client.model";
additionalProperties.put("invokerPackage", invokerPackage);
additionalProperties.put("groupId", groupId);
additionalProperties.put("artifactId", artifactId);
additionalProperties.put("artifactVersion", artifactVersion);
supportingFiles.add(new SupportingFile("pom.mustache", "", "pom.xml"));
supportingFiles.add(new SupportingFile("apiInvoker.mustache",
(sourceFolder + File.separator + invokerPackage).replace(".", java.io.File.separator), "ApiInvoker.java"));
supportingFiles.add(new SupportingFile("httpPatch.mustache",
(sourceFolder + File.separator + invokerPackage).replace(".", java.io.File.separator), "HttpPatch.java"));
supportingFiles.add(new SupportingFile("jsonUtil.mustache",
(sourceFolder + File.separator + invokerPackage).replace(".", java.io.File.separator), "JsonUtil.java"));
supportingFiles.add(new SupportingFile("apiException.mustache",
(sourceFolder + File.separator + invokerPackage).replace(".", java.io.File.separator), "ApiException.java"));
languageSpecificPrimitives = new HashSet<String>(
Arrays.asList(
"String",
"boolean",
"Boolean",
"Double",
"Integer",
"Long",
"Float",
"Object")
);
instantiationTypes.put("array", "ArrayList");
instantiationTypes.put("map", "HashMap");
}
@Override
public String escapeReservedWord(String name) {
return "_" + name;
}
@Override
public String apiFileFolder() {
return outputFolder + "/" + sourceFolder + "/" + apiPackage().replaceAll("\\.", "/");
}
public String modelFileFolder() {
return outputFolder + "/" + sourceFolder + "/" + modelPackage().replaceAll("\\.", "/");
}
@Override
public String getTypeDeclaration(Property p) {
if(p instanceof ArrayProperty) {
ArrayProperty ap = (ArrayProperty) p;
Property inner = ap.getItems();
return getSwaggerType(p) + "<" + getTypeDeclaration(inner) + ">";
}
else if (p instanceof MapProperty) {
MapProperty mp = (MapProperty) p;
Property inner = mp.getAdditionalProperties();
return getSwaggerType(p) + "<String, " + getTypeDeclaration(inner) + ">";
}
return super.getTypeDeclaration(p);
}
@Override
public String getSwaggerType(Property p) {
String swaggerType = super.getSwaggerType(p);
String type = null;
if(typeMapping.containsKey(swaggerType)) {
type = typeMapping.get(swaggerType);
if(languageSpecificPrimitives.contains(type))
return toModelName(type);
}
else
type = swaggerType;
return toModelName(type);
}
}

View File

@@ -1,119 +0,0 @@
package com.wordnik.swagger.codegen.languages;
import com.wordnik.swagger.codegen.*;
import com.wordnik.swagger.models.properties.*;
import java.util.*;
import java.io.File;
public class JavaClientCodegen extends DefaultCodegen implements CodegenConfig {
protected String invokerPackage = "io.swagger.client";
protected String groupId = "io.swagger";
protected String artifactId = "swagger-client";
protected String artifactVersion = "1.0.0";
protected String sourceFolder = "src/main/java";
public CodegenType getTag() {
return CodegenType.CLIENT;
}
public String getName() {
return "java";
}
public String getHelp() {
return "Generates a Java client library.";
}
public JavaClientCodegen() {
super();
outputFolder = "generated-code/java";
modelTemplateFiles.put("model.mustache", ".java");
apiTemplateFiles.put("api.mustache", ".java");
templateDir = "Java";
apiPackage = "io.swagger.client.api";
modelPackage = "io.swagger.client.model";
reservedWords = new HashSet<String> (
Arrays.asList(
"abstract", "continue", "for", "new", "switch", "assert",
"default", "if", "package", "synchronized", "boolean", "do", "goto", "private",
"this", "break", "double", "implements", "protected", "throw", "byte", "else",
"import", "public", "throws", "case", "enum", "instanceof", "return", "transient",
"catch", "extends", "int", "short", "try", "char", "final", "interface", "static",
"void", "class", "finally", "long", "strictfp", "volatile", "const", "float",
"native", "super", "while")
);
additionalProperties.put("invokerPackage", invokerPackage);
additionalProperties.put("groupId", groupId);
additionalProperties.put("artifactId", artifactId);
additionalProperties.put("artifactVersion", artifactVersion);
supportingFiles.add(new SupportingFile("pom.mustache", "", "pom.xml"));
supportingFiles.add(new SupportingFile("apiInvoker.mustache",
(sourceFolder + File.separator + invokerPackage).replace(".", java.io.File.separator), "ApiInvoker.java"));
supportingFiles.add(new SupportingFile("JsonUtil.mustache",
(sourceFolder + File.separator + invokerPackage).replace(".", java.io.File.separator), "JsonUtil.java"));
supportingFiles.add(new SupportingFile("apiException.mustache",
(sourceFolder + File.separator + invokerPackage).replace(".", java.io.File.separator), "ApiException.java"));
languageSpecificPrimitives = new HashSet<String>(
Arrays.asList(
"String",
"boolean",
"Boolean",
"Double",
"Integer",
"Long",
"Float",
"Object")
);
instantiationTypes.put("array", "ArrayList");
instantiationTypes.put("map", "HashMap");
}
@Override
public String escapeReservedWord(String name) {
return "_" + name;
}
@Override
public String apiFileFolder() {
return outputFolder + "/" + sourceFolder + "/" + apiPackage().replaceAll("\\.", "/");
}
public String modelFileFolder() {
return outputFolder + "/" + sourceFolder + "/" + modelPackage().replaceAll("\\.", "/");
}
@Override
public String getTypeDeclaration(Property p) {
if(p instanceof ArrayProperty) {
ArrayProperty ap = (ArrayProperty) p;
Property inner = ap.getItems();
return getSwaggerType(p) + "<" + getTypeDeclaration(inner) + ">";
}
else if (p instanceof MapProperty) {
MapProperty mp = (MapProperty) p;
Property inner = mp.getAdditionalProperties();
return getSwaggerType(p) + "<String, " + getTypeDeclaration(inner) + ">";
}
return super.getTypeDeclaration(p);
}
@Override
public String getSwaggerType(Property p) {
String swaggerType = super.getSwaggerType(p);
String type = null;
if(typeMapping.containsKey(swaggerType)) {
type = typeMapping.get(swaggerType);
if(languageSpecificPrimitives.contains(type))
return toModelName(type);
}
else
type = swaggerType;
return toModelName(type);
}
}

View File

@@ -1,149 +0,0 @@
package com.wordnik.swagger.codegen.languages;
import com.wordnik.swagger.models.Operation;
import com.wordnik.swagger.models.Path;
import com.wordnik.swagger.util.Json;
import com.wordnik.swagger.codegen.*;
import com.wordnik.swagger.models.properties.*;
import java.util.*;
import java.io.File;
public class JaxRSServerCodegen extends JavaClientCodegen implements CodegenConfig {
protected String invokerPackage = "io.swagger.api";
protected String groupId = "io.swagger";
protected String artifactId = "swagger-server";
protected String artifactVersion = "1.0.0";
protected String sourceFolder = "src/main/java";
protected String title = "Swagger Server";
public CodegenType getTag() {
return CodegenType.SERVER;
}
public String getName() {
return "jaxrs";
}
public String getHelp() {
return "Generates a Java JAXRS Server application.";
}
public JaxRSServerCodegen() {
super();
outputFolder = "generated-code/javaJaxRS";
modelTemplateFiles.put("model.mustache", ".java");
apiTemplateFiles.put("api.mustache", ".java");
templateDir = "JavaJaxRS";
apiPackage = "io.swagger.api";
modelPackage = "io.swagger.model";
additionalProperties.put("invokerPackage", invokerPackage);
additionalProperties.put("groupId", groupId);
additionalProperties.put("artifactId", artifactId);
additionalProperties.put("artifactVersion", artifactVersion);
additionalProperties.put("title", title);
supportingFiles.clear();
supportingFiles.add(new SupportingFile("pom.mustache", "", "pom.xml"));
supportingFiles.add(new SupportingFile("README.mustache", "", "README.md"));
supportingFiles.add(new SupportingFile("ApiException.mustache",
(sourceFolder + File.separator + apiPackage).replace(".", java.io.File.separator), "ApiException.java"));
supportingFiles.add(new SupportingFile("ApiOriginFilter.mustache",
(sourceFolder + File.separator + apiPackage).replace(".", java.io.File.separator), "ApiOriginFilter.java"));
supportingFiles.add(new SupportingFile("ApiResponseMessage.mustache",
(sourceFolder + File.separator + apiPackage).replace(".", java.io.File.separator), "ApiResponseMessage.java"));
supportingFiles.add(new SupportingFile("NotFoundException.mustache",
(sourceFolder + File.separator + apiPackage).replace(".", java.io.File.separator), "NotFoundException.java"));
supportingFiles.add(new SupportingFile("web.mustache",
("src/main/webapp/WEB-INF"), "web.xml"));
languageSpecificPrimitives = new HashSet<String>(
Arrays.asList(
"String",
"boolean",
"Boolean",
"Double",
"Integer",
"Long",
"Float")
);
}
@Override
public String getTypeDeclaration(Property p) {
if(p instanceof ArrayProperty) {
ArrayProperty ap = (ArrayProperty) p;
Property inner = ap.getItems();
return getSwaggerType(p) + "<" + getTypeDeclaration(inner) + ">";
}
else if (p instanceof MapProperty) {
MapProperty mp = (MapProperty) p;
Property inner = mp.getAdditionalProperties();
return getTypeDeclaration(inner);
}
return super.getTypeDeclaration(p);
}
@Override
public void addOperationToGroup(String tag, String resourcePath, Operation operation, CodegenOperation co, Map<String, List<CodegenOperation>> operations) {
String basePath = resourcePath;
if(basePath.startsWith("/"))
basePath = basePath.substring(1);
int pos = basePath.indexOf("/");
if(pos > 0)
basePath = basePath.substring(0, pos);
if(basePath == "")
basePath = "default";
else {
if(co.path.startsWith("/" + basePath))
co.path = co.path.substring(("/" + basePath).length());
co.subresourceOperation = !co.path.isEmpty();
}
List<CodegenOperation> opList = operations.get(basePath);
if(opList == null) {
opList = new ArrayList<CodegenOperation>();
operations.put(basePath, opList);
}
opList.add(co);
co.baseName = basePath;
}
public Map<String, Object> postProcessOperations(Map<String, Object> objs) {
Map<String, Object> operations = (Map<String, Object>)objs.get("operations");
if(operations != null) {
List<CodegenOperation> ops = (List<CodegenOperation>) operations.get("operation");
for(CodegenOperation operation : ops) {
if(operation.returnType == null)
operation.returnType = "Void";
else if(operation.returnType.startsWith("List")) {
String rt = operation.returnType;
int end = rt.lastIndexOf(">");
if(end > 0) {
operation.returnType = rt.substring("List<".length(), end);
operation.returnContainer = "List";
}
}
else if(operation.returnType.startsWith("Map")) {
String rt = operation.returnType;
int end = rt.lastIndexOf(">");
if(end > 0) {
operation.returnType = rt.substring("Map<".length(), end);
operation.returnContainer = "Map";
}
}
else if(operation.returnType.startsWith("Set")) {
String rt = operation.returnType;
int end = rt.lastIndexOf(">");
if(end > 0) {
operation.returnType = rt.substring("Set<".length(), end);
operation.returnContainer = "Set";
}
}
}
}
return objs;
}
}

View File

@@ -1,110 +0,0 @@
package com.wordnik.swagger.codegen.languages;
import com.wordnik.swagger.codegen.*;
import com.wordnik.swagger.models.Model;
import com.wordnik.swagger.models.properties.*;
import com.wordnik.swagger.util.Json;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.node.*;
import java.util.*;
import java.io.File;
public class NodeJSServerCodegen extends DefaultCodegen implements CodegenConfig {
protected String invokerPackage = "com.wordnik.client";
protected String groupId = "com.wordnik";
protected String artifactId = "swagger-client";
protected String artifactVersion = "1.0.0";
public CodegenType getTag() {
return CodegenType.SERVER;
}
public String getName() {
return "nodejs";
}
public String getHelp() {
return "Generates a node.js server application compatible with the 1.2 swagger specification.";
}
public NodeJSServerCodegen() {
super();
outputFolder = "generated-code/nodejs";
apiTemplateFiles.put("api.mustache", ".js");
templateDir = "nodejs";
apiPackage = "app.apis";
modelPackage = "app";
additionalProperties.put("invokerPackage", invokerPackage);
additionalProperties.put("groupId", groupId);
additionalProperties.put("artifactId", artifactId);
additionalProperties.put("artifactVersion", artifactVersion);
supportingFiles.add(new SupportingFile("package.mustache", "", "package.json"));
supportingFiles.add(new SupportingFile("models.mustache", modelPackage, "models.js"));
supportingFiles.add(new SupportingFile("main.mustache", "", "main.js"));
supportingFiles.add(new SupportingFile("README.mustache", "", "README.md"));
languageSpecificPrimitives = new HashSet<String>(
Arrays.asList(
"String",
"boolean",
"Boolean",
"Double",
"Integer",
"Long",
"Float")
);
typeMapping.put("array", "array");
}
@Override
public String escapeReservedWord(String name) {
return "_" + name;
}
@Override
public Map<String, Object> postProcessSupportingFileData(Map<String, Object> objs) {
List<Map<String, Object>> o = (List<Map<String, Object>>)objs.get("models");
for(Map<String, Object> modelMap : o) {
try {
CodegenModel m = (CodegenModel) modelMap.get("model");
ObjectNode on = (ObjectNode) Json.mapper().readTree(m.modelJson);
// inject the id field
on.put("id", m.name);
// remove the definitions qualifier with this nasty hack
m.modelJson = Json.pretty(on).replaceAll("\"#/definitions/", "\"");
}
catch (Exception e) {
e.printStackTrace();
// skip conversion
}
}
return objs;
}
@Override
public String apiFileFolder() {
return outputFolder + File.separator + apiPackage().replaceAll("\\.", File.separator);
}
public String modelFileFolder() {
return outputFolder + File.separator + modelPackage().replaceAll("\\.", File.separator);
}
@Override
public String getSwaggerType(Property p) {
String swaggerType = super.getSwaggerType(p);
String type = null;
if(typeMapping.containsKey(swaggerType)) {
return typeMapping.get(swaggerType);
}
else
type = swaggerType;
return toModelName(type);
}
}

View File

@@ -1,221 +0,0 @@
package com.wordnik.swagger.codegen.languages;
import com.wordnik.swagger.util.Json;
import com.wordnik.swagger.codegen.*;
import com.wordnik.swagger.models.properties.*;
import java.util.*;
import java.io.File;
public class ObjcClientCodegen extends DefaultCodegen implements CodegenConfig {
protected Set<String> foundationClasses = new HashSet<String>();
protected String sourceFolder = "client";
protected static String PREFIX = "SWG";
public CodegenType getTag() {
return CodegenType.CLIENT;
}
public String getName() {
return "objc";
}
public String getHelp() {
return "Generates an Objective-C client library.";
}
public ObjcClientCodegen() {
super();
outputFolder = "generated-code/objc";
modelTemplateFiles.put("model-header.mustache", ".h");
modelTemplateFiles.put("model-body.mustache", ".m");
apiTemplateFiles.put("api-header.mustache", ".h");
apiTemplateFiles.put("api-body.mustache", ".m");
templateDir = "objc";
modelPackage = "";
additionalProperties.put("projectName", "swaggerClient");
defaultIncludes = new HashSet<String>(
Arrays.asList(
"bool",
"int",
"NSString",
"NSObject",
"NSArray",
"NSNumber",
"NSDictionary",
"NSMutableArray",
"NSMutableDictionary")
);
languageSpecificPrimitives = new HashSet<String>(
Arrays.asList(
"NSNumber",
"NSString",
"NSObject",
"bool")
);
reservedWords = new HashSet<String>(
Arrays.asList(
"void", "char", "short", "int", "void", "char", "short", "int",
"long", "float", "double", "signed", "unsigned", "id", "const",
"volatile", "in", "out", "inout", "bycopy", "byref", "oneway",
"self", "super", "description"
));
typeMapping = new HashMap<String, String>();
typeMapping.put("enum", "NSString");
typeMapping.put("Date", "SWGDate");
typeMapping.put("DateTime", "SWGDate");
// typeMapping.put("Date", "SWGDate");
typeMapping.put("boolean", "NSNumber");
typeMapping.put("string", "NSString");
typeMapping.put("integer", "NSNumber");
typeMapping.put("int", "NSNumber");
typeMapping.put("float", "NSNumber");
typeMapping.put("long", "NSNumber");
typeMapping.put("double", "NSNumber");
typeMapping.put("array", "NSArray");
typeMapping.put("map", "NSDictionary");
typeMapping.put("number", "NSNumber");
typeMapping.put("List", "NSArray");
typeMapping.put("object", "NSObject");
importMapping = new HashMap<String, String> ();
importMapping.put("Date", "SWGDate");
foundationClasses = new HashSet<String> (
Arrays.asList(
"NSNumber",
"NSObject",
"NSString",
"NSDictionary")
);
instantiationTypes.put("array", "NSMutableArray");
instantiationTypes.put("map", "NSMutableDictionary");
supportingFiles.add(new SupportingFile("SWGObject.h", sourceFolder, "SWGObject.h"));
supportingFiles.add(new SupportingFile("SWGObject.m", sourceFolder, "SWGObject.m"));
supportingFiles.add(new SupportingFile("SWGApiClient.h", sourceFolder, "SWGApiClient.h"));
supportingFiles.add(new SupportingFile("SWGApiClient.m", sourceFolder, "SWGApiClient.m"));
supportingFiles.add(new SupportingFile("SWGFile.h", sourceFolder, "SWGFile.h"));
supportingFiles.add(new SupportingFile("SWGFile.m", sourceFolder, "SWGFile.m"));
supportingFiles.add(new SupportingFile("SWGDate.h", sourceFolder, "SWGDate.h"));
supportingFiles.add(new SupportingFile("SWGDate.m", sourceFolder, "SWGDate.m"));
supportingFiles.add(new SupportingFile("Podfile.mustache", "", "Podfile"));
}
@Override
public String toInstantiationType(Property p) {
if (p instanceof MapProperty) {
MapProperty ap = (MapProperty) p;
String inner = getSwaggerType(ap.getAdditionalProperties());
return instantiationTypes.get("map");
}
else if (p instanceof ArrayProperty) {
ArrayProperty ap = (ArrayProperty) p;
String inner = getSwaggerType(ap.getItems());
return instantiationTypes.get("array");
}
else
return null;
}
@Override
public String getTypeDeclaration(String name) {
if(languageSpecificPrimitives.contains(name) && !foundationClasses.contains(name))
return name;
else
return name + "*";
}
@Override
public String getSwaggerType(Property p) {
String swaggerType = super.getSwaggerType(p);
String type = null;
if(typeMapping.containsKey(swaggerType)) {
type = typeMapping.get(swaggerType);
if(languageSpecificPrimitives.contains(type) && !foundationClasses.contains(type))
return toModelName(type);
}
else
type = swaggerType;
return toModelName(type);
}
@Override
public String getTypeDeclaration(Property p) {
String swaggerType = getSwaggerType(p);
if(languageSpecificPrimitives.contains(swaggerType) && !foundationClasses.contains(swaggerType))
return toModelName(swaggerType);
else
return swaggerType + "*";
}
@Override
public String toModelName(String type) {
if(typeMapping.keySet().contains(type) ||
foundationClasses.contains(type) ||
importMapping.values().contains(type) ||
defaultIncludes.contains(type) ||
languageSpecificPrimitives.contains(type)) {
return Character.toUpperCase(type.charAt(0)) + type.substring(1);
}
else {
return PREFIX + Character.toUpperCase(type.charAt(0)) + type.substring(1);
}
}
@Override
public String toModelImport(String name) {
if("".equals(modelPackage()))
return name;
else
return modelPackage() + "." + name;
}
@Override
public String toDefaultValue(Property p) {
return null;
}
@Override
public String apiFileFolder() {
return outputFolder + File.separator + sourceFolder;
}
@Override
public String modelFileFolder() {
return outputFolder + File.separator + sourceFolder;
}
@Override
public String toModelFilename(String name) {
return PREFIX + initialCaps(name);
}
@Override
public String toApiName(String name) {
return PREFIX + initialCaps(name) + "Api";
}
public String toApiFilename(String name) {
return PREFIX + initialCaps(name) + "Api";
}
@Override
public String toVarName(String name) {
String paramName = name.replaceAll("[^a-zA-Z0-9_]","");
if(paramName.startsWith("new") || reservedWords.contains(paramName)) {
return escapeReservedWord(paramName);
}
else
return paramName;
}
public String escapeReservedWord(String name) {
return "_" + name;
}
}

View File

@@ -1,114 +0,0 @@
package com.wordnik.swagger.codegen.languages;
import com.wordnik.swagger.codegen.*;
import com.wordnik.swagger.util.Json;
import com.wordnik.swagger.models.properties.*;
import java.util.*;
import java.io.File;
public class PhpClientCodegen extends DefaultCodegen implements CodegenConfig {
protected String invokerPackage = "com.wordnik.client";
protected String groupId = "com.wordnik";
protected String artifactId = "swagger-client";
protected String artifactVersion = "1.0.0";
public CodegenType getTag() {
return CodegenType.CLIENT;
}
public String getName() {
return "php";
}
public String getHelp() {
return "Generates a PHP client library.";
}
public PhpClientCodegen() {
super();
modelPackage = "models";
outputFolder = "generated-code/php";
modelTemplateFiles.put("model.mustache", ".php");
apiTemplateFiles.put("api.mustache", ".php");
templateDir = "php";
typeMapping.clear();
languageSpecificPrimitives.clear();
reservedWords = new HashSet<String> (
Arrays.asList(
"int")
);
additionalProperties.put("invokerPackage", invokerPackage);
additionalProperties.put("groupId", groupId);
additionalProperties.put("artifactId", artifactId);
additionalProperties.put("artifactVersion", artifactVersion);
languageSpecificPrimitives.add("int");
languageSpecificPrimitives.add("array");
languageSpecificPrimitives.add("map");
languageSpecificPrimitives.add("string");
languageSpecificPrimitives.add("DateTime");
typeMapping.put("long", "int");
typeMapping.put("integer", "int");
typeMapping.put("Array", "array");
typeMapping.put("String", "string");
typeMapping.put("List", "array");
typeMapping.put("map", "map");
supportingFiles.add(new SupportingFile("Swagger.mustache", "", "Swagger.php"));
}
@Override
public String escapeReservedWord(String name) {
return "_" + name;
}
@Override
public String apiFileFolder() {
return outputFolder + "/" + apiPackage().replaceAll("\\.", "/");
}
public String modelFileFolder() {
return outputFolder + "/" + modelPackage().replaceAll("\\.", "/");
}
@Override
public String getTypeDeclaration(Property p) {
if(p instanceof ArrayProperty) {
ArrayProperty ap = (ArrayProperty) p;
Property inner = ap.getItems();
return getSwaggerType(p) + "[" + getTypeDeclaration(inner) + "]";
}
else if (p instanceof MapProperty) {
MapProperty mp = (MapProperty) p;
Property inner = mp.getAdditionalProperties();
return getSwaggerType(p) + "[string," + getTypeDeclaration(inner) + "]";
}
return super.getTypeDeclaration(p);
}
@Override
public String getSwaggerType(Property p) {
String swaggerType = super.getSwaggerType(p);
String type = null;
if(typeMapping.containsKey(swaggerType)) {
type = typeMapping.get(swaggerType);
if(languageSpecificPrimitives.contains(type)) {
return type;
}
}
else
type = swaggerType;
if(type == null)
return null;
return type;
}
public String toDefaultValue(Property p) {
return "null";
}
}

View File

@@ -1,109 +0,0 @@
package com.wordnik.swagger.codegen.languages;
import com.wordnik.swagger.codegen.*;
import com.wordnik.swagger.models.properties.*;
import java.io.File;
public class PythonClientCodegen extends DefaultCodegen implements CodegenConfig {
String module = "client";
public CodegenType getTag() {
return CodegenType.CLIENT;
}
public String getName() {
return "python";
}
public String getHelp() {
return "Generates a Python client library.";
}
public PythonClientCodegen() {
super();
outputFolder = "generated-code/python";
modelTemplateFiles.put("model.mustache", ".py");
apiTemplateFiles.put("api.mustache", ".py");
templateDir = "python";
apiPackage = module;
modelPackage = module + ".models";
languageSpecificPrimitives.clear();
languageSpecificPrimitives.add("int");
languageSpecificPrimitives.add("float");
languageSpecificPrimitives.add("long");
languageSpecificPrimitives.add("list");
languageSpecificPrimitives.add("bool");
languageSpecificPrimitives.add("str");
languageSpecificPrimitives.add("datetime");
typeMapping.clear();
typeMapping.put("integer", "int");
typeMapping.put("float", "float");
typeMapping.put("long", "long");
typeMapping.put("double", "float");
typeMapping.put("array", "list");
typeMapping.put("map", "map");
typeMapping.put("boolean", "bool");
typeMapping.put("string", "str");
typeMapping.put("date", "datetime");
supportingFiles.add(new SupportingFile("README.mustache", "", "README.md"));
supportingFiles.add(new SupportingFile("swagger.mustache", module, "swagger.py"));
supportingFiles.add(new SupportingFile("__init__.mustache", module, "__init__.py"));
supportingFiles.add(new SupportingFile("__init__.mustache", modelPackage.replaceAll("\\.", File.separator), "__init__.py"));
}
@Override
public String escapeReservedWord(String name) {
return "_" + name;
}
@Override
public String apiFileFolder() {
return outputFolder + "/" + apiPackage().replaceAll("\\.", "/");
}
public String modelFileFolder() {
return outputFolder + "/" + modelPackage().replaceAll("\\.", "/");
}
@Override
public String getTypeDeclaration(Property p) {
if(p instanceof ArrayProperty) {
ArrayProperty ap = (ArrayProperty) p;
Property inner = ap.getItems();
return getSwaggerType(p) + "[" + getTypeDeclaration(inner) + "]";
}
else if (p instanceof MapProperty) {
MapProperty mp = (MapProperty) p;
Property inner = mp.getAdditionalProperties();
return getSwaggerType(p) + "(String, " + getTypeDeclaration(inner) + ")";
}
return super.getTypeDeclaration(p);
}
@Override
public String getSwaggerType(Property p) {
String swaggerType = super.getSwaggerType(p);
String type = null;
if(typeMapping.containsKey(swaggerType)) {
type = typeMapping.get(swaggerType);
if(languageSpecificPrimitives.contains(type)) {
return type;
}
}
else
type = swaggerType;
return type;
}
public String toDefaultValue(Property p) {
// TODO: Support Python def value
return "null";
}
}

View File

@@ -1,192 +0,0 @@
package com.wordnik.swagger.codegen.languages;
import com.wordnik.swagger.codegen.*;
import com.wordnik.swagger.models.properties.*;
import java.util.*;
import java.io.File;
public class ScalaClientCodegen extends DefaultCodegen implements CodegenConfig {
protected String invokerPackage = "io.swagger.client";
protected String groupId = "com.wordnik";
protected String artifactId = "swagger-client";
protected String artifactVersion = "1.0.0";
protected String sourceFolder = "src/main/java";
protected String authScheme = "";
protected boolean authPreemptive = false;
protected boolean asyncHttpClient = !authScheme.isEmpty();
public CodegenType getTag() {
return CodegenType.CLIENT;
}
public String getName() {
return "scala";
}
public String getHelp() {
return "Generates a Scala client library.";
}
public ScalaClientCodegen() {
super();
outputFolder = "generated-code/scala";
modelTemplateFiles.put("model.mustache", ".scala");
apiTemplateFiles.put("api.mustache", ".scala");
templateDir = "scala";
apiPackage = "io.swagger.client.api";
modelPackage = "io.swagger.client.model";
reservedWords = new HashSet<String> (
Arrays.asList(
"abstract", "case", "catch", "class", "def", "do", "else", "extends",
"false", "final", "finally", "for", "forSome", "if", "implicit",
"import", "lazy", "match", "new", "null", "object", "override", "package",
"private", "protected", "return", "sealed", "super", "this", "throw",
"trait", "try", "true", "type", "val", "var", "while", "with", "yield")
);
additionalProperties.put("invokerPackage", invokerPackage);
additionalProperties.put("groupId", groupId);
additionalProperties.put("artifactId", artifactId);
additionalProperties.put("artifactVersion", artifactVersion);
additionalProperties.put("asyncHttpClient", asyncHttpClient);
additionalProperties.put("authScheme", authScheme);
additionalProperties.put("authPreemptive", authPreemptive);
supportingFiles.add(new SupportingFile("pom.mustache", "", "pom.xml"));
supportingFiles.add(new SupportingFile("apiInvoker.mustache",
(sourceFolder + File.separator + invokerPackage).replace(".", java.io.File.separator), "ApiInvoker.scala"));
importMapping.remove("List");
importMapping.remove("Set");
importMapping.remove("Map");
importMapping.put("DateTime", "org.joda.time.DateTime");
importMapping.put("ListBuffer", "scala.collections.mutable.ListBuffer");
typeMapping = new HashMap<String, String>();
typeMapping.put("enum", "NSString");
typeMapping.put("array", "List");
typeMapping.put("set", "Set");
typeMapping.put("boolean", "Boolean");
typeMapping.put("string", "String");
typeMapping.put("int", "Int");
typeMapping.put("long", "Long");
typeMapping.put("float", "Float");
typeMapping.put("byte", "Byte");
typeMapping.put("short", "Short");
typeMapping.put("char", "Char");
typeMapping.put("long", "Long");
typeMapping.put("double", "Double");
typeMapping.put("object", "Any");
typeMapping.put("file", "File");
languageSpecificPrimitives = new HashSet<String>(
Arrays.asList(
"String",
"boolean",
"Boolean",
"Double",
"Int",
"Long",
"Float",
"Object",
"List",
"Map")
);
instantiationTypes.put("array", "ListBuffer");
instantiationTypes.put("map", "HashMap");
}
@Override
public String escapeReservedWord(String name) {
return "_" + name;
}
@Override
public String apiFileFolder() {
return outputFolder + "/" + sourceFolder + "/" + apiPackage().replaceAll("\\.", "/");
}
public String modelFileFolder() {
return outputFolder + "/" + sourceFolder + "/" + modelPackage().replaceAll("\\.", "/");
}
@Override
public String getTypeDeclaration(Property p) {
if(p instanceof ArrayProperty) {
ArrayProperty ap = (ArrayProperty) p;
Property inner = ap.getItems();
return getSwaggerType(p) + "[" + getTypeDeclaration(inner) + "]";
}
else if (p instanceof MapProperty) {
MapProperty mp = (MapProperty) p;
Property inner = mp.getAdditionalProperties();
return getSwaggerType(p) + "[String, " + getTypeDeclaration(inner) + "]";
}
return super.getTypeDeclaration(p);
}
@Override
public String getSwaggerType(Property p) {
String swaggerType = super.getSwaggerType(p);
String type = null;
if(typeMapping.containsKey(swaggerType)) {
type = typeMapping.get(swaggerType);
if(languageSpecificPrimitives.contains(type))
return toModelName(type);
}
else
type = swaggerType;
return toModelName(type);
}
@Override
public String toInstantiationType(Property p) {
if (p instanceof MapProperty) {
MapProperty ap = (MapProperty) p;
String inner = getSwaggerType(ap.getAdditionalProperties());
return instantiationTypes.get("map") + "[String, " + inner + "]";
}
else if (p instanceof ArrayProperty) {
ArrayProperty ap = (ArrayProperty) p;
String inner = getSwaggerType(ap.getItems());
return instantiationTypes.get("array") + "[" + inner + "]";
}
else
return null;
}
public String toDefaultValue(Property p) {
if(p instanceof StringProperty)
return "null";
else if (p instanceof BooleanProperty)
return "null";
else if(p instanceof DateProperty)
return "null";
else if(p instanceof DateTimeProperty)
return "null";
else if (p instanceof DoubleProperty)
return "null";
else if (p instanceof FloatProperty)
return "null";
else if (p instanceof IntegerProperty)
return "null";
else if (p instanceof LongProperty)
return "null";
else if (p instanceof MapProperty) {
MapProperty ap = (MapProperty) p;
String inner = getSwaggerType(ap.getAdditionalProperties());
return "new HashMap[String, " + inner + "]() ";
}
else if (p instanceof ArrayProperty) {
ArrayProperty ap = (ArrayProperty) p;
String inner = getSwaggerType(ap.getItems());
return "new ListBuffer[" + inner + "]() ";
}
else
return "null";
}
}

View File

@@ -1,178 +0,0 @@
package com.wordnik.swagger.codegen.languages;
import com.wordnik.swagger.codegen.*;
import com.wordnik.swagger.models.properties.*;
import com.wordnik.swagger.util.Json;
import java.util.*;
import java.io.File;
public class ScalatraServerCodegen extends DefaultCodegen implements CodegenConfig {
protected String invokerPackage = "com.wordnik.client";
protected String groupId = "com.wordnik";
protected String artifactId = "swagger-client";
protected String artifactVersion = "1.0.0";
protected String sourceFolder = "src/main/scala";
public CodegenType getTag() {
return CodegenType.SERVER;
}
public String getName() {
return "scalatra";
}
public String getHelp() {
return "Generates a Scala server application with Scalatra.";
}
public ScalatraServerCodegen() {
super();
outputFolder = "generated-code/scalatra";
modelTemplateFiles.put("model.mustache", ".scala");
apiTemplateFiles.put("api.mustache", ".scala");
templateDir = "scalatra";
apiPackage = "com.wordnik.client.api";
modelPackage = "com.wordnik.client.model";
reservedWords = new HashSet<String> (
Arrays.asList(
"abstract", "continue", "for", "new", "switch", "assert",
"default", "if", "package", "synchronized", "boolean", "do", "goto", "private",
"this", "break", "double", "implements", "protected", "throw", "byte", "else",
"import", "public", "throws", "case", "enum", "instanceof", "return", "transient",
"catch", "extends", "int", "short", "try", "char", "final", "interface", "static",
"void", "class", "finally", "long", "strictfp", "volatile", "const", "float",
"native", "super", "while")
);
defaultIncludes = new HashSet<String>(
Arrays.asList("double",
"Int",
"Long",
"Float",
"Double",
"char",
"float",
"String",
"boolean",
"Boolean",
"Double",
"Integer",
"Long",
"Float",
"List",
"Set",
"Map")
);
typeMapping.put("integer", "Int");
typeMapping.put("long", "Long");
additionalProperties.put("appName", "Swagger Sample");
additionalProperties.put("appName", "Swagger Sample");
additionalProperties.put("appDescription", "A sample swagger server");
additionalProperties.put("infoUrl", "http://developers.helloreverb.com");
additionalProperties.put("infoEmail", "hello@helloreverb.com");
additionalProperties.put("licenseInfo", "All rights reserved");
additionalProperties.put("licenseUrl", "http://apache.org/licenses/LICENSE-2.0.html");
additionalProperties.put("invokerPackage", invokerPackage);
additionalProperties.put("groupId", groupId);
additionalProperties.put("artifactId", artifactId);
additionalProperties.put("artifactVersion", artifactVersion);
supportingFiles.add(new SupportingFile("README.mustache", "", "README.md"));
supportingFiles.add(new SupportingFile("build.sbt", "", "build.sbt"));
supportingFiles.add(new SupportingFile("web.xml", "/src/main/webapp/WEB-INF", "web.xml"));
supportingFiles.add(new SupportingFile("JettyMain.scala", sourceFolder, "JettyMain.scala"));
supportingFiles.add(new SupportingFile("Bootstrap.mustache", sourceFolder, "ScalatraBootstrap.scala"));
supportingFiles.add(new SupportingFile("ServletApp.mustache", sourceFolder, "ServletApp.scala"));
supportingFiles.add(new SupportingFile("project/build.properties", "project", "build.properties"));
supportingFiles.add(new SupportingFile("project/plugins.sbt", "project", "plugins.sbt"));
supportingFiles.add(new SupportingFile("sbt", "", "sbt"));
languageSpecificPrimitives = new HashSet<String>(
Arrays.asList(
"String",
"boolean",
"Boolean",
"Double",
"Integer",
"Long",
"Float",
"Object")
);
instantiationTypes.put("array", "ArrayList");
instantiationTypes.put("map", "HashMap");
importMapping = new HashMap<String, String> ();
importMapping.put("BigDecimal", "java.math.BigDecimal");
importMapping.put("UUID", "java.util.UUID");
importMapping.put("File", "java.io.File");
importMapping.put("Date", "java.util.Date");
importMapping.put("Timestamp", "java.sql.Timestamp");
importMapping.put("Map", "java.util.Map");
importMapping.put("HashMap", "java.util.HashMap");
importMapping.put("Array", "java.util.List");
importMapping.put("ArrayList", "java.util.ArrayList");
importMapping.put("DateTime", "org.joda.time.DateTime");
importMapping.put("LocalDateTime", "org.joda.time.LocalDateTime");
importMapping.put("LocalDate", "org.joda.time.LocalDate");
importMapping.put("LocalTime", "org.joda.time.LocalTime");
}
@Override
public String escapeReservedWord(String name) {
return "_" + name;
}
@Override
public String apiFileFolder() {
return outputFolder + "/" + sourceFolder + "/" + apiPackage().replaceAll("\\.", "/");
}
public String modelFileFolder() {
return outputFolder + "/" + sourceFolder + "/" + modelPackage().replaceAll("\\.", "/");
}
@Override
public Map<String, Object> postProcessOperations(Map<String, Object> objs) {
Map<String, Object> operations = (Map<String, Object>) objs.get("operations");
List<CodegenOperation> operationList = (List<CodegenOperation>) operations.get("operation");
for(CodegenOperation op: operationList) {
op.httpMethod = op.httpMethod.toLowerCase();
}
return objs;
}
@Override
public String getTypeDeclaration(Property p) {
if(p instanceof ArrayProperty) {
ArrayProperty ap = (ArrayProperty) p;
Property inner = ap.getItems();
return getSwaggerType(p) + "[" + getTypeDeclaration(inner) + "]";
}
else if (p instanceof MapProperty) {
MapProperty mp = (MapProperty) p;
Property inner = mp.getAdditionalProperties();
return getSwaggerType(p) + "[String, " + getTypeDeclaration(inner) + "]";
}
return super.getTypeDeclaration(p);
}
@Override
public String getSwaggerType(Property p) {
String swaggerType = super.getSwaggerType(p);
String type = null;
if(typeMapping.containsKey(swaggerType)) {
type = typeMapping.get(swaggerType);
if(languageSpecificPrimitives.contains(type))
return toModelName(type);
}
else
type = swaggerType;
return toModelName(type);
}
}

View File

@@ -1,76 +0,0 @@
package com.wordnik.swagger.codegen.languages;
import com.wordnik.swagger.codegen.*;
import com.wordnik.swagger.models.properties.*;
import java.util.*;
import java.io.File;
public class StaticDocCodegen extends DefaultCodegen implements CodegenConfig {
protected String invokerPackage = "com.wordnik.client";
protected String groupId = "com.wordnik";
protected String artifactId = "swagger-client";
protected String artifactVersion = "1.0.0";
protected String sourceFolder = "docs";
public CodegenType getTag() {
return CodegenType.DOCUMENTATION;
}
public String getName() {
return "dynamic-html";
}
public String getHelp() {
return "Generates a dynamic HTML site.";
}
public StaticDocCodegen() {
super();
outputFolder = "docs";
modelTemplateFiles.put("model.mustache", ".html");
apiTemplateFiles.put("operation.mustache", ".html");
templateDir = "swagger-static";
additionalProperties.put("invokerPackage", invokerPackage);
additionalProperties.put("groupId", groupId);
additionalProperties.put("artifactId", artifactId);
additionalProperties.put("artifactVersion", artifactVersion);
supportingFiles.add(new SupportingFile("package.mustache", "", "package.json"));
supportingFiles.add(new SupportingFile("main.mustache", "", "main.js"));
supportingFiles.add(new SupportingFile("assets/css/bootstrap-responsive.css",
outputFolder + "/assets/css", "bootstrap-responsive.css"));
supportingFiles.add(new SupportingFile("assets/css/bootstrap.css",
outputFolder + "/assets/css", "bootstrap.css"));
supportingFiles.add(new SupportingFile("assets/css/style.css",
outputFolder + "/assets/css", "style.css"));
supportingFiles.add(new SupportingFile("assets/images/logo.png",
outputFolder + "/assets/images", "logo.png"));
supportingFiles.add(new SupportingFile("assets/js/bootstrap.js",
outputFolder + "/assets/js", "bootstrap.js"));
supportingFiles.add(new SupportingFile("assets/js/jquery-1.8.3.min.js",
outputFolder + "/assets/js", "jquery-1.8.3.min.js"));
supportingFiles.add(new SupportingFile("assets/js/main.js",
outputFolder + "/assets/js", "main.js"));
supportingFiles.add(new SupportingFile("index.mustache",
outputFolder, "index.html"));
instantiationTypes.put("array", "ArrayList");
instantiationTypes.put("map", "HashMap");
}
@Override
public String escapeReservedWord(String name) {
return "_" + name;
}
@Override
public String apiFileFolder() {
return outputFolder + File.separator + sourceFolder + File.separator + "operations";
}
public String modelFileFolder() {
return outputFolder + File.separator + sourceFolder + File.separator + "models";
}
}

View File

@@ -1,85 +0,0 @@
package com.wordnik.swagger.codegen.languages;
import com.wordnik.swagger.codegen.*;
import com.wordnik.swagger.models.properties.*;
import com.wordnik.swagger.util.Json;
import java.util.*;
import java.io.File;
public class StaticHtmlGenerator extends DefaultCodegen implements CodegenConfig {
protected String invokerPackage = "com.wordnik.client";
protected String groupId = "com.wordnik";
protected String artifactId = "swagger-client";
protected String artifactVersion = "1.0.0";
protected String sourceFolder = "src/main/scala";
public CodegenType getTag() {
return CodegenType.DOCUMENTATION;
}
public String getName() {
return "html";
}
public String getHelp() {
return "Generates a static HTML file.";
}
public StaticHtmlGenerator() {
super();
outputFolder = "docs";
templateDir = "htmlDocs";
defaultIncludes = new HashSet<String>();
String partner = "our Partner";
if(System.getProperty("partner") != null)
partner = System.getProperty("partner");
additionalProperties.put("partner", partner);
additionalProperties.put("appName", "Swagger Sample");
additionalProperties.put("appDescription", "A sample swagger server");
additionalProperties.put("infoUrl", "https://helloreverb.com");
additionalProperties.put("infoEmail", "hello@helloreverb.com");
additionalProperties.put("licenseInfo", "All rights reserved");
additionalProperties.put("licenseUrl", "http://apache.org/licenses/LICENSE-2.0.html");
additionalProperties.put("invokerPackage", invokerPackage);
additionalProperties.put("groupId", groupId);
additionalProperties.put("artifactId", artifactId);
additionalProperties.put("artifactVersion", artifactVersion);
supportingFiles.add(new SupportingFile("index.mustache", "", "index.html"));
reservedWords = new HashSet<String>();
languageSpecificPrimitives = new HashSet<String>();
importMapping = new HashMap<String, String> ();
}
@Override
public String getTypeDeclaration(Property p) {
if(p instanceof ArrayProperty) {
ArrayProperty ap = (ArrayProperty) p;
Property inner = ap.getItems();
return getSwaggerType(p) + "[" + getTypeDeclaration(inner) + "]";
}
else if (p instanceof MapProperty) {
MapProperty mp = (MapProperty) p;
Property inner = mp.getAdditionalProperties();
return getSwaggerType(p) + "[String, " + getTypeDeclaration(inner) + "]";
}
return super.getTypeDeclaration(p);
}
@Override
public Map<String, Object> postProcessOperations(Map<String, Object> objs) {
Map<String, Object> operations = (Map<String, Object>) objs.get("operations");
List<CodegenOperation> operationList = (List<CodegenOperation>) operations.get("operation");
for(CodegenOperation op: operationList) {
op.httpMethod = op.httpMethod.toLowerCase();
}
return objs;
}
}

View File

@@ -1,42 +0,0 @@
package com.wordnik.swagger.codegen.languages;
import com.wordnik.swagger.codegen.*;
import com.wordnik.swagger.util.*;
import com.wordnik.swagger.models.Swagger;
import org.apache.commons.io.FileUtils;
import java.io.File;
public class SwaggerGenerator extends DefaultCodegen implements CodegenConfig {
public CodegenType getTag() {
return CodegenType.DOCUMENTATION;
}
public String getName() {
return "swagger";
}
public String getHelp() {
return "Creates a static swagger.json file.";
}
public SwaggerGenerator() {
super();
outputFolder = "generated-code/swagger";
}
@Override
public void processSwagger(Swagger swagger) {
String swaggerString = Json.pretty(swagger);
try{
String outputFile = outputFolder + File.separator + "swagger.json";
FileUtils.writeStringToFile(new File(outputFile), swaggerString);
System.out.println("wrote file to " + outputFile);
}
catch(Exception e) {
e.printStackTrace();
}
}
}

View File

@@ -1,247 +0,0 @@
package com.wordnik.swagger.codegen.languages;
import com.wordnik.swagger.util.Json;
import com.wordnik.swagger.codegen.*;
import com.wordnik.swagger.models.properties.*;
import java.util.*;
import java.io.File;
public class TizenClientCodegen extends DefaultCodegen implements CodegenConfig {
protected Set<String> foundationClasses = new HashSet<String>();
protected String sourceFolder = "client";
protected static String PREFIX = "Sami";
protected Map<String, String> namespaces = new HashMap<String, String>();
public CodegenType getTag() {
return CodegenType.CLIENT;
}
public String getName() {
return "tizen";
}
public String getHelp() {
return "Generates a Samsung Tizen C++ client library.";
}
public TizenClientCodegen() {
super();
outputFolder = "generated-code/tizen";
modelTemplateFiles.put("model-header.mustache", ".h");
modelTemplateFiles.put("model-body.mustache", ".cpp");
apiTemplateFiles.put("api-header.mustache", ".h");
apiTemplateFiles.put("api-body.mustache", ".cpp");
templateDir = "tizen";
modelPackage = "";
defaultIncludes = new HashSet<String>(
Arrays.asList(
"bool",
"int",
"long")
);
languageSpecificPrimitives = new HashSet<String>();
additionalProperties().put("prefix", PREFIX);
reservedWords = new HashSet<String>(
// VERIFY
Arrays.asList(
"void", "char", "short", "int", "void", "char", "short", "int",
"long", "float", "double", "signed", "unsigned", "id", "const",
"volatile", "in", "out", "inout", "bycopy", "byref", "oneway",
"self", "super"
));
super.typeMapping = new HashMap<String, String>();
typeMapping.put("Date", "DateTime");
typeMapping.put("DateTime", "DateTime");
typeMapping.put("string", "String");
typeMapping.put("integer", "Integer");
typeMapping.put("float", "Float");
typeMapping.put("long", "Long");
typeMapping.put("boolean", "Boolean");
typeMapping.put("double", "Double");
typeMapping.put("array", "IList");
typeMapping.put("map", "HashMap");
typeMapping.put("number", "Long");
typeMapping.put("object", PREFIX + "Object");
importMapping = new HashMap<String, String>();
namespaces = new HashMap<String, String> ();
namespaces.put("DateTime", "Tizen::Base::DateTime");
namespaces.put("Integer", "Tizen::Base::Integer");
namespaces.put("Long", "Tizen::Base::Long");
namespaces.put("Boolean", "Tizen::Base::Boolean");
namespaces.put("Float", "Tizen::Base::Float");
namespaces.put("String", "Tizen::Base::String");
namespaces.put("Double", "Tizen::Base::Double");
namespaces.put("IList", "Tizen::Base::Collection::IList");
namespaces.put("HashMap", "Tizen::Base::Collection::HashMap");
namespaces.put("ArrayList", "Tizen::Base::Collection::ArrayList");
namespaces.put("JsonNumber", "Tizen::Web::Json");
namespaces.put("JsonString", "Tizen::Web::Json");
foundationClasses = new HashSet<String> (
Arrays.asList(
"String",
"Integer",
"Float")
);
supportingFiles.clear();
supportingFiles.add(new SupportingFile("modelFactory.mustache", sourceFolder, PREFIX + "ModelFactory.h"));
supportingFiles.add(new SupportingFile("helpers-header.mustache", sourceFolder, PREFIX + "Helpers.h"));
supportingFiles.add(new SupportingFile("helpers-body.mustache", sourceFolder, PREFIX + "Helpers.cpp"));
supportingFiles.add(new SupportingFile("apiclient-header.mustache", sourceFolder, PREFIX + "ApiClient.h"));
supportingFiles.add(new SupportingFile("apiclient-body.mustache", sourceFolder, PREFIX + "ApiClient.cpp"));
supportingFiles.add(new SupportingFile("object.mustache", sourceFolder, PREFIX + "Object.h"));
supportingFiles.add(new SupportingFile("error-header.mustache", sourceFolder, PREFIX + "Error.h"));
supportingFiles.add(new SupportingFile("error-body.mustache", sourceFolder, PREFIX + "Error.cpp"));
}
@Override
public String toInstantiationType(Property p) {
if (p instanceof MapProperty) {
MapProperty ap = (MapProperty) p;
String inner = getSwaggerType(ap.getAdditionalProperties());
return instantiationTypes.get("map");
}
else if (p instanceof ArrayProperty) {
ArrayProperty ap = (ArrayProperty) p;
String inner = getSwaggerType(ap.getItems());
return instantiationTypes.get("array");
}
else
return null;
}
@Override
public String getTypeDeclaration(String name) {
if(languageSpecificPrimitives.contains(name) && !foundationClasses.contains(name))
return name;
else
return name + "*";
}
@Override
public String getSwaggerType(Property p) {
String swaggerType = super.getSwaggerType(p);
String type = null;
if(typeMapping.containsKey(swaggerType)) {
type = typeMapping.get(swaggerType);
if(languageSpecificPrimitives.contains(type) && !foundationClasses.contains(type))
return toModelName(type);
}
else
type = swaggerType;
return toModelName(type);
}
@Override
public String getTypeDeclaration(Property p) {
String swaggerType = getSwaggerType(p);
if(languageSpecificPrimitives.contains(swaggerType) && !foundationClasses.contains(swaggerType))
return toModelName(swaggerType);
else
return swaggerType + "*";
}
@Override
public String toModelName(String type) {
if(typeMapping.keySet().contains(type) ||
typeMapping.values().contains(type) ||
foundationClasses.contains(type) ||
importMapping.values().contains(type) ||
defaultIncludes.contains(type) ||
languageSpecificPrimitives.contains(type)) {
return type;
}
else {
return PREFIX + Character.toUpperCase(type.charAt(0)) + type.substring(1);
}
}
@Override
public String toModelImport(String name) {
if(namespaces.containsKey(name)) {
return "using " + namespaces.get(name) + ";";
}
return "#include \"" + name + ".h\"";
}
@Override
public String toDefaultValue(Property p) {
if(p instanceof StringProperty)
return "new String()";
else if (p instanceof BooleanProperty)
return "new Boolean(false)";
else if(p instanceof DateProperty)
return "new DateTime()";
else if(p instanceof DateTimeProperty)
return "new DateTime()";
else if (p instanceof DoubleProperty)
return "new Double()";
else if (p instanceof FloatProperty)
return "new Float()";
else if (p instanceof IntegerProperty)
return "new Integer()";
else if (p instanceof LongProperty)
return "new Long()";
else if (p instanceof DecimalProperty)
return "new Long()";
else if (p instanceof MapProperty) {
MapProperty ap = (MapProperty) p;
String inner = getSwaggerType(ap.getAdditionalProperties());
return "new HashMap()";
}
else if (p instanceof ArrayProperty) {
ArrayProperty ap = (ArrayProperty) p;
String inner = getSwaggerType(ap.getItems());
return "new ArrayList()";
}
// else
if(p instanceof RefProperty) {
RefProperty rp = (RefProperty) p;
return "new " + toModelName(rp.getSimpleRef()) + "()";
}
return "null";
}
@Override
public String apiFileFolder() {
return outputFolder + File.separator + sourceFolder;
}
@Override
public String modelFileFolder() {
return outputFolder + File.separator + sourceFolder;
}
@Override
public String toModelFilename(String name) {
return PREFIX + initialCaps(name);
}
@Override
public String toApiName(String name) {
return PREFIX + initialCaps(name) + "Api";
}
public String toApiFilename(String name) {
return PREFIX + initialCaps(name) + "Api";
}
@Override
public String toVarName(String name) {
String paramName = name.replaceAll("[^a-zA-Z0-9_]","");
paramName = Character.toUpperCase(paramName.charAt(0)) + paramName.substring(1);
return "p" + paramName;
}
public String escapeReservedWord(String name) {
return "_" + name;
}
}

View File

@@ -0,0 +1,34 @@
package config;
import com.google.common.collect.ImmutableMap;
import java.util.HashMap;
import java.util.Map;
public class Config {
private Map<String, String> options;
public Config() {
this.options = new HashMap<String, String>();
}
public Config(Map<String, String> properties) {
this.options = properties;
}
public Map<String, String> getOptions() {
return ImmutableMap.copyOf(options);
}
public boolean hasOption(String opt) {
return options.containsKey(opt);
}
public String getOption(String opt) {
return options.get(opt);
}
public void setOption(String opt, String value) {
options.put(opt, value);
}
}

View File

@@ -0,0 +1,40 @@
package config;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.io.File;
import java.util.Iterator;
import java.util.Map;
public class ConfigParser {
public static Config read(String location) {
System.out.println("reading config from " + location);
ObjectMapper mapper = new ObjectMapper();
Config config = new Config();
try {
JsonNode rootNode = mapper.readTree(new File(location));
Iterator<Map.Entry<String, JsonNode>> optionNodes = rootNode.fields();
while (optionNodes.hasNext()) {
Map.Entry<String, JsonNode> optionNode = (Map.Entry<String, JsonNode>) optionNodes.next();
if (optionNode.getValue().isValueNode()) {
config.setOption(optionNode.getKey(), optionNode.getValue().asText());
} else {
System.out.println("omitting non-value node " + optionNode.getKey());
}
}
} catch (Exception e) {
System.out.println(e.getMessage());
return null;
}
return config;
}
}

View File

@@ -0,0 +1,69 @@
package io.swagger.codegen;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.Reader;
import java.io.Writer;
import java.util.regex.Pattern;
public abstract class AbstractGenerator {
public File writeToFile(String filename, String contents) throws IOException {
System.out.println("writing file " + filename);
File output = new File(filename);
if (output.getParent() != null && !new File(output.getParent()).exists()) {
File parent = new File(output.getParent());
parent.mkdirs();
}
Writer out = new BufferedWriter(new OutputStreamWriter(
new FileOutputStream(output), "UTF-8"));
out.write(contents);
out.close();
return output;
}
public String readTemplate(String name) {
try {
Reader reader = getTemplateReader(name);
if (reader == null) {
throw new RuntimeException("no file found");
}
java.util.Scanner s = new java.util.Scanner(reader).useDelimiter("\\A");
return s.hasNext() ? s.next() : "";
} catch (Exception e) {
e.printStackTrace();
}
throw new RuntimeException("can't load template " + name);
}
public Reader getTemplateReader(String name) {
try {
InputStream is = this.getClass().getClassLoader().getResourceAsStream(getCPResourcePath(name));
if (is == null) {
is = new FileInputStream(new File(name));
}
if (is == null) {
throw new RuntimeException("no file found");
}
return new InputStreamReader(is);
} catch (Exception e) {
e.printStackTrace();
}
throw new RuntimeException("can't load template " + name);
}
private String getCPResourcePath(String name) {
if (!"/".equals(File.separator)) {
return name.replaceAll(Pattern.quote(File.separator), "/");
}
return name;
}
}

View File

@@ -0,0 +1,23 @@
package io.swagger.codegen;
public class CliOption {
private final String opt;
private String description;
public CliOption(String opt, String description) {
this.opt = opt;
this.description = description;
}
public String getOpt() {
return opt;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
}

View File

@@ -0,0 +1,92 @@
package io.swagger.codegen;
import io.swagger.annotations.ApiModelProperty;
import io.swagger.models.Swagger;
import io.swagger.models.auth.AuthorizationValue;
import java.net.URLDecoder;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.List;
public class ClientOptInput {
protected CodegenConfig config;
private ClientOpts opts;
private Swagger swagger;
private List<AuthorizationValue> auths;
public ClientOptInput swagger(Swagger swagger) {
this.setSwagger(swagger);
return this;
}
public ClientOptInput opts(ClientOpts opts) {
this.setOpts(opts);
return this;
}
public String getAuth() {
if (auths != null) {
StringBuilder b = new StringBuilder();
for (AuthorizationValue v : auths) {
try {
if (b.toString().length() > 0) {
b.append(",");
}
b.append(URLEncoder.encode(v.getKeyName(), "UTF-8"))
.append(":")
.append(URLEncoder.encode(v.getValue(), "UTF-8"));
} catch (Exception e) {
// continue
e.printStackTrace();
}
}
return b.toString();
} else {
return null;
}
}
public void setAuth(String urlEncodedAuthString) {
List<AuthorizationValue> auths = new ArrayList<AuthorizationValue>();
if (urlEncodedAuthString != null && !"".equals(urlEncodedAuthString)) {
String[] parts = urlEncodedAuthString.split(",");
for (String part : parts) {
String[] kvPair = part.split(":");
if (kvPair.length == 2) {
auths.add(new AuthorizationValue(URLDecoder.decode(kvPair[0]), URLDecoder.decode(kvPair[1]), "header"));
}
}
}
this.auths = auths;
}
public List<AuthorizationValue> getAuthorizationValues() {
return auths;
}
public CodegenConfig getConfig() {
return config;
}
public void setConfig(CodegenConfig config) {
this.config = config;
}
public ClientOpts getOpts() {
return opts;
}
public void setOpts(ClientOpts opts) {
this.opts = opts;
}
@ApiModelProperty(dataType = "Object")
public Swagger getSwagger() {
return swagger;
}
public void setSwagger(Swagger swagger) {
this.swagger = swagger;
}
}

View File

@@ -0,0 +1,57 @@
package io.swagger.codegen;
import io.swagger.codegen.auth.AuthMethod;
import java.util.HashMap;
import java.util.Map;
public class ClientOpts {
protected String uri;
protected String target;
protected AuthMethod auth;
protected Map<String, String> properties = new HashMap<String, String>();
protected String outputDirectory;
public String getUri() {
return uri;
}
public void setUri(String uri) {
this.uri = uri;
}
public String getTarget() {
return target;
}
public void setTarget(String target) {
this.target = target;
}
public Map<String, String> getProperties() {
return properties;
}
public void setProperties(Map<String, String> properties) {
this.properties = properties;
}
public String getOutputDirectory() {
return outputDirectory;
}
public void setOutputDirectory(String outputDirectory) {
this.outputDirectory = outputDirectory;
}
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append("ClientOpts: {\n");
sb.append(" uri: ").append(uri).append(",");
sb.append(" auth: ").append(auth).append(",");
sb.append(properties);
sb.append("}");
return sb.toString();
}
}

View File

@@ -0,0 +1,148 @@
package io.swagger.codegen;
import io.swagger.models.Swagger;
import io.swagger.parser.SwaggerParser;
import org.apache.commons.cli.BasicParser;
import org.apache.commons.cli.CommandLine;
import org.apache.commons.cli.CommandLineParser;
import org.apache.commons.cli.HelpFormatter;
import org.apache.commons.cli.Options;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.ServiceLoader;
/**
* @deprecated use instead {@link io.swagger.codegen.DefaultGenerator}
* or cli interface from https://github.com/swagger-api/swagger-codegen/pull/547
*/
@Deprecated
public class Codegen extends DefaultGenerator {
static Map<String, CodegenConfig> configs = new HashMap<String, CodegenConfig>();
static String configString;
static String debugInfoOptions = "\nThe following additional debug options are available for all codegen targets:" +
"\n -DdebugSwagger prints the swagger specification as interpreted by the codegen" +
"\n -DdebugModels prints models passed to the template engine" +
"\n -DdebugOperations prints operations passed to the template engine" +
"\n -DdebugSupportingFiles prints additional data passed to the template engine";
public static void main(String[] args) {
StringBuilder sb = new StringBuilder();
Options options = new Options();
options.addOption("h", "help", false, "shows this message");
options.addOption("l", "lang", true, "client language to generate.\nAvailable languages include:\n\t[" + configString + "]");
options.addOption("o", "output", true, "where to write the generated files");
options.addOption("i", "input-spec", true, "location of the swagger spec, as URL or file");
options.addOption("t", "template-dir", true, "folder containing the template files");
options.addOption("d", "debug-info", false, "prints additional info for debugging");
options.addOption("a", "auth", true, "adds authorization headers when fetching the swagger definitions remotely. Pass in a URL-encoded string of name:header with a comma separating multiple values");
ClientOptInput clientOptInput = new ClientOptInput();
ClientOpts clientOpts = new ClientOpts();
Swagger swagger = null;
CommandLine cmd = null;
try {
CommandLineParser parser = new BasicParser();
CodegenConfig config = null;
cmd = parser.parse(options, args);
if (cmd.hasOption("d")) {
usage(options);
System.out.println(debugInfoOptions);
return;
}
if (cmd.hasOption("a")) {
clientOptInput.setAuth(cmd.getOptionValue("a"));
}
if (cmd.hasOption("l")) {
clientOptInput.setConfig(getConfig(cmd.getOptionValue("l")));
} else {
usage(options);
return;
}
if (cmd.hasOption("o")) {
clientOptInput.getConfig().setOutputDir(cmd.getOptionValue("o"));
}
if (cmd.hasOption("h")) {
if (cmd.hasOption("l")) {
config = getConfig(String.valueOf(cmd.getOptionValue("l")));
if (config != null) {
options.addOption("h", "help", true, config.getHelp());
usage(options);
return;
}
}
usage(options);
return;
}
if (cmd.hasOption("i")) {
swagger = new SwaggerParser().read(cmd.getOptionValue("i"), clientOptInput.getAuthorizationValues(), true);
}
if (cmd.hasOption("t")) {
clientOpts.getProperties().put("templateDir", String.valueOf(cmd.getOptionValue("t")));
}
} catch (Exception e) {
usage(options);
return;
}
try {
clientOptInput
.opts(clientOpts)
.swagger(swagger);
new Codegen().opts(clientOptInput).generate();
} catch (Exception e) {
e.printStackTrace();
}
}
public static List<CodegenConfig> getExtensions() {
ServiceLoader<CodegenConfig> loader = ServiceLoader.load(CodegenConfig.class);
List<CodegenConfig> output = new ArrayList<CodegenConfig>();
Iterator<CodegenConfig> itr = loader.iterator();
while (itr.hasNext()) {
output.add(itr.next());
}
return output;
}
static void usage(Options options) {
HelpFormatter formatter = new HelpFormatter();
formatter.printHelp("Codegen", options);
}
public static CodegenConfig getConfig(String name) {
if (configs.containsKey(name)) {
return configs.get(name);
} else {
// see if it's a class
try {
System.out.println("loading class " + name);
Class customClass = Class.forName(name);
System.out.println("loaded");
return (CodegenConfig) customClass.newInstance();
} catch (Exception e) {
throw new RuntimeException("can't load class " + name);
}
}
}
static {
List<CodegenConfig> extensions = getExtensions();
StringBuilder sb = new StringBuilder();
for (CodegenConfig config : extensions) {
if (sb.toString().length() != 0) {
sb.append(", ");
}
sb.append(config.getName());
configs.put(config.getName(), config);
configString = sb.toString();
}
}
}

View File

@@ -0,0 +1,105 @@
package io.swagger.codegen;
import io.swagger.models.Model;
import io.swagger.models.Operation;
import io.swagger.models.Swagger;
import io.swagger.models.auth.SecuritySchemeDefinition;
import io.swagger.models.properties.Property;
import java.util.List;
import java.util.Map;
import java.util.Set;
public interface CodegenConfig {
CodegenType getTag();
String getName();
String getHelp();
Map<String, Object> additionalProperties();
String apiPackage();
String apiFileFolder();
String fileSuffix();
String outputFolder();
String templateDir();
String modelFileFolder();
String modelPackage();
String toApiName(String name);
String toApiVarName(String name);
String toModelName(String name);
String toParamName(String name);
String escapeText(String text);
String escapeReservedWord(String name);
String getTypeDeclaration(Property p);
String getTypeDeclaration(String name);
void processOpts();
List<CliOption> cliOptions();
String generateExamplePath(String path, Operation operation);
Set<String> reservedWords();
List<SupportingFile> supportingFiles();
String getOutputDir();
void setOutputDir(String dir);
CodegenModel fromModel(String name, Model model);
CodegenOperation fromOperation(String resourcePath, String httpMethod, Operation operation, Map<String, Model> definitions);
List<CodegenSecurity> fromSecurity(Map<String, SecuritySchemeDefinition> schemes);
Set<String> defaultIncludes();
Map<String, String> typeMapping();
Map<String, String> instantiationTypes();
Map<String, String> importMapping();
Map<String, String> apiTemplateFiles();
Map<String, String> modelTemplateFiles();
void processSwagger(Swagger swagger);
String toApiFilename(String name);
String toModelFilename(String name);
String toModelImport(String name);
String toApiImport(String name);
void addOperationToGroup(String tag, String resourcePath, Operation operation, CodegenOperation co, Map<String, List<CodegenOperation>> operations);
Map<String, Object> postProcessModels(Map<String, Object> objs);
Map<String, Object> postProcessOperations(Map<String, Object> objs);
Map<String, Object> postProcessSupportingFileData(Map<String, Object> objs);
String apiFilename(String templateName, String tag);
boolean shouldOverwrite(String filename);
}

View File

@@ -0,0 +1,18 @@
package io.swagger.codegen;
import io.swagger.models.ExternalDocs;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
public class CodegenModel {
public String parent;
public String name, classname, description, classVarName, modelJson;
public String defaultValue;
public List<CodegenProperty> vars = new ArrayList<CodegenProperty>();
public Set<String> imports = new HashSet<String>();
public Boolean hasVars, emptyVars, hasMoreModels, hasEnums;
public ExternalDocs externalDocs;
}

View File

@@ -0,0 +1,39 @@
package io.swagger.codegen;
import java.util.HashMap;
import java.util.Map;
public final class CodegenModelFactory {
private static final Map<CodegenModelType, Class<?>> typeMapping = new HashMap<CodegenModelType, Class<?>>();
/**
* Configure a different implementation class.
*
* @param type the type that shall be replaced
* @param implementation the implementation class must extend the default class and must provide a public no-arg constructor
*/
public static void setTypeMapping(CodegenModelType type, Class<?> implementation) {
if (!type.getDefaultImplementation().isAssignableFrom(implementation)) {
throw new IllegalArgumentException(implementation.getSimpleName() + " doesn't extend " + type.getDefaultImplementation().getSimpleName());
}
try {
implementation.newInstance();
} catch (Exception e) {
throw new IllegalArgumentException(e);
}
typeMapping.put(type, implementation);
}
@SuppressWarnings("unchecked")
public static <T> T newInstance(CodegenModelType type) {
Class<?> classType = typeMapping.get(type);
try {
return (T) (classType != null ? classType : type.getDefaultImplementation()).newInstance();
} catch (InstantiationException e) {
throw new RuntimeException(e);
} catch (IllegalAccessException e) {
throw new RuntimeException(e);
}
}
}

View File

@@ -0,0 +1,21 @@
package io.swagger.codegen;
public enum CodegenModelType {
MODEL(CodegenModel.class),
OPERATION(CodegenOperation.class),
PARAMETER(CodegenParameter.class),
PROPERTY(CodegenProperty.class),
RESPONSE(CodegenResponse.class),
SECURITY(CodegenSecurity.class);
private final Class<?> defaultImplementation;
private CodegenModelType(Class<?> defaultImplementation) {
this.defaultImplementation = defaultImplementation;
}
public Class<?> getDefaultImplementation() {
return defaultImplementation;
}
}

View File

@@ -0,0 +1,35 @@
package io.swagger.codegen;
import io.swagger.models.ExternalDocs;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
public class CodegenOperation {
public final List<CodegenProperty> responseHeaders = new ArrayList<CodegenProperty>();
public Boolean hasConsumes, hasProduces, hasParams, returnTypeIsPrimitive,
returnSimpleType, subresourceOperation, isMapContainer, isListContainer,
hasMore = Boolean.TRUE, isMultipart;
public String path, operationId, returnType, httpMethod, returnBaseType,
returnContainer, summary, notes, baseName, defaultResponse;
public List<Map<String, String>> consumes, produces;
public CodegenParameter bodyParam;
public List<CodegenParameter> allParams = new ArrayList<CodegenParameter>();
public List<CodegenParameter> bodyParams = new ArrayList<CodegenParameter>();
public List<CodegenParameter> pathParams = new ArrayList<CodegenParameter>();
public List<CodegenParameter> queryParams = new ArrayList<CodegenParameter>();
public List<CodegenParameter> headerParams = new ArrayList<CodegenParameter>();
public List<CodegenParameter> formParams = new ArrayList<CodegenParameter>();
public List<CodegenSecurity> authMethods;
public List<String> tags;
public List<CodegenResponse> responses = new ArrayList<CodegenResponse>();
public Set<String> imports = new HashSet<String>();
public List<Map<String, String>> examples;
public ExternalDocs externalDocs;
// legacy support
public String nickname;
}

View File

@@ -0,0 +1,41 @@
package io.swagger.codegen;
public class CodegenParameter {
public Boolean isFormParam, isQueryParam, isPathParam, isHeaderParam,
isCookieParam, isBodyParam, isFile, notFile, hasMore, isContainer, secondaryParam;
public String baseName, paramName, dataType, collectionFormat, description, baseType, defaultValue;
public String jsonSchema;
/**
* Determines whether this parameter is mandatory. If the parameter is in "path",
* this property is required and its value MUST be true. Otherwise, the property
* MAY be included and its default value is false.
*/
public Boolean required;
public CodegenParameter copy() {
CodegenParameter output = new CodegenParameter();
output.isFile = this.isFile;
output.notFile = this.notFile;
output.hasMore = this.hasMore;
output.isContainer = this.isContainer;
output.secondaryParam = this.secondaryParam;
output.baseName = this.baseName;
output.paramName = this.paramName;
output.dataType = this.dataType;
output.collectionFormat = this.collectionFormat;
output.description = this.description;
output.baseType = this.baseType;
output.isFormParam = this.isFormParam;
output.isQueryParam = this.isQueryParam;
output.isPathParam = this.isPathParam;
output.isHeaderParam = this.isHeaderParam;
output.isCookieParam = this.isCookieParam;
output.isBodyParam = this.isBodyParam;
output.required = this.required;
output.jsonSchema = this.jsonSchema;
output.defaultValue = this.defaultValue;
return output;
}
}

View File

@@ -0,0 +1,37 @@
package io.swagger.codegen;
import java.util.List;
import java.util.Map;
public class CodegenProperty {
public String baseName, complexType, getter, setter, description, datatype, datatypeWithEnum,
name, min, max, defaultValue, baseType, containerType;
/**
* maxLength validation for strings, see http://json-schema.org/latest/json-schema-validation.html#rfc.section.5.2.1
*/
public Integer maxLength;
/**
* minLength validation for strings, see http://json-schema.org/latest/json-schema-validation.html#rfc.section.5.2.2
*/
public Integer minLength;
/**
* pattern validation for strings, see http://json-schema.org/latest/json-schema-validation.html#rfc.section.5.2.3
*/
public String pattern;
/**
* A free-form property to include an example of an instance for this schema.
*/
public String example;
public String jsonSchema;
public Double minimum;
public Double maximum;
public Boolean exclusiveMinimum;
public Boolean exclusiveMaximum;
public Boolean hasMore = null, required = null, secondaryParam = null;
public Boolean isPrimitiveType, isContainer, isNotContainer;
public boolean isEnum;
public List<String> _enum;
public Map<String, Object> allowableValues;
}

View File

@@ -0,0 +1,24 @@
package io.swagger.codegen;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
public class CodegenResponse {
public final List<CodegenProperty> headers = new ArrayList<CodegenProperty>();
public String code, message;
public Boolean hasMore;
public List<Map<String, Object>> examples;
public String dataType, baseType, containerType;
public Boolean isDefault;
public Boolean simpleType;
public Boolean primitiveType;
public Boolean isMapContainer;
public Boolean isListContainer;
public Object schema;
public String jsonSchema;
public boolean isWildcard() {
return "0".equals(code) || "default".equals(code);
}
}

View File

@@ -0,0 +1,10 @@
package io.swagger.codegen;
public class CodegenSecurity {
public String name;
public String type;
public Boolean hasMore, isBasic, isOAuth, isApiKey;
// ApiKey specific
public String keyParamName;
public Boolean isKeyInQuery, isKeyInHeader;
}

View File

@@ -0,0 +1,36 @@
package io.swagger.codegen;
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonValue;
import java.util.HashMap;
import java.util.Map;
public enum CodegenType {
CLIENT, SERVER, DOCUMENTATION, OTHER;
private static Map<String, CodegenType> names = new HashMap<String, CodegenType>();
@JsonCreator
public static CodegenType forValue(String value) {
return names.get(value.toLowerCase());
}
@JsonValue
public String toValue() {
for (Map.Entry<String, CodegenType> entry : names.entrySet()) {
if (entry.getValue() == this) {
return entry.getKey();
}
}
return null; // or fail
}
static {
names.put("client", CLIENT);
names.put("server", SERVER);
names.put("documentation", DOCUMENTATION);
names.put("other", OTHER);
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,484 @@
package io.swagger.codegen;
import com.samskivert.mustache.Mustache;
import com.samskivert.mustache.Template;
import io.swagger.models.Contact;
import io.swagger.models.Info;
import io.swagger.models.License;
import io.swagger.models.Model;
import io.swagger.models.Operation;
import io.swagger.models.Path;
import io.swagger.models.Swagger;
import io.swagger.models.auth.SecuritySchemeDefinition;
import io.swagger.util.Json;
import org.apache.commons.io.IOUtils;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.Reader;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.LinkedHashMap;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import static org.apache.commons.lang3.StringUtils.capitalize;
import static org.apache.commons.lang3.StringUtils.isNotEmpty;
public class DefaultGenerator extends AbstractGenerator implements Generator {
protected CodegenConfig config;
protected ClientOptInput opts = null;
protected Swagger swagger = null;
public Generator opts(ClientOptInput opts) {
this.opts = opts;
this.swagger = opts.getSwagger();
this.config = opts.getConfig();
this.config.additionalProperties().putAll(opts.getOpts().getProperties());
return this;
}
public List<File> generate() {
if (swagger == null || config == null) {
throw new RuntimeException("missing swagger input or config!");
}
if (System.getProperty("debugSwagger") != null) {
Json.prettyPrint(swagger);
}
List<File> files = new ArrayList<File>();
try {
config.processOpts();
if (swagger.getInfo() != null) {
Info info = swagger.getInfo();
if (info.getTitle() != null) {
config.additionalProperties().put("appName", info.getTitle());
}
if (info.getVersion() != null) {
config.additionalProperties().put("appVersion", info.getVersion());
}
if (info.getDescription() != null) {
config.additionalProperties().put("appDescription",
config.escapeText(info.getDescription()));
}
if (info.getContact() != null) {
Contact contact = info.getContact();
config.additionalProperties().put("infoUrl", contact.getUrl());
if (contact.getEmail() != null) {
config.additionalProperties().put("infoEmail", contact.getEmail());
}
}
if (info.getLicense() != null) {
License license = info.getLicense();
if (license.getName() != null) {
config.additionalProperties().put("licenseInfo", license.getName());
}
if (license.getUrl() != null) {
config.additionalProperties().put("licenseUrl", license.getUrl());
}
}
if (info.getVersion() != null) {
config.additionalProperties().put("version", info.getVersion());
}
}
StringBuilder hostBuilder = new StringBuilder();
String scheme;
if (swagger.getSchemes() != null && swagger.getSchemes().size() > 0) {
scheme = swagger.getSchemes().get(0).toValue();
} else {
scheme = "https";
}
hostBuilder.append(scheme);
hostBuilder.append("://");
if (swagger.getHost() != null) {
hostBuilder.append(swagger.getHost());
} else {
hostBuilder.append("localhost");
}
if (swagger.getBasePath() != null) {
hostBuilder.append(swagger.getBasePath());
} else {
hostBuilder.append("/");
}
String contextPath = swagger.getBasePath() == null ? "/" : swagger.getBasePath();
String basePath = hostBuilder.toString();
List<Object> allOperations = new ArrayList<Object>();
List<Object> allModels = new ArrayList<Object>();
// models
Map<String, Model> definitions = swagger.getDefinitions();
if (definitions != null) {
for (String name : definitions.keySet()) {
Model model = definitions.get(name);
Map<String, Model> modelMap = new HashMap<String, Model>();
modelMap.put(name, model);
Map<String, Object> models = processModels(config, modelMap);
models.putAll(config.additionalProperties());
allModels.add(((List<Object>) models.get("models")).get(0));
for (String templateName : config.modelTemplateFiles().keySet()) {
String suffix = config.modelTemplateFiles().get(templateName);
String filename = config.modelFileFolder() + File.separator + config.toModelFilename(name) + suffix;
String template = readTemplate(config.templateDir() + File.separator + templateName);
Template tmpl = Mustache.compiler()
.withLoader(new Mustache.TemplateLoader() {
public Reader getTemplate(String name) {
return getTemplateReader(config.templateDir() + File.separator + name + ".mustache");
}
})
.defaultValue("")
.compile(template);
writeToFile(filename, tmpl.execute(models));
files.add(new File(filename));
}
}
}
if (System.getProperty("debugModels") != null) {
System.out.println("############ Model info ############");
Json.prettyPrint(allModels);
}
// apis
Map<String, List<CodegenOperation>> paths = processPaths(swagger.getPaths());
for (String tag : paths.keySet()) {
List<CodegenOperation> ops = paths.get(tag);
Map<String, Object> operation = processOperations(config, tag, ops);
operation.put("basePath", basePath);
operation.put("contextPath", contextPath);
operation.put("baseName", tag);
operation.put("modelPackage", config.modelPackage());
operation.putAll(config.additionalProperties());
operation.put("classname", config.toApiName(tag));
operation.put("classVarName", config.toApiVarName(tag));
operation.put("importPath", config.toApiImport(tag));
processMimeTypes(swagger.getConsumes(), operation, "consumes");
processMimeTypes(swagger.getProduces(), operation, "produces");
allOperations.add(new HashMap<String, Object>(operation));
for (int i = 0; i < allOperations.size(); i++) {
Map<String, Object> oo = (Map<String, Object>) allOperations.get(i);
if (i < (allOperations.size() - 1)) {
oo.put("hasMore", "true");
}
}
for (String templateName : config.apiTemplateFiles().keySet()) {
String filename = config.apiFilename(templateName, tag);
if (new File(filename).exists() && !config.shouldOverwrite(filename)) {
continue;
}
String template = readTemplate(config.templateDir() + File.separator + templateName);
Template tmpl = Mustache.compiler()
.withLoader(new Mustache.TemplateLoader() {
public Reader getTemplate(String name) {
return getTemplateReader(config.templateDir() + File.separator + name + ".mustache");
}
})
.defaultValue("")
.compile(template);
writeToFile(filename, tmpl.execute(operation));
files.add(new File(filename));
}
}
if (System.getProperty("debugOperations") != null) {
System.out.println("############ Operation info ############");
Json.prettyPrint(allOperations);
}
// supporting files
Map<String, Object> bundle = new HashMap<String, Object>();
bundle.putAll(config.additionalProperties());
bundle.put("apiPackage", config.apiPackage());
Map<String, Object> apis = new HashMap<String, Object>();
apis.put("apis", allOperations);
if (swagger.getHost() != null) {
bundle.put("host", swagger.getHost());
}
bundle.put("basePath", basePath);
bundle.put("scheme", scheme);
bundle.put("contextPath", contextPath);
bundle.put("apiInfo", apis);
bundle.put("models", allModels);
bundle.put("apiFolder", config.apiPackage().replace('.', File.separatorChar));
bundle.put("modelPackage", config.modelPackage());
bundle.put("authMethods", config.fromSecurity(swagger.getSecurityDefinitions()));
if (swagger.getExternalDocs() != null) {
bundle.put("externalDocs", swagger.getExternalDocs());
}
for (int i = 0; i < allModels.size() - 1; i++) {
HashMap<String, CodegenModel> cm = (HashMap<String, CodegenModel>) allModels.get(i);
CodegenModel m = cm.get("model");
m.hasMoreModels = true;
}
config.postProcessSupportingFileData(bundle);
if (System.getProperty("debugSupportingFiles") != null) {
System.out.println("############ Supporting file info ############");
Json.prettyPrint(bundle);
}
for (SupportingFile support : config.supportingFiles()) {
String outputFolder = config.outputFolder();
if (isNotEmpty(support.folder)) {
outputFolder += File.separator + support.folder;
}
File of = new File(outputFolder);
if (!of.isDirectory()) {
of.mkdirs();
}
String outputFilename = outputFolder + File.separator + support.destinationFilename;
if (support.templateFile.endsWith("mustache")) {
String template = readTemplate(config.templateDir() + File.separator + support.templateFile);
Template tmpl = Mustache.compiler()
.withLoader(new Mustache.TemplateLoader() {
public Reader getTemplate(String name) {
return getTemplateReader(config.templateDir() + File.separator + name + ".mustache");
}
})
.defaultValue("")
.compile(template);
writeToFile(outputFilename, tmpl.execute(bundle));
files.add(new File(outputFilename));
} else {
InputStream in = null;
try {
in = new FileInputStream(config.templateDir() + File.separator + support.templateFile);
} catch (Exception e) {
// continue
}
if (in == null) {
in = this.getClass().getClassLoader().getResourceAsStream(config.templateDir() + File.separator + support.templateFile);
}
File outputFile = new File(outputFilename);
OutputStream out = new FileOutputStream(outputFile, false);
if (in != null && out != null) {
IOUtils.copy(in, out);
} else {
if (in == null) {
System.out.println("can't open " + config.templateDir() + File.separator + support.templateFile + " for input");
}
if (out == null) {
System.out.println("can't open " + outputFile + " for output");
}
}
files.add(outputFile);
}
}
config.processSwagger(swagger);
} catch (Exception e) {
e.printStackTrace();
}
return files;
}
private void processMimeTypes(List<String> mimeTypeList, Map<String, Object> operation, String source) {
if (mimeTypeList != null && mimeTypeList.size() > 0) {
List<Map<String, String>> c = new ArrayList<Map<String, String>>();
int count = 0;
for (String key : mimeTypeList) {
Map<String, String> mediaType = new HashMap<String, String>();
mediaType.put("mediaType", key);
count += 1;
if (count < mimeTypeList.size()) {
mediaType.put("hasMore", "true");
} else {
mediaType.put("hasMore", null);
}
c.add(mediaType);
}
operation.put(source, c);
String flagFieldName = "has" + source.substring(0, 1).toUpperCase() + source.substring(1);
operation.put(flagFieldName, true);
}
}
public Map<String, List<CodegenOperation>> processPaths(Map<String, Path> paths) {
Map<String, List<CodegenOperation>> ops = new HashMap<String, List<CodegenOperation>>();
for (String resourcePath : paths.keySet()) {
Path path = paths.get(resourcePath);
processOperation(resourcePath, "get", path.getGet(), ops);
processOperation(resourcePath, "put", path.getPut(), ops);
processOperation(resourcePath, "post", path.getPost(), ops);
processOperation(resourcePath, "delete", path.getDelete(), ops);
processOperation(resourcePath, "patch", path.getPatch(), ops);
processOperation(resourcePath, "options", path.getOptions(), ops);
}
return ops;
}
public SecuritySchemeDefinition fromSecurity(String name) {
Map<String, SecuritySchemeDefinition> map = swagger.getSecurityDefinitions();
if (map == null) {
return null;
}
return map.get(name);
}
public void processOperation(String resourcePath, String httpMethod, Operation operation, Map<String, List<CodegenOperation>> operations) {
if (operation != null) {
List<String> tags = operation.getTags();
if (tags == null) {
tags = new ArrayList<String>();
tags.add("default");
}
for (String tag : tags) {
CodegenOperation co = config.fromOperation(resourcePath, httpMethod, operation, swagger.getDefinitions());
co.tags = new ArrayList<String>();
co.tags.add(sanitizeTag(tag));
config.addOperationToGroup(sanitizeTag(tag), resourcePath, operation, co, operations);
List<Map<String, List<String>>> securities = operation.getSecurity();
if (securities == null) {
continue;
}
Map<String, SecuritySchemeDefinition> authMethods = new HashMap<String, SecuritySchemeDefinition>();
for (Map<String, List<String>> security : securities) {
if (security.size() != 1) {
//Not sure what to do
continue;
}
String securityName = security.keySet().iterator().next();
SecuritySchemeDefinition securityDefinition = fromSecurity(securityName);
if (securityDefinition != null) {
authMethods.put(securityName, securityDefinition);
}
}
if (!authMethods.isEmpty()) {
co.authMethods = config.fromSecurity(authMethods);
}
}
}
}
protected String sanitizeTag(String tag) {
// remove spaces and make strong case
String[] parts = tag.split(" ");
StringBuilder buf = new StringBuilder();
for (String part : parts) {
if (isNotEmpty(part)) {
buf.append(capitalize(part));
}
}
return buf.toString().replaceAll("[^a-zA-Z ]", "");
}
public Map<String, Object> processOperations(CodegenConfig config, String tag, List<CodegenOperation> ops) {
Map<String, Object> operations = new HashMap<String, Object>();
Map<String, Object> objs = new HashMap<String, Object>();
objs.put("classname", config.toApiName(tag));
// check for operationId uniqueness
Set<String> opIds = new HashSet<String>();
int counter = 0;
for (CodegenOperation op : ops) {
String opId = op.nickname;
if (opIds.contains(opId)) {
counter++;
op.nickname += "_" + counter;
}
opIds.add(opId);
}
objs.put("operation", ops);
operations.put("operations", objs);
operations.put("package", config.apiPackage());
Set<String> allImports = new LinkedHashSet<String>();
for (CodegenOperation op : ops) {
allImports.addAll(op.imports);
}
List<Map<String, String>> imports = new ArrayList<Map<String, String>>();
for (String nextImport : allImports) {
Map<String, String> im = new LinkedHashMap<String, String>();
String mapping = config.importMapping().get(nextImport);
if (mapping == null) {
mapping = config.toModelImport(nextImport);
}
if (mapping != null) {
im.put("import", mapping);
imports.add(im);
}
}
operations.put("imports", imports);
config.postProcessOperations(operations);
if (objs.size() > 0) {
List<CodegenOperation> os = (List<CodegenOperation>) objs.get("operation");
if (os != null && os.size() > 0) {
CodegenOperation op = os.get(os.size() - 1);
op.hasMore = null;
}
}
return operations;
}
public Map<String, Object> processModels(CodegenConfig config, Map<String, Model> definitions) {
Map<String, Object> objs = new HashMap<String, Object>();
objs.put("package", config.modelPackage());
List<Object> models = new ArrayList<Object>();
Set<String> allImports = new LinkedHashSet<String>();
for (String key : definitions.keySet()) {
Model mm = definitions.get(key);
CodegenModel cm = config.fromModel(key, mm);
Map<String, Object> mo = new HashMap<String, Object>();
mo.put("model", cm);
mo.put("importPath", config.toModelImport(key));
models.add(mo);
allImports.addAll(cm.imports);
}
objs.put("models", models);
List<Map<String, String>> imports = new ArrayList<Map<String, String>>();
for (String nextImport : allImports) {
Map<String, String> im = new LinkedHashMap<String, String>();
String mapping = config.importMapping().get(nextImport);
if (mapping == null) {
mapping = config.toModelImport(nextImport);
}
if (mapping != null && !config.defaultIncludes().contains(mapping)) {
im.put("import", mapping);
imports.add(im);
}
// add instantiation types
mapping = config.instantiationTypes().get(nextImport);
if (mapping != null && !config.defaultIncludes().contains(mapping)) {
im.put("import", mapping);
imports.add(im);
}
}
objs.put("imports", imports);
config.postProcessModels(objs);
return objs;
}
}

View File

@@ -0,0 +1,10 @@
package io.swagger.codegen;
import java.io.File;
import java.util.List;
public interface Generator {
Generator opts(ClientOptInput opts);
List<File> generate();
}

View File

@@ -0,0 +1,196 @@
package io.swagger.codegen;
import com.samskivert.mustache.Mustache;
import com.samskivert.mustache.Template;
import io.swagger.models.Swagger;
import org.apache.commons.cli.BasicParser;
import org.apache.commons.cli.CommandLine;
import org.apache.commons.cli.CommandLineParser;
import org.apache.commons.cli.HelpFormatter;
import org.apache.commons.cli.Options;
import org.apache.commons.io.FileUtils;
import java.io.File;
import java.io.Reader;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.ServiceLoader;
/**
* @deprecated use instead {@link io.swagger.codegen.DefaultGenerator}
* or cli interface from https://github.com/swagger-api/swagger-codegen/pull/547
*/
@Deprecated
public class MetaGenerator extends AbstractGenerator {
static Map<String, CodegenConfig> configs = new HashMap<String, CodegenConfig>();
static String configString;
public static void main(String[] args) {
new MetaGenerator().generate(args);
}
public static List<CodegenConfig> getExtensions() {
ServiceLoader<CodegenConfig> loader = ServiceLoader.load(CodegenConfig.class);
List<CodegenConfig> output = new ArrayList<CodegenConfig>();
Iterator<CodegenConfig> itr = loader.iterator();
while (itr.hasNext()) {
output.add(itr.next());
}
return output;
}
static void usage(Options options) {
HelpFormatter formatter = new HelpFormatter();
formatter.printHelp("MetaGenerator. Generator for creating a new template set " +
"and configuration for Codegen. The output will be based on the language you " +
"specify, and includes default templates to include.", options);
}
public static CodegenConfig getConfig(String name) {
if (configs.containsKey(name)) {
return configs.get(name);
}
return null;
}
protected void generate(String[] args) {
StringBuilder sb = new StringBuilder();
String targetLanguage = null;
String outputFolder = null;
String name = null;
String targetPackage = "io.swagger.codegen";
final String templateDir = "codegen";
Options options = new Options();
options.addOption("h", "help", false, "shows this message");
options.addOption("l", "lang", false, "client language to generate.\nAvailable languages include:\n\t[" + configString + "]");
options.addOption("o", "output", true, "where to write the generated files");
options.addOption("n", "name", true, "the human-readable name of the generator");
options.addOption("p", "package", true, "the package to put the main class into (defaults to io.swagger.codegen");
ClientOptInput clientOptInput = new ClientOptInput();
Swagger swagger = null;
CommandLine cmd = null;
try {
CommandLineParser parser = new BasicParser();
cmd = parser.parse(options, args);
if (cmd.hasOption("h")) {
usage(options);
return;
}
if (cmd.hasOption("n")) {
name = cmd.getOptionValue("n");
} else {
System.out.println("name is required");
usage(options);
return;
}
if (cmd.hasOption("l")) {
targetLanguage = cmd.getOptionValue("l");
}
if (cmd.hasOption("p")) {
targetPackage = cmd.getOptionValue("p");
}
if (cmd.hasOption("o")) {
outputFolder = cmd.getOptionValue("o");
} else {
System.out.println("output folder is required");
usage(options);
return;
}
} catch (Exception e) {
usage(options);
return;
}
System.out.println("writing to folder " + outputFolder);
File outputFolderLocation = new File(outputFolder);
if (!outputFolderLocation.exists()) {
outputFolderLocation.mkdirs();
}
File sourceFolder = new File(outputFolder + File.separator + "src/main/java/" + targetPackage.replace('.', File.separatorChar));
if (!sourceFolder.exists()) {
sourceFolder.mkdirs();
}
File resourcesFolder = new File(outputFolder + File.separator + "src/main/resources/META-INF/services");
if (!resourcesFolder.exists()) {
resourcesFolder.mkdirs();
}
String mainClass = Character.toUpperCase(name.charAt(0)) + name.substring(1) + "Generator";
List<SupportingFile> supportingFiles = new ArrayList<SupportingFile>();
supportingFiles.add(new SupportingFile("pom.mustache", "", "pom.xml"));
supportingFiles.add(new SupportingFile("generatorClass.mustache",
"src/main/java/" + File.separator + targetPackage.replace('.', File.separatorChar),
mainClass + ".java"));
supportingFiles.add(new SupportingFile("README.mustache", "", "README.md"));
supportingFiles.add(new SupportingFile("api.template", "src/main/resources" + File.separator + name, "api.mustache"));
supportingFiles.add(new SupportingFile("model.template", "src/main/resources" + File.separator + name, "model.mustache"));
supportingFiles.add(new SupportingFile("services.mustache", "src/main/resources/META-INF/services", "io.swagger.codegen.CodegenConfig"));
List<File> files = new ArrayList<File>();
Map<String, Object> data = new HashMap<String, Object>();
data.put("generatorPackage", targetPackage);
data.put("generatorClass", mainClass);
data.put("name", name);
data.put("fullyQualifiedGeneratorClass", targetPackage + "." + mainClass);
for (SupportingFile support : supportingFiles) {
try {
String destinationFolder = outputFolder;
if (support.folder != null && !"".equals(support.folder)) {
destinationFolder += File.separator + support.folder;
}
File of = new File(destinationFolder);
if (!of.isDirectory()) {
of.mkdirs();
}
String outputFilename = destinationFolder + File.separator + support.destinationFilename;
if (support.templateFile.endsWith("mustache")) {
String template = readTemplate(templateDir + File.separator + support.templateFile);
Template tmpl = Mustache.compiler()
.withLoader(new Mustache.TemplateLoader() {
public Reader getTemplate(String name) {
return getTemplateReader(templateDir + File.separator + name + ".mustache");
}
;
})
.defaultValue("")
.compile(template);
writeToFile(outputFilename, tmpl.execute(data));
files.add(new File(outputFilename));
} else {
String template = readTemplate(templateDir + File.separator + support.templateFile);
FileUtils.writeStringToFile(new File(outputFilename), template);
System.out.println("copying file to " + outputFilename);
files.add(new File(outputFilename));
}
} catch (java.io.IOException e) {
e.printStackTrace();
}
}
}
static {
List<CodegenConfig> extensions = getExtensions();
StringBuilder sb = new StringBuilder();
for (CodegenConfig config : extensions) {
if (sb.toString().length() != 0) {
sb.append(", ");
}
sb.append(config.getName());
configs.put(config.getName(), config);
configString = sb.toString();
}
}
}

View File

@@ -0,0 +1,13 @@
package io.swagger.codegen;
public class SupportingFile {
public String templateFile;
public String folder;
public String destinationFilename;
public SupportingFile(String templateFile, String folder, String destinationFilename) {
this.templateFile = templateFile;
this.folder = folder;
this.destinationFilename = destinationFilename;
}
}

View File

@@ -0,0 +1,7 @@
package io.swagger.codegen.auth;
public interface AuthMethod {
String getType();
void setType(String type);
}

View File

@@ -0,0 +1,158 @@
package io.swagger.codegen.examples;
import io.swagger.models.Model;
import io.swagger.models.ModelImpl;
import io.swagger.models.properties.ArrayProperty;
import io.swagger.models.properties.BooleanProperty;
import io.swagger.models.properties.DateProperty;
import io.swagger.models.properties.DateTimeProperty;
import io.swagger.models.properties.DecimalProperty;
import io.swagger.models.properties.DoubleProperty;
import io.swagger.models.properties.FileProperty;
import io.swagger.models.properties.FloatProperty;
import io.swagger.models.properties.IntegerProperty;
import io.swagger.models.properties.LongProperty;
import io.swagger.models.properties.MapProperty;
import io.swagger.models.properties.ObjectProperty;
import io.swagger.models.properties.Property;
import io.swagger.models.properties.RefProperty;
import io.swagger.models.properties.StringProperty;
import io.swagger.models.properties.UUIDProperty;
import io.swagger.util.Json;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
public class ExampleGenerator {
protected Map<String, Model> examples;
public ExampleGenerator(Map<String, Model> examples) {
this.examples = examples;
}
public List<Map<String, String>> generate(Map<String, Object> examples, List<String> mediaTypes, Property property) {
List<Map<String, String>> output = new ArrayList<Map<String, String>>();
Set<String> processedModels = new HashSet<String>();
if (examples == null) {
if (mediaTypes == null) {
// assume application/json for this
mediaTypes = Arrays.asList("application/json");
}
for (String mediaType : mediaTypes) {
Map<String, String> kv = new HashMap<String, String>();
kv.put("contentType", mediaType);
if (property != null && mediaType.startsWith("application/json")) {
String example = Json.pretty(resolvePropertyToExample(mediaType, property, processedModels));
if (example != null) {
kv.put("example", example);
output.add(kv);
}
} else if (property != null && mediaType.startsWith("application/xml")) {
String example = new XmlExampleGenerator(this.examples).toXml(property);
if (example != null) {
kv.put("example", example);
output.add(kv);
}
}
}
} else {
for (Map.Entry<String, Object> entry : examples.entrySet()) {
final Map<String, String> kv = new HashMap<String, String>();
kv.put("contentType", entry.getKey());
kv.put("example", Json.pretty(entry.getValue()));
output.add(kv);
}
}
if (output.size() == 0) {
Map<String, String> kv = new HashMap<String, String>();
kv.put("output", "none");
output.add(kv);
}
return output;
}
protected Object resolvePropertyToExample(String mediaType, Property property, Set<String> processedModels) {
if (property.getExample() != null) {
return property.getExample();
} else if (property instanceof StringProperty) {
return "aeiou";
} else if (property instanceof BooleanProperty) {
return Boolean.TRUE;
} else if (property instanceof ArrayProperty) {
Property innerType = ((ArrayProperty) property).getItems();
if (innerType != null) {
Object[] output = new Object[]{
resolvePropertyToExample(mediaType, innerType, processedModels)
};
return output;
}
} else if (property instanceof DateProperty) {
return new java.util.Date(System.currentTimeMillis());
} else if (property instanceof DateTimeProperty) {
return new java.util.Date(System.currentTimeMillis());
} else if (property instanceof DecimalProperty) {
return new BigDecimal(1.3579);
} else if (property instanceof DoubleProperty) {
return new Double(3.149);
} else if (property instanceof FileProperty) {
return ""; // TODO
} else if (property instanceof FloatProperty) {
return new Float(1.23);
} else if (property instanceof IntegerProperty) {
return new Integer(123);
} else if (property instanceof LongProperty) {
return new Long(123456789);
} else if (property instanceof MapProperty) {
Map<String, Object> mp = new HashMap<String, Object>();
if (property.getName() != null) {
mp.put(property.getName(),
resolvePropertyToExample(mediaType, ((MapProperty) property).getAdditionalProperties(), processedModels));
} else {
mp.put("key",
resolvePropertyToExample(mediaType, ((MapProperty) property).getAdditionalProperties(), processedModels));
}
return mp;
} else if (property instanceof ObjectProperty) {
return "{}";
} else if (property instanceof RefProperty) {
String simpleName = ((RefProperty) property).getSimpleRef();
Model model = examples.get(simpleName);
if (model != null) {
return resolveModelToExample(simpleName, mediaType, model, processedModels);
}
} else if (property instanceof UUIDProperty) {
return "046b6c7f-0b8a-43b9-b35d-6489e6daee91";
}
return "";
}
public Object resolveModelToExample(String name, String mediaType, Model model, Set<String> processedModels) {
if (processedModels.contains(name)) {
return "";
}
if (model instanceof ModelImpl) {
processedModels.add(name);
ModelImpl impl = (ModelImpl) model;
Map<String, Object> values = new HashMap<String, Object>();
if (impl != null && impl.getProperties() != null) {
for (String propertyName : impl.getProperties().keySet()) {
Property property = impl.getProperties().get(propertyName);
values.put(propertyName, resolvePropertyToExample(mediaType, property, processedModels));
}
}
return values;
}
return "";
}
}

View File

@@ -0,0 +1,226 @@
package io.swagger.codegen.examples;
import io.swagger.models.Model;
import io.swagger.models.ModelImpl;
import io.swagger.models.RefModel;
import io.swagger.models.Xml;
import io.swagger.models.properties.ArrayProperty;
import io.swagger.models.properties.BooleanProperty;
import io.swagger.models.properties.DateProperty;
import io.swagger.models.properties.DateTimeProperty;
import io.swagger.models.properties.IntegerProperty;
import io.swagger.models.properties.LongProperty;
import io.swagger.models.properties.Property;
import io.swagger.models.properties.RefProperty;
import io.swagger.models.properties.StringProperty;
import org.codehaus.plexus.util.StringUtils;
import java.text.SimpleDateFormat;
import java.util.Collection;
import java.util.Collections;
import java.util.Date;
import java.util.HashMap;
import java.util.HashSet;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Set;
public class XmlExampleGenerator {
public static String NEWLINE = "\n";
public static String TAG_START = "<";
public static String CLOSE_TAG = ">";
public static String TAG_END = "</";
private static String EMPTY = "";
protected Map<String, Model> examples;
protected SimpleDateFormat dtFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
protected SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
public XmlExampleGenerator(Map<String, Model> examples) {
this.examples = examples;
if (examples == null) {
examples = new HashMap<String, Model>();
}
}
public String toXml(Property property) {
return toXml(null, property, 0, Collections.<String>emptySet());
}
protected String toXml(Model model, int indent, Collection<String> path) {
if (model instanceof RefModel) {
RefModel ref = (RefModel) model;
Model actualModel = examples.get(ref.getSimpleRef());
if (actualModel instanceof ModelImpl) {
return modelImplToXml((ModelImpl) actualModel, indent, path);
}
} else if (model instanceof ModelImpl) {
return modelImplToXml((ModelImpl) model, indent, path);
}
return null;
}
protected String modelImplToXml(ModelImpl model, int indent, Collection<String> path) {
final String modelName = model.getName();
if (path.contains(modelName)) {
return EMPTY;
}
final Set<String> selfPath = new HashSet<String>(path);
selfPath.add(modelName);
StringBuilder sb = new StringBuilder();
// attributes
Map<String, Property> attributes = new LinkedHashMap<String, Property>();
Map<String, Property> elements = new LinkedHashMap<String, Property>();
String name = modelName;
String namespace;
String prefix;
Boolean wrapped;
Xml xml = model.getXml();
if (xml != null) {
if (xml.getName() != null) {
name = xml.getName();
}
}
for (String pName : model.getProperties().keySet()) {
Property p = model.getProperties().get(pName);
if (p != null && p.getXml() != null && p.getXml().getAttribute() != null && p.getXml().getAttribute()) {
attributes.put(pName, p);
} else {
elements.put(pName, p);
}
}
sb.append(indent(indent)).append(TAG_START);
sb.append(name);
for (String pName : attributes.keySet()) {
Property p = attributes.get(pName);
sb.append(" ").append(pName).append("=").append(quote(toXml(null, p, 0, selfPath)));
}
sb.append(CLOSE_TAG);
sb.append(NEWLINE);
for (String pName : elements.keySet()) {
Property p = elements.get(pName);
final String asXml = toXml(pName, p, indent + 1, selfPath);
if (StringUtils.isEmpty(asXml)) {
continue;
}
sb.append(asXml);
sb.append(NEWLINE);
}
sb.append(indent(indent)).append(TAG_END).append(name).append(CLOSE_TAG);
return sb.toString();
}
protected String quote(String string) {
return "\"" + string + "\"";
}
protected String toXml(String name, Property property, int indent, Collection<String> path) {
if (property == null) {
return "";
}
StringBuilder sb = new StringBuilder();
if (property instanceof ArrayProperty) {
ArrayProperty p = (ArrayProperty) property;
Property inner = p.getItems();
boolean wrapped = false;
if (property.getXml() != null && property.getXml().getWrapped()) {
wrapped = true;
}
if (wrapped) {
String prefix = EMPTY;
if (name != null) {
sb.append(indent(indent));
sb.append(openTag(name));
prefix = NEWLINE;
}
final String asXml = toXml(name, inner, indent + 1, path);
if (StringUtils.isNotEmpty(asXml)) {
sb.append(prefix).append(asXml);
}
if (name != null) {
sb.append(NEWLINE);
sb.append(indent(indent));
sb.append(closeTag(name));
}
} else {
sb.append(toXml(name, inner, indent, path));
}
} else if (property instanceof RefProperty) {
RefProperty ref = (RefProperty) property;
Model actualModel = examples.get(ref.getSimpleRef());
sb.append(toXml(actualModel, indent, path));
} else {
if (name != null) {
sb.append(indent(indent));
sb.append(openTag(name));
}
sb.append(getExample(property));
if (name != null) {
sb.append(closeTag(name));
}
}
return sb.toString();
}
protected String getExample(Property property) {
if (property instanceof DateTimeProperty) {
if (property.getExample() != null) {
return property.getExample();
} else {
return dtFormat.format(new Date());
}
} else if (property instanceof StringProperty) {
if (property.getExample() != null) {
return property.getExample();
} else {
return "string";
}
} else if (property instanceof DateProperty) {
if (property.getExample() != null) {
return property.getExample();
} else {
return dateFormat.format(new Date());
}
} else if (property instanceof IntegerProperty) {
if (property.getExample() != null) {
return property.getExample();
} else {
return "0";
}
} else if (property instanceof BooleanProperty) {
if (property.getExample() != null) {
return property.getExample();
} else {
return "true";
}
} else if (property instanceof LongProperty) {
if (property.getExample() != null) {
return property.getExample();
} else {
return "123456";
}
}
return "not implemented " + property;
}
protected String openTag(String name) {
return "<" + name + ">";
}
protected String closeTag(String name) {
return "</" + name + ">";
}
protected String indent(int indent) {
StringBuffer sb = new StringBuffer();
for (int i = 0; i < indent; i++) {
sb.append(" ");
}
return sb.toString();
}
}

View File

@@ -0,0 +1,399 @@
package io.swagger.codegen.languages;
import com.google.common.base.CaseFormat;
import com.samskivert.mustache.Mustache;
import com.samskivert.mustache.Template;
import io.swagger.codegen.CodegenConfig;
import io.swagger.codegen.CodegenOperation;
import io.swagger.codegen.CodegenProperty;
import io.swagger.codegen.CodegenResponse;
import io.swagger.codegen.CodegenSecurity;
import io.swagger.codegen.CodegenType;
import io.swagger.codegen.DefaultCodegen;
import io.swagger.codegen.SupportingFile;
import io.swagger.models.auth.SecuritySchemeDefinition;
import io.swagger.models.properties.ArrayProperty;
import io.swagger.models.properties.BooleanProperty;
import io.swagger.models.properties.DateProperty;
import io.swagger.models.properties.DateTimeProperty;
import io.swagger.models.properties.DoubleProperty;
import io.swagger.models.properties.FloatProperty;
import io.swagger.models.properties.IntegerProperty;
import io.swagger.models.properties.LongProperty;
import io.swagger.models.properties.MapProperty;
import io.swagger.models.properties.Property;
import io.swagger.models.properties.StringProperty;
import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.File;
import java.io.IOException;
import java.io.StringWriter;
import java.io.Writer;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
public class AkkaScalaClientCodegen extends DefaultCodegen implements CodegenConfig {
protected String mainPackage = "io.swagger.client";
protected String invokerPackage = mainPackage + ".core";
protected String groupId = "io.swagger";
protected String artifactId = "swagger-client";
protected String artifactVersion = "1.0.0";
protected String sourceFolder = "src/main/scala";
protected String resourcesFolder = "src/main/resources";
protected String configKey = "apiRequest";
protected int defaultTimeoutInMs = 5000;
protected String configKeyPath = mainPackage;
protected boolean registerNonStandardStatusCodes = true;
protected boolean renderJavadoc = true;
protected boolean removeOAuthSecurities = true;
/**
* If set to true, only the default response (the one with le lowest 2XX code) will be considered as a success, and all
* others as ApiErrors.
* If set to false, all responses defined in the model will be considered as a success upon reception. Only http errors,
* unmarshalling problems and any other RuntimeException will be considered as ApiErrors.
*/
protected boolean onlyOneSuccess = true;
Logger LOGGER = LoggerFactory.getLogger(AkkaScalaClientCodegen.class);
public AkkaScalaClientCodegen() {
super();
outputFolder = "generated-code/scala";
modelTemplateFiles.put("model.mustache", ".scala");
apiTemplateFiles.put("api.mustache", ".scala");
templateDir = "akka-scala";
apiPackage = mainPackage + ".api";
modelPackage = mainPackage + ".model";
reservedWords = new HashSet<String>(
Arrays.asList(
"abstract", "case", "catch", "class", "def", "do", "else", "extends",
"false", "final", "finally", "for", "forSome", "if", "implicit",
"import", "lazy", "match", "new", "null", "object", "override", "package",
"private", "protected", "return", "sealed", "super", "this", "throw",
"trait", "try", "true", "type", "val", "var", "while", "with", "yield")
);
additionalProperties.put("invokerPackage", invokerPackage);
additionalProperties.put("groupId", groupId);
additionalProperties.put("artifactId", artifactId);
additionalProperties.put("artifactVersion", artifactVersion);
additionalProperties.put("configKey", configKey);
additionalProperties.put("configKeyPath", configKeyPath);
additionalProperties.put("defaultTimeout", defaultTimeoutInMs);
if (renderJavadoc) {
additionalProperties.put("javadocRenderer", new JavadocLambda());
}
additionalProperties.put("fnCapitalize", new CapitalizeLambda());
additionalProperties.put("fnCamelize", new CamelizeLambda(false));
additionalProperties.put("fnEnumEntry", new EnumEntryLambda());
additionalProperties.put("onlyOneSuccess", onlyOneSuccess);
supportingFiles.add(new SupportingFile("pom.mustache", "", "pom.xml"));
supportingFiles.add(new SupportingFile("reference.mustache", resourcesFolder, "reference.conf"));
final String invokerFolder = (sourceFolder + File.separator + invokerPackage).replace(".", File.separator);
supportingFiles.add(new SupportingFile("apiRequest.mustache", invokerFolder, "ApiRequest.scala"));
supportingFiles.add(new SupportingFile("apiInvoker.mustache", invokerFolder, "ApiInvoker.scala"));
supportingFiles.add(new SupportingFile("requests.mustache", invokerFolder, "requests.scala"));
supportingFiles.add(new SupportingFile("apiSettings.mustache", invokerFolder, "ApiSettings.scala"));
final String apiFolder = (sourceFolder + File.separator + apiPackage).replace(".", File.separator);
supportingFiles.add(new SupportingFile("enumsSerializers.mustache", apiFolder, "EnumsSerializers.scala"));
importMapping.remove("Seq");
importMapping.remove("List");
importMapping.remove("Set");
importMapping.remove("Map");
importMapping.put("DateTime", "org.joda.time.DateTime");
typeMapping = new HashMap<String, String>();
typeMapping.put("array", "Seq");
typeMapping.put("set", "Set");
typeMapping.put("boolean", "Boolean");
typeMapping.put("string", "String");
typeMapping.put("int", "Int");
typeMapping.put("integer", "Int");
typeMapping.put("long", "Long");
typeMapping.put("float", "Float");
typeMapping.put("byte", "Byte");
typeMapping.put("short", "Short");
typeMapping.put("char", "Char");
typeMapping.put("long", "Long");
typeMapping.put("double", "Double");
typeMapping.put("object", "Any");
typeMapping.put("file", "File");
typeMapping.put("number", "Double");
languageSpecificPrimitives = new HashSet<String>(
Arrays.asList(
"String",
"boolean",
"Boolean",
"Double",
"Int",
"Long",
"Float",
"Object",
"List",
"Seq",
"Map")
);
instantiationTypes.put("array", "ListBuffer");
instantiationTypes.put("map", "Map");
}
public CodegenType getTag() {
return CodegenType.CLIENT;
}
public String getName() {
return "akka-scala";
}
public String getHelp() {
return "Generates a Scala client library base on Akka/Spray.";
}
@Override
public String escapeReservedWord(String name) {
return "`" + name + "`";
}
@Override
public String apiFileFolder() {
return outputFolder + "/" + sourceFolder + "/" + apiPackage().replace('.', File.separatorChar);
}
public String modelFileFolder() {
return outputFolder + "/" + sourceFolder + "/" + modelPackage().replace('.', File.separatorChar);
}
@Override
public Map<String, Object> postProcessOperations(Map<String, Object> objs) {
if (registerNonStandardStatusCodes) {
try {
@SuppressWarnings("unchecked")
Map<String, ArrayList<CodegenOperation>> opsMap = (Map<String, ArrayList<CodegenOperation>>) objs.get("operations");
HashSet<Integer> unknownCodes = new HashSet<Integer>();
for (CodegenOperation operation : opsMap.get("operation")) {
for (CodegenResponse response : operation.responses) {
if ("default".equals(response.code)) {
continue;
}
try {
int code = Integer.parseInt(response.code);
if (code >= 600) {
unknownCodes.add(code);
}
} catch (NumberFormatException e) {
LOGGER.error("Status code is not an integer : response.code", e);
}
}
}
if (!unknownCodes.isEmpty()) {
additionalProperties.put("unknownStatusCodes", unknownCodes);
}
} catch (Exception e) {
LOGGER.error("Unable to find operations List", e);
}
}
return super.postProcessOperations(objs);
}
@Override
public String getTypeDeclaration(Property p) {
if (p instanceof ArrayProperty) {
ArrayProperty ap = (ArrayProperty) p;
Property inner = ap.getItems();
return getSwaggerType(p) + "[" + getTypeDeclaration(inner) + "]";
} else if (p instanceof MapProperty) {
MapProperty mp = (MapProperty) p;
Property inner = mp.getAdditionalProperties();
return getSwaggerType(p) + "[String, " + getTypeDeclaration(inner) + "]";
}
return super.getTypeDeclaration(p);
}
@Override
public List<CodegenSecurity> fromSecurity(Map<String, SecuritySchemeDefinition> schemes) {
final List<CodegenSecurity> codegenSecurities = super.fromSecurity(schemes);
if (!removeOAuthSecurities) {
return codegenSecurities;
}
// Remove OAuth securities
Iterator<CodegenSecurity> it = codegenSecurities.iterator();
while (it.hasNext()) {
final CodegenSecurity security = it.next();
if (security.isOAuth) {
it.remove();
}
}
// Adapt 'hasMore'
it = codegenSecurities.iterator();
while (it.hasNext()) {
final CodegenSecurity security = it.next();
security.hasMore = it.hasNext();
}
if (codegenSecurities.isEmpty()) {
return null;
}
return codegenSecurities;
}
@Override
public String toOperationId(String operationId) {
return super.toOperationId(CaseFormat.UPPER_CAMEL.to(CaseFormat.LOWER_CAMEL, operationId));
}
private String formatIdentifier(String name, boolean capitalized) {
String identifier = camelize(name, true);
if (capitalized) {
identifier = StringUtils.capitalize(identifier);
}
if (identifier.matches("[a-zA-Z_$][\\w_$]+") && !reservedWords.contains(identifier)) {
return identifier;
}
return escapeReservedWord(identifier);
}
@Override
public String toParamName(String name) {
return formatIdentifier(name, false);
}
@Override
public String toVarName(String name) {
return formatIdentifier(name, false);
}
@Override
public String toEnumName(CodegenProperty property) {
return formatIdentifier(property.baseName, true);
}
@Override
public String getSwaggerType(Property p) {
String swaggerType = super.getSwaggerType(p);
String type;
if (typeMapping.containsKey(swaggerType)) {
type = typeMapping.get(swaggerType);
if (languageSpecificPrimitives.contains(type)) {
return toModelName(type);
}
} else {
type = swaggerType;
}
return toModelName(type);
}
@Override
public String toInstantiationType(Property p) {
if (p instanceof MapProperty) {
MapProperty ap = (MapProperty) p;
String inner = getSwaggerType(ap.getAdditionalProperties());
return instantiationTypes.get("map") + "[String, " + inner + "]";
} else if (p instanceof ArrayProperty) {
ArrayProperty ap = (ArrayProperty) p;
String inner = getSwaggerType(ap.getItems());
return instantiationTypes.get("array") + "[" + inner + "]";
} else {
return null;
}
}
public String toDefaultValue(Property p) {
if (!p.getRequired()) {
return "None";
}
if (p instanceof StringProperty) {
return "null";
} else if (p instanceof BooleanProperty) {
return "null";
} else if (p instanceof DateProperty) {
return "null";
} else if (p instanceof DateTimeProperty) {
return "null";
} else if (p instanceof DoubleProperty) {
return "null";
} else if (p instanceof FloatProperty) {
return "null";
} else if (p instanceof IntegerProperty) {
return "null";
} else if (p instanceof LongProperty) {
return "null";
} else if (p instanceof MapProperty) {
MapProperty ap = (MapProperty) p;
String inner = getSwaggerType(ap.getAdditionalProperties());
return "Map[String, " + inner + "].empty ";
} else if (p instanceof ArrayProperty) {
ArrayProperty ap = (ArrayProperty) p;
String inner = getSwaggerType(ap.getItems());
return "Seq[" + inner + "].empty ";
} else {
return "null";
}
}
private static abstract class CustomLambda implements Mustache.Lambda {
@Override
public void execute(Template.Fragment frag, Writer out) throws IOException {
final StringWriter tempWriter = new StringWriter();
frag.execute(tempWriter);
out.write(formatFragment(tempWriter.toString()));
}
public abstract String formatFragment(String fragment);
}
private static class JavadocLambda extends CustomLambda {
@Override
public String formatFragment(String fragment) {
final String[] lines = fragment.split("\\r?\\n");
final StringBuilder sb = new StringBuilder();
sb.append(" /**\n");
for (String line : lines) {
sb.append(" * ").append(line).append("\n");
}
sb.append(" */\n");
return sb.toString();
}
}
private static class CapitalizeLambda extends CustomLambda {
@Override
public String formatFragment(String fragment) {
return StringUtils.capitalize(fragment);
}
}
private static class CamelizeLambda extends CustomLambda {
private final boolean capitalizeFirst;
public CamelizeLambda(boolean capitalizeFirst) {
this.capitalizeFirst = capitalizeFirst;
}
@Override
public String formatFragment(String fragment) {
return camelize(fragment, !capitalizeFirst);
}
}
private class EnumEntryLambda extends CustomLambda {
@Override
public String formatFragment(String fragment) {
return formatIdentifier(fragment, true);
}
}
}

View File

@@ -0,0 +1,265 @@
package io.swagger.codegen.languages;
import io.swagger.codegen.CliOption;
import io.swagger.codegen.CodegenConfig;
import io.swagger.codegen.CodegenType;
import io.swagger.codegen.DefaultCodegen;
import io.swagger.codegen.SupportingFile;
import io.swagger.models.properties.ArrayProperty;
import io.swagger.models.properties.MapProperty;
import io.swagger.models.properties.Property;
import java.io.File;
import java.util.Arrays;
import java.util.HashSet;
public class AndroidClientCodegen extends DefaultCodegen implements CodegenConfig {
protected String invokerPackage = "io.swagger.client";
protected String groupId = "io.swagger";
protected String artifactId = "swagger-android-client";
protected String artifactVersion = "1.0.0";
protected String projectFolder = "src/main";
protected String sourceFolder = projectFolder + "/java";
protected Boolean useAndroidMavenGradlePlugin = true;
public AndroidClientCodegen() {
super();
outputFolder = "generated-code/android";
modelTemplateFiles.put("model.mustache", ".java");
apiTemplateFiles.put("api.mustache", ".java");
templateDir = "android-java";
apiPackage = "io.swagger.client.api";
modelPackage = "io.swagger.client.model";
reservedWords = new HashSet<String>(
Arrays.asList(
"abstract", "continue", "for", "new", "switch", "assert",
"default", "if", "package", "synchronized", "boolean", "do", "goto", "private",
"this", "break", "double", "implements", "protected", "throw", "byte", "else",
"import", "public", "throws", "case", "enum", "instanceof", "return", "transient",
"catch", "extends", "int", "short", "try", "char", "final", "interface", "static",
"void", "class", "finally", "long", "strictfp", "volatile", "const", "float",
"native", "super", "while")
);
languageSpecificPrimitives = new HashSet<String>(
Arrays.asList(
"String",
"boolean",
"Boolean",
"Double",
"Integer",
"Long",
"Float",
"Object")
);
instantiationTypes.put("array", "ArrayList");
instantiationTypes.put("map", "HashMap");
cliOptions.add(new CliOption("invokerPackage", "root package to use for the generated code"));
cliOptions.add(new CliOption("groupId", "groupId for use in the generated build.gradle and pom.xml"));
cliOptions.add(new CliOption("artifactId", "artifactId for use in the generated build.gradle and pom.xml"));
cliOptions.add(new CliOption("artifactVersion", "artifact version for use in the generated build.gradle and pom.xml"));
cliOptions.add(new CliOption("sourceFolder", "source folder for generated code"));
cliOptions.add(new CliOption("useAndroidMavenGradlePlugin", "A flag to toggle android-maven gradle plugin. Default is true."));
}
public CodegenType getTag() {
return CodegenType.CLIENT;
}
public String getName() {
return "android";
}
public String getHelp() {
return "Generates an Android client library.";
}
@Override
public String escapeReservedWord(String name) {
return "_" + name;
}
@Override
public String apiFileFolder() {
return outputFolder + "/" + sourceFolder + "/" + apiPackage().replace('.', File.separatorChar);
}
public String modelFileFolder() {
return outputFolder + "/" + sourceFolder + "/" + modelPackage().replace('.', File.separatorChar);
}
@Override
public String getTypeDeclaration(Property p) {
if (p instanceof ArrayProperty) {
ArrayProperty ap = (ArrayProperty) p;
Property inner = ap.getItems();
return getSwaggerType(p) + "<" + getTypeDeclaration(inner) + ">";
} else if (p instanceof MapProperty) {
MapProperty mp = (MapProperty) p;
Property inner = mp.getAdditionalProperties();
return getSwaggerType(p) + "<String, " + getTypeDeclaration(inner) + ">";
}
return super.getTypeDeclaration(p);
}
@Override
public String getSwaggerType(Property p) {
String swaggerType = super.getSwaggerType(p);
String type = null;
if (typeMapping.containsKey(swaggerType)) {
type = typeMapping.get(swaggerType);
if (languageSpecificPrimitives.contains(type)) {
return toModelName(type);
}
} else {
type = swaggerType;
}
return toModelName(type);
}
@Override
public String toVarName(String name) {
// replace - with _ e.g. created-at => created_at
name = name.replaceAll("-", "_");
// if it's all uppper case, do nothing
if (name.matches("^[A-Z_]*$")) {
return name;
}
// camelize (lower first character) the variable name
// pet_id => petId
name = camelize(name, true);
// for reserved word or word starting with number, append _
if (reservedWords.contains(name) || name.matches("^\\d.*")) {
name = escapeReservedWord(name);
}
return name;
}
@Override
public String toParamName(String name) {
// should be the same as variable name
return toVarName(name);
}
@Override
public String toModelName(String name) {
// model name cannot use reserved keyword, e.g. return
if (reservedWords.contains(name)) {
throw new RuntimeException(name + " (reserved word) cannot be used as a model name");
}
// camelize the model name
// phone_number => PhoneNumber
return camelize(name);
}
@Override
public String toModelFilename(String name) {
// should be the same as the model name
return toModelName(name);
}
@Override
public String toOperationId(String operationId) {
// method name cannot use reserved keyword, e.g. return
if (reservedWords.contains(operationId)) {
throw new RuntimeException(operationId + " (reserved word) cannot be used as method name");
}
return camelize(operationId, true);
}
@Override
public void processOpts() {
super.processOpts();
if (additionalProperties.containsKey("invokerPackage")) {
this.setInvokerPackage((String) additionalProperties.get("invokerPackage"));
} else {
//not set, use default to be passed to template
additionalProperties.put("invokerPackage", invokerPackage);
}
if (additionalProperties.containsKey("groupId")) {
this.setGroupId((String) additionalProperties.get("groupId"));
} else {
//not set, use to be passed to template
additionalProperties.put("groupId", groupId);
}
if (additionalProperties.containsKey("artifactId")) {
this.setArtifactId((String) additionalProperties.get("artifactId"));
} else {
//not set, use to be passed to template
additionalProperties.put("artifactId", artifactId);
}
if (additionalProperties.containsKey("artifactVersion")) {
this.setArtifactVersion((String) additionalProperties.get("artifactVersion"));
} else {
//not set, use to be passed to template
additionalProperties.put("artifactVersion", artifactVersion);
}
if (additionalProperties.containsKey("sourceFolder")) {
this.setSourceFolder((String) additionalProperties.get("sourceFolder"));
}
if (additionalProperties.containsKey("useAndroidMavenGradlePlugin")) {
this.setUseAndroidMavenGradlePlugin((Boolean) additionalProperties.get("useAndroidMavenGradlePlugin"));
} else {
additionalProperties.put("useAndroidMavenGradlePlugin", useAndroidMavenGradlePlugin);
}
supportingFiles.add(new SupportingFile("pom.mustache", "", "pom.xml"));
additionalProperties.put("useAndroidMavenGradlePlugin", useAndroidMavenGradlePlugin);
supportingFiles.add(new SupportingFile("settings.gradle.mustache", "", "settings.gradle"));
supportingFiles.add(new SupportingFile("build.mustache", "", "build.gradle"));
supportingFiles.add(new SupportingFile("manifest.mustache", projectFolder, "AndroidManifest.xml"));
supportingFiles.add(new SupportingFile("apiInvoker.mustache",
(sourceFolder + File.separator + invokerPackage).replace(".", java.io.File.separator), "ApiInvoker.java"));
supportingFiles.add(new SupportingFile("httpPatch.mustache",
(sourceFolder + File.separator + invokerPackage).replace(".", java.io.File.separator), "HttpPatch.java"));
supportingFiles.add(new SupportingFile("jsonUtil.mustache",
(sourceFolder + File.separator + invokerPackage).replace(".", java.io.File.separator), "JsonUtil.java"));
supportingFiles.add(new SupportingFile("apiException.mustache",
(sourceFolder + File.separator + invokerPackage).replace(".", java.io.File.separator), "ApiException.java"));
}
public Boolean getUseAndroidMavenGradlePlugin() {
return useAndroidMavenGradlePlugin;
}
public void setUseAndroidMavenGradlePlugin(Boolean useAndroidMavenGradlePlugin) {
this.useAndroidMavenGradlePlugin = useAndroidMavenGradlePlugin;
}
public void setInvokerPackage(String invokerPackage) {
this.invokerPackage = invokerPackage;
}
public void setGroupId(String groupId) {
this.groupId = groupId;
}
public void setArtifactId(String artifactId) {
this.artifactId = artifactId;
}
public void setArtifactVersion(String artifactVersion) {
this.artifactVersion = artifactVersion;
}
public void setSourceFolder(String sourceFolder) {
this.sourceFolder = sourceFolder;
}
}

Some files were not shown because too many files have changed in this diff Show More