forked from loafle/openapi-generator-original
		
	updated files
This commit is contained in:
		
							parent
							
								
									776508759d
								
							
						
					
					
						commit
						18eb3cde97
					
				| @ -1,8 +1,8 @@ | ||||
| <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> | ||||
|     <groupId>io.swagger</groupId> | ||||
|     <artifactId>swagger-codegen-project</artifactId> | ||||
|     <version>2.1.1-M2-SNAPSHOT</version> | ||||
|     <version>2.1.1</version> | ||||
|     <relativePath>../..</relativePath> | ||||
|   </parent> | ||||
|   <modelVersion>4.0.0</modelVersion> | ||||
| @ -52,7 +52,7 @@ | ||||
|           </execution> | ||||
|         </executions> | ||||
|         <configuration> | ||||
|           <mainClass>com.wordnik.swagger.codegen.Codegen</mainClass> | ||||
|           <mainClass>io.swagger.codegen.Codegen</mainClass> | ||||
|         </configuration> | ||||
|       </plugin> | ||||
|       <plugin> | ||||
| @ -125,7 +125,7 @@ | ||||
|               <mode>development</mode> | ||||
|               <url>${project.url}</url> | ||||
|               <implementation-version>${project.version}</implementation-version> | ||||
|               <package>com.wordnik</package> | ||||
|               <package>io.swagger</package> | ||||
|             </manifestEntries> | ||||
|           </archive> | ||||
|         </configuration> | ||||
| @ -178,7 +178,9 @@ | ||||
|                 </goals> | ||||
|               </execution> | ||||
|             </executions> | ||||
|             <configuration /> | ||||
|             <configuration> | ||||
|               <scala-version>${scala-version}</scala-version> | ||||
|             </configuration> | ||||
|           </plugin> | ||||
|           <plugin> | ||||
|             <groupId>org.codehaus.mojo</groupId> | ||||
| @ -277,6 +279,7 @@ | ||||
|       <groupId>io.swagger</groupId> | ||||
|       <artifactId>swagger-parser</artifactId> | ||||
|       <version>${swagger-parser-version}</version> | ||||
|       <scope>compile</scope> | ||||
|     </dependency> | ||||
|     <dependency> | ||||
|       <groupId>io.swagger</groupId> | ||||
| @ -334,6 +337,12 @@ | ||||
|       <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> | ||||
|  | ||||
| @ -1,60 +0,0 @@ | ||||
| package com.wordnik.swagger.codegen; | ||||
| 
 | ||||
| import com.samskivert.mustache.*; | ||||
| 
 | ||||
| import java.util.regex.Pattern; | ||||
| import java.io.*; | ||||
| 
 | ||||
| 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; | ||||
|   } | ||||
| } | ||||
| @ -1,23 +0,0 @@ | ||||
| package com.wordnik.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; | ||||
|   } | ||||
| } | ||||
| @ -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; | ||||
|   } | ||||
| } | ||||
| @ -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(); | ||||
|   } | ||||
| } | ||||
| @ -1,143 +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.*; | ||||
| 
 | ||||
