-
Notifications
You must be signed in to change notification settings - Fork 6k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #8681 from jaumard/feature/dart-jaguar
generator for dart jaguar
- Loading branch information
Showing
182 changed files
with
20,300 additions
and
11 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,49 @@ | ||
#!/bin/sh | ||
|
||
SCRIPT="$0" | ||
|
||
while [ -h "$SCRIPT" ] ; do | ||
ls=`ls -ld "$SCRIPT"` | ||
link=`expr "$ls" : '.*-> \(.*\)$'` | ||
if expr "$link" : '/.*' > /dev/null; then | ||
SCRIPT="$link" | ||
else | ||
SCRIPT=`dirname "$SCRIPT"`/"$link" | ||
fi | ||
done | ||
|
||
if [ ! -d "${APP_DIR}" ]; then | ||
APP_DIR=`dirname "$SCRIPT"`/.. | ||
APP_DIR=`cd "${APP_DIR}"; pwd` | ||
fi | ||
|
||
executable="./modules/swagger-codegen-cli/target/swagger-codegen-cli.jar" | ||
|
||
if [ ! -f "$executable" ] | ||
then | ||
mvn clean package | ||
fi | ||
|
||
# if you've executed sbt assembly previously it will use that instead. | ||
export JAVA_OPTS="${JAVA_OPTS} -XX:MaxPermSize=256M -Xmx1024M -DloggerPath=conf/log4j.properties" | ||
|
||
# Generate client | ||
ags="$@ generate -t modules/swagger-codegen/src/main/resources/dart-jaguar -i modules/swagger-codegen/src/test/resources/2_0/petstore.yaml -l dart-jaguar -o samples/client/petstore/dart-jaguar/swagger -DhideGenerationTimestamp=true" | ||
java $JAVA_OPTS -jar $executable $ags | ||
|
||
# Generate non-browserClient and put it to the flutter sample app | ||
ags="$@ generate -t modules/swagger-codegen/src/main/resources/dart-jaguar -i modules/swagger-codegen/src/test/resources/2_0/petstore.yaml -l dart-jaguar -o samples/client/petstore/dart-jaguar/flutter_petstore/swagger -DhideGenerationTimestamp=true" | ||
java $JAVA_OPTS -jar $executable $ags | ||
|
||
# There is a proposal to allow importing different libraries depending on the environment: | ||
# https://github.com/munificent/dep-interface-libraries | ||
# When this is implemented there will only be one library. | ||
|
||
# The current petstore test will then work for both: the browser library and the vm library. | ||
|
||
cd samples/client/petstore/dart-jaguar/swagger | ||
pub get | ||
pub run build_runner build --delete-conflicting-outputs | ||
cd ../flutter_petstore/swagger | ||
pub get | ||
pub run build_runner build --delete-conflicting-outputs |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,12 @@ | ||
set executable=.\modules\swagger-codegen-cli\target\swagger-codegen-cli.jar | ||
|
||
If Not Exist %executable% ( | ||
mvn clean package | ||
) | ||
|
||
REM set JAVA_OPTS=%JAVA_OPTS% -Xmx1024M -DloggerPath=conf/log4j.properties | ||
set ags=generate -i modules\swagger-codegen\src\test\resources\2_0\petstore.yaml -l dart-jaguar -o samples\client\petstore\dart-jaguar\swagger -DhideGenerationTimestamp=true -DbrowserClient=false | ||
java %JAVA_OPTS% -jar %executable% %ags% | ||
|
||
set ags=generate -i modules\swagger-codegen\src\test\resources\2_0\petstore.yaml -l dart-jaguar -o samples\client\petstore\dart-jaguar\flutter_petstore\swagger -DhideGenerationTimestamp=true | ||
java %JAVA_OPTS% -jar %executable% %ags% |
191 changes: 191 additions & 0 deletions
191
...s/swagger-codegen/src/main/java/io/swagger/codegen/languages/DartJaguarClientCodegen.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,191 @@ | ||
package io.swagger.codegen.languages; | ||
|
||
import com.samskivert.mustache.Mustache; | ||
import com.samskivert.mustache.Template; | ||
import io.swagger.codegen.*; | ||
import io.swagger.models.properties.ArrayProperty; | ||
import io.swagger.models.properties.MapProperty; | ||
import io.swagger.models.properties.Property; | ||
import org.apache.commons.lang3.StringUtils; | ||
|
||
import java.io.File; | ||
import java.io.IOException; | ||
import java.io.StringWriter; | ||
import java.io.Writer; | ||
import java.util.HashSet; | ||
import java.util.List; | ||
import java.util.Map; | ||
import java.util.Set; | ||
|
||
public class DartJaguarClientCodegen extends DartClientCodegen { | ||
private static Set<String> modelToIgnore = new HashSet<>(); | ||
static { | ||
modelToIgnore.add("datetime"); | ||
modelToIgnore.add("list"); | ||
modelToIgnore.add("map"); | ||
modelToIgnore.add("file"); | ||
} | ||
public DartJaguarClientCodegen() { | ||
super(); | ||
browserClient = false; | ||
outputFolder = "generated-code/dart-jaguar"; | ||
embeddedTemplateDir = templateDir = "dart-jaguar"; | ||
} | ||
|
||
@Override | ||
public String getName() { | ||
return "dart-jaguar"; | ||
} | ||
|
||
@Override | ||
public String getHelp() { | ||
return "Generates a Dart Jaguar client library."; | ||
} | ||
|
||
@Override | ||
public String toDefaultValue(Property p) { | ||
if (p instanceof MapProperty) { | ||
return "const {}"; | ||
} else if (p instanceof ArrayProperty) { | ||
return "const []"; | ||
} | ||
return super.toDefaultValue(p); | ||
} | ||
|
||
@Override | ||
public void processOpts() { | ||
if (additionalProperties.containsKey(PUB_NAME)) { | ||
this.setPubName((String) additionalProperties.get(PUB_NAME)); | ||
} else { | ||
//not set, use to be passed to template | ||
additionalProperties.put(PUB_NAME, pubName); | ||
} | ||
|
||
if (additionalProperties.containsKey(PUB_VERSION)) { | ||
this.setPubVersion((String) additionalProperties.get(PUB_VERSION)); | ||
} else { | ||
//not set, use to be passed to template | ||
additionalProperties.put(PUB_VERSION, pubVersion); | ||
} | ||
|
||
if (additionalProperties.containsKey(PUB_DESCRIPTION)) { | ||
this.setPubDescription((String) additionalProperties.get(PUB_DESCRIPTION)); | ||
} else { | ||
//not set, use to be passed to template | ||
additionalProperties.put(PUB_DESCRIPTION, pubDescription); | ||
} | ||
|
||
if (additionalProperties.containsKey(USE_ENUM_EXTENSION)) { | ||
this.setUseEnumExtension(convertPropertyToBooleanAndWriteBack(USE_ENUM_EXTENSION)); | ||
} else { | ||
// Not set, use to be passed to template. | ||
additionalProperties.put(USE_ENUM_EXTENSION, useEnumExtension); | ||
} | ||
|
||
if (additionalProperties.containsKey(CodegenConstants.SOURCE_FOLDER)) { | ||
this.setSourceFolder((String) additionalProperties.get(CodegenConstants.SOURCE_FOLDER)); | ||
} | ||
|
||
// make api and model doc path available in mustache template | ||
additionalProperties.put("apiDocPath", apiDocPath); | ||
additionalProperties.put("modelDocPath", modelDocPath); | ||
|
||
final String libFolder = sourceFolder + File.separator + "lib"; | ||
|
||
supportingFiles.add(new SupportingFile("pubspec.mustache", "", "pubspec.yaml")); | ||
supportingFiles.add(new SupportingFile("analysis_options.mustache", "", "analysis_options.yaml")); | ||
supportingFiles.add(new SupportingFile("apilib.mustache", libFolder, "api.dart")); | ||
|
||
supportingFiles.add(new SupportingFile("git_push.sh.mustache", "", "git_push.sh")); | ||
supportingFiles.add(new SupportingFile("gitignore.mustache", "", ".gitignore")); | ||
supportingFiles.add(new SupportingFile("README.mustache", "", "README.md")); | ||
|
||
final String authFolder = sourceFolder + File.separator + "lib" + File.separator + "auth"; | ||
supportingFiles.add(new SupportingFile("auth/api_key_auth.mustache", authFolder, "api_key_auth.dart")); | ||
supportingFiles.add(new SupportingFile("auth/basic_auth.mustache", authFolder, "basic_auth.dart")); | ||
supportingFiles.add(new SupportingFile("auth/oauth.mustache", authFolder, "oauth.dart")); | ||
supportingFiles.add(new SupportingFile("auth/auth.mustache", authFolder, "auth.dart")); | ||
} | ||
|
||
|
||
@Override | ||
public Map<String, Object> postProcessModels(Map<String, Object> objs) { | ||
objs = super.postProcessModels(objs); | ||
List<Object> models = (List<Object>) objs.get("models"); | ||
for (Object _mo : models) { | ||
Map<String, Object> mo = (Map<String, Object>) _mo; | ||
Set<String> modelImports = new HashSet<>(); | ||
CodegenModel cm = (CodegenModel) mo.get("model"); | ||
for (String modelImport : cm.imports) { | ||
if(!modelToIgnore.contains(modelImport.toLowerCase())) { | ||
modelImports.add(underscore(modelImport)); | ||
} | ||
} | ||
cm.imports = modelImports; | ||
cm.vendorExtensions.put("hasVars", cm.vars.size() > 0); | ||
} | ||
//objs.put("modelImports", modelImports); | ||
return objs; | ||
} | ||
|
||
@Override | ||
public Map<String, Object> postProcessOperations(Map<String, Object> objs) { | ||
objs = super.postProcessOperations(objs); | ||
Map<String, Object> operations = (Map<String, Object>) objs.get("operations"); | ||
List<CodegenOperation> operationList = (List<CodegenOperation>) operations.get("operation"); | ||
|
||
Set<String> modelImports = new HashSet<>(); | ||
|
||
for (CodegenOperation op : operationList) { | ||
op.httpMethod = StringUtils.capitalize(op.httpMethod.toLowerCase()); | ||
boolean isJson = true; //default to JSON | ||
boolean isForm = false; | ||
boolean isMultipart = false; | ||
if(op.consumes != null) { | ||
for (Map<String, String> consume : op.consumes) { | ||
if (consume.containsKey("mediaType")) { | ||
String type = consume.get("mediaType"); | ||
isJson = type.equalsIgnoreCase("application/json"); | ||
isForm = type.equalsIgnoreCase("application/x-www-form-urlencoded"); | ||
isMultipart = type.equalsIgnoreCase("multipart/form-data"); | ||
break; | ||
} | ||
} | ||
} | ||
|
||
op.vendorExtensions.put("isJson", isJson); | ||
op.vendorExtensions.put("isForm", isForm); | ||
op.vendorExtensions.put("isMultipart", isMultipart); | ||
|
||
Set<String> imports = new HashSet<>(); | ||
for (String item : op.imports) { | ||
if(!modelToIgnore.contains(item.toLowerCase())) { | ||
imports.add(underscore(item)); | ||
} | ||
} | ||
modelImports.addAll(imports); | ||
op.imports = imports; | ||
|
||
String[] items = op.path.split("/", -1); | ||
String jaguarPath = ""; | ||
|
||
for (int i = 0; i < items.length; ++i) { | ||
if (items[i].matches("^\\{(.*)\\}$")) { // wrap in {} | ||
jaguarPath = jaguarPath + ":" + items[i].replace("{", "").replace("}", ""); | ||
} else { | ||
jaguarPath = jaguarPath + items[i]; | ||
} | ||
|
||
if (i != items.length -1) { | ||
jaguarPath = jaguarPath + "/"; | ||
} | ||
} | ||
|
||
op.path = jaguarPath; | ||
} | ||
|
||
objs.put("modelImports", modelImports); | ||
|
||
return objs; | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.