Skip to content

Commit 78a4da2

Browse files
committed
Implemented and used FtgoJSONSchema2PojoPlugin, which supports multiple sources
1 parent 31fd484 commit 78a4da2

File tree

9 files changed

+177
-26
lines changed

9 files changed

+177
-26
lines changed

Diff for: buildSrc/build.gradle

+2
Original file line numberDiff line numberDiff line change
@@ -8,4 +8,6 @@ dependencies {
88
compile 'mysql:mysql-connector-java:5.1.39'
99
compile 'com.amazonaws:aws-java-sdk-dynamodb:1.11.158'
1010
compile 'commons-lang:commons-lang:2.6'
11+
12+
compile 'org.jsonschema2pojo:jsonschema2pojo-core:1.0.1'
1113
}
+32
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
import org.gradle.api.Plugin
2+
import org.gradle.api.Project
3+
4+
class FtgoJSONSchema2PojoPlugin implements Plugin<Project> {
5+
6+
@Override
7+
void apply(Project project) {
8+
def jsonSchemaSources = project.container(JSONSchemaSource)
9+
project.extensions.add('ftgoJsonSchema2Pojo', jsonSchemaSources)
10+
11+
jsonSchemaSources.all {
12+
def source = delegate as JSONSchemaSource
13+
14+
source.codeGen = project.task("ftgoJSONSchemaToPojoCodeGen${source.name.capitalize()}",
15+
type: FtgoJSONSchemaToPojoCodeGen,
16+
group: 'build',
17+
description: "Code generator") as FtgoJSONSchemaToPojoCodeGen
18+
19+
20+
source.codeGen.targetDirectory = new File(project.buildDir, "generated-js2p-code-${source.name}")
21+
22+
23+
project.afterEvaluate {
24+
project.sourceSets[source.sourceSet].java.srcDirs += [source.codeGen.targetDirectory]
25+
project.tasks.compileJava.dependsOn(source.codeGen)
26+
}
27+
28+
29+
}
30+
}
31+
32+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
import org.gradle.api.DefaultTask
2+
import org.gradle.api.file.FileCollection
3+
import org.gradle.api.tasks.TaskAction
4+
import org.jsonschema2pojo.GenerationConfig
5+
import org.jsonschema2pojo.Jsonschema2Pojo
6+
import org.jsonschema2pojo.DefaultGenerationConfig
7+
8+
class FtgoJSONSchemaToPojoCodeGen extends DefaultTask {
9+
10+
FileCollection source
11+
String targetPackage;
12+
boolean includeAdditionalProperties;
13+
boolean generateBuilders
14+
boolean useLongIntegers
15+
File targetDirectory
16+
17+
@TaskAction
18+
def generate() {
19+
GenerationConfig configuration = new DefaultGenerationConfig() {
20+
21+
@Override
22+
Iterator<URL> getSource() {
23+
FtgoJSONSchemaToPojoCodeGen.this.source.collect { it.toURL()}.iterator()
24+
}
25+
26+
@Override
27+
String getTargetPackage() {
28+
FtgoJSONSchemaToPojoCodeGen.this.targetPackage
29+
}
30+
31+
@Override
32+
boolean isIncludeAdditionalProperties() {
33+
FtgoJSONSchemaToPojoCodeGen.this.includeAdditionalProperties
34+
}
35+
36+
@Override
37+
boolean isGenerateBuilders() {
38+
FtgoJSONSchemaToPojoCodeGen.this.generateBuilders
39+
}
40+
41+
@Override
42+
boolean isUseLongIntegers() {
43+
FtgoJSONSchemaToPojoCodeGen.this.useLongIntegers
44+
}
45+
46+
@Override
47+
File getTargetDirectory() {
48+
return FtgoJSONSchemaToPojoCodeGen.this.targetDirectory
49+
}
50+
}
51+
52+
53+
Jsonschema2Pojo.generate(configuration)
54+
}
55+
56+
57+
}

Diff for: buildSrc/src/main/groovy/JSONSchemaSource.groovy

+44
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
import groovy.transform.ToString
2+
import org.gradle.api.file.FileCollection
3+
4+
@ToString(includes = 'name', includePackage = false)
5+
class JSONSchemaSource {
6+
7+
final String name
8+
9+
def JSONSchemaSource(String name) {
10+
this.name = name
11+
}
12+
13+
FtgoJSONSchemaToPojoCodeGen codeGen
14+
15+
String sourceSet = "main"
16+
17+
void setSource(FileCollection source) {
18+
this.codeGen.source = source
19+
}
20+
21+
void setTargetPackage(String targetPackage) {
22+
this.codeGen.targetPackage = targetPackage
23+
}
24+
25+
void setIncludeAdditionalProperties(boolean includeAdditionalProperties) {
26+
this.codeGen.includeAdditionalProperties = includeAdditionalProperties
27+
}
28+
29+
void setGenerateBuilders(boolean generateBuilders) {
30+
this.codeGen.generateBuilders = generateBuilders
31+
}
32+
33+
void setUseLongIntegers(boolean useLongIntegers) {
34+
this.codeGen.useLongIntegers = useLongIntegers
35+
}
36+
37+
File getTargetDirectory() {
38+
return this.codeGen.targetDirectory
39+
}
40+
41+
void setSourceSet(String sourceSet) {
42+
this.sourceSet = sourceSet
43+
}
44+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
{
2+
"type": "object",
3+
"properties": {
4+
"consumerId": {
5+
"type": "integer",
6+
"format": "int64"
7+
},
8+
"orderId": {
9+
"type": "integer",
10+
"format": "int64"
11+
},
12+
"orderTotal": {
13+
"type": "string"
14+
}
15+
},
16+
"required": [
17+
"consumerId",
18+
"orderId",
19+
"orderTotal"
20+
],
21+
"javaInterfaces": ["io.eventuate.tram.commands.common.Command"]
22+
}

Diff for: ftgo-accounting-service-api/src/main/java/net/chrisrichardson/ftgo/accountservice/api/AuthorizeCommand.java renamed to ftgo-accounting-service/src/main/java/net/chrisrichardson/ftgo/accountservice/api/AuthorizeCommand.java

-9
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ public class AuthorizeCommand implements Command {
77
private long consumerId;
88
private Long orderId;
99
private Money orderTotal;
10-
private Money amount;
1110

1211
private AuthorizeCommand() {
1312
}
@@ -18,14 +17,6 @@ public AuthorizeCommand(long consumerId, Long orderId, Money orderTotal) {
1817
this.orderTotal = orderTotal;
1918
}
2019

21-
public Money getAmount() {
22-
return amount;
23-
}
24-
25-
public void setAmount(Money amount) {
26-
this.amount = amount;
27-
}
28-
2920
public long getConsumerId() {
3021
return consumerId;
3122
}

Diff for: ftgo-order-service/build.gradle

+17-14
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ apply plugin: 'com.google.protobuf'
3333
apply plugin: IntegrationTestsPlugin
3434
apply plugin: ComponentTestsPlugin
3535

36-
apply plugin: 'jsonschema2pojo'
36+
apply plugin: FtgoJSONSchema2PojoPlugin
3737

3838

3939
dependencyManagement {
@@ -179,19 +179,22 @@ dependencies {
179179

180180
}
181181

182-
jsonSchema2Pojo {
183-
source = files("../ftgo-consumer-service-api/src/main/resources/ValidateOrderByConsumer.json")
184-
targetPackage = "net.chrisrichardson.ftgo.consumerservice.api"
185-
includeAdditionalProperties = false
186-
generateBuilders = true
187-
useLongIntegers = true
182+
ftgoJsonSchema2Pojo {
183+
184+
ftgoConsumerService {
185+
source = files("../ftgo-consumer-service-api/src/main/resources/ValidateOrderByConsumer.json")
186+
targetPackage = "net.chrisrichardson.ftgo.consumerservice.api"
187+
includeAdditionalProperties = false
188+
generateBuilders = true
189+
useLongIntegers = true
190+
}
191+
ftgoAccountingService {
192+
source = files("../ftgo-accounting-service-api/src/main/resources/messages")
193+
targetPackage = "net.chrisrichardson.ftgo.accountservice.api"
194+
includeAdditionalProperties = false
195+
generateBuilders = true
196+
useLongIntegers = true
197+
}
188198

189199
}
190200

191-
sourceSets {
192-
test {
193-
java {
194-
srcDirs += [ jsonSchema2Pojo.targetDirectory ]
195-
}
196-
}
197-
}

Diff for: ftgo-order-service/src/main/java/net/chrisrichardson/ftgo/orderservice/sagas/createorder/CreateOrderSagaState.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@ ValidateOrderByConsumer makeValidateOrderByConsumerCommand() {
102102
}
103103

104104
AuthorizeCommand makeAuthorizeCommand() {
105-
return new AuthorizeCommand(getOrderDetails().getConsumerId(), getOrderId(), getOrderDetails().getOrderTotal());
105+
return new AuthorizeCommand().withConsumerId(getOrderDetails().getConsumerId()).withOrderId(getOrderId()).withOrderTotal(getOrderDetails().getOrderTotal().asString());
106106
}
107107

108108
ApproveOrderCommand makeApproveOrderCommand() {

Diff for: ftgo-order-service/src/test/java/net/chrisrichardson/ftgo/orderservice/sagas/createorder/CreateOrderSagaTest.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ public void shouldCreateOrder() {
5151
andGiven().
5252
successReply().
5353
expect().
54-
command(new AuthorizeCommand(CONSUMER_ID, ORDER_ID, CHICKEN_VINDALOO_ORDER_TOTAL)).
54+
command(new AuthorizeCommand().withConsumerId(CONSUMER_ID).withOrderId(ORDER_ID).withOrderTotal(CHICKEN_VINDALOO_ORDER_TOTAL.asString())).
5555
to(AccountingServiceChannels.accountingServiceChannel).
5656
andGiven().
5757
successReply().
@@ -102,7 +102,7 @@ public void shouldRejectDueToFailedAuthorizxation() {
102102
andGiven().
103103
successReply().
104104
expect().
105-
command(new AuthorizeCommand(CONSUMER_ID, ORDER_ID, CHICKEN_VINDALOO_ORDER_TOTAL)).
105+
command(new AuthorizeCommand().withConsumerId(CONSUMER_ID).withOrderId(ORDER_ID).withOrderTotal(CHICKEN_VINDALOO_ORDER_TOTAL.asString())).
106106
to(AccountingServiceChannels.accountingServiceChannel).
107107
andGiven().
108108
failureReply().

0 commit comments

Comments
 (0)