| /** | ||||
|  * @deprecated use instead {@link com.wordnik.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 { | ||||
|     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", 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); | ||||
|       } | ||||
|     } | ||||
|   } | ||||
| } | ||||
| @ -1,64 +0,0 @@ | ||||
| package com.wordnik.swagger.codegen; | ||||
| 
 | ||||
| import com.wordnik.swagger.models.*; | ||||
| import com.wordnik.swagger.models.auth.SecuritySchemeDefinition; | ||||
| 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 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(); | ||||
| 
 | ||||
|   void setOutputDir(String dir); | ||||
|   String getOutputDir(); | ||||
| 
 | ||||
|   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); | ||||
| } | ||||
| @ -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, hasEnums; | ||||
|   public ExternalDocs externalDocs; | ||||
| } | ||||
| @ -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); | ||||
|     } | ||||
|   } | ||||
| } | ||||
| @ -1,21 +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), | ||||
|   SECURITY(CodegenSecurity.class); | ||||
| 
 | ||||
|   private final Class<?> defaultImplementation; | ||||
| 
 | ||||
|   private CodegenModelType(Class<?> defaultImplementation) { | ||||
|     this.defaultImplementation = defaultImplementation; | ||||
|   } | ||||
| 
 | ||||
|   public Class<?> getDefaultImplementation() { | ||||
|     return defaultImplementation; | ||||
|   } | ||||
| } | ||||
| @ -1,32 +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, | ||||
|     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 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; | ||||
| } | ||||
| @ -1,41 +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, 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; | ||||
|   } | ||||
| } | ||||
| @ -1,28 +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 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; | ||||
| } | ||||
| @ -1,21 +0,0 @@ | ||||
| package com.wordnik.swagger.codegen; | ||||
| 
 | ||||
| import java.util.ArrayList; | ||||
| import java.util.List; | ||||
| import java.util.Map; | ||||
| 
 | ||||
| public class CodegenResponse { | ||||
|   public String code, message; | ||||
|   public Boolean hasMore; | ||||
|   public List<Map<String, Object>> examples; | ||||
|   public final List<CodegenProperty> headers = new ArrayList<CodegenProperty>(); | ||||
|   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); } | ||||
| } | ||||
| @ -1,10 +0,0 @@ | ||||
| package com.wordnik.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; | ||||
| } | ||||
| @ -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 | ||||
|   } | ||||
| } | ||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @ -1,487 +0,0 @@ | ||||
| package com.wordnik.swagger.codegen; | ||||
| 
 | ||||
| import com.samskivert.mustache.Mustache; | ||||
| import com.samskivert.mustache.Template; | ||||
| import com.wordnik.swagger.models.Contact; | ||||
| import com.wordnik.swagger.models.Info; | ||||
| import com.wordnik.swagger.models.License; | ||||
| import com.wordnik.swagger.models.Model; | ||||
| import com.wordnik.swagger.models.Operation; | ||||
| import com.wordnik.swagger.models.Path; | ||||
| import com.wordnik.swagger.models.Swagger; | ||||
| import com.wordnik.swagger.models.auth.SecuritySchemeDefinition; | ||||
| import com.wordnik.swagger.util.Json; | ||||
| 
 | ||||
| import org.apache.commons.io.FileUtils; | ||||
| import org.apache.commons.io.IOUtils; | ||||
| 
 | ||||
| import java.io.File; | ||||
| import java.io.Reader; | ||||
| import java.io.InputStream; | ||||
| import java.io.OutputStream; | ||||
| import java.io.FileInputStream; | ||||
| import java.io.FileOutputStream; | ||||
| 
 | ||||
| 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; | ||||
|   } | ||||
| } | ||||
| @ -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(); | ||||
| } | ||||
| @ -1,185 +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 com.samskivert.mustache.*; | ||||
| 
 | ||||
| import org.apache.commons.cli.*; | ||||
| import org.apache.commons.io.FileUtils; | ||||
| 
 | ||||
| import java.io.File; | ||||
| import java.io.Reader; | ||||
| import java.util.*; | ||||
| 
 | ||||
| /** | ||||
|  * @deprecated use instead {@link com.wordnik.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; | ||||
|   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(); | ||||
|     } | ||||
|   } | ||||
| 
 | ||||
|   public static void main(String[] args) { | ||||
|     new MetaGenerator().generate(args); | ||||
|   } | ||||
| 
 | ||||
|   protected void generate(String[] args) { | ||||
|     StringBuilder sb = new StringBuilder(); | ||||
|     String targetLanguage = null; | ||||
|     String outputFolder = null; | ||||
|     String name = null; | ||||
|     String targetPackage = "com.wordnik.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 com.wordnik.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", "com.wordnik.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(); | ||||
|       } | ||||
|     } | ||||
|   } | ||||
| 
 | ||||
|   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; | ||||
|   } | ||||
| } | ||||
| @ -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; | ||||
|   } | ||||
| } | ||||
| @ -1,6 +0,0 @@ | ||||
| package com.wordnik.swagger.codegen.auth; | ||||
| 
 | ||||
| public interface AuthMethod { | ||||
|   String getType(); | ||||
|   void setType(String type); | ||||
| } | ||||
| @ -1,175 +0,0 @@ | ||||
| package com.wordnik.swagger.codegen.examples; | ||||
| 
 | ||||
| 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; | ||||
| 
 | ||||
| import com.wordnik.swagger.models.Model; | ||||
| import com.wordnik.swagger.models.ModelImpl; | ||||
| import com.wordnik.swagger.models.properties.ArrayProperty; | ||||
| import com.wordnik.swagger.models.properties.BooleanProperty; | ||||
| import com.wordnik.swagger.models.properties.DateProperty; | ||||
| import com.wordnik.swagger.models.properties.DateTimeProperty; | ||||
| import com.wordnik.swagger.models.properties.DecimalProperty; | ||||
| import com.wordnik.swagger.models.properties.DoubleProperty; | ||||
| import com.wordnik.swagger.models.properties.FileProperty; | ||||
| import com.wordnik.swagger.models.properties.FloatProperty; | ||||
| import com.wordnik.swagger.models.properties.IntegerProperty; | ||||
| import com.wordnik.swagger.models.properties.LongProperty; | ||||
| import com.wordnik.swagger.models.properties.MapProperty; | ||||
| import com.wordnik.swagger.models.properties.ObjectProperty; | ||||
| import com.wordnik.swagger.models.properties.Property; | ||||
| import com.wordnik.swagger.models.properties.RefProperty; | ||||
| import com.wordnik.swagger.models.properties.StringProperty; | ||||
| import com.wordnik.swagger.models.properties.UUIDProperty; | ||||
| import com.wordnik.swagger.util.Json; | ||||
| 
 | ||||
| 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 ""; | ||||
|   } | ||||
| } | ||||
| @ -1,206 +0,0 @@ | ||||
| package com.wordnik.swagger.codegen.examples; | ||||
| 
 | ||||
| 
 | ||||
| import com.wordnik.swagger.util.Json; | ||||
| import com.wordnik.swagger.models.*; | ||||
| import com.wordnik.swagger.models.properties.*; | ||||
| 
 | ||||
| import java.text.SimpleDateFormat; | ||||
| import java.util.*; | ||||
| 
 | ||||
| import org.codehaus.plexus.util.StringUtils; | ||||
| 
 | ||||
| public class XmlExampleGenerator { | ||||
|   public static String NEWLINE = "\n"; | ||||
|   public static String TAG_START = "<"; | ||||
|   public static String CLOSE_TAG = ">"; | ||||
|   public static String TAG_END = "</"; | ||||
|   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'"); | ||||
|   private static String EMPTY = ""; | ||||
| 
 | ||||
|   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(); | ||||
|   } | ||||
| } | ||||
| @ -1,365 +0,0 @@ | ||||
| package com.wordnik.swagger.codegen.languages; | ||||
| 
 | ||||
| import com.google.common.base.CaseFormat; | ||||
| import com.samskivert.mustache.Mustache; | ||||
| import com.samskivert.mustache.Template; | ||||
| import com.wordnik.swagger.codegen.*; | ||||
| import com.wordnik.swagger.models.auth.SecuritySchemeDefinition; | ||||
| import com.wordnik.swagger.models.properties.*; | ||||
| 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.*; | ||||
| 
 | ||||
| public class AkkaScalaClientCodegen extends DefaultCodegen implements CodegenConfig { | ||||
|   Logger LOGGER = LoggerFactory.getLogger(AkkaScalaClientCodegen.class); | ||||
| 
 | ||||
|   protected String mainPackage = "io.swagger.client"; | ||||
| 
 | ||||
|   protected String invokerPackage = mainPackage + ".core"; | ||||
|   protected String groupId = "com.wordnik"; | ||||
|   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; | ||||
| 
 | ||||
|   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."; | ||||
|   } | ||||
| 
 | ||||
|   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"); | ||||
|   } | ||||
| 
 | ||||
|   @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); | ||||
|     } | ||||
|   } | ||||
| 
 | ||||
| } | ||||
| @ -1,259 +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-android-client"; | ||||
|   protected String artifactVersion = "1.0.0"; | ||||
|   protected String projectFolder = "src/main"; | ||||
|   protected String sourceFolder = projectFolder + "/java"; | ||||
|   protected Boolean useAndroidMavenGradlePlugin = true; | ||||
| 
 | ||||
|   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"; | ||||
| 
 | ||||
|     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.")); | ||||
|   } | ||||
| 
 | ||||
|   @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; | ||||
|   } | ||||
| 
 | ||||
| } | ||||
| @ -1,194 +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 AsyncScalaClientCodegen extends DefaultCodegen implements CodegenConfig { | ||||
|   protected String invokerPackage = "io.swagger.client"; | ||||
|   protected String groupId = "com.wordnik"; | ||||
|   protected String artifactId = "swagger-async-scala-client"; | ||||
|   protected String artifactVersion = "1.0.0"; | ||||
|   protected String sourceFolder = "src/main/scala"; | ||||
|   protected String clientName = "SwaggerClient"; | ||||
|   protected String authScheme = ""; | ||||
|   protected boolean authPreemptive = false; | ||||
|   protected boolean asyncHttpClient = !authScheme.isEmpty(); | ||||
| 
 | ||||
|   public CodegenType getTag() { | ||||
|     return CodegenType.CLIENT; | ||||
|   } | ||||
|    | ||||
|   public String getName() { | ||||
|     return "async-scala"; | ||||
|   } | ||||
| 
 | ||||
|   public String getHelp() { | ||||
|     return "Generates an Asynchronous Scala client library."; | ||||
|   } | ||||
| 
 | ||||
|   public AsyncScalaClientCodegen() { | ||||
|     super(); | ||||
|     outputFolder = "generated-code/async-scala"; | ||||
|     modelTemplateFiles.put("model.mustache", ".scala"); | ||||
|     apiTemplateFiles.put("api.mustache", ".scala"); | ||||
|     templateDir = "asyncscala"; | ||||
|     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); | ||||
|     additionalProperties.put("clientName", clientName); | ||||
| 
 | ||||
|     supportingFiles.add(new SupportingFile("sbt.mustache", "", "build.sbt")); | ||||
|     supportingFiles.add(new SupportingFile("client.mustache",  | ||||
|       (sourceFolder + File.separator + invokerPackage).replace(".", java.io.File.separator), clientName + ".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().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 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"; | ||||
|   } | ||||
| } | ||||
| @ -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 CSharpClientCodegen extends DefaultCodegen implements CodegenConfig { | ||||
|   protected String invokerPackage = "IO.Swagger.Client"; | ||||
|   protected String groupId = "io.swagger"; | ||||
|   protected String artifactId = "swagger-csharp-client"; | ||||
|   protected String artifactVersion = "1.0.0"; | ||||
|   protected String sourceFolder = "src/main/csharp"; | ||||
| 
 | ||||
|   public CodegenType getTag() { | ||||
|     return CodegenType.CLIENT; | ||||
|   } | ||||
| 
 | ||||
|   public String getName() { | ||||
|     return "csharp"; | ||||
|   } | ||||
| 
 | ||||
|   public String getHelp() { | ||||
|     return "Generates a CSharp client library."; | ||||
|   } | ||||
| 
 | ||||
|   public CSharpClientCodegen() { | ||||
|     super(); | ||||
|     outputFolder = "generated-code/csharp"; | ||||
|     modelTemplateFiles.put("model.mustache", ".cs"); | ||||
|     apiTemplateFiles.put("api.mustache", ".cs"); | ||||
|     templateDir = "csharp"; | ||||
|     apiPackage = "IO.Swagger.Api"; | ||||
|     modelPackage = "IO.Swagger.Model"; | ||||
| 
 | ||||
|     reservedWords = new HashSet<String> ( | ||||
|       Arrays.asList( | ||||
|         "abstract", "as", "base", "bool", "break", "byte", "case", "catch", "char", "checked", "class", "const", "continue", "decimal", "default", "delegate", "do", "double", "else", "enum", "event", "explicit", "extern", "false", "finally", "fixed", "float", "for", "foreach", "goto", "if", "implicit", "in", "int", "interface", "internal", "is", "lock", "long", "namespace", "new", "null", "object", "operator", "out", "override", "params", "private", "protected", "public", "readonly", "ref", "return", "sbyte", "sealed", "short", "sizeof", "stackalloc", "static", "string", "struct", "switch", "this", "throw", "true", "try", "typeof", "uint", "ulong", "unchecked", "unsafe", "ushort", "using", "virtual", "void", "volatile", "while") | ||||
|     ); | ||||
| 
 | ||||
|     additionalProperties.put("invokerPackage", invokerPackage); | ||||
| 
 | ||||
|     supportingFiles.add(new SupportingFile("Configuration.mustache",  | ||||
|       (sourceFolder + File.separator + invokerPackage).replace(".", java.io.File.separator), "Configuration.cs")); | ||||
|     supportingFiles.add(new SupportingFile("ApiClient.mustache",  | ||||
|       (sourceFolder + File.separator + invokerPackage).replace(".", java.io.File.separator), "ApiClient.cs")); | ||||
|     supportingFiles.add(new SupportingFile("ApiException.mustache",  | ||||
|       (sourceFolder + File.separator + invokerPackage).replace(".", java.io.File.separator), "ApiException.cs")); | ||||
|     supportingFiles.add(new SupportingFile("Newtonsoft.Json.dll", "bin", "Newtonsoft.Json.dll")); | ||||
|     supportingFiles.add(new SupportingFile("RestSharp.dll", "bin", "RestSharp.dll")); | ||||
|     supportingFiles.add(new SupportingFile("compile.mustache", "", "compile.bat")); | ||||
| 
 | ||||
|     languageSpecificPrimitives = new HashSet<String>( | ||||
|       Arrays.asList( | ||||
|         "string", | ||||
|         "bool?", | ||||
|         "double?", | ||||
|         "int?", | ||||
|         "long?", | ||||
|         "float?", | ||||
|         "byte[]", | ||||
|         "List", | ||||
|         "Dictionary", | ||||
|         "DateTime?", | ||||
|         "String", | ||||
|         "Boolean", | ||||
|         "Double", | ||||
|         "Integer", | ||||
|         "Long", | ||||
|         "Float", | ||||
|         "Object") | ||||
|       ); | ||||
|     instantiationTypes.put("array", "List"); | ||||
|     instantiationTypes.put("map", "Dictionary"); | ||||
| 
 | ||||
|     typeMapping = new HashMap<String, String>(); | ||||
|     typeMapping.put("string", "string"); | ||||
|     typeMapping.put("boolean", "bool?"); | ||||
|     typeMapping.put("integer", "int?"); | ||||
|     typeMapping.put("float", "float?"); | ||||
|     typeMapping.put("long", "long?"); | ||||
|     typeMapping.put("double", "double?"); | ||||
|     typeMapping.put("number", "double?"); | ||||
|     typeMapping.put("datetime", "DateTime?"); | ||||
|     typeMapping.put("date", "DateTime?"); | ||||
|     typeMapping.put("file", "string"); // path to file | ||||
|     typeMapping.put("array", "List"); | ||||
|     typeMapping.put("list", "List"); | ||||
|     typeMapping.put("map", "Dictionary"); | ||||
|     typeMapping.put("object", "Object"); | ||||
| 
 | ||||
|   } | ||||
| 
 | ||||
|   @Override | ||||
|   public String escapeReservedWord(String name) { | ||||
|     return "_" + name; | ||||
|   } | ||||
| 
 | ||||
|   @Override | ||||
|   public String apiFileFolder() { | ||||
|     return (outputFolder + "/" + sourceFolder + "/" + apiPackage().replace('.', '/')).replace('.', File.separatorChar); | ||||
|   } | ||||
| 
 | ||||
|   public String modelFileFolder() { | ||||
|     return (outputFolder + "/" + sourceFolder + "/" + modelPackage().replace('.', '/')).replace('.', File.separatorChar); | ||||
|   } | ||||
| 
 | ||||
|   @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 the variable name | ||||
|     // pet_id => PetId | ||||
|     name = camelize(name); | ||||
| 
 | ||||
|     // 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 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.toLowerCase())) { | ||||
|       type = typeMapping.get(swaggerType.toLowerCase()); | ||||
|       if(languageSpecificPrimitives.contains(type)) | ||||
|         return type; | ||||
|     } | ||||
|     else | ||||
|       type = swaggerType; | ||||
|     return toModelName(type); | ||||
|   } | ||||
| 
 | ||||
|   @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); | ||||
|   } | ||||
| 
 | ||||
| } | ||||
| @ -1,241 +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-java-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") | ||||
|     ); | ||||
| 
 | ||||
|     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 for generated code")); | ||||
|     cliOptions.add(new CliOption("groupId", "groupId in generated pom.xml")); | ||||
|     cliOptions.add(new CliOption("artifactId", "artifactId in generated pom.xml")); | ||||
|     cliOptions.add(new CliOption("artifactVersion", "artifact version in generated pom.xml")); | ||||
|     cliOptions.add(new CliOption("sourceFolder", "source folder for generated code")); | ||||
|   } | ||||
| 
 | ||||
|   @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")); | ||||
|     } | ||||
| 
 | ||||
|     final String invokerFolder = (sourceFolder + File.separator + invokerPackage).replace(".", File.separator); | ||||
|     supportingFiles.add(new SupportingFile("pom.mustache", "", "pom.xml")); | ||||
|     supportingFiles.add(new SupportingFile("ApiClient.mustache", invokerFolder, "ApiClient.java")); | ||||
|     supportingFiles.add(new SupportingFile("apiException.mustache", invokerFolder, "ApiException.java")); | ||||
|     supportingFiles.add(new SupportingFile("Configuration.mustache", invokerFolder, "Configuration.java")); | ||||
|     supportingFiles.add(new SupportingFile("JsonUtil.mustache", invokerFolder, "JsonUtil.java")); | ||||
|     supportingFiles.add(new SupportingFile("StringUtil.mustache", invokerFolder, "StringUtil.java")); | ||||
| 
 | ||||
|     final String authFolder = (sourceFolder + File.separator + invokerPackage + ".auth").replace(".", File.separator); | ||||
|     supportingFiles.add(new SupportingFile("auth/Authentication.mustache", authFolder, "Authentication.java")); | ||||
|     supportingFiles.add(new SupportingFile("auth/HttpBasicAuth.mustache", authFolder, "HttpBasicAuth.java")); | ||||
|     supportingFiles.add(new SupportingFile("auth/ApiKeyAuth.mustache", authFolder, "ApiKeyAuth.java")); | ||||
|     supportingFiles.add(new SupportingFile("auth/OAuth.mustache", authFolder, "OAuth.java")); | ||||
|   } | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
|   @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 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 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 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); | ||||
|   } | ||||
| 
 | ||||
|   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; | ||||
|   } | ||||
| } | ||||
| @ -1,200 +0,0 @@ | ||||
| package com.wordnik.swagger.codegen.languages; | ||||
| 
 | ||||
| import com.wordnik.swagger.models.Operation; | ||||
| 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-jaxrs-server"; | ||||
|   protected String artifactVersion = "1.0.0"; | ||||
|   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.processOpts(); | ||||
| 
 | ||||
|     sourceFolder = "src/gen/java"; | ||||
| 
 | ||||
|     outputFolder = System.getProperty( "swagger.codegen.jaxrs.genfolder", "generated-code/javaJaxRS" ); | ||||
|     modelTemplateFiles.put("model.mustache", ".java"); | ||||
|     apiTemplateFiles.put("api.mustache", ".java"); | ||||
|     apiTemplateFiles.put("apiService.mustache", ".java"); | ||||
|     apiTemplateFiles.put("apiServiceImpl.mustache", ".java"); | ||||
|     apiTemplateFiles.put("apiServiceFactory.mustache", ".java"); | ||||
|     templateDir = "JavaJaxRS"; | ||||
|     apiPackage = System.getProperty( "swagger.codegen.jaxrs.apipackage", "io.swagger.api") ; | ||||
|     modelPackage = System.getProperty( "swagger.codegen.jaxrs.modelpackage", "io.swagger.model" ); | ||||
| 
 | ||||
|     additionalProperties.put("invokerPackage", invokerPackage); | ||||
|     additionalProperties.put("groupId", groupId); | ||||
|     additionalProperties.put("artifactId", artifactId); | ||||
|     additionalProperties.put("artifactVersion", artifactVersion); | ||||
|     additionalProperties.put("title", title); | ||||
| 
 | ||||
| 
 | ||||
|     languageSpecificPrimitives = new HashSet<String>( | ||||
|       Arrays.asList( | ||||
|         "String", | ||||
|         "boolean", | ||||
|         "Boolean", | ||||
|         "Double", | ||||
|         "Integer", | ||||
|         "Long", | ||||
|         "Float") | ||||
|       ); | ||||
|   } | ||||
| 
 | ||||
| 
 | ||||
|   @Override | ||||
|   public void processOpts() { | ||||
|     super.processOpts(); | ||||
| 
 | ||||
|     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")); | ||||
| 
 | ||||
|   } | ||||
| 
 | ||||
|   @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; | ||||
|   } | ||||
| 
 | ||||
|   @Override | ||||
|   public String apiFilename(String templateName, String tag) { | ||||
| 
 | ||||
|     String result = super.apiFilename(templateName, tag); | ||||
| 
 | ||||
|     if( templateName.endsWith( "Impl.mustache")){ | ||||
|       int ix = result.lastIndexOf( '/' ); | ||||
|       result = result.substring( 0, ix ) + "/impl" + result.substring( ix, result.length()-5 ) + "ServiceImpl.java"; | ||||
| 
 | ||||
|       String output = System.getProperty( "swagger.codegen.jaxrs.impl.source" ); | ||||
|       if( output != null ){ | ||||
|         result = result.replace( apiFileFolder(), implFileFolder(output)); | ||||
|       } | ||||
|     } | ||||
|     else if( templateName.endsWith( "Factory.mustache")){ | ||||
|       int ix = result.lastIndexOf( '/' ); | ||||
|       result = result.substring( 0, ix ) + "/factories" + result.substring( ix, result.length()-5 ) + "ServiceFactory.java"; | ||||
| 
 | ||||
|       String output = System.getProperty( "swagger.codegen.jaxrs.impl.source" ); | ||||
|       if( output != null ){ | ||||
|         result = result.replace( apiFileFolder(), implFileFolder(output)); | ||||
|       } | ||||
|     } | ||||
|     else if( templateName.endsWith( "Service.mustache")) { | ||||
|         int ix = result.lastIndexOf('.'); | ||||
|         result = result.substring(0, ix) + "Service.java"; | ||||
|     } | ||||
| 
 | ||||
|     return result; | ||||
|   } | ||||
| 
 | ||||
|   private String implFileFolder(String output) { | ||||
|     return outputFolder + "/" + output + "/" + apiPackage().replace('.', File.separatorChar); | ||||
|   } | ||||
| 
 | ||||
|   public boolean shouldOverwrite( String filename ){ | ||||
| 
 | ||||
|     return !filename.endsWith( "ServiceImpl.java") && !filename.endsWith( "ServiceFactory.java"); | ||||
|   } | ||||
| } | ||||
| @ -1,196 +0,0 @@ | ||||
| package com.wordnik.swagger.codegen.languages; | ||||
| 
 | ||||
| import java.io.File; | ||||
| import java.util.Arrays; | ||||
| import java.util.HashSet; | ||||
| import java.util.Iterator; | ||||
| import java.util.List; | ||||
| import java.util.Map; | ||||
| 
 | ||||
| import com.wordnik.swagger.codegen.CodegenConfig; | ||||
| import com.wordnik.swagger.codegen.CodegenOperation; | ||||
| import com.wordnik.swagger.codegen.CodegenParameter; | ||||
| import com.wordnik.swagger.codegen.CodegenResponse; | ||||
| import com.wordnik.swagger.codegen.CodegenType; | ||||
| import com.wordnik.swagger.codegen.DefaultCodegen; | ||||
| import com.wordnik.swagger.codegen.SupportingFile; | ||||
| 
 | ||||
| public class NodeJSServerCodegen extends DefaultCodegen implements CodegenConfig { | ||||
|   protected String apiVersion = "1.0.0"; | ||||
|   protected int serverPort = 8080; | ||||
|   protected String projectName = "swagger-server"; | ||||
| 
 | ||||
|   public String apiPackage() { | ||||
|     return "controllers"; | ||||
|   } | ||||
| 
 | ||||
|   /** | ||||
|    * Configures the type of generator. | ||||
|    *  | ||||
|    * @return  the CodegenType for this generator | ||||
|    * @see     com.wordnik.swagger.codegen.CodegenType | ||||
|    */ | ||||
|   public CodegenType getTag() { | ||||
|     return CodegenType.SERVER; | ||||
|   } | ||||
| 
 | ||||
|   /** | ||||
|    * Configures a friendly name for the generator.  This will be used by the generator | ||||
|    * to select the library with the -l flag. | ||||
|    *  | ||||
|    * @return the friendly name for the generator | ||||
|    */ | ||||
|   public String getName() { | ||||
|     return "nodejs"; | ||||
|   } | ||||
| 
 | ||||
