Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -20,5 +20,6 @@ data class CodeGeneratorConfig (
val writeGitHash: Boolean = false,
val outputFolder: Path = Paths.get("build/gensrc"),
val customTypeMapping: Map<String, VrapType> = mapOf(),
val inlineExamples: Boolean = false
val inlineExamples: Boolean = false,
val jacksonV3: Boolean = false
)
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import io.vrap.codegen.languages.extensions.namedSubTypes
import io.vrap.codegen.languages.extensions.toComment
import io.vrap.codegen.languages.java.base.JavaSubTemplates
import io.vrap.codegen.languages.java.base.extensions.*
import io.vrap.rmf.codegen.CodeGeneratorConfig
import io.vrap.rmf.codegen.firstLowerCase
import io.vrap.rmf.codegen.firstUpperCase
import io.vrap.rmf.codegen.io.TemplateFile
Expand All @@ -20,8 +21,9 @@ import io.vrap.rmf.raml.model.types.util.TypesSwitch
import org.eclipse.emf.ecore.EObject
import javax.lang.model.SourceVersion

class JavaModelInterfaceRenderer constructor(override val vrapTypeProvider: VrapTypeProvider) : JavaObjectTypeExtensions, JavaEObjectTypeExtensions, ObjectTypeRenderer {
class JavaModelInterfaceRenderer constructor(override val vrapTypeProvider: VrapTypeProvider, val generatorConfig: CodeGeneratorConfig) : JavaObjectTypeExtensions, JavaEObjectTypeExtensions, ObjectTypeRenderer {

val jacksonVersion = if (generatorConfig.jacksonV3) "tools" else "com.fasterxml"
override fun render(type: ObjectType): TemplateFile {
val vrapType = vrapTypeProvider.doSwitch(type).toJavaVType() as VrapObjectType

Expand All @@ -42,15 +44,14 @@ class JavaModelInterfaceRenderer constructor(override val vrapTypeProvider: Vrap
}
)
.filterNotNull()

val content= """
|package ${vrapType.`package`};
|
|${type.imports()}
|${type.subclassImport()}
|
|import com.fasterxml.jackson.annotation.*;
|import com.fasterxml.jackson.databind.annotation.*;
|import ${jacksonVersion}.jackson.databind.annotation.*;
|import io.vrap.rmf.base.client.utils.Generated;
|import io.vrap.rmf.base.client.Accessor;
|import jakarta.validation.Valid;
Expand Down Expand Up @@ -118,8 +119,8 @@ class JavaModelInterfaceRenderer constructor(override val vrapTypeProvider: Vrap
| * gives a TypeReference for usage with Jackson DataBind
| * @return TypeReference
| */
|public static com.fasterxml.jackson.core.type.TypeReference<${vrapType.simpleClassName}> typeReference() {
| return new com.fasterxml.jackson.core.type.TypeReference<${vrapType.simpleClassName}>() {
|public static ${jacksonVersion}.jackson.core.type.TypeReference<${vrapType.simpleClassName}> typeReference() {
| return new ${jacksonVersion}.jackson.core.type.TypeReference<${vrapType.simpleClassName}>() {
| @Override
| public String toString() {
| return "TypeReference<${vrapType.simpleClassName}>";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,8 @@ object JavaClientModule: Module {
JavaRequestBuilderResourceRenderer(generatorModule.vrapTypeProvider())
), generatorModule.allResources().filterNot { it.deprecated() }),
MethodGenerator(setOf(
JavaHttpRequestRenderer(generatorModule.vrapTypeProvider()),
JavaStringHttpRequestRenderer(generatorModule.vrapTypeProvider())
JavaHttpRequestRenderer(generatorModule.vrapTypeProvider(), generatorModule.generatorConfig),
JavaStringHttpRequestRenderer(generatorModule.vrapTypeProvider(), generatorModule.generatorConfig)
), generatorModule.allResourceMethods().filterNot { it.deprecated() }),
TraitGenerator(setOf(
JavaTraitRenderer(generatorModule.vrapTypeProvider())
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,22 +19,22 @@ object JavaCompleteModule: Module {

override fun configure(generatorModule: RamlGeneratorModule) = setOf<CodeGenerator> (
ObjectTypeGenerator(setOf(
JavaModelInterfaceRenderer(generatorModule.vrapTypeProvider())
JavaModelInterfaceRenderer(generatorModule.vrapTypeProvider(), generatorModule.generatorConfig)
), generatorModule.allObjectTypes()),
StringTypeGenerator(setOf(
JavaStringTypeRenderer(generatorModule.vrapTypeProvider())
), generatorModule.allEnumStringTypes()),
FileGenerator(setOf(
JavaModelClassFileProducer(generatorModule.vrapTypeProvider(), generatorModule.allObjectTypes()),
JavaModelClassFileProducer(generatorModule.vrapTypeProvider(), generatorModule.allObjectTypes(), generatorModule.generatorConfig),
JavaModelDraftBuilderFileProducer(generatorModule.vrapTypeProvider(), generatorModule.allObjectTypes()),
JavaApiRootFileProducer(generatorModule.provideClientPackageName(), generatorModule.provideRamlModel())
)),
ResourceGenerator(setOf(
JavaRequestBuilderResourceRenderer(generatorModule.vrapTypeProvider())
), generatorModule.allResources().filterNot { it.deprecated() }),
MethodGenerator(setOf(
JavaHttpRequestRenderer(generatorModule.vrapTypeProvider()),
JavaStringHttpRequestRenderer(generatorModule.vrapTypeProvider())
JavaHttpRequestRenderer(generatorModule.vrapTypeProvider(), generatorModule.generatorConfig),
JavaStringHttpRequestRenderer(generatorModule.vrapTypeProvider(), generatorModule.generatorConfig)
), generatorModule.allResourceMethods().filterNot { it.deprecated() }),
TraitGenerator(setOf(
JavaTraitRenderer(generatorModule.vrapTypeProvider())
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,13 +12,13 @@ object JavaInterfaceModelModule : Module {

override fun configure(generatorModule: RamlGeneratorModule) = setOf<CodeGenerator> (
ObjectTypeGenerator(setOf(
JavaModelInterfaceRenderer(generatorModule.vrapTypeProvider())
JavaModelInterfaceRenderer(generatorModule.vrapTypeProvider(), generatorModule.generatorConfig)
), generatorModule.allObjectTypes()),
StringTypeGenerator(setOf(
JavaStringTypeRenderer(generatorModule.vrapTypeProvider())
), generatorModule.allEnumStringTypes()),
FileGenerator(setOf(
JavaModelClassFileProducer(generatorModule.vrapTypeProvider(), generatorModule.allObjectTypes()),
JavaModelClassFileProducer(generatorModule.vrapTypeProvider(), generatorModule.allObjectTypes(), generatorModule.generatorConfig),
JavaModelDraftBuilderFileProducer(generatorModule.vrapTypeProvider(), generatorModule.allObjectTypes())
))
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,13 +14,13 @@ object JavaModelModule: Module {

override fun configure(generatorModule: RamlGeneratorModule) = setOf<CodeGenerator> (
ObjectTypeGenerator(setOf(
JavaModelInterfaceRenderer(generatorModule.vrapTypeProvider())
JavaModelInterfaceRenderer(generatorModule.vrapTypeProvider(), generatorModule.generatorConfig)
), generatorModule.allObjectTypes()),
StringTypeGenerator(setOf(
JavaStringTypeRenderer(generatorModule.vrapTypeProvider())
), generatorModule.allEnumStringTypes()),
FileGenerator(setOf(
JavaModelClassFileProducer(generatorModule.vrapTypeProvider(), generatorModule.allObjectTypes()),
JavaModelClassFileProducer(generatorModule.vrapTypeProvider(), generatorModule.allObjectTypes(), generatorModule.generatorConfig),
JavaModelDraftBuilderFileProducer(generatorModule.vrapTypeProvider(), generatorModule.allObjectTypes()),
))
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import io.vrap.codegen.languages.extensions.isPatternProperty
import io.vrap.codegen.languages.extensions.toComment
import io.vrap.codegen.languages.java.base.JavaSubTemplates
import io.vrap.codegen.languages.java.base.extensions.*
import io.vrap.rmf.codegen.CodeGeneratorConfig
import io.vrap.rmf.codegen.di.AllObjectTypes
import io.vrap.rmf.codegen.io.TemplateFile
import io.vrap.rmf.codegen.rendering.FileProducer
Expand All @@ -18,8 +19,10 @@ import io.vrap.rmf.raml.model.types.Annotation
import javax.lang.model.SourceVersion


class JavaModelClassFileProducer constructor(override val vrapTypeProvider: VrapTypeProvider, @AllObjectTypes private val allObjectTypes: List<ObjectType>) : JavaObjectTypeExtensions, JavaEObjectTypeExtensions, FileProducer {
class JavaModelClassFileProducer constructor(override val vrapTypeProvider: VrapTypeProvider, @AllObjectTypes private val allObjectTypes: List<ObjectType>, val generatorConfig: CodeGeneratorConfig) : JavaObjectTypeExtensions, JavaEObjectTypeExtensions, FileProducer {

val jacksonVersion = if (generatorConfig.jacksonV3) "tools" else "com.fasterxml"
val jacksonExcVersion = if (generatorConfig.jacksonV3) "exc.JacksonException" else "JsonProcessingException"
override fun produceFiles(): List<TemplateFile> {
return allObjectTypes.filter{!it.deprecated()}.map { render(it) }
}
Expand Down Expand Up @@ -50,8 +53,8 @@ class JavaModelClassFileProducer constructor(override val vrapTypeProvider: Vrap
|import java.util.*;
|import java.time.*;
|
|import com.fasterxml.jackson.core.JsonProcessingException;
|import com.fasterxml.jackson.databind.annotation.*;
|import ${jacksonVersion}.jackson.core.${jacksonExcVersion};
|import ${jacksonVersion}.jackson.databind.annotation.*;
|import com.fasterxml.jackson.annotation.JsonAnySetter;
|import com.fasterxml.jackson.annotation.JsonCreator;
|import com.fasterxml.jackson.annotation.JsonIgnore;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import com.google.common.net.MediaType
import io.vrap.codegen.languages.extensions.*
import io.vrap.codegen.languages.java.base.JavaSubTemplates
import io.vrap.codegen.languages.java.base.extensions.*
import io.vrap.rmf.codegen.CodeGeneratorConfig
import io.vrap.rmf.codegen.firstUpperCase
import io.vrap.rmf.codegen.firstLowerCase
import io.vrap.rmf.codegen.io.TemplateFile
Expand All @@ -27,8 +28,9 @@ import org.eclipse.emf.ecore.EObject
*/
const val PLACEHOLDER_PARAM_ANNOTATION = "placeholderParam"

class JavaHttpRequestRenderer constructor(override val vrapTypeProvider: VrapTypeProvider) : MethodRenderer, JavaObjectTypeExtensions, JavaEObjectTypeExtensions {
class JavaHttpRequestRenderer constructor(override val vrapTypeProvider: VrapTypeProvider, val generatorConfig: CodeGeneratorConfig) : MethodRenderer, JavaObjectTypeExtensions, JavaEObjectTypeExtensions {

val jacksonVersion = if (generatorConfig.jacksonV3) "tools" else "com.fasterxml"
override fun render(type: Method): TemplateFile {
val vrapType = vrapTypeProvider.doSwitch(type as EObject) as VrapObjectType

Expand Down Expand Up @@ -78,7 +80,7 @@ class JavaHttpRequestRenderer constructor(override val vrapTypeProvider: VrapTyp
|import java.util.stream.Collectors;
|import java.util.concurrent.CompletableFuture;
|import io.vrap.rmf.base.client.utils.Generated;
|import com.fasterxml.jackson.core.type.TypeReference;
|import ${jacksonVersion}.jackson.core.type.TypeReference;
|
|import javax.annotation.Nullable;
|
Expand All @@ -99,11 +101,11 @@ class JavaHttpRequestRenderer constructor(override val vrapTypeProvider: VrapTyp
| */
|<${JavaSubTemplates.generatedAnnotation}>${if (type.markDeprecated() ) """
|@Deprecated""" else ""}
|public class ${type.toRequestName()} extends $apiMethodClass\<${type.toRequestName()}, ${type.javaReturnType(vrapTypeProvider)}$bodyTypeClass\>${if (implements.isNotEmpty()) " implements ${implements.joinToString(", ")}" else ""} {
|public class ${type.toRequestName()} extends $apiMethodClass\<${type.toRequestName()}, ${type.javaReturnType(vrapTypeProvider, generatorConfig.jacksonV3)}$bodyTypeClass\>${if (implements.isNotEmpty()) " implements ${implements.joinToString(", ")}" else ""} {
|
| @Override
| public TypeReference\<${type.javaReturnType(vrapTypeProvider)}\> resultType() {
| return new TypeReference\<${type.javaReturnType(vrapTypeProvider)}\>() {
| public TypeReference\<${type.javaReturnType(vrapTypeProvider, generatorConfig.jacksonV3)}\> resultType() {
| return new TypeReference\<${type.javaReturnType(vrapTypeProvider, generatorConfig.jacksonV3)}\>() {
| };
| }
|
Expand Down Expand Up @@ -154,7 +156,7 @@ class JavaHttpRequestRenderer constructor(override val vrapTypeProvider: VrapTyp
return """
|\<div class=code-example\>
|\<pre\>\<code class='java'\>{@code
| CompletableFuture\<ApiHttpResponse\<${this.javaReturnType(vrapTypeProvider)}\>\> result = apiRoot
| CompletableFuture\<ApiHttpResponse\<${this.javaReturnType(vrapTypeProvider, generatorConfig.jacksonV3)}\>\> result = apiRoot
| <${builderComment(resource, this)}>
|}\</code\>\</pre\>
|\</div\>
Expand Down Expand Up @@ -384,17 +386,17 @@ class JavaHttpRequestRenderer constructor(override val vrapTypeProvider: VrapTyp
private fun Method.executeBlockingMethod() : String {
return """
|@Override
|public ApiHttpResponse\<${this.javaReturnType(vrapTypeProvider)}\> executeBlocking(final ApiHttpClient client, final Duration timeout) {
| return executeBlocking(client, timeout, ${this.javaReturnType(vrapTypeProvider)}.class);
|public ApiHttpResponse\<${this.javaReturnType(vrapTypeProvider, generatorConfig.jacksonV3)}\> executeBlocking(final ApiHttpClient client, final Duration timeout) {
| return executeBlocking(client, timeout, ${this.javaReturnType(vrapTypeProvider, generatorConfig.jacksonV3)}.class);
|}
""".trimMargin()
}

private fun Method.executeMethod() : String {
return """
|@Override
|public CompletableFuture\<ApiHttpResponse\<${this.javaReturnType(vrapTypeProvider)}\>\> execute(final ApiHttpClient client) {
| return execute(client, ${this.javaReturnType(vrapTypeProvider)}.class);
|public CompletableFuture\<ApiHttpResponse\<${this.javaReturnType(vrapTypeProvider, generatorConfig.jacksonV3)}\>\> execute(final ApiHttpClient client) {
| return execute(client, ${this.javaReturnType(vrapTypeProvider, generatorConfig.jacksonV3)}.class);
|}
""".trimMargin()
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import com.google.common.net.MediaType
import io.vrap.codegen.languages.extensions.*
import io.vrap.codegen.languages.java.base.JavaSubTemplates
import io.vrap.codegen.languages.java.base.extensions.*
import io.vrap.rmf.codegen.CodeGeneratorConfig
import io.vrap.rmf.codegen.firstUpperCase
import io.vrap.rmf.codegen.firstLowerCase
import io.vrap.rmf.codegen.io.TemplateFile
Expand All @@ -26,8 +27,9 @@ import org.eclipse.emf.ecore.EObject
* Query parameters with this annotation should be ignored by JVM sdk.
*/

class JavaStringHttpRequestRenderer constructor(override val vrapTypeProvider: VrapTypeProvider) : MethodRenderer, JavaObjectTypeExtensions, JavaEObjectTypeExtensions {
class JavaStringHttpRequestRenderer constructor(override val vrapTypeProvider: VrapTypeProvider, val generatorConfig: CodeGeneratorConfig) : MethodRenderer, JavaObjectTypeExtensions, JavaEObjectTypeExtensions {

val jacksonVersion = if (generatorConfig.jacksonV3) "tools" else "com.fasterxml"
override fun render(type: Method): TemplateFile {
val vrapType = vrapTypeProvider.doSwitch(type as EObject) as VrapObjectType

Expand Down Expand Up @@ -73,7 +75,7 @@ class JavaStringHttpRequestRenderer constructor(override val vrapTypeProvider: V
|import java.util.stream.Collectors;
|import java.util.concurrent.CompletableFuture;
|import io.vrap.rmf.base.client.utils.Generated;
|import com.fasterxml.jackson.core.type.TypeReference;
|import ${jacksonVersion}.jackson.core.type.TypeReference;
|
|import javax.annotation.Nullable;
|
Expand All @@ -94,11 +96,11 @@ class JavaStringHttpRequestRenderer constructor(override val vrapTypeProvider: V
| */
|<${JavaSubTemplates.generatedAnnotation}>${if (type.markDeprecated() ) """
|@Deprecated""" else ""}
|public class ${type.toStringRequestName()} extends StringBodyApiMethod\<${type.toStringRequestName()}, ${type.javaReturnType(vrapTypeProvider)}\>${if (implements.isNotEmpty()) " implements ${implements.joinToString(", ")}" else ""} {
|public class ${type.toStringRequestName()} extends StringBodyApiMethod\<${type.toStringRequestName()}, ${type.javaReturnType(vrapTypeProvider, generatorConfig.jacksonV3)}\>${if (implements.isNotEmpty()) " implements ${implements.joinToString(", ")}" else ""} {
|
| @Override
| public TypeReference\<${type.javaReturnType(vrapTypeProvider)}\> resultType() {
| return new TypeReference\<${type.javaReturnType(vrapTypeProvider)}\>() {
| public TypeReference\<${type.javaReturnType(vrapTypeProvider, generatorConfig.jacksonV3)}\> resultType() {
| return new TypeReference\<${type.javaReturnType(vrapTypeProvider, generatorConfig.jacksonV3)}\>() {
| };
| }
|
Expand Down Expand Up @@ -147,7 +149,7 @@ class JavaStringHttpRequestRenderer constructor(override val vrapTypeProvider: V
return """
|\<div class=code-example\>
|\<pre\>\<code class='java'\>{@code
| CompletableFuture\<ApiHttpResponse\<${this.javaReturnType(vrapTypeProvider)}\>\> result = apiRoot
| CompletableFuture\<ApiHttpResponse\<${this.javaReturnType(vrapTypeProvider, generatorConfig.jacksonV3)}\>\> result = apiRoot
| <${builderComment(resource, this)}>
|}\</code\>\</pre\>
|\</div\>
Expand Down Expand Up @@ -293,17 +295,17 @@ class JavaStringHttpRequestRenderer constructor(override val vrapTypeProvider: V
private fun Method.executeBlockingMethod() : String {
return """
|@Override
|public ApiHttpResponse\<${this.javaReturnType(vrapTypeProvider)}\> executeBlocking(final ApiHttpClient client, final Duration timeout) {
| return executeBlocking(client, timeout, ${this.javaReturnType(vrapTypeProvider)}.class);
|public ApiHttpResponse\<${this.javaReturnType(vrapTypeProvider, generatorConfig.jacksonV3)}\> executeBlocking(final ApiHttpClient client, final Duration timeout) {
| return executeBlocking(client, timeout, ${this.javaReturnType(vrapTypeProvider, generatorConfig.jacksonV3)}.class);
|}
""".trimMargin()
}

private fun Method.executeMethod() : String {
return """
|@Override
|public CompletableFuture\<ApiHttpResponse\<${this.javaReturnType(vrapTypeProvider)}\>\> execute(final ApiHttpClient client) {
| return execute(client, ${this.javaReturnType(vrapTypeProvider)}.class);
|public CompletableFuture\<ApiHttpResponse\<${this.javaReturnType(vrapTypeProvider, generatorConfig.jacksonV3)}\>\> execute(final ApiHttpClient client) {
| return execute(client, ${this.javaReturnType(vrapTypeProvider, generatorConfig.jacksonV3)}.class);
|}
""".trimMargin()
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package io.vrap.codegen.languages.java.base

import io.vrap.rmf.codegen.CodeGeneratorConfig
import io.vrap.rmf.codegen.types.VrapTypeProvider

interface ExtensionsBase {
Expand Down
Loading
Loading