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