|   /** | ||||
|    * Returns human-friendly help for the generator.  Provide the consumer with help | ||||
|    * tips, parameters here | ||||
|    *  | ||||
|    * @return A string value for the help message | ||||
|    */ | ||||
|   public String getHelp() { | ||||
|     return "Generates a nodejs server library using the swagger-tools project.  By default, " + | ||||
|       "it will also generate service classes--which you can disable with the `-Dnoservice` environment variable."; | ||||
|   } | ||||
| 
 | ||||
|   public NodeJSServerCodegen() { | ||||
|     super(); | ||||
| 
 | ||||
|     // set the output folder here | ||||
|     outputFolder = "generated-code/nodejs"; | ||||
| 
 | ||||
|     /** | ||||
|      * Models.  You can write model files using the modelTemplateFiles map. | ||||
|      * if you want to create one template for file, you can do so here. | ||||
|      * for multiple files for model, just put another entry in the `modelTemplateFiles` with | ||||
|      * a different extension | ||||
|      */ | ||||
|     modelTemplateFiles.clear(); | ||||
| 
 | ||||
|     /** | ||||
|      * Api classes.  You can write classes for each Api file with the apiTemplateFiles map. | ||||
|      * as with models, add multiple entries with different extensions for multiple files per | ||||
|      * class | ||||
|      */ | ||||
|     apiTemplateFiles.put( | ||||
|       "controller.mustache",   // the template to use | ||||
|       ".js");       // the extension for each file to write | ||||
| 
 | ||||
|     /** | ||||
|      * Template Location.  This is the location which templates will be read from.  The generator | ||||
|      * will use the resource stream to attempt to read the templates. | ||||
|      */ | ||||
|     templateDir = "nodejs"; | ||||
| 
 | ||||
|     /** | ||||
|      * Reserved words.  Override this with reserved words specific to your language | ||||
|      */ | ||||
|     reservedWords = new HashSet<String> ( | ||||
|       Arrays.asList( | ||||
|         "break", "case", "class", "catch", "const", "continue", "debugger", | ||||
|         "default", "delete", "do", "else", "export", "extends", "finally", | ||||
|         "for", "function", "if", "import", "in", "instanceof", "let", "new", | ||||
|         "return", "super", "switch", "this", "throw", "try", "typeof", "var", | ||||
|         "void", "while", "with", "yield") | ||||
|     ); | ||||
| 
 | ||||
|     /** | ||||
|      * Additional Properties.  These values can be passed to the templates and | ||||
|      * are available in models, apis, and supporting files | ||||
|      */ | ||||
|     additionalProperties.put("apiVersion", apiVersion); | ||||
|     additionalProperties.put("serverPort", serverPort); | ||||
| 
 | ||||
|     /** | ||||
|      * Supporting Files.  You can write single files for the generator with the | ||||
|      * entire object tree available.  If the input file has a suffix of `.mustache | ||||
|      * it will be processed by the template engine.  Otherwise, it will be copied | ||||
|      */ | ||||
|     // supportingFiles.add(new SupportingFile("controller.mustache", | ||||
|     //   "controllers", | ||||
|     //   "controller.js") | ||||
|     // ); | ||||
|     supportingFiles.add(new SupportingFile("swagger.mustache", | ||||
|       "api", | ||||
|       "swagger.json") | ||||
|     ); | ||||
|     supportingFiles.add(new SupportingFile("index.mustache", | ||||
|       "", | ||||
|       "index.js") | ||||
|     ); | ||||
|     supportingFiles.add(new SupportingFile("package.mustache", | ||||
|       "", | ||||
|       "package.json") | ||||
|     ); | ||||
|     if(System.getProperty("noservice") == null) { | ||||
|       apiTemplateFiles.put( | ||||
|         "service.mustache",   // the template to use | ||||
|         "Service.js");       // the extension for each file to write | ||||
|     } | ||||
|   } | ||||
| 
 | ||||
|   @Override | ||||
|   public String toApiName(String name) { | ||||
|     if(name.length() == 0) | ||||
|       return "DefaultController"; | ||||
|     return initialCaps(name); | ||||
|   } | ||||
| 
 | ||||
|   @Override | ||||
|   public String toApiFilename(String name) { | ||||
|     return toApiName(name); | ||||
|   } | ||||
|   /** | ||||
|    * Escapes a reserved word as defined in the `reservedWords` array. Handle escaping | ||||
|    * those terms here.  This logic is only called if a variable matches the reseved words | ||||
|    *  | ||||
|    * @return the escaped term | ||||
|    */ | ||||
|   @Override | ||||
|   public String escapeReservedWord(String name) { | ||||
|     return "_" + name;  // add an underscore to the name | ||||
|   } | ||||
| 
 | ||||
|   /** | ||||
|    * Location to write api files.  You can use the apiPackage() as defined when the class is | ||||
|    * instantiated | ||||
|    */ | ||||
|   @Override | ||||
|   public String apiFileFolder() { | ||||
|     return outputFolder + File.separator + apiPackage().replace('.', File.separatorChar); | ||||
|   } | ||||
| 
 | ||||
|   @Override | ||||
|   public Map<String, Object> postProcessOperations(Map<String, Object> objs) { | ||||
|     @SuppressWarnings("unchecked") | ||||
|     Map<String, Object> objectMap = (Map<String, Object>) objs.get("operations"); | ||||
|     @SuppressWarnings("unchecked") | ||||
|     List<CodegenOperation> operations = (List<CodegenOperation>) objectMap.get("operation"); | ||||
|     for(CodegenOperation operation : operations) { | ||||
|       operation.httpMethod = operation.httpMethod.toLowerCase(); | ||||
|       List<CodegenParameter> params = operation.allParams; | ||||
|       if(params != null && params.size() == 0) | ||||
|         operation.allParams = null; | ||||
|       List<CodegenResponse> responses = operation.responses; | ||||
|       if(responses != null) { | ||||
|         for(CodegenResponse resp : responses) { | ||||
|           if("0".equals(resp.code)) | ||||
|             resp.code = "default"; | ||||
|         } | ||||
|       } | ||||
|       if(operation.examples != null && !operation.examples.isEmpty()) { | ||||
|         // Leave application/json* items only | ||||
|         for (Iterator<Map<String, String>> it = operation.examples.iterator(); it.hasNext();) { | ||||
|           final Map<String, String> example = it.next(); | ||||
|           final String contentType = example.get("contentType"); | ||||
|           if (contentType == null || !contentType.startsWith("application/json")) { | ||||
|             it.remove(); | ||||
|           } | ||||
|         } | ||||
|       } | ||||
|     } | ||||
|     return objs; | ||||
|   } | ||||
| } | ||||
| @ -1,347 +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 ObjcClientCodegen extends DefaultCodegen implements CodegenConfig { | ||||
|   protected Set<String> foundationClasses = new HashSet<String>(); | ||||
|   protected String sourceFolder = "client"; | ||||
|   protected String classPrefix = "SWG"; | ||||
|   protected String projectName = "swaggerClient"; | ||||
| 
 | ||||
|   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" + File.separator + "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 = ""; | ||||
| 
 | ||||
|     defaultIncludes = new HashSet<String>( | ||||
|       Arrays.asList( | ||||
|         "bool", | ||||
|         "BOOL", | ||||
|         "int", | ||||
|         "NSString", | ||||
|         "NSObject",  | ||||
|         "NSArray", | ||||
|         "NSNumber", | ||||
|         "NSDate", | ||||
|         "NSDictionary", | ||||
|         "NSMutableArray", | ||||
|         "NSMutableDictionary") | ||||
|       ); | ||||
|     languageSpecificPrimitives = new HashSet<String>( | ||||
|       Arrays.asList( | ||||
|         "NSNumber", | ||||
|         "NSString", | ||||
|         "NSObject", | ||||
|         "NSDate", | ||||
|         "bool", | ||||
|         "BOOL") | ||||
|       ); | ||||
| 
 | ||||
|     // ref: http://www.tutorialspoint.com/objective_c/objective_c_basic_syntax.htm | ||||
|     reservedWords = new HashSet<String>( | ||||
|       Arrays.asList( | ||||
|               "auto",     "else",              "long",      "switch", | ||||
|               "break",    "enum",              "register",  "typedef", | ||||
|               "case",     "extern",            "return",    "union", | ||||
|               "char",     "float",             "short",     "unsigned", | ||||
|               "const",    "for",               "signed",    "void", | ||||
|               "continue", "goto",              "sizeof",    "volatile", | ||||
|               "default",  "if", "id",          "static",    "while", | ||||
|               "do",       "int",               "struct",    "_Packed", | ||||
|               "double",   "protocol",          "interface", "implementation", | ||||
|               "NSObject", "NSInteger",         "NSNumber",  "CGFloat", | ||||
|               "property", "nonatomic",         "retain",    "strong", | ||||
|               "weak",     "unsafe_unretained", "readwrite", "readonly" | ||||
|       )); | ||||
| 
 | ||||
|     typeMapping = new HashMap<String, String>(); | ||||
|     typeMapping.put("enum", "NSString"); | ||||
|     typeMapping.put("Date", "NSDate"); | ||||
|     typeMapping.put("DateTime", "NSDate"); | ||||
|     typeMapping.put("boolean", "BOOL"); | ||||
|     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> (); | ||||
| 
 | ||||
|     foundationClasses = new HashSet<String> ( | ||||
|       Arrays.asList( | ||||
|         "NSNumber", | ||||
|         "NSObject", | ||||
|         "NSString", | ||||
|         "NSDate", | ||||
|         "NSDictionary") | ||||
|       ); | ||||
| 
 | ||||
|     instantiationTypes.put("array", "NSMutableArray"); | ||||
|     instantiationTypes.put("map", "NSMutableDictionary"); | ||||
|      | ||||
|     cliOptions.add(new CliOption("classPrefix", "prefix for generated classes")); | ||||
|     cliOptions.add(new CliOption("sourceFolder", "source folder for generated code")); | ||||
|     cliOptions.add(new CliOption("projectName", "name of the Xcode project in generated Podfile")); | ||||
|   } | ||||
| 
 | ||||
