Merge pull request #677 from wing328/fix_swagger_type2

Fix PHP swagger type
This commit is contained in:
Tony Tam 2015-05-14 11:50:57 -04:00
commit 0248d6fd9f
3 changed files with 57 additions and 33 deletions

View File

@ -39,9 +39,6 @@ public class PhpClientCodegen extends DefaultCodegen implements CodegenConfig {
apiTemplateFiles.put("api.mustache", ".php"); apiTemplateFiles.put("api.mustache", ".php");
templateDir = "php"; templateDir = "php";
typeMapping.clear();
languageSpecificPrimitives.clear();
reservedWords = new HashSet<String> ( reservedWords = new HashSet<String> (
Arrays.asList( Arrays.asList(
"__halt_compiler", "abstract", "and", "array", "as", "break", "callable", "case", "catch", "class", "clone", "const", "continue", "declare", "default", "die", "do", "echo", "else", "elseif", "empty", "enddeclare", "endfor", "endforeach", "endif", "endswitch", "endwhile", "eval", "exit", "extends", "final", "for", "foreach", "function", "global", "goto", "if", "implements", "include", "include_once", "instanceof", "insteadof", "interface", "isset", "list", "namespace", "new", "or", "print", "private", "protected", "public", "require", "require_once", "return", "static", "switch", "throw", "trait", "try", "unset", "use", "var", "while", "xor") "__halt_compiler", "abstract", "and", "array", "as", "break", "callable", "case", "catch", "class", "clone", "const", "continue", "declare", "default", "die", "do", "echo", "else", "elseif", "empty", "enddeclare", "endfor", "endforeach", "endif", "endswitch", "endwhile", "eval", "exit", "extends", "final", "for", "foreach", "function", "global", "goto", "if", "implements", "include", "include_once", "instanceof", "insteadof", "interface", "isset", "list", "namespace", "new", "or", "print", "private", "protected", "public", "require", "require_once", "return", "static", "switch", "throw", "trait", "try", "unset", "use", "var", "while", "xor")
@ -52,18 +49,39 @@ public class PhpClientCodegen extends DefaultCodegen implements CodegenConfig {
additionalProperties.put("artifactId", artifactId); additionalProperties.put("artifactId", artifactId);
additionalProperties.put("artifactVersion", artifactVersion); additionalProperties.put("artifactVersion", artifactVersion);
languageSpecificPrimitives.add("int"); // ref: http://php.net/manual/en/language.types.intro.php
languageSpecificPrimitives.add("array"); languageSpecificPrimitives = new HashSet<String>(
languageSpecificPrimitives.add("map"); Arrays.asList(
languageSpecificPrimitives.add("string"); "boolean",
languageSpecificPrimitives.add("DateTime"); "int",
"integer",
"double",
"float",
"string",
"object",
"DateTime",
"mixed",
"number")
);
typeMapping.put("long", "int"); instantiationTypes.put("array", "array");
instantiationTypes.put("map", "map");
// ref: https://github.com/swagger-api/swagger-spec/blob/master/versions/2.0.md#data-types
typeMapping = new HashMap<String, String>();
typeMapping.put("integer", "int"); typeMapping.put("integer", "int");
typeMapping.put("Array", "array"); typeMapping.put("long", "int");
typeMapping.put("String", "string"); typeMapping.put("float", "float");
typeMapping.put("List", "array"); typeMapping.put("double", "double");
typeMapping.put("string", "string");
typeMapping.put("byte", "int");
typeMapping.put("boolean", "boolean");
typeMapping.put("date", "DateTime");
typeMapping.put("datetime", "DateTime");
typeMapping.put("file", "string");
typeMapping.put("map", "map"); typeMapping.put("map", "map");
typeMapping.put("array", "array");
typeMapping.put("list", "array");
supportingFiles.add(new SupportingFile("composer.mustache", packagePath, "composer.json")); supportingFiles.add(new SupportingFile("composer.mustache", packagePath, "composer.json"));
supportingFiles.add(new SupportingFile("APIClient.mustache", packagePath + "/lib", "APIClient.php")); supportingFiles.add(new SupportingFile("APIClient.mustache", packagePath + "/lib", "APIClient.php"));
@ -109,12 +127,15 @@ public class PhpClientCodegen extends DefaultCodegen implements CodegenConfig {
if(languageSpecificPrimitives.contains(type)) { if(languageSpecificPrimitives.contains(type)) {
return type; return type;
} }
else if (instantiationTypes.containsKey(type)) {
return type;
}
} }
else else
type = swaggerType; type = swaggerType;
if(type == null) if(type == null)
return null; return null;
return type; return toModelName(type);
} }
public String toDefaultValue(Property p) { public String toDefaultValue(Property p) {

View File

@ -217,8 +217,9 @@ class PhpModelTest extends FlatSpec with Matchers {
cm.classname should be ("Sample") cm.classname should be ("Sample")
cm.description should be ("an array model") cm.description should be ("an array model")
cm.vars.size should be (0) cm.vars.size should be (0)
cm.imports.size should be (1) // skip import test as import is not used by PHP codegen
(cm.imports.asScala.toSet & Set("Children")).size should be (1) //cm.imports.size should be (1)
//(cm.imports.asScala.toSet & Set("Children")).size should be (1)
} }
it should "convert an map model" in { it should "convert an map model" in {
@ -237,23 +238,25 @@ class PhpModelTest extends FlatSpec with Matchers {
(cm.imports.asScala.toSet & Set("Children")).size should be (1) (cm.imports.asScala.toSet & Set("Children")).size should be (1)
} }
it should "create proper imports per #316" in { // skip import test as import is not used by PHP codegen
val model = new SwaggerParser() //it should "create proper imports per #316" in {
.read("src/test/resources/2_0/postBodyTest.json") // val model = new SwaggerParser()
val codegen = new PhpClientCodegen() // .read("src/test/resources/2_0/postBodyTest.json")
// val codegen = new PhpClientCodegen()
val animalPaths = model.getPaths() // val animalPaths = model.getPaths()
val animalOps = animalPaths.get("/animals") // val animalOps = animalPaths.get("/animals")
animalOps.getPost() should not be (null) // animalOps.getPost() should not be (null)
val animalCo = codegen.fromOperation("/animals", "POST", animalOps.getPost(), model.getDefinitions()) // val animalCo = codegen.fromOperation("/animals", "POST", animalOps.getPost(), model.getDefinitions())
animalCo.imports.size should be (1) // animalCo.imports should be (1)
animalCo.imports.contains("Animal") should equal (true) // animalCo.imports.size should be (1)
// animalCo.imports.contains("Animal") should equal (true)
val insectPaths = model.getPaths() // val insectPaths = model.getPaths()
val insectOps = insectPaths.get("/insects") // val insectOps = insectPaths.get("/insects")
insectOps.getPost() should not be (null) // insectOps.getPost() should not be (null)
val insectCo = codegen.fromOperation("/insects", "POST", insectOps.getPost(), model.getDefinitions()) // val insectCo = codegen.fromOperation("/insects", "POST", insectOps.getPost(), model.getDefinitions())
insectCo.imports.size should be (1) // insectCo.imports.size should be (1)
insectCo.imports.contains("Insect") should equal (true) // insectCo.imports.contains("Insect") should equal (true)
} //}
} }

View File

@ -457,7 +457,7 @@ class PetApi {
* *
* @param int $pet_id ID of pet to update (required) * @param int $pet_id ID of pet to update (required)
* @param string $additional_metadata Additional data to pass to server (required) * @param string $additional_metadata Additional data to pass to server (required)
* @param file $file file to upload (required) * @param string $file file to upload (required)
* @return void * @return void
*/ */
public function uploadFile($pet_id, $additional_metadata, $file) { public function uploadFile($pet_id, $additional_metadata, $file) {