Skip to content

Commit

Permalink
Address #1586 (comment)
Browse files Browse the repository at this point in the history
  • Loading branch information
stefanobaghino-da committed Jun 14, 2019
1 parent c65b649 commit 4249373
Showing 1 changed file with 30 additions and 48 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -120,7 +120,7 @@ private[inner] object TemplateClass extends StrictLogging {
contractClassName,
templateClassName,
contractIdClassName,
contractKeyClassName.isDefined))
contractKeyClassName))
.addMethod(
generateFromCreatedEvent(
contractClassName,
Expand All @@ -137,7 +137,7 @@ private[inner] object TemplateClass extends StrictLogging {
idClassName: ClassName,
maybeContractKeyClassName: Option[TypeName]): MethodSpec = {

val params = Iterable(
val methodParameters = Iterable(
ParameterSpec.builder(classOf[String], "contractId").build(),
ParameterSpec.builder(classOf[javaapi.data.Record], "record$").build(),
ParameterSpec.builder(optionalString, agreementFieldName).build()
Expand All @@ -150,39 +150,28 @@ private[inner] object TemplateClass extends StrictLogging {
.methodBuilder("fromIdAndRecord")
.addModifiers(Modifier.PUBLIC, Modifier.STATIC)
.returns(className)
.addParameters(params.asJava)
.addParameters(methodParameters.asJava)
.addStatement("$T $L = new $T(contractId)", idClassName, idFieldName, idClassName)
.addStatement(
"$T $L = $T.fromValue(record$$)",
templateClassName,
dataFieldName,
templateClassName)

if (maybeContractKeyClassName.isDefined) {
spec.addStatement(
"return new $T($L, $L, $L, $L)",
className,
idFieldName,
dataFieldName,
agreementFieldName,
contractKeyFieldName)
} else {
spec.addStatement(
"return new $T($L, $L, $L)",
className,
idFieldName,
dataFieldName,
agreementFieldName)
}

spec.build()
val callParameterNames = Vector(idFieldName, dataFieldName, agreementFieldName) ++ maybeContractKeyClassName
.map(_ => contractKeyFieldName)
.toList
val callParameters = CodeBlock.join(callParameterNames.map(CodeBlock.of(_)).asJava, ", ")
spec.addStatement("return new $T($L)", className, callParameters).build()
}

private val emptyOptional = CodeBlock.of("$T.empty()", classOf[Optional[_]])

private[inner] def generateFromIdAndRecordDeprecated(
className: ClassName,
templateClassName: ClassName,
idClassName: ClassName,
hasContractKey: Boolean): MethodSpec = {
maybeContractKeyClassName: Option[TypeName]): MethodSpec = {
val spec =
MethodSpec
.methodBuilder("fromIdAndRecord")
Expand All @@ -198,47 +187,40 @@ private[inner] object TemplateClass extends StrictLogging {
dataFieldName,
templateClassName)

if (hasContractKey) {
spec.addStatement(
"return new $T($L, $L, $T.empty(), $T.empty())",
className,
idFieldName,
dataFieldName,
classOf[Optional[_]],
classOf[Optional[_]])
} else {
spec.addStatement(
"return new $T($L, $L, $T.empty())",
className,
idFieldName,
dataFieldName,
classOf[Optional[_]])
}
val callParameters = Vector(
CodeBlock.of(idFieldName),
CodeBlock.of(dataFieldName),
emptyOptional) ++ maybeContractKeyClassName.map(_ => emptyOptional).toList

spec.build()
spec
.addStatement("return new $T($L)", className, CodeBlock.join(callParameters.asJava, ", "))
.build()
}

private val getContractId = CodeBlock.of("event.getContractId()")
private val getArguments = CodeBlock.of("event.getArguments()")
private val getAgreementText = CodeBlock.of("event.getAgreementText()")
private def getContractKey(t: TypeName) =
CodeBlock.of("event.getContractKey().map($T::fromValue)", t)

private[inner] def generateFromCreatedEvent(
className: ClassName,
templateClassName: ClassName,
idClassName: ClassName,
maybeContractKeyClassName: Option[TypeName]) = {

val spec =
MethodSpec
.methodBuilder("fromCreatedEvent")
.addModifiers(Modifier.PUBLIC, Modifier.STATIC)
.returns(className)
.addParameter(classOf[CreatedEvent], "event")

maybeContractKeyClassName.fold(spec.addStatement(
"return fromIdAndRecord(event.getContractId(), event.getArguments(), event.getAgreementText())")) {
name =>
spec.addStatement(
"return fromIdAndRecord(event.getContractId(), event.getArguments(), event.getAgreementText(), event.getContractKey().map(k -> $T.fromValue(k)))",
name
)
}
spec.build()
val params = Vector(getContractId, getArguments, getAgreementText) ++ maybeContractKeyClassName
.map(getContractKey)
.toList

spec.addStatement("return fromIdAndRecord($L)", CodeBlock.join(params.asJava, ", ")).build()
}

private def generateCreateMethod(name: ClassName): MethodSpec =
Expand Down

0 comments on commit 4249373

Please sign in to comment.