|   @Override | ||||
|   public void processOpts() { | ||||
|     super.processOpts(); | ||||
|      | ||||
|     if(additionalProperties.containsKey("sourceFolder")) { | ||||
|       this.setSourceFolder((String)additionalProperties.get("sourceFolder")); | ||||
|     } | ||||
|      | ||||
|     if(additionalProperties.containsKey("classPrefix")) { | ||||
|       this.setClassPrefix((String)additionalProperties.get("classPrefix")); | ||||
|     } | ||||
|      | ||||
|     if(additionalProperties.containsKey("projectName")) { | ||||
|       this.setProjectName((String)additionalProperties.get("projectName")); | ||||
|     } | ||||
|     else{ | ||||
|       additionalProperties.put("projectName", projectName); | ||||
|     } | ||||
|      | ||||
|     supportingFiles.add(new SupportingFile("SWGObject.h", sourceFolder, "SWGObject.h")); | ||||
|     supportingFiles.add(new SupportingFile("SWGObject.m", sourceFolder, "SWGObject.m")); | ||||
|     supportingFiles.add(new SupportingFile("SWGQueryParamCollection.h", sourceFolder, "SWGQueryParamCollection.h")); | ||||
|     supportingFiles.add(new SupportingFile("SWGQueryParamCollection.m", sourceFolder, "SWGQueryParamCollection.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("JSONValueTransformer+ISO8601.m", sourceFolder, "JSONValueTransformer+ISO8601.m")); | ||||
|     supportingFiles.add(new SupportingFile("JSONValueTransformer+ISO8601.h", sourceFolder, "JSONValueTransformer+ISO8601.h")); | ||||
|     supportingFiles.add(new SupportingFile("SWGConfiguration-body.mustache", sourceFolder, "SWGConfiguration.m")); | ||||
|     supportingFiles.add(new SupportingFile("SWGConfiguration-header.mustache", sourceFolder, "SWGConfiguration.h")); | ||||
|     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) { | ||||
|       if (p instanceof ArrayProperty) { | ||||
|           ArrayProperty ap = (ArrayProperty) p; | ||||
|           Property inner = ap.getItems(); | ||||
|           String innerType = getSwaggerType(inner); | ||||
| 
 | ||||
|           // In this codition, type of property p is array of primitive, | ||||
|           // return container type with pointer, e.g. `NSArray*' | ||||
|           if (languageSpecificPrimitives.contains(innerType)) | ||||
|               return getSwaggerType(p) + "*"; | ||||
| 
 | ||||
|           // In this codition, type of property p is array of model, | ||||
|           // return container type combine inner type with pointer, e.g. `NSArray<SWGTag>*' | ||||
|           String innerTypeDeclaration = getTypeDeclaration(inner); | ||||
|          | ||||
|           if (innerTypeDeclaration.endsWith("*")) | ||||
|               innerTypeDeclaration = innerTypeDeclaration.substring(0, innerTypeDeclaration.length() - 1); | ||||
|          | ||||
|           return getSwaggerType(p) + "<" + innerTypeDeclaration + ">*"; | ||||
|       } | ||||
|       else { | ||||
|           String swaggerType = getSwaggerType(p); | ||||
| 
 | ||||
|           // In this codition, type of p is objective-c primitive type, e.g. `NSSNumber', | ||||
|           // return type of p with pointer, e.g. `NSNumber*' | ||||
|           if (languageSpecificPrimitives.contains(swaggerType) && | ||||
|               foundationClasses.contains(swaggerType)) { | ||||
|               return swaggerType + "*"; | ||||
|           } | ||||
|           // In this codition, type of p is c primitive type, e.g. `bool', | ||||
|           // return type of p, e.g. `bool' | ||||
|           else if (languageSpecificPrimitives.contains(swaggerType)) { | ||||
|               return swaggerType; | ||||
|           } | ||||
|           // In this codition, type of p is objective-c object type, e.g. `SWGPet', | ||||
|           // return type of p with pointer, e.g. `SWGPet*' | ||||
|           else { | ||||
|               return swaggerType + "*"; | ||||
|           } | ||||
|       } | ||||
|   } | ||||
| 
 | ||||
|   @Override | ||||
|   public String toModelName(String type) { | ||||
|     type = type.replaceAll("[^0-9a-zA-Z_]", "_"); | ||||
| 
 | ||||
|     // language build-in classes | ||||
|     if(typeMapping.keySet().contains(type) || | ||||
|       foundationClasses.contains(type) || | ||||
|       importMapping.values().contains(type) || | ||||
|       defaultIncludes.contains(type) || | ||||
|       languageSpecificPrimitives.contains(type)) { | ||||
|       return camelize(type); | ||||
|     } | ||||
|     // custom classes | ||||
|     else { | ||||
|       return classPrefix + camelize(type); | ||||
|     } | ||||
|   } | ||||
| 
 | ||||
|   @Override | ||||
|   public String toModelFilename(String name) { | ||||
|     // should be the same as the model name | ||||
|     return toModelName(name); | ||||
|   } | ||||
| 
 | ||||
|     @Override | ||||
|     protected void setNonArrayMapProperty(CodegenProperty property, String type) { | ||||
|         super.setNonArrayMapProperty(property, type); | ||||
|         if("NSDictionary".equals(type)) { | ||||
|             property.setter = "initWithDictionary"; | ||||
|         } | ||||
|         else { | ||||
|             property.setter = "initWithValues"; | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     @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 toApiName(String name) { | ||||
|     return classPrefix + camelize(name) + "Api"; | ||||
|   } | ||||
| 
 | ||||
|   public String toApiFilename(String name) { | ||||
|     return classPrefix + camelize(name) + "Api"; | ||||
|   } | ||||
| 
 | ||||
|   @Override | ||||
|   public String toVarName(String name) { | ||||
|     // replace non-word characters to `_` | ||||
|     // e.g. `created-at` to `created_at` | ||||
|     name = name.replaceAll("[^a-zA-Z0-9_]","_"); | ||||
| 
 | ||||
|     // if it's all upper case, do noting | ||||
|     if (name.matches("^[A-Z_]$")) | ||||
|       return name; | ||||
| 
 | ||||
|     // camelize (lower first character) the variable name | ||||
|     // e.g. `pet_id` to `petId` | ||||
|     name = camelize(name, true); | ||||
| 
 | ||||
|     // for reserved word or word starting with number, prepend `_` | ||||
|     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); | ||||
|   } | ||||
| 
 | ||||
|   public String escapeReservedWord(String name) { | ||||
|     return "_" + 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); | ||||
|   } | ||||
| 
 | ||||
|   public void setSourceFolder(String sourceFolder) { | ||||
|     this.sourceFolder = sourceFolder; | ||||
|   } | ||||
| 
 | ||||
|   public void setClassPrefix(String classPrefix) { | ||||
|     this.classPrefix = classPrefix; | ||||
|   } | ||||
| 
 | ||||
|   public void setProjectName(String projectName) { | ||||
|     this.projectName = projectName; | ||||
|   } | ||||
| } | ||||
| @ -1,200 +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 PerlClientCodegen extends DefaultCodegen implements CodegenConfig { | ||||
|   protected String invokerPackage = "SwaggerClient"; | ||||
|   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 "perl"; | ||||
|   } | ||||
| 
 | ||||
|   public String getHelp() { | ||||
|     return "Generates a Perl client library."; | ||||
|   } | ||||
| 
 | ||||
|   public PerlClientCodegen() { | ||||
|     super(); | ||||
|     modelPackage = File.separatorChar + "Object"; | ||||
|     outputFolder = "generated-code" + File.separatorChar + "perl"; | ||||
|     modelTemplateFiles.put("object.mustache", ".pm"); | ||||
|     apiTemplateFiles.put("api.mustache", ".pm"); | ||||
|     templateDir = "perl"; | ||||
| 
 | ||||
|     typeMapping.clear(); | ||||
|     languageSpecificPrimitives.clear(); | ||||
| 
 | ||||
|     reservedWords = new HashSet<String> ( | ||||
|       Arrays.asList( | ||||
|   "else",  "lock",  "qw", | ||||
|   "__END__", "elsif", "lt", "qx", | ||||
|   "__FILE__", "eq", "m", "s", | ||||
|   "__LINE__", "exp", "ne", "sub", | ||||
|   "__PACKAGE__", "for", "no", "tr", | ||||
|   "and", "foreach", "or", "unless", | ||||
|   "cmp", "ge", "package", "until", | ||||
|   "continue", "gt", "q", "while", | ||||
|   "CORE", "if", "qq", "xor", | ||||
|   "do", "le", "qr", "y" | ||||
|       )   | ||||
|     ); | ||||
| 
 | ||||
|     additionalProperties.put("invokerPackage", invokerPackage); | ||||
|     additionalProperties.put("groupId", groupId); | ||||
|     additionalProperties.put("artifactId", artifactId); | ||||
|     additionalProperties.put("artifactVersion", artifactVersion); | ||||
| 
 | ||||
|     languageSpecificPrimitives.add("int"); | ||||
|     languageSpecificPrimitives.add("double"); | ||||
|     languageSpecificPrimitives.add("string"); | ||||
|     languageSpecificPrimitives.add("boolean"); | ||||
|     languageSpecificPrimitives.add("DateTime"); | ||||
|     languageSpecificPrimitives.add("ARRAY"); | ||||
|     languageSpecificPrimitives.add("HASH"); | ||||
|     languageSpecificPrimitives.add("object"); | ||||
| 
 | ||||
|     typeMapping.put("integer", "int"); | ||||
|     typeMapping.put("long", "int"); | ||||
|     typeMapping.put("float", "double"); | ||||
|     typeMapping.put("double", "double"); | ||||
|     typeMapping.put("boolean", "boolean"); | ||||
|     typeMapping.put("string", "string"); | ||||
|     typeMapping.put("date", "DateTime"); | ||||
|     typeMapping.put("dateTime", "DateTime"); | ||||
|     typeMapping.put("password", "string"); | ||||
|     typeMapping.put("array", "ARRAY"); | ||||
|     typeMapping.put("map", "HASH"); | ||||
|     typeMapping.put("object", "object"); | ||||
| 
 | ||||
|     supportingFiles.add(new SupportingFile("ApiClient.mustache", ("lib/WWW/" + invokerPackage).replace('/', File.separatorChar), "ApiClient.pm")); | ||||
|     supportingFiles.add(new SupportingFile("Configuration.mustache", ("lib/WWW/" + invokerPackage).replace('/', File.separatorChar), "Configuration.pm")); | ||||
|     supportingFiles.add(new SupportingFile("BaseObject.mustache", ("lib/WWW/" + invokerPackage).replace('/', File.separatorChar), "Object/BaseObject.pm")); | ||||
|   } | ||||
| 
 | ||||
|   @Override | ||||
|   public String escapeReservedWord(String name) { | ||||
|     return "_" + name; | ||||
|   } | ||||
|    | ||||
|   @Override | ||||
|   public String apiFileFolder() { | ||||
|     return (outputFolder + "/lib/WWW/" + invokerPackage + apiPackage()).replace('/', File.separatorChar); | ||||
|   } | ||||
| 
 | ||||
|   public String modelFileFolder() { | ||||
|     return (outputFolder + "/lib/WWW/" + invokerPackage + 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 type; | ||||
|       } | ||||
|     } | ||||
|     else | ||||
|       type = swaggerType; | ||||
|     if(type == null) | ||||
|       return null; | ||||
|     return type; | ||||
|   } | ||||
| 
 | ||||
|   public String toDefaultValue(Property p) { | ||||
|     return "null"; | ||||
|   } | ||||
| 
 | ||||
| 
 | ||||
|   @Override | ||||
|   public String toVarName(String name) { | ||||
|     // parameter name starting with number won't compile | ||||
|     // need to escape it by appending _ at the beginning | ||||
|     if (name.matches("^[0-9]")) { | ||||
|       name = "_" + name; | ||||
|     } | ||||
|      | ||||
|     // return the name in underscore style | ||||
|     // PhoneNumber => phone_number | ||||
|     return underscore(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 | ||||
|     if(reservedWords.contains(name)) | ||||
|       escapeReservedWord(name); // e.g. return => _return | ||||
| 
 | ||||
|     // 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 toApiFilename(String name) { | ||||
|     // replace - with _ e.g. created-at => created_at | ||||
|     name = name.replaceAll("-", "_"); | ||||
| 
 | ||||
|     // e.g. phone_number_api.rb => PhoneNumberApi.rb | ||||
|     return camelize(name) + "Api"; | ||||
|   } | ||||
| 
 | ||||
|   @Override | ||||
|   public String toApiName(String name) { | ||||
|     if(name.length() == 0) | ||||
|       return "DefaultApi"; | ||||
|     // e.g. phone_number_api => PhoneNumberApi  | ||||
|     return camelize(name) + "Api"; | ||||
|   } | ||||
| 
 | ||||
|   @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 underscore(operationId); | ||||
|   } | ||||
| 
 | ||||
| 
 | ||||
| } | ||||
| @ -1,184 +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(); | ||||
| 
 | ||||
|     invokerPackage = camelize("SwaggerClient");  | ||||
| 
 | ||||
|     String packagePath = invokerPackage + "-php"; | ||||
| 
 | ||||
|     modelPackage = packagePath + "/lib/models"; | ||||
|     apiPackage = packagePath + "/lib"; | ||||
|     outputFolder = "generated-code/php"; | ||||
|     modelTemplateFiles.put("model.mustache", ".php"); | ||||
|     apiTemplateFiles.put("api.mustache", ".php"); | ||||
|     templateDir = "php"; | ||||
| 
 | ||||
|     reservedWords = new HashSet<String> ( | ||||
|       Arrays.asList( | ||||
|         "__halt_compiler", "abstract", "and", "array", "as", "break", "callable", "case", "catch", "class", "clone", "const", "continue", "declare", "default", "die", "do", "echo", "else", "elseif", "empty", "enddeclare", "endfor", "endforeach", "endif", "endswitch", "endwhile", "eval", "exit", "extends", "final", "for", "foreach", "function", "global", "goto", "if", "implements", "include", "include_once", "instanceof", "insteadof", "interface", "isset", "list", "namespace", "new", "or", "print", "private", "protected", "public", "require", "require_once", "return", "static", "switch", "throw", "trait", "try", "unset", "use", "var", "while", "xor") | ||||
|     ); | ||||
| 
 | ||||
|     additionalProperties.put("invokerPackage", invokerPackage); | ||||
|     additionalProperties.put("groupId", groupId); | ||||
|     additionalProperties.put("artifactId", artifactId); | ||||
|     additionalProperties.put("artifactVersion", artifactVersion); | ||||
| 
 | ||||
|     // ref: http://php.net/manual/en/language.types.intro.php | ||||
|     languageSpecificPrimitives = new HashSet<String>( | ||||
|       Arrays.asList( | ||||
|         "boolean", | ||||
|         "int", | ||||
|         "integer", | ||||
|         "double", | ||||
|         "float", | ||||
|         "string", | ||||
|         "object", | ||||
|         "DateTime", | ||||
|         "mixed", | ||||
|         "number") | ||||
|     ); | ||||
| 
 | ||||
|     instantiationTypes.put("array", "array"); | ||||
|     instantiationTypes.put("map", "map"); | ||||
| 
 | ||||
|     // ref: https://github.com/swagger-api/swagger-spec/blob/master/versions/2.0.md#data-types | ||||
|     typeMapping = new HashMap<String, String>(); | ||||
|     typeMapping.put("integer", "int"); | ||||
|     typeMapping.put("long", "int"); | ||||
|     typeMapping.put("float", "float"); | ||||
|     typeMapping.put("double", "double"); | ||||
|     typeMapping.put("string", "string"); | ||||
|     typeMapping.put("byte", "int"); | ||||
|     typeMapping.put("boolean", "boolean"); | ||||
|     typeMapping.put("date", "DateTime"); | ||||
|     typeMapping.put("datetime", "DateTime"); | ||||
|     typeMapping.put("file", "string"); | ||||
|     typeMapping.put("map", "map"); | ||||
|     typeMapping.put("array", "array"); | ||||
|     typeMapping.put("list", "array"); | ||||
|     typeMapping.put("object", "object"); | ||||
| 
 | ||||
|     supportingFiles.add(new SupportingFile("composer.mustache", packagePath.replace('/', File.separatorChar), "composer.json")); | ||||
|     supportingFiles.add(new SupportingFile("configuration.mustache", (packagePath + "/lib").replace('/', File.separatorChar), "Configuration.php")); | ||||
|     supportingFiles.add(new SupportingFile("ApiClient.mustache", (packagePath + "/lib").replace('/', File.separatorChar), "ApiClient.php")); | ||||
|     supportingFiles.add(new SupportingFile("ApiException.mustache", (packagePath + "/lib").replace('/', File.separatorChar), "ApiException.php")); | ||||
|     supportingFiles.add(new SupportingFile("require.mustache", packagePath.replace('/', File.separatorChar), invokerPackage + ".php")); | ||||
|   } | ||||
| 
 | ||||
|   @Override | ||||
|   public String escapeReservedWord(String name) { | ||||
|     return "_" + name; | ||||
|   } | ||||
|    | ||||
|   @Override | ||||
|   public String apiFileFolder() { | ||||
|     return (outputFolder + "/" + apiPackage()).replace('/', File.separatorChar); | ||||
|   } | ||||
| 
 | ||||
|   public String modelFileFolder() { | ||||
|     return (outputFolder + "/" + 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 type; | ||||
|       } | ||||
|       else if (instantiationTypes.containsKey(type)) { | ||||
| 	return type; | ||||
|       } | ||||
|     } | ||||
|     else | ||||
|       type = swaggerType; | ||||
|     if(type == null) | ||||
|       return null; | ||||
|     return toModelName(type); | ||||
|   } | ||||
| 
 | ||||
|   public String toDefaultValue(Property p) { | ||||
|     return "null"; | ||||
|   } | ||||
| 
 | ||||
| 
 | ||||
|   @Override | ||||
|   public String toVarName(String name) { | ||||
|     // parameter name starting with number won't compile | ||||
|     // need to escape it by appending _ at the beginning | ||||
|     if (name.matches("^[0-9]")) { | ||||
|       name = "_" + name; | ||||
|     } | ||||
|      | ||||
|     // return the name in underscore style | ||||
|     // PhoneNumber => phone_number | ||||
|     return underscore(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 | ||||
|     if(reservedWords.contains(name)) | ||||
|       escapeReservedWord(name); // e.g. return => _return | ||||
| 
 | ||||
|     // 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); | ||||
|   } | ||||
| 
 | ||||
| } | ||||
| @ -1,198 +0,0 @@ | ||||
| package com.wordnik.swagger.codegen.languages; | ||||
| 
 | ||||
| import com.wordnik.swagger.codegen.*; | ||||
| import com.wordnik.swagger.models.properties.*; | ||||
| 
 | ||||
| import java.io.File; | ||||
| import java.util.*; | ||||
| 
 | ||||
