diff --git a/.gitignore b/.gitignore
index 2146898f279..ceacfbcb75e 100644
--- a/.gitignore
+++ b/.gitignore
@@ -80,6 +80,7 @@ samples/client/petstore/java/default/build/
samples/client/petstore/scala/build/
samples/client/petstore/java/resttemplate/hello.txt
samples/client/petstore/java/retrofit2/hello.txt
+samples/client/petstore/java/feign/hello.txt
#PHP
samples/client/petstore/php/SwaggerClient-php/composer.lock
diff --git a/README.md b/README.md
index 4cc3194646f..a5300452279 100644
--- a/README.md
+++ b/README.md
@@ -77,8 +77,8 @@ The OpenAPI Specification has undergone 3 revisions since initial creation in 20
Swagger Codegen Version | Release Date | OpenAPI Spec compatibility | Notes
-------------------------- | ------------ | -------------------------- | -----
-2.3.0 (upcoming minor release) | Apr/May 2017 | 1.0, 1.1, 1.2, 2.0 | Minor release with breaking changes
-2.2.3 (upcoming patch release) | TBD | 1.0, 1.1, 1.2, 2.0 | Patch release without breaking changes
+2.3.0 (upcoming minor release) [SNAPSHOT](https://oss.sonatype.org/content/repositories/snapshots/io/swagger/swagger-codegen/2.3.0-SNAPSHOT/)| Jul/Aug 2017 | 1.0, 1.1, 1.2, 2.0 | Minor release with breaking changes
+2.2.3 (upcoming patch release) [SNAPSHOT](https://oss.sonatype.org/content/repositories/snapshots/io/swagger/swagger-codegen/2.2.3-SNAPSHOT/)| TBD | 1.0, 1.1, 1.2, 2.0 | Patch release without breaking changes
[2.2.2](https://github.com/swagger-api/swagger-codegen/releases/tag/v2.2.2) (**current stable**) | 2017-03-01 | 1.0, 1.1, 1.2, 2.0 | [tag v2.2.2](https://github.com/swagger-api/swagger-codegen/tree/v2.2.2)
[2.2.1](https://github.com/swagger-api/swagger-codegen/releases/tag/v2.2.1) | 2016-08-07 | 1.0, 1.1, 1.2, 2.0 | [tag v2.2.1](https://github.com/swagger-api/swagger-codegen/tree/v2.2.1)
[2.1.6](https://github.com/swagger-api/swagger-codegen/releases/tag/v2.1.6) | 2016-04-06 | 1.0, 1.1, 1.2, 2.0 | [tag v2.1.6](https://github.com/swagger-api/swagger-codegen/tree/v2.1.6)
diff --git a/bin/spring-all-pestore.sh b/bin/spring-all-pestore.sh
index 77d67ec37d7..8424569ce76 100755
--- a/bin/spring-all-pestore.sh
+++ b/bin/spring-all-pestore.sh
@@ -9,3 +9,4 @@
./bin/spring-mvc-petstore-server.sh
./bin/springboot-petstore-server-beanvalidation.sh
./bin/springboot-petstore-server-implicitHeaders.sh
+./bin/springboot-petstore-server-useOptional.sh
diff --git a/bin/springboot-petstore-server-useOptional.json b/bin/springboot-petstore-server-useOptional.json
new file mode 100644
index 00000000000..5a0c80d6b9c
--- /dev/null
+++ b/bin/springboot-petstore-server-useOptional.json
@@ -0,0 +1,4 @@
+{
+ "artifactId": "spring-boot-useoptional",
+ "useOptional": true
+}
diff --git a/bin/springboot-petstore-server-useOptional.sh b/bin/springboot-petstore-server-useOptional.sh
new file mode 100755
index 00000000000..5b53bfbecf6
--- /dev/null
+++ b/bin/springboot-petstore-server-useOptional.sh
@@ -0,0 +1,34 @@
+#!/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"
+ags="$@ generate -t modules/swagger-codegen/src/main/resources/JavaSpring -i modules/swagger-codegen/src/test/resources/2_0/petstore-with-fake-endpoints-models-for-testing.yaml -l spring -c bin/springboot-petstore-server-useOptional.json -o samples/server/petstore/springboot-useoptional -DhideGenerationTimestamp=true"
+
+echo "Removing files and folders under samples/server/petstore/springboot-useoptional/src/main"
+rm -rf samples/server/petstore/springboot-useoptional/src/main
+find samples/server/petstore/springboot-useoptional -maxdepth 1 -type f ! -name "README.md" -exec rm {} +
+java $JAVA_OPTS -jar $executable $ags
diff --git a/bin/swift3-petstore-all.sh b/bin/swift3-petstore-all.sh
index 4f38026418d..8eb4a7c5f4f 100755
--- a/bin/swift3-petstore-all.sh
+++ b/bin/swift3-petstore-all.sh
@@ -38,3 +38,7 @@ java $JAVA_OPTS -jar $executable $ags
ags="$@ generate -t modules/swagger-codegen/src/main/resources/swift3 -i modules/swagger-codegen/src/test/resources/2_0/petstore-with-fake-endpoints-models-for-testing.yaml -l swift3 -c ./bin/swift3-petstore-rxswift.json -o samples/client/petstore/swift3/rxswift"
echo "#### Petstore Swift API client (rxswift) ####"
java $JAVA_OPTS -jar $executable $ags
+
+ags="$@ generate -t modules/swagger-codegen/src/main/resources/swift3 -i modules/swagger-codegen/src/test/resources/2_0/petstore-with-fake-endpoints-models-for-testing.yaml -l swift3 -c ./bin/swift3-petstore-unwraprequired.json -o samples/client/petstore/swift3/unwraprequired"
+echo "#### Petstore Swift API client (unwraprequired) ####"
+java $JAVA_OPTS -jar $executable $ags
diff --git a/bin/swift3-petstore-unwraprequired.json b/bin/swift3-petstore-unwraprequired.json
new file mode 100644
index 00000000000..f077c429ee8
--- /dev/null
+++ b/bin/swift3-petstore-unwraprequired.json
@@ -0,0 +1,7 @@
+{
+ "podSummary": "PetstoreClient",
+ "podHomepage": "https://github.com/swagger-api/swagger-codegen",
+ "podAuthors": "",
+ "projectName": "PetstoreClient",
+ "unwrapRequired": true
+}
\ No newline at end of file
diff --git a/bin/swift3-petstore-unwraprequired.sh b/bin/swift3-petstore-unwraprequired.sh
new file mode 100755
index 00000000000..65355a18ecf
--- /dev/null
+++ b/bin/swift3-petstore-unwraprequired.sh
@@ -0,0 +1,31 @@
+#!/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"
+ags="$@ generate -t modules/swagger-codegen/src/main/resources/swift3 -i modules/swagger-codegen/src/test/resources/2_0/petstore-with-fake-endpoints-models-for-testing.yaml -l swift3 -c ./bin/swift3-petstore-unwraprequired.json -o samples/client/petstore/swift3/unwraprequired"
+
+java $JAVA_OPTS -jar $executable $ags
diff --git a/circle.yml b/circle.yml
index a4e71cc09d1..1fb626bce55 100644
--- a/circle.yml
+++ b/circle.yml
@@ -32,14 +32,18 @@ dependencies:
test:
override:
- # test with jdk8
+ ## test with jdk8
- java -version
- mvn -q clean verify -Psamples
- # test with jdk7
+ # skip the rest if previous mvn task fails
+ - if [ $? -ne 0 ]; then exit 1; fi
+ ## test with jdk7
- sudo update-java-alternatives -s java-1.7.0-openjdk-amd64
- java -version
- mvn -q clean verify -Psamples
- # docker: build generator image and push to Docker Hub
+ # skip the rest if previous mvn task fails
+ - if [ $? -ne 0 ]; then exit 1; fi
+ ## docker: build generator image and push to Docker Hub
- if [ $DOCKER_HUB_USERNAME ]; then docker login --email=$DOCKER_HUB_EMAIL --username=$DOCKER_HUB_USERNAME --password=$DOCKER_HUB_PASSWORD && docker build --rm=false -t $DOCKER_GENERATOR_IMAGE_NAME ./modules/swagger-generator && if [ ! -z "$CIRCLE_TAG" ]; then docker tag $DOCKER_GENERATOR_IMAGE_NAME:latest $DOCKER_GENERATOR_IMAGE_NAME:$CIRCLE_TAG; fi && if [ ! -z "$CIRCLE_TAG" ] || [ "$CIRCLE_BRANCH" = "master" ]; then docker push $DOCKER_GENERATOR_IMAGE_NAME; fi; fi
- # docker: build cli image and push to Docker Hub
+ ## docker: build cli image and push to Docker Hub
- if [ $DOCKER_HUB_USERNAME ]; then docker login --email=$DOCKER_HUB_EMAIL --username=$DOCKER_HUB_USERNAME --password=$DOCKER_HUB_PASSWORD && docker build --rm=false -t $DOCKER_CODEGEN_CLI_IMAGE_NAME ./modules/swagger-codegen-cli && if [ ! -z "$CIRCLE_TAG" ]; then docker tag $DOCKER_CODEGEN_CLI_IMAGE_NAME:latest $DOCKER_CODEGEN_CLI_IMAGE_NAME:$CIRCLE_TAG; fi && if [ ! -z "$CIRCLE_TAG" ] || [ "$CIRCLE_BRANCH" = "master" ]; then docker push $DOCKER_CODEGEN_CLI_IMAGE_NAME; fi; fi
diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultCodegen.java
index f500d72fc8f..b5726b57ea7 100644
--- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultCodegen.java
+++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultCodegen.java
@@ -607,7 +607,7 @@ public class DefaultCodegen {
* @return properly-escaped pattern
*/
public String toRegularExpression(String pattern) {
- return escapeText(addRegularExpressionDelimiter(pattern));
+ return addRegularExpressionDelimiter(escapeText(pattern));
}
/**
@@ -3572,9 +3572,14 @@ public class DefaultCodegen {
* @return the pattern with delimiter
*/
public String addRegularExpressionDelimiter(String pattern) {
- if (pattern != null && !pattern.matches("^/.*")) {
- return "/" + pattern + "/";
+ if (StringUtils.isEmpty(pattern)) {
+ return pattern;
}
+
+ if (!pattern.matches("^/.*")) {
+ return "/" + pattern.replaceAll("/", "\\\\/") + "/";
+ }
+
return pattern;
}
diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/CppRestClientCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/CppRestClientCodegen.java
index 6053939fa4e..e1a79f4d576 100644
--- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/CppRestClientCodegen.java
+++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/CppRestClientCodegen.java
@@ -312,10 +312,10 @@ public class CppRestClientCodegen extends DefaultCodegen implements CodegenConfi
return "0.0";
} else if (p instanceof FloatProperty) {
return "0.0f";
- } else if (p instanceof IntegerProperty || p instanceof BaseIntegerProperty) {
- return "0";
} else if (p instanceof LongProperty) {
return "0L";
+ } else if (p instanceof IntegerProperty || p instanceof BaseIntegerProperty) {
+ return "0";
} else if (p instanceof DecimalProperty) {
return "0.0";
} else if (p instanceof MapProperty) {
diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/PistacheServerCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/PistacheServerCodegen.java
index a56ef44710a..0eb83a5e2eb 100644
--- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/PistacheServerCodegen.java
+++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/PistacheServerCodegen.java
@@ -286,10 +286,10 @@ public class PistacheServerCodegen extends DefaultCodegen implements CodegenConf
return "0.0";
} else if (p instanceof FloatProperty) {
return "0.0f";
- } else if (p instanceof IntegerProperty || p instanceof BaseIntegerProperty) {
- return "0";
} else if (p instanceof LongProperty) {
return "0L";
+ } else if (p instanceof IntegerProperty || p instanceof BaseIntegerProperty) {
+ return "0";
} else if (p instanceof DecimalProperty) {
return "0.0";
} else if (p instanceof MapProperty) {
diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/RestbedCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/RestbedCodegen.java
index 730d6e075b6..dcd4c75988a 100644
--- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/RestbedCodegen.java
+++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/RestbedCodegen.java
@@ -318,10 +318,10 @@ public class RestbedCodegen extends DefaultCodegen implements CodegenConfig {
return "0.0";
} else if (p instanceof FloatProperty) {
return "0.0f";
- } else if (p instanceof IntegerProperty || p instanceof BaseIntegerProperty) {
- return "0";
} else if (p instanceof LongProperty) {
return "0L";
+ } else if (p instanceof IntegerProperty || p instanceof BaseIntegerProperty) {
+ return "0";
} else if (p instanceof DecimalProperty) {
return "0.0";
} else if (p instanceof MapProperty) {
diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/SpringCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/SpringCodegen.java
index 2535a17ba0e..34aa46cd3f2 100644
--- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/SpringCodegen.java
+++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/SpringCodegen.java
@@ -4,6 +4,7 @@ import com.samskivert.mustache.Mustache;
import com.samskivert.mustache.Template;
import io.swagger.codegen.*;
import io.swagger.codegen.languages.features.BeanValidationFeatures;
+import io.swagger.codegen.languages.features.OptionalFeatures;
import io.swagger.models.Operation;
import io.swagger.models.Path;
import io.swagger.models.Swagger;
@@ -15,7 +16,8 @@ import java.util.*;
import java.util.regex.Matcher;
-public class SpringCodegen extends AbstractJavaCodegen implements BeanValidationFeatures {
+public class SpringCodegen extends AbstractJavaCodegen
+ implements BeanValidationFeatures, OptionalFeatures {
public static final String DEFAULT_LIBRARY = "spring-boot";
public static final String TITLE = "title";
public static final String CONFIG_PACKAGE = "configPackage";
@@ -45,6 +47,7 @@ public class SpringCodegen extends AbstractJavaCodegen implements BeanValidation
protected boolean useBeanValidation = true;
protected boolean implicitHeaders = false;
protected boolean swaggerDocketConfig = false;
+ protected boolean useOptional = false;
public SpringCodegen() {
super();
@@ -75,6 +78,8 @@ public class SpringCodegen extends AbstractJavaCodegen implements BeanValidation
cliOptions.add(CliOption.newBoolean(USE_BEANVALIDATION, "Use BeanValidation API annotations"));
cliOptions.add(CliOption.newBoolean(IMPLICIT_HEADERS, "Use of @ApiImplicitParams for headers."));
cliOptions.add(CliOption.newBoolean(SWAGGER_DOCKET_CONFIG, "Generate Spring Swagger Docket configuration class."));
+ cliOptions.add(CliOption.newBoolean(USE_OPTIONAL,
+ "Use Optional container for optional parameters"));
supportedLibraries.put(DEFAULT_LIBRARY, "Spring-boot Server application using the SpringFox integration.");
supportedLibraries.put(SPRING_MVC_LIBRARY, "Spring-MVC Server application using the SpringFox integration.");
@@ -170,11 +175,14 @@ public class SpringCodegen extends AbstractJavaCodegen implements BeanValidation
this.setUseBeanValidation(convertPropertyToBoolean(USE_BEANVALIDATION));
}
+ if (additionalProperties.containsKey(USE_OPTIONAL)) {
+ this.setUseOptional(convertPropertyToBoolean(USE_OPTIONAL));
+ }
+
if (useBeanValidation) {
writePropertyBack(USE_BEANVALIDATION, useBeanValidation);
}
-
if (additionalProperties.containsKey(IMPLICIT_HEADERS)) {
this.setImplicitHeaders(Boolean.valueOf(additionalProperties.get(IMPLICIT_HEADERS).toString()));
}
@@ -185,6 +193,10 @@ public class SpringCodegen extends AbstractJavaCodegen implements BeanValidation
typeMapping.put("file", "Resource");
importMapping.put("Resource", "org.springframework.core.io.Resource");
+
+ if (useOptional) {
+ writePropertyBack(USE_OPTIONAL, useOptional);
+ }
if (this.interfaceOnly && this.delegatePattern) {
throw new IllegalArgumentException(
@@ -649,4 +661,8 @@ public class SpringCodegen extends AbstractJavaCodegen implements BeanValidation
this.useBeanValidation = useBeanValidation;
}
+ @Override
+ public void setUseOptional(boolean useOptional) {
+ this.useOptional = useOptional;
+ }
}
diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/TypeScriptJqueryClientCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/TypeScriptJqueryClientCodegen.java
index eb319344781..ab12f1a5b60 100644
--- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/TypeScriptJqueryClientCodegen.java
+++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/TypeScriptJqueryClientCodegen.java
@@ -1,5 +1,9 @@
package io.swagger.codegen.languages;
+import io.swagger.codegen.CodegenModel;
+import io.swagger.codegen.CodegenParameter;
+import io.swagger.models.ModelImpl;
+import io.swagger.models.properties.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -9,7 +13,6 @@ import java.util.Date;
import io.swagger.codegen.CliOption;
import io.swagger.codegen.SupportingFile;
-import io.swagger.models.properties.BooleanProperty;
public class TypeScriptJqueryClientCodegen extends AbstractTypeScriptClientCodegen {
private static final Logger LOGGER = LoggerFactory.getLogger(TypeScriptNodeClientCodegen.class);
@@ -19,6 +22,7 @@ public class TypeScriptJqueryClientCodegen extends AbstractTypeScriptClientCodeg
public static final String NPM_VERSION = "npmVersion";
public static final String NPM_REPOSITORY = "npmRepository";
public static final String SNAPSHOT = "snapshot";
+ public static final String JQUERY_ALREADY_IMPORTED = "jqueryAlreadyImported";
protected String npmName = null;
protected String npmVersion = "1.0.0";
@@ -26,6 +30,13 @@ public class TypeScriptJqueryClientCodegen extends AbstractTypeScriptClientCodeg
public TypeScriptJqueryClientCodegen() {
super();
+
+ modelTemplateFiles.put("model.mustache", ".ts");
+ apiTemplateFiles.put("api.mustache", ".ts");
+ typeMapping.put("Date", "Date");
+ apiPackage = "api";
+ modelPackage = "model";
+
outputFolder = "generated-code/typescript-jquery";
embeddedTemplateDir = templateDir = "typescript-jquery";
@@ -33,23 +44,75 @@ public class TypeScriptJqueryClientCodegen extends AbstractTypeScriptClientCodeg
this.cliOptions.add(new CliOption(NPM_VERSION, "The version of your npm package"));
this.cliOptions.add(new CliOption(NPM_REPOSITORY, "Use this property to set an url your private npmRepo in the package.json"));
this.cliOptions.add(new CliOption(SNAPSHOT, "When setting this property to true the version will be suffixed with -SNAPSHOT.yyyyMMddHHmm", BooleanProperty.TYPE).defaultValue(Boolean.FALSE.toString()));
+ this.cliOptions.add(new CliOption(JQUERY_ALREADY_IMPORTED, "When using this in legacy app using mix of typescript and javascript, this will only declare jquery and not import it", BooleanProperty.TYPE).defaultValue(Boolean.FALSE.toString()));
}
-
@Override
public void processOpts() {
super.processOpts();
- supportingFiles.add(new SupportingFile("api.mustache", null, "api.ts"));
+
supportingFiles.add(new SupportingFile("git_push.sh.mustache", "", "git_push.sh"));
+ supportingFiles.add(new SupportingFile("models.mustache", modelPackage().replace('.', File.separatorChar), "models.ts"));
+ supportingFiles.add(new SupportingFile("apis.mustache", apiPackage().replace('.', File.separatorChar), "api.ts"));
+ supportingFiles.add(new SupportingFile("configuration.mustache", getIndexDirectory(), "configuration.ts"));
+ supportingFiles.add(new SupportingFile("index.mustache", getIndexDirectory(), "index.ts"));
+ supportingFiles.add(new SupportingFile("variables.mustache", getIndexDirectory(), "variables.ts"));
LOGGER.warn("check additionals: " + additionalProperties.get(NPM_NAME));
- if(additionalProperties.containsKey(NPM_NAME)) {
+ if (additionalProperties.containsKey(NPM_NAME)) {
addNpmPackageGeneration();
}
}
+ private String getIndexDirectory() {
+ String indexPackage = modelPackage.substring(0, Math.max(0, modelPackage.lastIndexOf('.')));
+ return indexPackage.replace('.', File.separatorChar);
+ }
+
+ @Override
+ public String getSwaggerType(Property p) {
+ String swaggerType = super.getSwaggerType(p);
+ if (isLanguagePrimitive(swaggerType) || isLanguageGenericType(swaggerType)) {
+ return swaggerType;
+ }
+ return addModelPrefix(swaggerType);
+ }
+
+ private String addModelPrefix(String swaggerType) {
+ String type = null;
+ if (typeMapping.containsKey(swaggerType)) {
+ type = typeMapping.get(swaggerType);
+ } else {
+ type = swaggerType;
+ }
+
+ if (!isLanguagePrimitive(type) && !isLanguageGenericType(type)) {
+ type = "models." + swaggerType;
+ }
+ return type;
+ }
+
+ private boolean isLanguagePrimitive(String type) {
+ return languageSpecificPrimitives.contains(type);
+ }
+
+ private boolean isLanguageGenericType(String type) {
+ for (String genericType : languageGenericTypes) {
+ if (type.startsWith(genericType + "<")) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ @Override
+ public void postProcessParameter(CodegenParameter parameter) {
+ super.postProcessParameter(parameter);
+ parameter.dataType = addModelPrefix(parameter.dataType);
+ }
+
private void addNpmPackageGeneration() {
- if(additionalProperties.containsKey(NPM_NAME)) {
+ if (additionalProperties.containsKey(NPM_NAME)) {
this.setNpmName(additionalProperties.get(NPM_NAME).toString());
}
@@ -77,6 +140,12 @@ public class TypeScriptJqueryClientCodegen extends AbstractTypeScriptClientCodeg
return indexPackage.replace('.', File.separatorChar);
}
+ @Override
+ protected void addAdditionPropertiesToCodeGenModel(CodegenModel codegenModel, ModelImpl swaggerModel) {
+ codegenModel.additionalPropertiesType = getSwaggerType(swaggerModel.getAdditionalProperties());
+ addImport(codegenModel, codegenModel.additionalPropertiesType);
+ }
+
@Override
public String getName() {
return "typescript-jquery";
diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/features/OptionalFeatures.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/features/OptionalFeatures.java
new file mode 100644
index 00000000000..5b83739c565
--- /dev/null
+++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/features/OptionalFeatures.java
@@ -0,0 +1,10 @@
+package io.swagger.codegen.languages.features;
+
+public interface OptionalFeatures {
+
+ // Language supports generating Optional Types
+ String USE_OPTIONAL = "useOptional";
+
+ void setUseOptional(boolean useOptional);
+
+}
diff --git a/modules/swagger-codegen/src/main/resources/JavaJaxRS/cxf/server/pom.mustache b/modules/swagger-codegen/src/main/resources/JavaJaxRS/cxf/server/pom.mustache
index ddf991b6a37..2bc2739b1fe 100644
--- a/modules/swagger-codegen/src/main/resources/JavaJaxRS/cxf/server/pom.mustache
+++ b/modules/swagger-codegen/src/main/resources/JavaJaxRS/cxf/server/pom.mustache
@@ -241,7 +241,7 @@
4.3.9.RELEASE
{{/generateSpringApplication}}
{{#generateSpringBootApplication}}
- 1.4.7.RELEASE
+ 1.5.4.RELEASE
{{/generateSpringBootApplication}}
3.1.11
2.8.9
diff --git a/modules/swagger-codegen/src/main/resources/JavaSpring/api.mustache b/modules/swagger-codegen/src/main/resources/JavaSpring/api.mustache
index 94de93b8646..a1dd83d7657 100644
--- a/modules/swagger-codegen/src/main/resources/JavaSpring/api.mustache
+++ b/modules/swagger-codegen/src/main/resources/JavaSpring/api.mustache
@@ -26,6 +26,9 @@ import java.io.IOException;
{{/useSpringCloudClient}}
import java.util.List;
+{{#useOptional}}
+import java.util.Optional;
+{{/useOptional}}
{{#async}}
import java.util.concurrent.{{^jdk8}}Callable{{/jdk8}}{{#jdk8}}CompletableFuture{{/jdk8}};
{{/async}}
diff --git a/modules/swagger-codegen/src/main/resources/JavaSpring/apiController.mustache b/modules/swagger-codegen/src/main/resources/JavaSpring/apiController.mustache
index 13afce66110..019c7618e06 100644
--- a/modules/swagger-codegen/src/main/resources/JavaSpring/apiController.mustache
+++ b/modules/swagger-codegen/src/main/resources/JavaSpring/apiController.mustache
@@ -19,6 +19,9 @@ import org.springframework.web.bind.annotation.RequestPart;
import org.springframework.web.multipart.MultipartFile;
import java.util.List;
+{{#useOptional}}
+import java.util.Optional;
+{{/useOptional}}
{{#async}}
import java.util.concurrent.Callable;
{{/async}}
diff --git a/modules/swagger-codegen/src/main/resources/JavaSpring/headerParams.mustache b/modules/swagger-codegen/src/main/resources/JavaSpring/headerParams.mustache
index 535f2e6f2b3..89645c9436a 100644
--- a/modules/swagger-codegen/src/main/resources/JavaSpring/headerParams.mustache
+++ b/modules/swagger-codegen/src/main/resources/JavaSpring/headerParams.mustache
@@ -1 +1 @@
-{{#isHeaderParam}}@ApiParam(value = "{{{description}}}" {{#required}},required=true{{/required}}{{#allowableValues}}, allowableValues="{{#values}}{{{.}}}{{^-last}}, {{/-last}}{{#-last}}{{/-last}}{{/values}}"{{/allowableValues}}{{#defaultValue}}, defaultValue="{{{defaultValue}}}"{{/defaultValue}}) @RequestHeader(value="{{baseName}}", required={{#required}}true{{/required}}{{^required}}false{{/required}}) {{{dataType}}} {{paramName}}{{/isHeaderParam}}
\ No newline at end of file
+{{#isHeaderParam}}@ApiParam(value = "{{{description}}}" {{#required}},required=true{{/required}}{{#allowableValues}}, allowableValues="{{#values}}{{{.}}}{{^-last}}, {{/-last}}{{#-last}}{{/-last}}{{/values}}"{{/allowableValues}}{{#defaultValue}}, defaultValue="{{{defaultValue}}}"{{/defaultValue}}) @RequestHeader(value="{{baseName}}", required={{#required}}true{{/required}}{{^required}}false{{/required}}) {{>optionalDataType}} {{paramName}}{{/isHeaderParam}}
\ No newline at end of file
diff --git a/modules/swagger-codegen/src/main/resources/JavaSpring/libraries/spring-boot/pom.mustache b/modules/swagger-codegen/src/main/resources/JavaSpring/libraries/spring-boot/pom.mustache
index f42ea7adff8..86c50e3a387 100644
--- a/modules/swagger-codegen/src/main/resources/JavaSpring/libraries/spring-boot/pom.mustache
+++ b/modules/swagger-codegen/src/main/resources/JavaSpring/libraries/spring-boot/pom.mustache
@@ -9,12 +9,12 @@
{{#java8}}1.8{{/java8}}{{^java8}}1.7{{/java8}}
${java.version}
${java.version}
- 2.6.1
+ 2.7.0
org.springframework.boot
spring-boot-starter-parent
- 1.4.7.RELEASE
+ 1.5.4.RELEASE
src/main/java
diff --git a/modules/swagger-codegen/src/main/resources/JavaSpring/libraries/spring-cloud/pom.mustache b/modules/swagger-codegen/src/main/resources/JavaSpring/libraries/spring-cloud/pom.mustache
index d47cb8524d6..b5687561a2a 100644
--- a/modules/swagger-codegen/src/main/resources/JavaSpring/libraries/spring-cloud/pom.mustache
+++ b/modules/swagger-codegen/src/main/resources/JavaSpring/libraries/spring-cloud/pom.mustache
@@ -14,7 +14,7 @@
org.springframework.boot
spring-boot-starter-parent
- 1.4.7.RELEASE
+ 1.5.4.RELEASE
src/main/java
@@ -25,7 +25,7 @@
org.springframework.cloud
spring-cloud-starter-parent
- Camden.SR1
+ Dalston.SR1
pom
import
diff --git a/modules/swagger-codegen/src/main/resources/JavaSpring/libraries/spring-mvc/pom.mustache b/modules/swagger-codegen/src/main/resources/JavaSpring/libraries/spring-mvc/pom.mustache
index fc58cd9d2e5..307cf529bf6 100644
--- a/modules/swagger-codegen/src/main/resources/JavaSpring/libraries/spring-mvc/pom.mustache
+++ b/modules/swagger-codegen/src/main/resources/JavaSpring/libraries/spring-mvc/pom.mustache
@@ -159,7 +159,7 @@
1.7.21
4.12
2.5
- 2.6.0
+ 2.7.0
2.8.9
2.6.4
4.3.9.RELEASE
diff --git a/modules/swagger-codegen/src/main/resources/JavaSpring/optionalDataType.mustache b/modules/swagger-codegen/src/main/resources/JavaSpring/optionalDataType.mustache
new file mode 100644
index 00000000000..976950e27e8
--- /dev/null
+++ b/modules/swagger-codegen/src/main/resources/JavaSpring/optionalDataType.mustache
@@ -0,0 +1 @@
+{{#useOptional}}{{#required}}{{{dataType}}}{{/required}}{{^required}}Optional<{{{dataType}}}>{{/required}}{{/useOptional}}{{^useOptional}}{{{dataType}}}{{/useOptional}}
\ No newline at end of file
diff --git a/modules/swagger-codegen/src/main/resources/JavaSpring/pathParams.mustache b/modules/swagger-codegen/src/main/resources/JavaSpring/pathParams.mustache
index d577abfb25a..62342d01bfa 100644
--- a/modules/swagger-codegen/src/main/resources/JavaSpring/pathParams.mustache
+++ b/modules/swagger-codegen/src/main/resources/JavaSpring/pathParams.mustache
@@ -1 +1 @@
-{{#isPathParam}}{{#useBeanValidation}}{{>beanValidationPathParams}}{{/useBeanValidation}}@ApiParam(value = "{{{description}}}"{{#required}},required=true{{/required}}{{#allowableValues}}, allowableValues="{{{allowableValues}}}"{{/allowableValues}} {{#defaultValue}}, defaultValue="{{{defaultValue}}}"{{/defaultValue}}) @PathVariable("{{baseName}}") {{{dataType}}} {{paramName}}{{/isPathParam}}
\ No newline at end of file
+{{#isPathParam}}{{#useBeanValidation}}{{>beanValidationPathParams}}{{/useBeanValidation}}@ApiParam(value = "{{{description}}}"{{#required}},required=true{{/required}}{{#allowableValues}}, allowableValues="{{{allowableValues}}}"{{/allowableValues}} {{#defaultValue}}, defaultValue="{{{defaultValue}}}"{{/defaultValue}}) @PathVariable("{{baseName}}") {{>optionalDataType}} {{paramName}}{{/isPathParam}}
\ No newline at end of file
diff --git a/modules/swagger-codegen/src/main/resources/JavaSpring/queryParams.mustache b/modules/swagger-codegen/src/main/resources/JavaSpring/queryParams.mustache
index 97ba247a1ee..222831b72f4 100644
--- a/modules/swagger-codegen/src/main/resources/JavaSpring/queryParams.mustache
+++ b/modules/swagger-codegen/src/main/resources/JavaSpring/queryParams.mustache
@@ -1 +1 @@
-{{#isQueryParam}}{{#useBeanValidation}}{{>beanValidationQueryParams}}{{/useBeanValidation}}@ApiParam(value = "{{{description}}}"{{#required}}, required = true{{/required}}{{#allowableValues}}, allowableValues = "{{#values}}{{{.}}}{{^-last}}, {{/-last}}{{#-last}}{{/-last}}{{/values}}"{{/allowableValues}}{{#defaultValue}}, defaultValue = "{{{defaultValue}}}"{{/defaultValue}}) @RequestParam(value = "{{baseName}}"{{#required}}, required = true{{/required}}{{^required}}, required = false{{/required}}{{#defaultValue}}, defaultValue="{{{defaultValue}}}"{{/defaultValue}}) {{{dataType}}} {{paramName}}{{/isQueryParam}}
\ No newline at end of file
+{{#isQueryParam}}{{#useBeanValidation}}{{>beanValidationQueryParams}}{{/useBeanValidation}}@ApiParam(value = "{{{description}}}"{{#required}}, required = true{{/required}}{{#allowableValues}}, allowableValues = "{{#values}}{{{.}}}{{^-last}}, {{/-last}}{{#-last}}{{/-last}}{{/values}}"{{/allowableValues}}{{#defaultValue}}, defaultValue = "{{{defaultValue}}}"{{/defaultValue}}) @RequestParam(value = "{{baseName}}"{{#required}}, required = true{{/required}}{{^required}}, required = false{{/required}}{{#defaultValue}}, defaultValue="{{{defaultValue}}}"{{/defaultValue}}) {{>optionalDataType}} {{paramName}}{{/isQueryParam}}
\ No newline at end of file
diff --git a/modules/swagger-codegen/src/main/resources/ruby/gemspec.mustache b/modules/swagger-codegen/src/main/resources/ruby/gemspec.mustache
index a6617ac8547..7501d1360e8 100644
--- a/modules/swagger-codegen/src/main/resources/ruby/gemspec.mustache
+++ b/modules/swagger-codegen/src/main/resources/ruby/gemspec.mustache
@@ -26,9 +26,9 @@ Gem::Specification.new do |s|
s.required_ruby_version = "{{{gemRequiredRubyVersion}}}{{^gemRequiredRubyVersion}}>= 1.9{{/gemRequiredRubyVersion}}"
s.add_runtime_dependency 'typhoeus', '~> 1.0', '>= 1.0.1'
- s.add_runtime_dependency 'json', '~> 1.8', '>= 1.8.3'
+ s.add_runtime_dependency 'json', '~> 2.1', '>= 2.1.0'
- s.add_development_dependency 'rspec', '~> 3.4', '>= 3.4.0'
+ s.add_development_dependency 'rspec', '~> 3.6', '>= 3.6.0'
s.add_development_dependency 'vcr', '~> 3.0', '>= 3.0.1'
s.add_development_dependency 'webmock', '~> 1.24', '>= 1.24.3'
s.add_development_dependency 'autotest', '~> 4.4', '>= 4.4.6'
diff --git a/modules/swagger-codegen/src/main/resources/tizen/api-body.mustache b/modules/swagger-codegen/src/main/resources/tizen/api-body.mustache
index 5a2763e77e7..56d6983766c 100644
--- a/modules/swagger-codegen/src/main/resources/tizen/api-body.mustache
+++ b/modules/swagger-codegen/src/main/resources/tizen/api-body.mustache
@@ -50,7 +50,7 @@ static gpointer __{{classname}}threadFunc(gpointer data)
{{#operation}}
-bool {{nickname}}Processor(MemoryStruct_s p_chunk, long code, char* errormsg, void* userData,
+static bool {{nickname}}Processor(MemoryStruct_s p_chunk, long code, char* errormsg, void* userData,
void(* voidHandler)())
{
{{#returnType}}void(* handler)({{#returnContainer}}{{#isListContainer}}{{returnType}}<{{returnBaseType}}>{{/isListContainer}}{{#isMapContainer}}{{returnType}}{{/isMapContainer}}{{/returnContainer}}{{^returnContainer}}{{returnType}}{{/returnContainer}}, Error, void* )
@@ -58,9 +58,6 @@ bool {{nickname}}Processor(MemoryStruct_s p_chunk, long code, char* errormsg, vo
{{^returnType}}void(* handler)(Error, void* ) = reinterpret_cast (voidHandler);{{/returnType}}
JsonNode* pJson;
char * data = p_chunk.memory;
- {{#returnType}}
- printf("%s\n", data);
- {{/returnType}}
{{#returnType}}{{#returnContainer}}{{#isListContainer}}{{returnType}}<{{returnBaseType}}>{{/isListContainer}}{{#isMapContainer}}{{returnType}}{{/isMapContainer}} out;{{/returnContainer}}
{{^returnContainer}}{{returnType}} out;{{/returnContainer}}{{/returnType}}
@@ -137,7 +134,7 @@ bool {{nickname}}Processor(MemoryStruct_s p_chunk, long code, char* errormsg, vo
}
}
-bool {{nickname}}Helper(char * accessToken,
+static bool {{nickname}}Helper(char * accessToken,
{{#allParams}}{{#isContainer}}{{{dataType}}}<{{baseType}}> {{paramName}}{{/isContainer}}{{^isContainer}}{{{dataType}}} {{paramName}}{{/isContainer}}{{#hasMore}}, {{/hasMore}}{{/allParams}}{{#hasParams}}, {{/hasParams}}
{{#returnType}}void(* handler)({{#returnContainer}}{{#isListContainer}}{{returnType}}<{{returnBaseType}}>{{/isListContainer}}{{#isMapContainer}}{{returnType}}{{/isMapContainer}}{{/returnContainer}}{{^returnContainer}}{{returnType}}{{/returnContainer}}, Error, void* ){{/returnType}}
{{^returnType}}void(* handler)(Error, void* ) {{/returnType}}, void* userData, bool isAsync)
@@ -159,8 +156,11 @@ bool {{nickname}}Helper(char * accessToken,
headerList = curl_slist_append(headerList, itemAt);
}
{{/collectionFormat}}{{^collectionFormat}}
- //TODO - should use value of paramname instead. Also check for empty not-required headers
- headerList = curl_slist_append(headerList, "{{baseName}}: {{paramName}}");
+ {
+ string headerString("{{baseName}}: ");
+ headerString.append(stringify(&{{paramName}}, "{{dataType}}"));
+ headerList = curl_slist_append(headerList, headerString.c_str());
+ }
{{/collectionFormat}}
{{/headerParams}}
@@ -204,7 +204,8 @@ bool {{nickname}}Helper(char * accessToken,
string mBody = "";
JsonNode* node;
JsonArray* json_array;
- {{#bodyParams}}
+ {{#allParams}}
+ {{#isBodyParam}}
{{#isContainer}}
//TODO: Map Container
{{#isListContainer}}
@@ -256,17 +257,18 @@ bool {{nickname}}Helper(char * accessToken,
if (isprimitive("{{baseType}}")) {
node = converttoJson(&{{paramName}}, "{{baseType}}", "");
}
- {{^isInteger}}{{^isDate}}{{^isLong}}{{^isBoolean}}{{^isFloat}}{{^isString}}{{^isDateTime}}{{^isDouble}}
+ {{^isPrimitiveType}}{{^isInteger}}{{^isDate}}{{^isLong}}{{^isBoolean}}{{^isFloat}}{{^isString}}{{^isDateTime}}{{^isDouble}}
char *jsonStr = {{paramName}}.toJson();
node = json_from_string(jsonStr, NULL);
g_free(static_cast(jsonStr));
- {{/isDouble}}{{/isDateTime}}{{/isString}}{{/isFloat}}{{/isBoolean}}{{/isLong}}{{/isDate}}{{/isInteger}}
+ {{/isDouble}}{{/isDateTime}}{{/isString}}{{/isFloat}}{{/isBoolean}}{{/isLong}}{{/isDate}}{{/isInteger}}{{/isPrimitiveType}}
{{/isContainer}}
char *jsonStr1 = json_to_string(node, false);
mBody.append(jsonStr1);
g_free(static_cast(jsonStr1));
- {{/bodyParams}}
+ {{/isBodyParam}}
+ {{/allParams}}
string url("{{{path}}}");
int pos;
diff --git a/modules/swagger-codegen/src/main/resources/tizen/api-header.mustache b/modules/swagger-codegen/src/main/resources/tizen/api-header.mustache
index 1a29cb9428d..77366bde156 100644
--- a/modules/swagger-codegen/src/main/resources/tizen/api-header.mustache
+++ b/modules/swagger-codegen/src/main/resources/tizen/api-header.mustache
@@ -10,9 +10,18 @@
{{/imports}}
#include "Error.h"
+/** \defgroup Operations API Endpoints
+ * Classes containing all the functions for calling API endpoints
+ *
+ */
+
namespace Tizen{
namespace {{prefix}} {
{{#operations}}
+/** \addtogroup {{{baseName}}} {{{baseName}}}
+ * \ingroup Operations
+ * @{
+ */
class {{classname}} {
public:
{{classname}}();
@@ -44,6 +53,8 @@ bool {{nickname}}Async(char * accessToken,
{{#allParams}}{{#isContainer}}{{{dataType}}}<{{baseType}}> {{paramName}}{{/isContainer}}{{^isContainer}}{{{dataType}}} {{paramName}}{{/isContainer}}{{#hasMore}}, {{/hasMore}}{{/allParams}}{{#hasParams}}, {{/hasParams}}
{{#returnType}}void(* handler)({{#returnContainer}}{{#isListContainer}}{{returnType}}<{{returnBaseType}}>{{/isListContainer}}{{#isMapContainer}}{{returnType}}{{/isMapContainer}}{{/returnContainer}}{{^returnContainer}}{{returnType}}{{/returnContainer}}, Error, void* ){{/returnType}}
{{^returnType}}void(* handler)(Error, void* ) {{/returnType}}, void* userData);
+
+
{{/operation}}
static std::string getBasePath()
@@ -51,6 +62,7 @@ bool {{nickname}}Async(char * accessToken,
return "{{{basePath}}}";
}
};
+/** @}*/
{{/operations}}
}
diff --git a/modules/swagger-codegen/src/main/resources/tizen/doc-readme.mustache b/modules/swagger-codegen/src/main/resources/tizen/doc-readme.mustache
index 3c82e6a7a7b..3a94698818d 100644
--- a/modules/swagger-codegen/src/main/resources/tizen/doc-readme.mustache
+++ b/modules/swagger-codegen/src/main/resources/tizen/doc-readme.mustache
@@ -1,4 +1,4 @@
-# Documentation for {{#swagger}}{{#info}}{{title}} {{version}} Tizen SDK{{/info}}{{/swagger}}
+# Documentation for {{#swagger}}{{#info}}{{title}} {{version}} Tizen Client SDK{{/info}}{{/swagger}}
## How do I get the doc files?
First generate source code by running `swagger-codegen`
@@ -16,7 +16,7 @@ This is the structure of the doc folder:
├── Doxyfile \\Doxygen config files
├── generateDocumentation.sh \\Script to run to generate documentation
├── README.md \\This file
-├── SDK \\Documentation for all classes in Tizen Client SDK for Artik Cloud. See ./html/index.html
+├── SDK \\Documentation for all classes in {{#swagger}}{{#info}}{{title}} Tizen Client SDK{{/info}}{{/swagger}}. See ./html/index.html
│ └── html
```
@@ -36,13 +36,19 @@ Doxygen is the de facto standard tool for generating/extracting documentation fr
Check out [Doxygen](https://www.doxygen.org/) for additional information about the Doxygen project.
## I Don't want to run Doxygen. What are the API files for accessing the REST endpoints?
+All URIs are relative to {{{scheme}}}://{{{host}}}{{{basePath}}}
{{#apiInfo}}{{#apis}}{{#operations}}
-* [{{classname}}](../src/{{classname}}.cpp)
+### {{classname}}
+Method | HTTP request | Description
+------------- | ------------- | -------------
{{#operation}}
- * *{{nickname}}Sync* / *{{nickname}}Async* - {{{summary}}}.
- {{/operation}}
+*{{nickname}}Sync* | *{{httpMethod}}* {{{path}}} | {{{summary}}}.
+*{{nickname}}ASync* | *{{httpMethod}}* {{{path}}} | {{{summary}}}.
+{{/operation}}
{{/operations}}{{/apis}}{{/apiInfo}}
## What are the Model files for the data structures/objects?
-{{#models}}{{#model}}
-* [{{classname}}](../src/{{classname}}.cpp) - {{{description}}}{{/model}}{{/models}}
+Class | Description
+------------- | -------------
+{{#models}}{{#model}} *{{classname}}* | {{{description}}}
+{{/model}}{{/models}}
diff --git a/modules/swagger-codegen/src/main/resources/tizen/helpers-body.mustache b/modules/swagger-codegen/src/main/resources/tizen/helpers-body.mustache
index 457c9b06612..157842642a5 100644
--- a/modules/swagger-codegen/src/main/resources/tizen/helpers-body.mustache
+++ b/modules/swagger-codegen/src/main/resources/tizen/helpers-body.mustache
@@ -13,7 +13,7 @@ using namespace Tizen::{{prefix}};
void helper_func(JsonObject *object, const gchar* member_name, JsonNode *member_node,gpointer user_data)
{
- const gchar* member_string;
+ gchar* member_string;
if (!JSON_NODE_HOLDS_VALUE(member_node)) {
if (JSON_NODE_HOLDS_OBJECT(member_node)) {
JsonNode* tempnode = json_node_alloc();
@@ -27,10 +27,42 @@ void helper_func(JsonObject *object, const gchar* member_name, JsonNode *member_
json_node_free(tempnode);
}
} else {
- member_string = json_node_get_string(member_node);
+ member_string = (char*) json_node_get_string(member_node);
+ if (member_string == NULL) {
+ char * valueType = (char*) json_node_type_name(member_node);
+ if(strcmp(valueType,"Boolean") == 0){
+ gboolean member_boolean = json_node_get_boolean(member_node);
+ if (member_boolean == 0) {
+ member_string = new char[std::strlen("false") + 1];
+ strcpy(member_string, "false");
+ } else {
+ member_string = new char[std::strlen("true") + 1];
+ strcpy(member_string, "true");
+ }
+ }
+ else if(strcmp(valueType,"Integer") == 0){
+ long long int member_int = json_node_get_int(member_node);
+ ostringstream ss;
+ ss << member_int;
+ string temp_member = ss.str();
+ const char * temp_char = temp_member.c_str();
+ member_string = new char[strlen(temp_char) + 1];
+ strcpy(member_string, temp_char);
+ }
+ else{
+ double member_double = json_node_get_double(member_node);
+ ostringstream ss;
+ ss << member_double;
+ string temp_member = ss.str();
+ const char * temp_char = temp_member.c_str();
+ member_string = new char[strlen(temp_char) + 1];
+ strcpy(member_string, temp_char);
+ }
+ }
}
map* new_map = static_cast