Swagr codegen: Moving file tasks from ant to java after reading api configuration from json

This commit is contained in:
Deepak Michael
2011-08-03 00:56:35 +05:30
parent ed6e09c52f
commit 3e0ca55e5d
5 changed files with 121 additions and 32 deletions

View File

@@ -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;
}
}

View File

@@ -16,10 +16,7 @@ public class JavaCodeGenRulesProvider implements RulesProvider {
private List<String> ignoreModels = new ArrayList<String>();
public JavaCodeGenRulesProvider() {
ignoreMethods.add("WordAPI.getWordFrequency");
ignoreMethods.add("WordAPI.getAudio");
ignoreMethods.add("WordAPI.getWordStats");
ignoreModels.add("wordStats");
}
public boolean isMethodIgnored(String serviceName, String methodName){

View File

@@ -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;
}

View File

@@ -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");
}
}
}
}
}