| public class Python3ClientCodegen extends DefaultCodegen implements CodegenConfig { | ||||
|   String module = "client"; | ||||
| 
 | ||||
|   public CodegenType getTag() { | ||||
|     return CodegenType.CLIENT; | ||||
|   } | ||||
| 
 | ||||
|   public String getName() { | ||||
|     return "python3"; | ||||
|   } | ||||
| 
 | ||||
|   public String getHelp() { | ||||
|     return "Generates a Python3 client library."; | ||||
|   } | ||||
| 
 | ||||
|   public Python3ClientCodegen() { | ||||
|     super(); | ||||
|     outputFolder = "generated-code/python3"; | ||||
|     modelTemplateFiles.put("model.mustache", ".py"); | ||||
|     apiTemplateFiles.put("api.mustache", ".py"); | ||||
|     templateDir = "python3"; | ||||
| 
 | ||||
|     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", "int"); | ||||
|     typeMapping.put("double", "float"); | ||||
|     typeMapping.put("array", "list"); | ||||
|     typeMapping.put("map", "map"); | ||||
|     typeMapping.put("boolean", "bool"); | ||||
|     typeMapping.put("string", "str"); | ||||
|     typeMapping.put("date", "datetime"); | ||||
| 
 | ||||
|     // from https://docs.python.org/release/2.5.4/ref/keywords.html | ||||
|     reservedWords = new HashSet<String> ( | ||||
|       Arrays.asList( | ||||
|         "and", "del", "from", "not", "while", "as", "elif", "global", "or", "with", | ||||
|         "assert", "else", "if", "pass", "yield", "break", "except", "import", | ||||
|         "print", "class", "exec", "in", "raise", "continue", "finally", "is", | ||||
|         "return", "def", "for", "lambda", "try")); | ||||
| 
 | ||||
|     //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")); | ||||
|   } | ||||
| 
 | ||||
|   @Override | ||||
|   public String escapeReservedWord(String name) { | ||||
|     return "_" + name; | ||||
|   } | ||||
| 
 | ||||
|   @Override | ||||
|   public String apiFileFolder() { | ||||
|     return outputFolder + "/" + apiPackage().replace('.', File.separatorChar); | ||||
|   } | ||||
| 
 | ||||
|   public String modelFileFolder() { | ||||
|     return outputFolder + "/" + 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 type; | ||||
|       } | ||||
|     } | ||||
|     else | ||||
|       type = swaggerType; | ||||
|     return type; | ||||
|   } | ||||
| 
 | ||||
|   public String toDefaultValue(Property p) { | ||||
| 	// TODO: Support Python def value | ||||
|     return "null"; | ||||
|   } | ||||
| 
 | ||||
|   @Override | ||||
|   public String toVarName(String name) { | ||||
|     // replace - with _ e.g. created-at => created_at | ||||
|     name = name.replaceAll("-", "_"); | ||||
| 
 | ||||
|     // if it's all uppper case, convert to lower case | ||||
|     if (name.matches("^[A-Z_]*$")) | ||||
|       name = name.toLowerCase(); | ||||
| 
 | ||||
|     // camelize (lower first character) the variable name | ||||
|     // petId => pet_id | ||||
|     name = underscore(name); | ||||
| 
 | ||||
|     // 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) { | ||||
|     // 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"); | ||||
| 
 | ||||
|     // underscore the model file name | ||||
|     // PhoneNumber.rb => phone_number.rb | ||||
|     return underscore(name); | ||||
|   } | ||||
| 
 | ||||
|   @Override | ||||
|   public String toApiFilename(String name) { | ||||
|     // replace - with _ e.g. created-at => created_at | ||||
|     name = name.replaceAll("-", "_"); | ||||
| 
 | ||||
|     // e.g. PhoneNumberApi.rb => phone_number_api.rb | ||||
|     return underscore(name) + "_api"; | ||||
|   } | ||||
| 
 | ||||
|   @Override | ||||
|   public String toApiName(String name) { | ||||
|     if(name.length() == 0) | ||||
|       return "DefaultApi"; | ||||
|     // e.g. phone_number_api => PhoneNumberApi | ||||
|     return camelize(name) + "Api"; | ||||
|   } | ||||
| 
 | ||||
|   @Override | ||||
|   public String toApiVarName(String name) { | ||||
|       if(name.length() == 0) | ||||
|           return "default_api"; | ||||
|     return underscore(name) + "_api"; | ||||
|   } | ||||
| 
 | ||||
|   @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 underscore(operationId); | ||||
|   } | ||||
| 
 | ||||
| } | ||||
| @ -1,215 +0,0 @@ | ||||
| package com.wordnik.swagger.codegen.languages; | ||||
| 
 | ||||
| import com.wordnik.swagger.codegen.*; | ||||
| import com.wordnik.swagger.models.properties.*; | ||||
| 
 | ||||
| import java.io.File; | ||||
| import java.util.*; | ||||
| 
 | ||||
| public class PythonClientCodegen extends DefaultCodegen implements CodegenConfig { | ||||
|   protected String module = "SwaggerPetstore"; | ||||
|   protected String invokerPackage; | ||||
|   protected String eggPackage; | ||||
| 
 | ||||
|   public CodegenType getTag() { | ||||
|     return CodegenType.CLIENT; | ||||
|   } | ||||
| 
 | ||||
|   public String getName() { | ||||
|     return "python"; | ||||
|   } | ||||
| 
 | ||||
|   public String getHelp() { | ||||
|     return "Generates a Python client library."; | ||||
|   } | ||||
| 
 | ||||
|   public PythonClientCodegen() { | ||||
|     super(); | ||||
| 
 | ||||
|     eggPackage = module + "-python"; | ||||
|      | ||||
|     invokerPackage = eggPackage + File.separatorChar + module; | ||||
| 
 | ||||
|     outputFolder = "generated-code" + File.separatorChar + "python"; | ||||
|     modelTemplateFiles.put("model.mustache", ".py"); | ||||
|     apiTemplateFiles.put("api.mustache", ".py"); | ||||
|     templateDir = "python"; | ||||
| 
 | ||||
|     apiPackage = invokerPackage + File.separatorChar + "apis"; | ||||
|     modelPackage = invokerPackage + File.separatorChar + "models"; | ||||
| 
 | ||||
|     languageSpecificPrimitives.clear(); | ||||
|     languageSpecificPrimitives.add("int"); | ||||
|     languageSpecificPrimitives.add("float"); | ||||
|     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", "int"); | ||||
|     typeMapping.put("double", "float"); | ||||
|     typeMapping.put("array", "list"); | ||||
|     typeMapping.put("map", "map"); | ||||
|     typeMapping.put("boolean", "bool"); | ||||
|     typeMapping.put("string", "str"); | ||||
|     typeMapping.put("date", "datetime"); | ||||
| 
 | ||||
|     // from https://docs.python.org/release/2.5.4/ref/keywords.html | ||||
|     reservedWords = new HashSet<String> ( | ||||
|       Arrays.asList( | ||||
|         "and", "del", "from", "not", "while", "as", "elif", "global", "or", "with", | ||||
|         "assert", "else", "if", "pass", "yield", "break", "except", "import", | ||||
|         "print", "class", "exec", "in", "raise", "continue", "finally", "is", | ||||
|         "return", "def", "for", "lambda", "try")); | ||||
| 
 | ||||
|     additionalProperties.put("module", module); | ||||
| 
 | ||||
|     supportingFiles.add(new SupportingFile("README.mustache", eggPackage, "README.md")); | ||||
|     supportingFiles.add(new SupportingFile("setup.mustache", eggPackage, "setup.py")); | ||||
|     supportingFiles.add(new SupportingFile("api_client.mustache", invokerPackage, "api_client.py")); | ||||
|     supportingFiles.add(new SupportingFile("rest.mustache", invokerPackage, "rest.py")); | ||||
|     supportingFiles.add(new SupportingFile("configuration.mustache", invokerPackage, "configuration.py")); | ||||
|     supportingFiles.add(new SupportingFile("__init__package.mustache", invokerPackage, "__init__.py")); | ||||
|     supportingFiles.add(new SupportingFile("__init__model.mustache", modelPackage, "__init__.py")); | ||||
|     supportingFiles.add(new SupportingFile("__init__api.mustache", apiPackage, "__init__.py")); | ||||
|   } | ||||
| 
 | ||||
|   @Override | ||||
|   public String escapeReservedWord(String name) { | ||||
|     return "_" + name; | ||||
|   } | ||||
| 
 | ||||
|   @Override | ||||
|   public String apiFileFolder() { | ||||
|     return outputFolder + File.separatorChar + apiPackage().replace('.', File.separatorChar); | ||||
|   } | ||||
| 
 | ||||
|   public String modelFileFolder() { | ||||
|     return outputFolder + File.separatorChar + 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 type; | ||||
|       } | ||||
|     } else { | ||||
|       type = toModelName(swaggerType); | ||||
|     } | ||||
|     return type; | ||||
|   } | ||||
| 
 | ||||
|   public String toDefaultValue(Property p) { | ||||
| 	// TODO: Support Python def value | ||||
|     return "null"; | ||||
|   } | ||||
| 
 | ||||
|   @Override | ||||
|   public String toVarName(String name) { | ||||
|     // replace - with _ e.g. created-at => created_at | ||||
|     name = name.replaceAll("-", "_"); | ||||
| 
 | ||||
|     // if it's all uppper case, convert to lower case | ||||
|     if (name.matches("^[A-Z_]*$")) | ||||
|       name = name.toLowerCase(); | ||||
| 
 | ||||
|     // underscore the variable name | ||||
|     // petId => pet_id | ||||
|     name = underscore(dropDots(name)); | ||||
| 
 | ||||
|     // for reserved word or word starting with number, append _ | ||||
|     if(reservedWords.contains(name) || name.matches("^\\d.*")) | ||||
|       name = escapeReservedWord(name); | ||||
| 
 | ||||
|     return name; | ||||
|   } | ||||
| 
 | ||||
|   private static String dropDots(String str) { | ||||
|     return str.replaceAll("\\.", "_"); | ||||
|   } | ||||
| 
 | ||||
|   @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) { | ||||
|     // 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"); | ||||
| 
 | ||||
|     // underscore the model file name | ||||
|     // PhoneNumber => phone_number | ||||
|     return underscore(dropDots(name)); | ||||
|   } | ||||
| 
 | ||||
|   @Override | ||||
|   public String toApiFilename(String name) { | ||||
|     // replace - with _ e.g. created-at => created_at | ||||
|     name = name.replaceAll("-", "_"); | ||||
| 
 | ||||
|     // e.g. PhoneNumberApi.rb => phone_number_api.rb | ||||
|     return underscore(name) + "_api"; | ||||
|   } | ||||
| 
 | ||||
|   @Override | ||||
|   public String toApiName(String name) { | ||||
|     if(name.length() == 0) | ||||
|       return "DefaultApi"; | ||||
|     // e.g. phone_number_api => PhoneNumberApi | ||||
|     return camelize(name) + "Api"; | ||||
|   } | ||||
| 
 | ||||
|   @Override | ||||
|   public String toApiVarName(String name) { | ||||
|       if(name.length() == 0) | ||||
|           return "default_api"; | ||||
|     return underscore(name) + "_api"; | ||||
|   } | ||||
| 
 | ||||
|   @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 underscore(operationId); | ||||
|   } | ||||
| 
 | ||||
| } | ||||
| @ -1,308 +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 Qt5CPPGenerator extends DefaultCodegen implements CodegenConfig { | ||||
|   protected Set<String> foundationClasses = new HashSet<String>(); | ||||
| 
 | ||||
|   // source folder where to write the files | ||||
|   protected String sourceFolder = "client"; | ||||
|   protected String apiVersion = "1.0.0"; | ||||
|   protected final String PREFIX = "SWG"; | ||||
|   protected Map<String, String> namespaces = new HashMap<String, String>(); | ||||
|   protected Set<String> systemIncludes = new HashSet<String>(); | ||||
| 
 | ||||
|   /** | ||||
|    * Configures the type of generator. | ||||
|    *  | ||||
|    * @return  the CodegenType for this generator | ||||
|    * @see     com.wordnik.swagger.codegen.CodegenType | ||||
|    */ | ||||
|   public CodegenType getTag() { | ||||
|     return CodegenType.CLIENT; | ||||
|   } | ||||
| 
 | ||||
|   /** | ||||
|    * Configures a friendly name for the generator.  This will be used by the generator | ||||
|    * to select the library with the -l flag. | ||||
|    *  | ||||
|    * @return the friendly name for the generator | ||||
|    */ | ||||
|   public String getName() { | ||||
|     return "qt5cpp"; | ||||
|   } | ||||
| 
 | ||||
|   /** | ||||
|    * Returns human-friendly help for the generator.  Provide the consumer with help | ||||
|    * tips, parameters here | ||||
|    *  | ||||
|    * @return A string value for the help message | ||||
|    */ | ||||
|   public String getHelp() { | ||||
|     return "Generates a qt5 C++ client library."; | ||||
|   } | ||||
| 
 | ||||
|   public Qt5CPPGenerator() { | ||||
|     super(); | ||||
| 
 | ||||
|     // set the output folder here | ||||
|     outputFolder = "generated-code/qt5cpp"; | ||||
| 
 | ||||
|     /** | ||||
|      * Models.  You can write model files using the modelTemplateFiles map. | ||||
|      * if you want to create one template for file, you can do so here. | ||||
|      * for multiple files for model, just put another entry in the `modelTemplateFiles` with | ||||
|      * a different extension | ||||
|      */ | ||||
|     modelTemplateFiles.put( | ||||
|       "model-header.mustache", | ||||
|       ".h"); | ||||
| 
 | ||||
|     modelTemplateFiles.put( | ||||
|       "model-body.mustache", | ||||
|       ".cpp"); | ||||
| 
 | ||||
|     /** | ||||
|      * Api classes.  You can write classes for each Api file with the apiTemplateFiles map. | ||||
|      * as with models, add multiple entries with different extensions for multiple files per | ||||
|      * class | ||||
|      */ | ||||
|     apiTemplateFiles.put( | ||||
|       "api-header.mustache",   // the template to use | ||||
|       ".h");       // the extension for each file to write | ||||
| 
 | ||||
|     apiTemplateFiles.put( | ||||
|       "api-body.mustache",   // the template to use | ||||
|       ".cpp");       // the extension for each file to write | ||||
| 
 | ||||
|     /** | ||||
|      * Template Location.  This is the location which templates will be read from.  The generator | ||||
|      * will use the resource stream to attempt to read the templates. | ||||
|      */ | ||||
|     templateDir = "qt5cpp"; | ||||
| 
 | ||||
|     /** | ||||
|      * Reserved words.  Override this with reserved words specific to your language | ||||
|      */ | ||||
|     reservedWords = new HashSet<String> ( | ||||
|       Arrays.asList( | ||||
|         "sample1",  // replace with static values | ||||
|         "sample2") | ||||
|     ); | ||||
| 
 | ||||
|     /** | ||||
|      * Additional Properties.  These values can be passed to the templates and | ||||
|      * are available in models, apis, and supporting files | ||||
|      */ | ||||
|     additionalProperties.put("apiVersion", apiVersion); | ||||
|     additionalProperties().put("prefix", PREFIX); | ||||
| 
 | ||||
|     /** | ||||
|      * Language Specific Primitives.  These types will not trigger imports by | ||||
|      * the client generator | ||||
|      */ | ||||
|     languageSpecificPrimitives = new HashSet<String>( | ||||
|       Arrays.asList( | ||||
|         "bool", | ||||
|         "qint32", | ||||
|         "qint64") | ||||
|     ); | ||||
| 
 | ||||
|     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("HttpRequest.h", sourceFolder, PREFIX + "HttpRequest.h")); | ||||
|     supportingFiles.add(new SupportingFile("HttpRequest.cpp", sourceFolder, PREFIX + "HttpRequest.cpp")); | ||||
|     supportingFiles.add(new SupportingFile("modelFactory.mustache", sourceFolder, PREFIX + "ModelFactory.h")); | ||||
|     supportingFiles.add(new SupportingFile("object.mustache", sourceFolder, PREFIX + "Object.h")); | ||||
| 
 | ||||
|     super.typeMapping = new HashMap<String, String>(); | ||||
| 
 | ||||
|     typeMapping.put("Date", "QDate"); | ||||
|     typeMapping.put("DateTime", "QDateTime"); | ||||
|     typeMapping.put("string", "QString"); | ||||
|     typeMapping.put("integer", "qint32"); | ||||
|     typeMapping.put("long", "qint64"); | ||||
|     typeMapping.put("boolean", "bool"); | ||||
|     typeMapping.put("array", "QList"); | ||||
|     typeMapping.put("map", "QMap"); | ||||
|     typeMapping.put("file", "SWGHttpRequestInputFileElement"); | ||||
|     typeMapping.put("object", PREFIX + "Object"); | ||||
| 
 | ||||
|     importMapping = new HashMap<String, String>(); | ||||
| 
 | ||||
|     importMapping.put("SWGHttpRequestInputFileElement", "#include \"" + PREFIX + "HttpRequest.h\""); | ||||
| 
 | ||||
|     namespaces = new HashMap<String, String> (); | ||||
| 
 | ||||
|     foundationClasses.add("QString"); | ||||
| 
 | ||||
|     systemIncludes.add("QString"); | ||||
|     systemIncludes.add("QList"); | ||||
|   } | ||||
| 
 | ||||
