diff --git a/build.xml b/build.xml index d0fbf1f691c..3a98f8efaa1 100644 --- a/build.xml +++ b/build.xml @@ -11,10 +11,12 @@ + + - + @@ -129,20 +131,20 @@ - Must specify the parameters: outputPath and apiServerRootDir eg. -DoutputPath=../../api-server-lib/java/src/main/java/com/wordnik/ - -DapiServerRootDir=../../api-server-lib/java/ + Must specify the parameters: outputPath and apiServerRootDir + eg. -DoutputDir=../api-server-lib/java/src/main/java/com/wordnik/swagger -DapiServerRootDir=../api-server-lib/java/ These are the output path of the Apis and the root directory that will be created for the api server (directory where structure is created) - - + + - outputPath for Api = ${outputPath} + outputDir for Api = ${outputDir} apiServerRootDir = ${apiServerRootDir} - + @@ -151,7 +153,7 @@ - + diff --git a/src/main/java/com/wordnik/swagger/codegen/config/ApiConfiguration.java b/src/main/java/com/wordnik/swagger/codegen/config/ApiConfiguration.java index 276f05fbaac..b67831a8d12 100644 --- a/src/main/java/com/wordnik/swagger/codegen/config/ApiConfiguration.java +++ b/src/main/java/com/wordnik/swagger/codegen/config/ApiConfiguration.java @@ -41,6 +41,24 @@ public class ApiConfiguration { } + public String getDefaultServiceBaseClass() { + return defaultServiceBaseClass; + } + + public void setDefaultServiceBaseClass(String defaultServiceBaseClass) { + this.defaultServiceBaseClass = defaultServiceBaseClass; + } + + public Map getBaseClassNames() { + + return baseClassNames; + } + + public void setBaseClassNames(Map baseClassNames) { + this.baseClassNames = baseClassNames; + } + + public void setServiceBaseClass(String defaultServiceBaseClass) { this.defaultServiceBaseClass = defaultServiceBaseClass; } diff --git a/src/main/java/com/wordnik/swagger/codegen/config/java/JavaCodeGenRulesProvider.java b/src/main/java/com/wordnik/swagger/codegen/config/java/JavaCodeGenRulesProvider.java index a70681bb5f8..11c2d4c149a 100644 --- a/src/main/java/com/wordnik/swagger/codegen/config/java/JavaCodeGenRulesProvider.java +++ b/src/main/java/com/wordnik/swagger/codegen/config/java/JavaCodeGenRulesProvider.java @@ -30,4 +30,20 @@ public class JavaCodeGenRulesProvider implements RulesProvider { return ignoreModels.contains(modelName); } + public List getIgnoreMethods() { + return ignoreMethods; + } + + public void setIgnoreMethods(List ignoreMethods) { + this.ignoreMethods = ignoreMethods; + } + + public List getIgnoreModels() { + return ignoreModels; + } + + public void setIgnoreModels(List ignoreModels) { + this.ignoreModels = ignoreModels; + } + } diff --git a/src/main/java/com/wordnik/swagger/codegen/config/java/JavaLibCodeGen.java b/src/main/java/com/wordnik/swagger/codegen/config/java/JavaLibCodeGen.java index 13f369f17fe..016f752994c 100644 --- a/src/main/java/com/wordnik/swagger/codegen/config/java/JavaLibCodeGen.java +++ b/src/main/java/com/wordnik/swagger/codegen/config/java/JavaLibCodeGen.java @@ -5,9 +5,11 @@ import com.wordnik.swagger.codegen.config.ApiConfiguration; import com.wordnik.swagger.codegen.config.LanguageConfiguration; import com.wordnik.swagger.codegen.config.common.CamelCaseNamingPolicyProvider; import com.wordnik.swagger.exception.CodeGenerationException; +import org.codehaus.jackson.map.DeserializationConfig; +import org.codehaus.jackson.map.ObjectMapper; -import java.util.ArrayList; -import java.util.List; +import java.io.File; +import java.io.IOException; /** * User: ramesh @@ -18,59 +20,61 @@ public class JavaLibCodeGen extends LibraryCodeGenerator { public static void main(String[] args) { if(args.length < 1){ - throw new CodeGenerationException("Invalid number of arguments passed: No command line argument was passed to the program for output path"); + throw new CodeGenerationException("Invalid number of arguments passed: No command line argument was passed to the program for config json"); } - String outputPath = args[0]; - JavaLibCodeGen codeGenerator = new JavaLibCodeGen(outputPath); + String configPath = args[0]; + JavaLibCodeGen codeGenerator = new JavaLibCodeGen(configPath); codeGenerator.generateCode(); } - public JavaLibCodeGen(String outputPath){ + public JavaLibCodeGen(String configPath){ - this.setApiConfig(initializeApiConfig()); - this.setLanguageConfig(initializeLangConfig(outputPath)); + final ObjectMapper mapper = new ObjectMapper(); + mapper.configure(DeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES, false); + this.setApiConfig(readApiConfiguration(configPath, mapper)); + this.setCodeGenRulesProvider(readRulesProviderConfig(configPath, mapper)); + this.setLanguageConfig( initializeLangConfig(readLanguageConfiguration(configPath, mapper)) ); this.setDataTypeMappingProvider(new JavaDataTypeMappingProvider()); - this.setCodeGenRulesProvider(new JavaCodeGenRulesProvider()); this.setNameGenerator(new CamelCaseNamingPolicyProvider()); } - private ApiConfiguration initializeApiConfig() { - ApiConfiguration apiConfiguration = new ApiConfiguration(); - apiConfiguration.setServiceBaseClass("WordAPI","AbstractWordAPI"); - //default base class for services if not specified for a service - apiConfiguration.setServiceBaseClass("WordnikAPI"); - apiConfiguration.setModelBaseClass("WordnikObject"); + private JavaCodeGenRulesProvider readRulesProviderConfig(String rulesProviderLocation, ObjectMapper mapper) { + JavaCodeGenRulesProvider javaCodeGenRules = null; + try { + javaCodeGenRules = mapper.readValue(new File(rulesProviderLocation), JavaCodeGenRulesProvider.class); + } catch (IOException e) { + throw new CodeGenerationException("Java codegen rules configuration could not be read from the location : " + rulesProviderLocation); + } - List defaultModelImports = new ArrayList(); - defaultModelImports.add("com.wordnik.swagger.common.WordListType"); - defaultModelImports.add("com.wordnik.swagger.common.StringValue"); - defaultModelImports.add("com.wordnik.swagger.common.Size"); - defaultModelImports.add("com.wordnik.swagger.common.WordnikObject"); - - List defaultServiceImports = new ArrayList(); - defaultServiceImports.add("com.wordnik.swagger.model.Long"); - defaultServiceImports.add("com.wordnik.swagger.common.*"); - defaultServiceImports.add("com.wordnik.swagger.common.ext.*"); - - apiConfiguration.setDefaultModelImports(defaultModelImports); - apiConfiguration.setDefaultServiceImports(defaultServiceImports); - - apiConfiguration.setModelPackageName("com.wordnik.swagger.model"); - apiConfiguration.setApiPackageName("com.wordnik.swagger.api"); - - apiConfiguration.setApiKey("myKey"); - apiConfiguration.setApiUrl("http://swagr.api.wordnik.com/v4/"); - apiConfiguration.setApiListResource("/list"); - - return apiConfiguration; + return javaCodeGenRules; } - private LanguageConfiguration initializeLangConfig(String outputPath) { - LanguageConfiguration javaConfiguration = new LanguageConfiguration(); + private ApiConfiguration readApiConfiguration(String apiConfigLocation, ObjectMapper mapper) { + ApiConfiguration configuration = null; + try { + configuration = mapper.readValue(new File(apiConfigLocation), ApiConfiguration.class); + } catch (IOException e) { + throw new CodeGenerationException("Api configuration could not be read from the location : " + apiConfigLocation); + } + + return configuration; + } + + private LanguageConfiguration readLanguageConfiguration(String langConfigLocation, ObjectMapper mapper) { + LanguageConfiguration langConfig = null; + try { + langConfig = mapper.readValue(new File(langConfigLocation), LanguageConfiguration.class); + } catch (IOException e) { + throw new CodeGenerationException("Language configuration value could not be read from the location : " + langConfigLocation); + } + + return langConfig; + } + + private LanguageConfiguration initializeLangConfig(LanguageConfiguration javaConfiguration) { javaConfiguration.setClassFileExtension(".java"); - javaConfiguration.setOutputDirectory(outputPath); javaConfiguration.setTemplateLocation("conf/java/templates"); javaConfiguration.setExceptionPackageName("com.wordnik.swagger.exception"); javaConfiguration.setAnnotationPackageName("com.wordnik.swagger.annotations");