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

@ -19,29 +19,19 @@
<condition property="outputPath.set">
<and>
<isset property="outputDir"/>
<isset property="apiServerRootDir"/>
<isset property="apiConfiguration"/>
</and>
</condition>
<!-- generates the classes -->
<target name="generate-java" depends="compile" description="generates APIs and model classes for java language">
<fail unless="outputPath.set">
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
</fail>
<mkdir dir="${outputDir}/api"/>
<mkdir dir="${outputDir}/model"/>
<echo>
outputDir for Api = ${outputDir}
apiConfiguration to be used : ${apiConfiguration}
</echo>
<echo>
apiServerRootDir = ${apiServerRootDir}
</echo>
<delete>
<fileset dir="${outputDir}" includes="*.java"/>
</delete>
<java classname="com.wordnik.swagger.codegen.config.java.JavaLibCodeGen">
<classpath>
<pathelement location="build/main/java" />
@ -49,11 +39,8 @@
<include name="**/*.jar"/>
</fileset>
</classpath>
<arg value="${apiServerRootDir}/config/apiConfiguration.json"/>
<arg value="${apiConfiguration}"/>
</java>
<copy todir="${apiServerRootDir}" overwrite="true">
<fileset dir="conf/java/structure"/>
</copy>
</target>
</project>

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