|   @Override | ||||
|   public String toModelImport(String name) { | ||||
|     if(namespaces.containsKey(name)) { | ||||
|       return "using " + namespaces.get(name) + ";"; | ||||
|     } | ||||
|     else if(systemIncludes.contains(name)) { | ||||
|       return "#include <" + name + ">"; | ||||
|     } | ||||
|     return "#include \"" + name + ".h\""; | ||||
|   } | ||||
| 
 | ||||
|   /** | ||||
|    * Escapes a reserved word as defined in the `reservedWords` array. Handle escaping | ||||
|    * those terms here.  This logic is only called if a variable matches the reseved words | ||||
|    *  | ||||
|    * @return the escaped term | ||||
|    */ | ||||
|   @Override | ||||
|   public String escapeReservedWord(String name) { | ||||
|     return "_" + name;  // add an underscore to the name | ||||
|   } | ||||
| 
 | ||||
|   /** | ||||
|    * Location to write model files.  You can use the modelPackage() as defined when the class is | ||||
|    * instantiated | ||||
|    */ | ||||
|   public String modelFileFolder() { | ||||
|     return outputFolder + "/" + sourceFolder + "/" + modelPackage().replace('.', File.separatorChar); | ||||
|   } | ||||
| 
 | ||||
|   /** | ||||
|    * Location to write api files.  You can use the apiPackage() as defined when the class is | ||||
|    * instantiated | ||||
|    */ | ||||
|   @Override | ||||
|   public String apiFileFolder() { | ||||
|     return outputFolder + "/" + sourceFolder + "/" + apiPackage().replace('.', File.separatorChar); | ||||
|   } | ||||
| 
 | ||||
|   @Override | ||||
|   public String toModelFilename(String name) { | ||||
|     return PREFIX + initialCaps(name); | ||||
|   } | ||||
| 
 | ||||
|   @Override | ||||
|   public String toApiFilename(String name) { | ||||
|     return PREFIX + initialCaps(name) + "Api"; | ||||
|   } | ||||
| 
 | ||||
|   /** | ||||
|    * Optional - type declaration.  This is a String which is used by the templates to instantiate your | ||||
|    * types.  There is typically special handling for different property types | ||||
|    * | ||||
|    * @return a string value used as the `dataType` field for model templates, `returnType` for api templates | ||||
|    */ | ||||
|   @Override | ||||
|   public String getTypeDeclaration(Property p) { | ||||
|     String swaggerType = getSwaggerType(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) + "<QString, " + getTypeDeclaration(inner) + ">*"; | ||||
|     } | ||||
|     if(foundationClasses.contains(swaggerType)) | ||||
|       return swaggerType + "*"; | ||||
|     else if(languageSpecificPrimitives.contains(swaggerType)) | ||||
|       return toModelName(swaggerType); | ||||
|     else | ||||
|       return swaggerType + "*"; | ||||
|   } | ||||
| 
 | ||||
|   @Override | ||||
|   public String toDefaultValue(Property p) { | ||||
|     if(p instanceof StringProperty) | ||||
|       return "new QString(\"\")"; | ||||
|     else if (p instanceof BooleanProperty) | ||||
|       return "false"; | ||||
|     else if(p instanceof DateProperty) | ||||
|       return "NULL"; | ||||
|     else if(p instanceof DateTimeProperty) | ||||
|       return "NULL"; | ||||
|     else if (p instanceof DoubleProperty) | ||||
|       return "0.0"; | ||||
|     else if (p instanceof FloatProperty) | ||||
|       return "0.0f"; | ||||
|     else if (p instanceof IntegerProperty) | ||||
|       return "0"; | ||||
|     else if (p instanceof LongProperty) | ||||
|       return "0L"; | ||||
|     else if (p instanceof DecimalProperty) | ||||
|       return "0.0"; | ||||
|     else if (p instanceof MapProperty) { | ||||
|       MapProperty ap = (MapProperty) p; | ||||
|       String inner = getSwaggerType(ap.getAdditionalProperties()); | ||||
|       return "new QMap<QString, " + inner + ">()"; | ||||
|     } | ||||
|     else if (p instanceof ArrayProperty) { | ||||
|       ArrayProperty ap = (ArrayProperty) p; | ||||
|       String inner = getSwaggerType(ap.getItems()); | ||||
|       if(!languageSpecificPrimitives.contains(inner)) { | ||||
|         inner += "*"; | ||||
|       } | ||||
|       return "new QList<" + inner + ">()"; | ||||
|     } | ||||
|     // else | ||||
|     if(p instanceof RefProperty) { | ||||
|       RefProperty rp = (RefProperty) p; | ||||
|       return "new " + toModelName(rp.getSimpleRef()) + "()"; | ||||
|     } | ||||
|     return "NULL"; | ||||
|   } | ||||
| 
 | ||||
| 
 | ||||
|   /** | ||||
|    * Optional - swagger type conversion.  This is used to map swagger types in a `Property` into  | ||||
|    * either language specific types via `typeMapping` or into complex models if there is not a mapping. | ||||
|    * | ||||
|    * @return a string value of the type or complex model for this property | ||||
|    * @see com.wordnik.swagger.models.properties.Property | ||||
|    */ | ||||
|   @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); | ||||
|       if(foundationClasses.contains(type)) | ||||
|         return type; | ||||
|     } | ||||
|     else | ||||
|       type = swaggerType; | ||||
|     return toModelName(type); | ||||
|   } | ||||
| 
 | ||||
|   @Override | ||||
|   public String toModelName(String type) { | ||||
|     if(typeMapping.keySet().contains(type) || | ||||
|       typeMapping.values().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 toApiName(String type) { | ||||
|     return PREFIX + Character.toUpperCase(type.charAt(0)) + type.substring(1) + "Api"; | ||||
|   } | ||||
| } | ||||
| @ -1,190 +0,0 @@ | ||||
| package com.wordnik.swagger.codegen.languages; | ||||
| 
 | ||||
| import com.wordnik.swagger.codegen.*; | ||||
| import com.wordnik.swagger.models.Operation; | ||||
| import com.wordnik.swagger.models.properties.*; | ||||
| 
 | ||||
| import java.util.*; | ||||
| import java.io.File; | ||||
| 
 | ||||
| public class RetrofitClientCodegen extends DefaultCodegen implements CodegenConfig { | ||||
|   protected String invokerPackage = "io.swagger.client"; | ||||
|   protected String groupId = "io.swagger"; | ||||
|   protected String artifactId = "swagger-java-client"; | ||||
|   protected String artifactVersion = "1.0.0"; | ||||
|   protected String sourceFolder = "src/main/java"; | ||||
| 
 | ||||
|   public CodegenType getTag() { | ||||
|     return CodegenType.CLIENT; | ||||
|   } | ||||
| 
 | ||||
|   public String getName() { | ||||
|     return "retrofit"; | ||||
|   } | ||||
| 
 | ||||
|   public String getHelp() { | ||||
|     return "Generates a Retrofit client library."; | ||||
|   } | ||||
| 
 | ||||
|   public RetrofitClientCodegen() { | ||||
|     super(); | ||||
|     outputFolder = "generated-code/java"; | ||||
|     modelTemplateFiles.put("model.mustache", ".java"); | ||||
|     apiTemplateFiles.put("api.mustache", ".java"); | ||||
|     templateDir = "retrofit"; | ||||
|     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("service.mustache",  | ||||
|       (sourceFolder + File.separator + invokerPackage).replace(".", java.io.File.separator), "ServiceGenerator.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().replace('.', File.separatorChar); | ||||
|   } | ||||
| 
 | ||||
|   public String modelFileFolder() { | ||||
|     return outputFolder + "/" + sourceFolder + "/" + modelPackage().replace('.', File.separatorChar); | ||||
|   } | ||||
| 
 | ||||
|   @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 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 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); | ||||
|   } | ||||
| 
 | ||||
|   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.hasConsumes == Boolean.TRUE) { | ||||
|           Map<String, String> firstType = operation.consumes.get(0); | ||||
|           if (firstType != null) { | ||||
|             if ("multipart/form-data".equals(firstType.get("mediaType"))) { | ||||
|               operation.isMultipart = Boolean.TRUE; | ||||
|             } | ||||
|           } | ||||
|         } | ||||
|         if(operation.returnType == null) { | ||||
|           operation.returnType = "Void";         | ||||
|         } | ||||
|       } | ||||
|     } | ||||
|     return objs; | ||||
|   } | ||||
| } | ||||
| @ -1,220 +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 RubyClientCodegen extends DefaultCodegen implements CodegenConfig { | ||||
|   protected String gemName = "swagger_client"; | ||||
|   protected String moduleName = null; | ||||
|   protected String libFolder = "lib"; | ||||
| 
 | ||||
|   public CodegenType getTag() { | ||||
|     return CodegenType.CLIENT; | ||||
|   } | ||||
| 
 | ||||
|   public String getName() { | ||||
|     return "ruby"; | ||||
|   } | ||||
| 
 | ||||
|   public String getHelp() { | ||||
|     return "Generates a Ruby client library."; | ||||
|   } | ||||
| 
 | ||||
|   /** | ||||
|    * Generate Ruby module name from the gem name, e.g. use "SwaggerClient" for "swagger_client". | ||||
|    */ | ||||
|   public String generateModuleName() { | ||||
|     return camelize(gemName.replaceAll("[^\\w]+", "_")); | ||||
|   } | ||||
| 
 | ||||
|   public RubyClientCodegen() { | ||||
|     super(); | ||||
|     moduleName = generateModuleName(); | ||||
|     modelPackage = gemName + "/models"; | ||||
|     apiPackage = gemName + "/api"; | ||||
|     outputFolder = "generated-code" + File.separatorChar + "ruby"; | ||||
|     modelTemplateFiles.put("model.mustache", ".rb"); | ||||
|     apiTemplateFiles.put("api.mustache", ".rb"); | ||||
|     templateDir = "ruby"; | ||||
| 
 | ||||
|     typeMapping.clear(); | ||||
|     languageSpecificPrimitives.clear(); | ||||
| 
 | ||||
|     reservedWords = new HashSet<String> ( | ||||
|       Arrays.asList( | ||||
|         "__FILE__", "and", "def", "end", "in", "or", "self", "unless", "__LINE__", | ||||
|         "begin", "defined?", "ensure", "module", "redo", "super", "until", "BEGIN", | ||||
|         "break", "do", "false", "next", "rescue", "then", "when", "END", "case", | ||||
|         "else", "for", "nil", "retry", "true", "while", "alias", "class", "elsif", | ||||
|         "if", "not", "return", "undef", "yield") | ||||
|     ); | ||||
| 
 | ||||
|     additionalProperties.put("gemName", gemName); | ||||
|     additionalProperties.put("moduleName", moduleName); | ||||
| 
 | ||||
|     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"); | ||||
| 
 | ||||
|     String baseFolder = "lib" + File.separatorChar + gemName; | ||||
|     String swaggerFolder = baseFolder + File.separatorChar + "swagger"; | ||||
|     String modelFolder = baseFolder + File.separatorChar + "models"; | ||||
|     supportingFiles.add(new SupportingFile("swagger_client.gemspec.mustache", "", gemName + ".gemspec")); | ||||
|     supportingFiles.add(new SupportingFile("swagger_client.mustache", "lib", gemName + ".rb")); | ||||
|     supportingFiles.add(new SupportingFile("monkey.mustache", baseFolder, "monkey.rb")); | ||||
|     supportingFiles.add(new SupportingFile("swagger.mustache", baseFolder, "swagger.rb")); | ||||
|     supportingFiles.add(new SupportingFile("swagger" + File.separatorChar + "request.mustache", swaggerFolder, "request.rb")); | ||||
|     supportingFiles.add(new SupportingFile("swagger" + File.separatorChar + "response.mustache", swaggerFolder, "response.rb")); | ||||
|     supportingFiles.add(new SupportingFile("swagger" + File.separatorChar + "version.mustache", swaggerFolder, "version.rb")); | ||||
|     supportingFiles.add(new SupportingFile("swagger" + File.separatorChar + "configuration.mustache", swaggerFolder, "configuration.rb")); | ||||
|     supportingFiles.add(new SupportingFile("base_object.mustache", modelFolder, "base_object.rb")); | ||||
|   } | ||||
| 
 | ||||
|   @Override | ||||
|   public String escapeReservedWord(String name) { | ||||
|     return "_" + name; | ||||
|   } | ||||
| 
 | ||||
|   @Override | ||||
|   public String apiFileFolder() { | ||||
|     return outputFolder + File.separatorChar + "lib" + File.separatorChar + gemName + File.separatorChar + "api"; | ||||
|   } | ||||
| 
 | ||||
|   public String modelFileFolder() { | ||||
|     return outputFolder + File.separatorChar + "lib" + File.separatorChar + gemName + File.separatorChar + "models"; | ||||
|   } | ||||
| 
 | ||||
|   @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"; | ||||
|   } | ||||
| 
 | ||||
