diff --git a/pom.xml b/pom.xml
index d4d026e9d18..94e6ed42700 100644
--- a/pom.xml
+++ b/pom.xml
@@ -382,7 +382,12 @@
commons-lang
${commons-lang-version}
compile
-
+
+
+ commons-cli
+ commons-cli
+ ${commons-cli-version}
+
org.scalatest
scalatest_2.11
@@ -402,6 +407,7 @@
1.5.0-SNAPSHOT
2.1.4
2.3
+ 1.2
4.8.1
1.0.0
diff --git a/src/main/java/com/wordnik/swagger/codegen/ClientOptInput.java b/src/main/java/com/wordnik/swagger/codegen/ClientOptInput.java
new file mode 100644
index 00000000000..a48a92f3faa
--- /dev/null
+++ b/src/main/java/com/wordnik/swagger/codegen/ClientOptInput.java
@@ -0,0 +1,59 @@
+/**
+ * Copyright 2014 Reverb, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.wordnik.swagger.codegen;
+
+import com.wordnik.swagger.codegen.ClientOpts;
+
+import com.wordnik.swagger.models.Swagger;
+
+public class ClientOptInput {
+ private ClientOpts opts;
+ private Swagger model;
+ protected CodegenConfig config;
+
+ public ClientOptInput model(Swagger model) {
+ this.setModel(model);
+ return this;
+ }
+ public ClientOptInput opts(ClientOpts opts) {
+ this.setOpts(opts);
+ return this;
+ }
+
+ public CodegenConfig getConfig() {
+ return config;
+ }
+ public void setConfig(CodegenConfig config) {
+ this.config = config;
+ }
+
+ public void setOpts(ClientOpts opts) {
+ this.opts = opts;
+ }
+
+ public ClientOpts getOpts() {
+ return opts;
+ }
+
+ public void setModel(Swagger model) {
+ this.model = model;
+ }
+
+ public Swagger getModel() {
+ return model;
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/wordnik/swagger/codegen/ClientOpts.java b/src/main/java/com/wordnik/swagger/codegen/ClientOpts.java
new file mode 100644
index 00000000000..b8d681cc307
--- /dev/null
+++ b/src/main/java/com/wordnik/swagger/codegen/ClientOpts.java
@@ -0,0 +1,52 @@
+package com.wordnik.swagger.codegen;
+
+import com.wordnik.swagger.codegen.auth.*;
+
+import java.util.*;
+
+public class ClientOpts {
+ protected String uri;
+ protected String target;
+ protected AuthMethod auth;
+ protected Map properties = new HashMap();
+ protected String outputDirectory;
+
+ public String getUri() {
+ return uri;
+ }
+ public void setUri(String uri) {
+ this.uri = uri;
+ }
+
+ public String getTarget() {
+ return target;
+ }
+ public void setTarget(String target) {
+ this.target = target;
+ }
+
+ public Map getProperties() {
+ return properties;
+ }
+ public void setProperties(Map properties) {
+ this.properties = properties;
+ }
+
+ public String getOutputDirectory() {
+ return outputDirectory;
+ }
+ public void setOutputDirectory(String outputDirectory) {
+ this.outputDirectory = outputDirectory;
+ }
+
+ @Override
+ public String toString() {
+ StringBuilder sb = new StringBuilder();
+ sb.append("ClientOpts: {\n");
+ sb.append(" uri: ").append(uri).append(",");
+ sb.append(" auth: ").append(auth).append(",");
+ sb.append(properties);
+ sb.append("}");
+ return sb.toString();
+ }
+}
diff --git a/src/main/java/com/wordnik/swagger/codegen/Codegen.java b/src/main/java/com/wordnik/swagger/codegen/Codegen.java
index 19f31b80d3e..5d2cfb4818b 100644
--- a/src/main/java/com/wordnik/swagger/codegen/Codegen.java
+++ b/src/main/java/com/wordnik/swagger/codegen/Codegen.java
@@ -1,38 +1,59 @@
package com.wordnik.swagger.codegen;
-import com.wordnik.swagger.codegen.languages.*;
+import com.wordnik.swagger.codegen.languages.*;
import com.wordnik.swagger.models.Swagger;
-import com.wordnik.swagger.util.Json;
+import com.wordnik.swagger.util.*;
+
+import org.apache.commons.cli.*;
import java.io.File;
public class Codegen extends DefaultGenerator {
public static void main(String[] args) {
- CodegenConfig config = null;
- if(args != null && args.length > 0) {
- String lang = args[0];
- if("java".equals(lang)) {
- JavaClientCodegen javaConfig = new JavaClientCodegen();
- javaConfig.setTemplateDir("src/main/resources/Java");
- config = javaConfig;
- }
- else if ("objc".equals(lang)) {
- ObjcClientCodegen objcConfig = new ObjcClientCodegen();
- objcConfig.setTemplateDir("src/main/resources/objc");
- config = objcConfig;
- }
+ Options options = new Options();
+ options.addOption("l", "lang", true, "client language to generate");
+ options.addOption("o", "output", true, "where to write the generated files");
+ options.addOption("i", "input-spec", true, "location of the swagger spec, as URL or file");
+
+ ClientOptInput codegenInput = new ClientOptInput();
+ ClientOpts clientArgs = new ClientOpts();
+ Swagger swagger = null;
+
+ CommandLine cmd = null;
+ try {
+ CommandLineParser parser = new BasicParser();
+ cmd = parser.parse(options, args);
+ if (cmd.hasOption("l"))
+ codegenInput.setConfig(getConfig(cmd.getOptionValue("l")));
+ if (cmd.hasOption("o"))
+ codegenInput.getConfig().setOutputDir(cmd.getOptionValue("o"));
+ if (cmd.hasOption("i"))
+ swagger = new SwaggerLoader().read(cmd.getOptionValue("i"));
+
+ }
+ catch (Exception e) {
+ e.printStackTrace();
+ return;
}
try{
- Swagger swagger = (Swagger) Json.mapper()
- .readValue(new File("swagger.json"), Swagger.class);
+ codegenInput
+ .opts(clientArgs)
+ .model(swagger);
- new Codegen()
- .config(config)
- .generate(swagger);
+ new Codegen().opts(codegenInput).generate();
}
catch (Exception e) {
e.printStackTrace();
}
}
+
+ static CodegenConfig getConfig(String name) {
+ if("objc".equals(name))
+ return new ObjcClientCodegen();
+ else if("java".equals(name))
+ return new JavaClientCodegen();
+ else
+ throw new RuntimeException("unsupported client type");
+ }
}
diff --git a/src/main/java/com/wordnik/swagger/codegen/CodegenConfig.java b/src/main/java/com/wordnik/swagger/codegen/CodegenConfig.java
index 78604490ba1..43a5f2902ab 100644
--- a/src/main/java/com/wordnik/swagger/codegen/CodegenConfig.java
+++ b/src/main/java/com/wordnik/swagger/codegen/CodegenConfig.java
@@ -18,7 +18,6 @@ public interface CodegenConfig {
String toModelName(String name);
String toParamName(String name);
String escapeReservedWord(String name);
-
String getTypeDeclaration(Property p);
String getTypeDeclaration(String name);
@@ -26,6 +25,9 @@ public interface CodegenConfig {
List supportingFiles();
+ void setOutputDir(String dir);
+ String getOutputDir();
+
CodegenModel fromModel(String name, Model model);
CodegenOperation fromOperation(String resourcePath, String httpMethod, Operation operation);
Set defaultIncludes();
diff --git a/src/main/java/com/wordnik/swagger/codegen/DefaultCodegen.java b/src/main/java/com/wordnik/swagger/codegen/DefaultCodegen.java
index 04bc9f55bcb..877d8ffe0f8 100644
--- a/src/main/java/com/wordnik/swagger/codegen/DefaultCodegen.java
+++ b/src/main/java/com/wordnik/swagger/codegen/DefaultCodegen.java
@@ -71,6 +71,13 @@ public class DefaultCodegen {
return outputFolder;
}
+ public void setOutputDir(String dir) {
+ this.outputFolder = dir;
+ }
+ public String getOutputDir() {
+ return outputFolder();
+ }
+
public void setTemplateDir(String templateDir) {
this.templateDir = templateDir;
}
diff --git a/src/main/java/com/wordnik/swagger/codegen/DefaultGenerator.java b/src/main/java/com/wordnik/swagger/codegen/DefaultGenerator.java
index c5f5d37db21..0cfe4c8b7cd 100644
--- a/src/main/java/com/wordnik/swagger/codegen/DefaultGenerator.java
+++ b/src/main/java/com/wordnik/swagger/codegen/DefaultGenerator.java
@@ -4,6 +4,7 @@ import com.wordnik.swagger.models.*;
import com.wordnik.swagger.models.properties.*;
import com.wordnik.swagger.util.*;
+import com.wordnik.swagger.codegen.languages.*;
import com.samskivert.mustache.*;
import org.apache.commons.io.FileUtils;
@@ -13,13 +14,23 @@ import java.io.*;
public class DefaultGenerator implements Generator {
private CodegenConfig config;
+ private ClientOptInput opts = null;
+ private Swagger swagger = null;
+
+ public Generator opts(ClientOptInput opts) {
+ this.opts = opts;
+
+ this.swagger = opts.getModel();
+ ClientOpts clientOpts = opts.getOpts();
+ this.config = opts.getConfig();
- public Generator config(CodegenConfig config) {
- this.config = config;
return this;
}
- public void generate(Swagger swagger) {
+ public void generate() {
+ if(swagger == null || config == null) {
+ throw new RuntimeException("missing swagger input or config!");
+ }
try {
Map models = null;
Map operations = null;
diff --git a/src/main/java/com/wordnik/swagger/codegen/Generator.java b/src/main/java/com/wordnik/swagger/codegen/Generator.java
index be5b7ff9db0..929ae580991 100644
--- a/src/main/java/com/wordnik/swagger/codegen/Generator.java
+++ b/src/main/java/com/wordnik/swagger/codegen/Generator.java
@@ -3,6 +3,6 @@ package com.wordnik.swagger.codegen;
import com.wordnik.swagger.models.Swagger;
public interface Generator {
- Generator config(CodegenConfig config);
- void generate(Swagger swagger);
+ Generator opts(ClientOptInput opts);
+ void generate();
}
\ No newline at end of file