From 3e0ca55e5da2ca31c97a3b267657cf2262029bbf Mon Sep 17 00:00:00 2001 From: Deepak Michael Date: Wed, 3 Aug 2011 00:56:35 +0530 Subject: [PATCH] Swagr codegen: Moving file tasks from ant to java after reading api configuration from json --- build.xml | 23 ++---- .../codegen/config/LanguageConfiguration.java | 18 +++++ .../config/java/JavaCodeGenRulesProvider.java | 5 +- .../codegen/config/java/JavaLibCodeGen.java | 31 +++++--- .../swagger/codegen/util/FileUtil.java | 76 +++++++++++++++++++ 5 files changed, 121 insertions(+), 32 deletions(-) create mode 100644 src/main/java/com/wordnik/swagger/codegen/util/FileUtil.java diff --git a/build.xml b/build.xml index 51719f1cebe..25c55a36e41 100644 --- a/build.xml +++ b/build.xml @@ -19,29 +19,19 @@ - - + - 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) + Must specify the parameter for apiConfiguration + eg. -DapiConfiguration==../api-server-lib/java/config/apiConfiguration.json - - - outputDir for Api = ${outputDir} + apiConfiguration to be used : ${apiConfiguration} - - apiServerRootDir = ${apiServerRootDir} - - - - @@ -49,11 +39,8 @@ - + - - - diff --git a/src/main/java/com/wordnik/swagger/codegen/config/LanguageConfiguration.java b/src/main/java/com/wordnik/swagger/codegen/config/LanguageConfiguration.java index 1632453315d..dbee37818ba 100644 --- a/src/main/java/com/wordnik/swagger/codegen/config/LanguageConfiguration.java +++ b/src/main/java/com/wordnik/swagger/codegen/config/LanguageConfiguration.java @@ -13,6 +13,10 @@ public class LanguageConfiguration { private String templateLocation; + private String structureLocation; + + private String apiServerRootLocation; + private String modelClassLocation; private String resourceClassLocation; @@ -74,5 +78,19 @@ public class LanguageConfiguration { } + public String getStructureLocation() { + return structureLocation; + } + public void setStructureLocation(String structureLocation) { + this.structureLocation = structureLocation; + } + + public String getApiServerRootLocation() { + return apiServerRootLocation; + } + + public void setApiServerRootLocation(String apiServerRootLocation) { + this.apiServerRootLocation = apiServerRootLocation; + } } 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 11c2d4c149a..4897d389fe7 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 @@ -16,10 +16,7 @@ public class JavaCodeGenRulesProvider implements RulesProvider { private List ignoreModels = new ArrayList(); public JavaCodeGenRulesProvider() { - ignoreMethods.add("WordAPI.getWordFrequency"); - ignoreMethods.add("WordAPI.getAudio"); - ignoreMethods.add("WordAPI.getWordStats"); - ignoreModels.add("wordStats"); + } public boolean isMethodIgnored(String serviceName, String methodName){ 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 016f752994c..5a32e6e4521 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 @@ -4,11 +4,13 @@ import com.wordnik.swagger.codegen.LibraryCodeGenerator; 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.codegen.util.FileUtil; import com.wordnik.swagger.exception.CodeGenerationException; import org.codehaus.jackson.map.DeserializationConfig; import org.codehaus.jackson.map.ObjectMapper; import java.io.File; +import java.io.FilenameFilter; import java.io.IOException; /** @@ -27,23 +29,25 @@ public class JavaLibCodeGen extends LibraryCodeGenerator { JavaLibCodeGen codeGenerator = new JavaLibCodeGen(configPath); codeGenerator.generateCode(); } - + public JavaLibCodeGen(String configPath){ 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)) ); + + final File configFile = new File(configPath); + this.setApiConfig(readApiConfiguration(configPath, mapper, configFile)); + this.setCodeGenRulesProvider(readRulesProviderConfig(configPath, mapper, configFile)); + this.setLanguageConfig( initializeLangConfig(readLanguageConfiguration(configPath, mapper, configFile)) ); this.setDataTypeMappingProvider(new JavaDataTypeMappingProvider()); this.setNameGenerator(new CamelCaseNamingPolicyProvider()); } - private JavaCodeGenRulesProvider readRulesProviderConfig(String rulesProviderLocation, ObjectMapper mapper) { + private JavaCodeGenRulesProvider readRulesProviderConfig(String rulesProviderLocation, ObjectMapper mapper, File configFile) { JavaCodeGenRulesProvider javaCodeGenRules = null; try { - javaCodeGenRules = mapper.readValue(new File(rulesProviderLocation), JavaCodeGenRulesProvider.class); + javaCodeGenRules = mapper.readValue(configFile, JavaCodeGenRulesProvider.class); } catch (IOException e) { throw new CodeGenerationException("Java codegen rules configuration could not be read from the location : " + rulesProviderLocation); } @@ -51,10 +55,10 @@ public class JavaLibCodeGen extends LibraryCodeGenerator { return javaCodeGenRules; } - private ApiConfiguration readApiConfiguration(String apiConfigLocation, ObjectMapper mapper) { + private ApiConfiguration readApiConfiguration(String apiConfigLocation, ObjectMapper mapper, File configFile) { ApiConfiguration configuration = null; try { - configuration = mapper.readValue(new File(apiConfigLocation), ApiConfiguration.class); + configuration = mapper.readValue(configFile, ApiConfiguration.class); } catch (IOException e) { throw new CodeGenerationException("Api configuration could not be read from the location : " + apiConfigLocation); } @@ -62,10 +66,10 @@ public class JavaLibCodeGen extends LibraryCodeGenerator { return configuration; } - private LanguageConfiguration readLanguageConfiguration(String langConfigLocation, ObjectMapper mapper) { + private LanguageConfiguration readLanguageConfiguration(String langConfigLocation, ObjectMapper mapper, File configFile) { LanguageConfiguration langConfig = null; try { - langConfig = mapper.readValue(new File(langConfigLocation), LanguageConfiguration.class); + langConfig = mapper.readValue(configFile, LanguageConfiguration.class); } catch (IOException e) { throw new CodeGenerationException("Language configuration value could not be read from the location : " + langConfigLocation); } @@ -76,8 +80,15 @@ public class JavaLibCodeGen extends LibraryCodeGenerator { private LanguageConfiguration initializeLangConfig(LanguageConfiguration javaConfiguration) { javaConfiguration.setClassFileExtension(".java"); javaConfiguration.setTemplateLocation("conf/java/templates"); + javaConfiguration.setStructureLocation("conf/java/structure"); javaConfiguration.setExceptionPackageName("com.wordnik.swagger.exception"); javaConfiguration.setAnnotationPackageName("com.wordnik.swagger.annotations"); + + //create ouput directories + FileUtil.createOutputDirectories(javaConfiguration.getModelClassLocation(), javaConfiguration.getClassFileExtension()); + FileUtil.createOutputDirectories(javaConfiguration.getResourceClassLocation(), javaConfiguration.getClassFileExtension()); + + FileUtil.copyDirectory(new File(javaConfiguration.getStructureLocation()), new File(javaConfiguration.getApiServerRootLocation())); return javaConfiguration; } diff --git a/src/main/java/com/wordnik/swagger/codegen/util/FileUtil.java b/src/main/java/com/wordnik/swagger/codegen/util/FileUtil.java new file mode 100644 index 00000000000..4863900aa79 --- /dev/null +++ b/src/main/java/com/wordnik/swagger/codegen/util/FileUtil.java @@ -0,0 +1,76 @@ +package com.wordnik.swagger.codegen.util; + +import com.wordnik.swagger.exception.CodeGenerationException; + +import java.io.*; + +/** + * User: deepakmichael + * Date: 03/08/11 + * Time: 12:02 AM + */ +public class FileUtil { + + public static void createOutputDirectories(String classLocation, String fileExtension) { + File outputLocation = new File(classLocation); + outputLocation.mkdirs(); //make folder if necessary + //clear contents + clearFolder(classLocation, fileExtension); + + } + + public static boolean deleteFile(String sFilePath) { + File oFile = new File(sFilePath); + if (!oFile.exists()) { + return false; + } + return oFile.delete(); + } + + // Clears the folder of the files with extension + public static void clearFolder(String strFolder, final String strExt) { + File fLogDir = new File(strFolder); + File[] fLogs = fLogDir.listFiles(new FilenameFilter() { + public boolean accept(File fDir, String strName) { + return (strName.endsWith(strExt)); + } + }); + + for (int i = 0; i < fLogs.length; i++) { + deleteFile(fLogs[i].getAbsolutePath()); + } + } + + public static void copyDirectory(File srcPath, File dstPath) { + if (srcPath.isDirectory()) { + if (!dstPath.exists()) { + dstPath.mkdir(); + } + + String files[] = srcPath.list(); + for (int i = 0; i < files.length; i++) { + copyDirectory(new File(srcPath, files[i]), new File(dstPath, files[i])); + } + } else { + if (!srcPath.exists()) { + throw new CodeGenerationException("Source folder does not exist"); + } else { + try { + InputStream in = new FileInputStream(srcPath); + OutputStream out = new FileOutputStream(dstPath); + + // Transfer bytes from in to out + byte[] buf = new byte[1024]; + int len; + while ((len = in.read(buf)) > 0) { + out.write(buf, 0, len); + } + in.close(); + out.close(); + } catch (IOException e) { + throw new CodeGenerationException("Copy directory operation failed"); + } + } + } + } +}