|   @Override | ||||
|   public String toVarName(String name) { | ||||
|     // replace - with _ e.g. created-at => created_at | ||||
|     name = name.replaceAll("-", "_"); | ||||
| 
 | ||||
|     // if it's all uppper case, convert to lower case | ||||
|     if (name.matches("^[A-Z_]*$")) | ||||
|       name = name.toLowerCase(); | ||||
| 
 | ||||
|     // camelize (lower first character) the variable name | ||||
|     // petId => pet_id | ||||
|     name = underscore(name); | ||||
| 
 | ||||
|     // 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) { | ||||
|     // 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"); | ||||
| 
 | ||||
|     // underscore the model file name | ||||
|     // PhoneNumber.rb => phone_number.rb | ||||
|     return underscore(name); | ||||
|   } | ||||
| 
 | ||||
|   @Override | ||||
|   public String toApiFilename(String name) { | ||||
|     // replace - with _ e.g. created-at => created_at | ||||
|     name = name.replaceAll("-", "_"); | ||||
| 
 | ||||
|     // e.g. PhoneNumberApi.rb => phone_number_api.rb | ||||
|     return underscore(name) + "_api"; | ||||
|   } | ||||
| 
 | ||||
|   @Override | ||||
|   public String toApiName(String name) { | ||||
|     if(name.length() == 0) | ||||
|       return "DefaultApi"; | ||||
|     // e.g. phone_number_api => PhoneNumberApi | ||||
|     return camelize(name) + "Api"; | ||||
|   } | ||||
| 
 | ||||
|   @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 underscore(operationId); | ||||
|   } | ||||
| 
 | ||||
|   @Override | ||||
|   public String toModelImport(String name) { | ||||
|     return modelPackage() + "/" + toModelFilename(name); | ||||
|   } | ||||
| 
 | ||||
|   @Override | ||||
|   public String toApiImport(String name) { | ||||
|     return apiPackage() + "/" + toApiFilename(name); | ||||
|   } | ||||
| 
 | ||||
| } | ||||
| @ -1,203 +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-scala-client"; | ||||
|   protected String artifactVersion = "1.0.0"; | ||||
|   protected String sourceFolder = "src/main/scala"; | ||||
|   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().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 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"; | ||||
|   } | ||||
| 
 | ||||
| 
 | ||||
|   @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); | ||||
|   } | ||||
| 
 | ||||
| } | ||||
| @ -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().replace('.', File.separatorChar); | ||||
|   } | ||||
| 
 | ||||
|   public String modelFileFolder() { | ||||
|     return outputFolder + "/" + sourceFolder + "/" + modelPackage().replace('.', File.separatorChar); | ||||
|   } | ||||
| 
 | ||||
|   @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); | ||||
|   } | ||||
| } | ||||
| @ -1,165 +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 SpringMVCServerCodegen extends JavaClientCodegen implements CodegenConfig { | ||||
|     protected String invokerPackage = "io.swagger.api"; | ||||
|     protected String groupId = "io.swagger"; | ||||
|     protected String artifactId = "swagger-spring-mvc-server"; | ||||
|     protected String artifactVersion = "1.0.0"; | ||||
|     protected String sourceFolder = "src/main/java"; | ||||
|     protected String title = "Petstore Server"; | ||||
| 
 | ||||
|     protected String configPackage = ""; | ||||
| 
 | ||||
|     public CodegenType getTag() { | ||||
|         return CodegenType.SERVER; | ||||
|     } | ||||
| 
 | ||||
|     public String getName() { | ||||
|         return "spring-mvc"; | ||||
|     } | ||||
| 
 | ||||
|     public String getHelp() { | ||||
|         return "Generates a Java Spring-MVC Server application using the SpringFox integration."; | ||||
|     } | ||||
| 
 | ||||
|     public SpringMVCServerCodegen() { | ||||
|         super(); | ||||
|         outputFolder = "generated-code/javaSpringMVC"; | ||||
|         modelTemplateFiles.put("model.mustache", ".java"); | ||||
|         apiTemplateFiles.put("api.mustache", ".java"); | ||||
|         templateDir = "JavaSpringMVC"; | ||||
|         apiPackage = "io.swagger.api"; | ||||
|         modelPackage = "io.swagger.model"; | ||||
|         configPackage = "io.swagger.configuration"; | ||||
| 
 | ||||
| 
 | ||||
|         additionalProperties.put("invokerPackage", invokerPackage); | ||||
|         additionalProperties.put("groupId", groupId); | ||||
|         additionalProperties.put("artifactId", artifactId); | ||||
|         additionalProperties.put("artifactVersion", artifactVersion); | ||||
|         additionalProperties.put("title", title); | ||||
|         additionalProperties.put("apiPackage", apiPackage); | ||||
|         additionalProperties.put("configPackage", configPackage); | ||||
| 
 | ||||
|         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("swaggerConfig.mustache", | ||||
|                 (sourceFolder + File.separator + configPackage).replace(".", java.io.File.separator), "SwaggerConfig.java")); | ||||
|         supportingFiles.add(new SupportingFile("webApplication.mustache", | ||||
|                 (sourceFolder + File.separator + configPackage).replace(".", java.io.File.separator), "WebApplication.java")); | ||||
|         supportingFiles.add(new SupportingFile("webMvcConfiguration.mustache", | ||||
|                 (sourceFolder + File.separator + configPackage).replace(".", java.io.File.separator), "WebMvcConfiguration.java")); | ||||
|         supportingFiles.add(new SupportingFile("swaggerUiConfiguration.mustache", | ||||
|                 (sourceFolder + File.separator + configPackage).replace(".", java.io.File.separator), "SwaggerUiConfiguration.java")); | ||||
|         supportingFiles.add(new SupportingFile("swagger.properties", | ||||
|                 ("src.main.resources").replace(".", java.io.File.separator), "swagger.properties")); | ||||
| 
 | ||||
|         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; | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| @ -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"; | ||||
|   } | ||||
| } | ||||
| @ -1,97 +0,0 @@ | ||||
| package com.wordnik.swagger.codegen.languages; | ||||
| 
 | ||||
| import com.wordnik.swagger.codegen.*; | ||||
| import com.wordnik.swagger.models.Operation; | ||||
| 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 { | ||||
|   private static final String ALL_OPERATIONS = ""; | ||||
|   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>(); | ||||
| 
 | ||||
|     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; | ||||
|   } | ||||
| 
 | ||||
|   @Override | ||||
|   public void addOperationToGroup(String tag, String resourcePath, Operation operation, CodegenOperation co, Map<String, List<CodegenOperation>> operations) { | ||||
|     List<CodegenOperation> opList = operations.get(ALL_OPERATIONS); | ||||
|     if(opList == null) { | ||||
|       opList = new ArrayList<CodegenOperation>(); | ||||
|       operations.put(ALL_OPERATIONS, opList); | ||||
|     } | ||||
|     for (CodegenOperation addedOperation: opList){ | ||||
|       if (addedOperation.operationId.equals(co.operationId) && addedOperation.path.equals(co.path) && addedOperation.httpMethod.equals(co.httpMethod)) { | ||||
|         addedOperation.tags.addAll(co.tags); | ||||
|         return; | ||||
|       } | ||||
|     } | ||||
|     opList.add(co); | ||||
|   } | ||||
| } | ||||
| @ -1,45 +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(); | ||||
|     templateDir = "swagger"; | ||||
|     outputFolder = "generated-code/swagger"; | ||||
| 
 | ||||
|     supportingFiles.add(new SupportingFile("README.md", "", "README.md")); | ||||
|   } | ||||
| 
 | ||||
|   @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(); | ||||
|     } | ||||
|   } | ||||
| } | ||||
| @ -1,44 +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 SwaggerYamlGenerator extends DefaultCodegen implements CodegenConfig { | ||||
|   public CodegenType getTag() { | ||||
|     return CodegenType.DOCUMENTATION; | ||||
|   } | ||||
| 
 | ||||
|   public String getName() { | ||||
|     return "swagger-yaml"; | ||||
|   } | ||||
| 
 | ||||
|   public String getHelp() { | ||||
|     return "Creates a static swagger.yaml file."; | ||||
|   } | ||||
| 
 | ||||
|   public SwaggerYamlGenerator() { | ||||
|     super(); | ||||
|     templateDir = "swagger"; | ||||
|     outputFolder = "generated-code/swagger"; | ||||
| 
 | ||||
|     supportingFiles.add(new SupportingFile("README.md", "", "README.md")); | ||||
|   } | ||||
| 
 | ||||
|   @Override | ||||
|   public void processSwagger(Swagger swagger) { | ||||
|     try{ | ||||
|       String swaggerString = Yaml.mapper().writeValueAsString(swagger); | ||||
|       String outputFile = outputFolder + File.separator + "swagger.yaml"; | ||||
|       FileUtils.writeStringToFile(new File(outputFile), swaggerString); | ||||
|       System.out.println("wrote file to " + outputFile); | ||||
|     } | ||||
|     catch(Exception e) { | ||||
|       e.printStackTrace(); | ||||
|     } | ||||
|   } | ||||
| } | ||||
| @ -1,250 +0,0 @@ | ||||
| package com.wordnik.swagger.codegen.languages; | ||||
| 
 | ||||
| import com.google.common.base.Predicate; | ||||
| import com.google.common.collect.Iterators; | ||||
| import com.google.common.collect.Lists; | ||||
| import com.wordnik.swagger.codegen.*; | ||||
| import com.wordnik.swagger.models.Model; | ||||
| import com.wordnik.swagger.models.Operation; | ||||
| import com.wordnik.swagger.models.parameters.HeaderParameter; | ||||
| import com.wordnik.swagger.models.parameters.Parameter; | ||||
| import com.wordnik.swagger.models.properties.*; | ||||
| import org.apache.commons.lang.StringUtils; | ||||
| 
 | ||||
| import javax.annotation.Nullable; | ||||
| import java.util.*; | ||||
| import java.io.File; | ||||
| import java.util.regex.Matcher; | ||||
| import java.util.regex.Pattern; | ||||
| 
 | ||||
| public class SwiftGenerator extends DefaultCodegen implements CodegenConfig { | ||||
|   private static final Pattern PATH_PARAM_PATTERN = Pattern.compile("\\{[a-zA-Z_]+\\}"); | ||||
|   protected String sourceFolder = "Classes/Swaggers"; | ||||
| 
 | ||||
|   public CodegenType getTag() { | ||||
|     return CodegenType.CLIENT; | ||||
|   } | ||||
| 
 | ||||
|   public String getName() { | ||||
|     return "swift"; | ||||
|   } | ||||
| 
 | ||||
|   public String getHelp() { | ||||
|     return "Generates a swift client library."; | ||||
|   } | ||||
| 
 | ||||
|   public SwiftGenerator() { | ||||
|     super(); | ||||
|     outputFolder = "generated-code/swift"; | ||||
|     modelTemplateFiles.put("model.mustache", ".swift"); | ||||
|     apiTemplateFiles.put("api.mustache", ".swift"); | ||||
|     templateDir = "swift"; | ||||
|     apiPackage = "/APIs"; | ||||
|     modelPackage = "/Models"; | ||||
| 
 | ||||
|     // Inject application name | ||||
|     String appName = System.getProperty("appName"); | ||||
|     if (appName == null) { | ||||
|       appName = "SwaggerClient"; | ||||
|     } | ||||
|     additionalProperties.put("projectName", appName); | ||||
| 
 | ||||
|     // Inject base url override | ||||
|     String basePathOverride = System.getProperty("basePathOverride"); | ||||
|     if (basePathOverride != null) { | ||||
|       additionalProperties.put("basePathOverride", basePathOverride); | ||||
|     } | ||||
| 
 | ||||
|     sourceFolder = appName + "/" + sourceFolder; | ||||
| 
 | ||||
|     supportingFiles.add(new SupportingFile("Cartfile.mustache", "", "Cartfile")); | ||||
|     supportingFiles.add(new SupportingFile("APIHelper.mustache", sourceFolder, "APIHelper.swift")); | ||||
|     supportingFiles.add(new SupportingFile("AlamofireImplementations.mustache", sourceFolder, "AlamofireImplementations.swift")); | ||||
|     supportingFiles.add(new SupportingFile("Extensions.mustache", sourceFolder, "Extensions.swift")); | ||||
|     supportingFiles.add(new SupportingFile("Models.mustache", sourceFolder, "Models.swift")); | ||||
|     supportingFiles.add(new SupportingFile("APIs.mustache", sourceFolder, "APIs.swift")); | ||||
| 
 | ||||
|     languageSpecificPrimitives = new HashSet<String>( | ||||
|       Arrays.asList( | ||||
|         "Int", | ||||
|         "Float", | ||||
|         "Double", | ||||
|         "Bool", | ||||
|         "Void", | ||||
|         "String", | ||||
|         "Character") | ||||
|     ); | ||||
|     defaultIncludes = new HashSet<String>( | ||||
|       Arrays.asList( | ||||
|         "NSDate", | ||||
|         "Array", | ||||
|         "Dictionary", | ||||
|         "Set", | ||||
|         "Any", | ||||
|         "Empty", | ||||
|         "AnyObject") | ||||
|     ); | ||||
|     reservedWords = new HashSet<String>( | ||||
|       Arrays.asList( | ||||
|         "class", "break", "as", "associativity", "deinit", "case", "dynamicType", "convenience", "enum", "continue", | ||||
|         "false", "dynamic", "extension", "default", "is", "didSet", "func", "do", "nil", "final", "import", "else", | ||||
|         "self", "get", "init", "fallthrough", "Self", "infix", "internal", "for", "super", "inout", "let", "if", | ||||
|         "true", "lazy", "operator", "in", "COLUMN", "left", "private", "return", "FILE", "mutating", "protocol", | ||||
|         "switch", "FUNCTION", "none", "public", "where", "LINE", "nonmutating", "static", "while", "optional", | ||||
|         "struct", "override", "subscript", "postfix", "typealias", "precedence", "var", "prefix", "Protocol", | ||||
|         "required", "right", "set", "Type", "unowned", "weak") | ||||
|     ); | ||||
| 
 | ||||
|     typeMapping = new HashMap<String, String>(); | ||||
|     typeMapping.put("array", "Array"); | ||||
|     typeMapping.put("List", "Array"); | ||||
|     typeMapping.put("map", "Dictionary"); | ||||
|     typeMapping.put("date", "NSDate"); | ||||
|     typeMapping.put("Date", "NSDate"); | ||||
|     typeMapping.put("DateTime", "NSDate"); | ||||
|     typeMapping.put("boolean", "Bool"); | ||||
|     typeMapping.put("string", "String"); | ||||
|     typeMapping.put("char", "Character"); | ||||
|     typeMapping.put("short", "Int"); | ||||
|     typeMapping.put("int", "Int"); | ||||
|     typeMapping.put("long", "Int"); | ||||
|     typeMapping.put("integer", "Int"); | ||||
|     typeMapping.put("Integer", "Int"); | ||||
|     typeMapping.put("float", "Float"); | ||||
|     typeMapping.put("number", "Double"); | ||||
|     typeMapping.put("double", "Double"); | ||||
|     typeMapping.put("object", "AnyObject"); | ||||
|     typeMapping.put("file", "NSData"); | ||||
| 
 | ||||
|     importMapping = new HashMap<String, String>(); | ||||
|   } | ||||
| 
 | ||||
|   @Override | ||||
|   public String escapeReservedWord(String name) { | ||||
|     return "_" + name;  // add an underscore to the name | ||||
|   } | ||||
| 
 | ||||
|   @Override | ||||
|   public String modelFileFolder() { | ||||
|     return outputFolder + "/" + sourceFolder + modelPackage().replace('.', File.separatorChar); | ||||
|   } | ||||
| 
 | ||||
|   @Override | ||||
|   public String apiFileFolder() { | ||||
|     return outputFolder + "/" + sourceFolder + apiPackage().replace('.', File.separatorChar); | ||||
|   } | ||||
| 
 | ||||
|   @Override | ||||
|   public String getTypeDeclaration(Property p) { | ||||
|     if (p instanceof ArrayProperty) { | ||||
|       ArrayProperty ap = (ArrayProperty) p; | ||||
|       Property inner = ap.getItems(); | ||||
|       return "[" + getTypeDeclaration(inner) + "]"; | ||||
|     } else if (p instanceof MapProperty) { | ||||
|       MapProperty mp = (MapProperty) p; | ||||
|       Property inner = mp.getAdditionalProperties(); | ||||
|       return "[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 toDefaultValue(Property p) { | ||||
|     // nil | ||||
|     return null; | ||||
|   } | ||||
| 
 | ||||
|   @Override | ||||
|   public String toInstantiationType(Property p) { | ||||
|     if (p instanceof MapProperty) { | ||||
|       MapProperty ap = (MapProperty) p; | ||||
|       String inner = getSwaggerType(ap.getAdditionalProperties()); | ||||
|       return "[String:" + inner + "]"; | ||||
|     } else if (p instanceof ArrayProperty) { | ||||
|       ArrayProperty ap = (ArrayProperty) p; | ||||
|       String inner = getSwaggerType(ap.getItems()); | ||||
|       return "[" + inner + "]"; | ||||
|     } | ||||
|     return null; | ||||
|   } | ||||
| 
 | ||||
|   @Override | ||||
|   public CodegenProperty fromProperty(String name, Property p) { | ||||
|     CodegenProperty codegenProperty = super.fromProperty(name, p); | ||||
|     if (codegenProperty.isEnum) { | ||||
|       List<Map<String, String>> swiftEnums = new ArrayList<Map<String, String>>(); | ||||
|       List<String> values = (List<String>) codegenProperty.allowableValues.get("values"); | ||||
|       for (String value : values) { | ||||
|         Map<String, String> map = new HashMap<String, String>(); | ||||
|         map.put("enum", StringUtils.capitalize(value)); | ||||
|         map.put("raw", value); | ||||
|         swiftEnums.add(map); | ||||
|       } | ||||
|       codegenProperty.allowableValues.put("values", swiftEnums); | ||||
|       codegenProperty.datatypeWithEnum = | ||||
|               StringUtils.left(codegenProperty.datatypeWithEnum, codegenProperty.datatypeWithEnum.length() - "Enum".length()); | ||||
|     } | ||||
|     return codegenProperty; | ||||
|   } | ||||
| 
 | ||||
|   @Override | ||||
|   public String toApiName(String name) { | ||||
|     if(name.length() == 0) | ||||
|       return "DefaultAPI"; | ||||
|     return initialCaps(name) + "API"; | ||||
|   } | ||||
| 
 | ||||
|   @Override | ||||
|   public CodegenOperation fromOperation(String path, String httpMethod, Operation operation, Map<String, Model> definitions) { | ||||
|     path = normalizePath(path); | ||||
|     List<Parameter> parameters = operation.getParameters(); | ||||
|     parameters = Lists.newArrayList(Iterators.filter(parameters.iterator(), new Predicate<Parameter>() { | ||||
|       @Override | ||||
|       public boolean apply(@Nullable Parameter parameter) { | ||||
|         return !(parameter instanceof HeaderParameter); | ||||
|       } | ||||
|     })); | ||||
|     operation.setParameters(parameters); | ||||
|     return super.fromOperation(path, httpMethod, operation, definitions); | ||||
|   } | ||||
| 
 | ||||
|   private static String normalizePath(String path) { | ||||
|     StringBuilder builder = new StringBuilder(); | ||||
| 
 | ||||
|     int cursor = 0; | ||||
|     Matcher matcher = PATH_PARAM_PATTERN.matcher(path); | ||||
|     boolean found = matcher.find(); | ||||
|     while (found) { | ||||
|       String stringBeforeMatch = path.substring(cursor, matcher.start()); | ||||
|       builder.append(stringBeforeMatch); | ||||
| 
 | ||||
|       String group = matcher.group().substring(1, matcher.group().length() - 1); | ||||
|       group = camelize(group, true); | ||||
|       builder | ||||
|               .append("{") | ||||
|               .append(group) | ||||
|               .append("}"); | ||||
| 
 | ||||
|       cursor = matcher.end(); | ||||
|       found = matcher.find(); | ||||
|     } | ||||
| 
 | ||||
|     String stringAfterMatch = path.substring(cursor); | ||||
|     builder.append(stringAfterMatch); | ||||
| 
 | ||||
|     return builder.toString(); | ||||
|   } | ||||
| } | ||||
| @ -1,258 +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; | ||||
|   } | ||||
| 
 | ||||
|   @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"); | ||||
| 
 | ||||
|     // add_pet_by_id => addPetById | ||||
|     return camelize(operationId, true); | ||||
|   } | ||||
| 
 | ||||
| } | ||||
| @ -1,6 +1,6 @@ | ||||
| import com.wordnik.swagger.codegen._ | ||||
| import io.swagger.codegen._ | ||||
| 
 | ||||
| import com.wordnik.swagger.models.auth.AuthorizationValue | ||||
| import io.swagger.models.auth.AuthorizationValue | ||||
| 
 | ||||
| import org.junit.runner.RunWith | ||||
| import org.scalatest.junit.JUnitRunner | ||||
|  | ||||
| @ -1,5 +1,5 @@ | ||||
| import com.wordnik.swagger.codegen.DefaultCodegen | ||||
| import com.wordnik.swagger.models.properties.Property | ||||
| import io.swagger.codegen.DefaultCodegen | ||||
| import io.swagger.models.properties.Property | ||||
| import io.swagger.parser._ | ||||
| import org.junit.runner.RunWith | ||||
| import org.scalatest.junit.JUnitRunner | ||||
|  | ||||
| @ -7,13 +7,13 @@ import org.scalatest.FlatSpec | ||||
| import org.scalatest.Matchers | ||||
| import org.scalatest.junit.JUnitRunner | ||||
| 
 | ||||
| import com.wordnik.swagger.codegen.examples.ExampleGenerator | ||||
| import com.wordnik.swagger.models.Model | ||||
| import com.wordnik.swagger.models.ModelImpl | ||||
| import com.wordnik.swagger.models.Xml | ||||
| import com.wordnik.swagger.models.properties.ArrayProperty | ||||
| import com.wordnik.swagger.models.properties.RefProperty | ||||
| import com.wordnik.swagger.models.properties.StringProperty | ||||
| import io.swagger.codegen.examples.ExampleGenerator | ||||
| import io.swagger.models.Model | ||||
| import io.swagger.models.ModelImpl | ||||
| import io.swagger.models.Xml | ||||
| import io.swagger.models.properties.ArrayProperty | ||||
| import io.swagger.models.properties.RefProperty | ||||
| import io.swagger.models.properties.StringProperty | ||||
| 
 | ||||
| @RunWith(classOf[JUnitRunner]) | ||||
| class ExampleGeneratorTest extends FlatSpec with Matchers { | ||||
|  | ||||
| @ -6,11 +6,11 @@ import org.junit.runner.RunWith | ||||
| import org.scalatest.FlatSpec | ||||
| import org.scalatest.Matchers | ||||
| import org.scalatest.junit.JUnitRunner | ||||
| import com.wordnik.swagger.codegen.languages.JavaClientCodegen | ||||
| import com.wordnik.swagger.models.ComposedModel | ||||
| import com.wordnik.swagger.models.ModelImpl | ||||
| import com.wordnik.swagger.models.RefModel | ||||
| import com.wordnik.swagger.models.properties.StringProperty | ||||
| import io.swagger.codegen.languages.JavaClientCodegen | ||||
| import io.swagger.models.ComposedModel | ||||
| import io.swagger.models.ModelImpl | ||||
| import io.swagger.models.RefModel | ||||
| import io.swagger.models.properties.StringProperty | ||||
| 
 | ||||
| @RunWith(classOf[JUnitRunner]) | ||||
| class JavaInheritanceTest extends FlatSpec with Matchers { | ||||
|  | ||||
| @ -1,8 +1,8 @@ | ||||
| package Java | ||||
| 
 | ||||
| import com.wordnik.swagger.codegen.languages.JavaClientCodegen | ||||
| import com.wordnik.swagger.models._ | ||||
| import com.wordnik.swagger.models.properties._ | ||||
| import io.swagger.codegen.languages.JavaClientCodegen | ||||
| import io.swagger.models._ | ||||
| import io.swagger.models.properties._ | ||||
| import org.junit.runner.RunWith | ||||
| import org.scalatest.{FlatSpec, Matchers} | ||||
| import org.scalatest.junit.JUnitRunner | ||||
|  | ||||
| @ -1,9 +1,9 @@ | ||||
| package Java | ||||
| 
 | ||||
| import com.wordnik.swagger.codegen.languages.JavaClientCodegen | ||||
| import com.wordnik.swagger.util.Json | ||||
| import com.wordnik.swagger.models._ | ||||
| import com.wordnik.swagger.models.properties._ | ||||
| import io.swagger.codegen.languages.JavaClientCodegen | ||||
| import io.swagger.util.Json | ||||
| import io.swagger.models._ | ||||
| import io.swagger.models.properties._ | ||||
| 
 | ||||
| import org.junit.runner.RunWith | ||||
| import org.scalatest.junit.JUnitRunner | ||||
|  | ||||
| @ -1,9 +1,9 @@ | ||||
| package Objc | ||||
| 
 | ||||
| import com.wordnik.swagger.codegen.languages.ObjcClientCodegen | ||||
| import com.wordnik.swagger.util.Json | ||||
| import com.wordnik.swagger.models._ | ||||
| import com.wordnik.swagger.models.properties._ | ||||
| import io.swagger.codegen.languages.ObjcClientCodegen | ||||
| import io.swagger.util.Json | ||||
| import io.swagger.models._ | ||||
| import io.swagger.models.properties._ | ||||
| 
 | ||||
| import io.swagger.parser.SwaggerParser | ||||
| 
 | ||||
|  | ||||
| @ -1,7 +1,7 @@ | ||||
| import com.wordnik.swagger.models._ | ||||
| import io.swagger.models._ | ||||
| import io.swagger.parser._ | ||||
| 
 | ||||
| import com.wordnik.swagger.util.Json | ||||
| import io.swagger.util.Json | ||||
| 
 | ||||
| import org.junit.runner.RunWith | ||||
| import org.scalatest.junit.JUnitRunner | ||||
|  | ||||
| @ -1,9 +1,9 @@ | ||||
| package php | ||||
| 
 | ||||
| import com.wordnik.swagger.codegen.languages.PhpClientCodegen | ||||
| import com.wordnik.swagger.util.Json | ||||
| import com.wordnik.swagger.models._ | ||||
| import com.wordnik.swagger.models.properties._ | ||||
| import io.swagger.codegen.languages.PhpClientCodegen | ||||
| import io.swagger.util.Json | ||||
| import io.swagger.models._ | ||||
| import io.swagger.models.properties._ | ||||
| 
 | ||||
| import io.swagger.parser.SwaggerParser | ||||
| 
 | ||||
|  | ||||
| @ -1,6 +1,6 @@ | ||||
| package python | ||||
| 
 | ||||
| import com.wordnik.swagger.codegen.languages.{PythonClientCodegen} | ||||
| import io.swagger.codegen.languages.{PythonClientCodegen} | ||||
| import io.swagger.parser.SwaggerParser | ||||
| import org.junit.runner.RunWith | ||||
| 
 | ||||
|  | ||||
| @ -1,9 +1,9 @@ | ||||
| package scala | ||||
| package Scala | ||||
| 
 | ||||
| import com.wordnik.swagger.codegen.languages.ScalaClientCodegen | ||||
| import com.wordnik.swagger.util.Json | ||||
| import com.wordnik.swagger.models._ | ||||
| import com.wordnik.swagger.models.properties._ | ||||
| import io.swagger.codegen.languages.ScalaClientCodegen | ||||
| import io.swagger.util.Json | ||||
| import io.swagger.models._ | ||||
| import io.swagger.models.properties._ | ||||
| 
 | ||||
| import org.junit.runner.RunWith | ||||
| import org.scalatest.junit.JUnitRunner | ||||
|  | ||||
| @ -1,9 +1,9 @@ | ||||
| package staticDocs | ||||
| 
 | ||||
| import com.wordnik.swagger.codegen.languages.StaticDocCodegen | ||||
| import com.wordnik.swagger.util.Json | ||||
| import com.wordnik.swagger.models._ | ||||
| import com.wordnik.swagger.models.properties._ | ||||
| import io.swagger.codegen.languages.StaticDocCodegen | ||||
| import io.swagger.util.Json | ||||
| import io.swagger.models._ | ||||
| import io.swagger.models.properties._ | ||||
| 
 | ||||
| import org.junit.runner.RunWith | ||||
| import org.scalatest.junit.JUnitRunner | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user