@@ -35,6 +35,7 @@ import com.regnosys.rosetta.rosetta.RosettaRule
35
35
import com.regnosys.rosetta.generator.java.types.JavaTypeUtil
36
36
import com.regnosys.rosetta.rosetta.simple.Function
37
37
import com.regnosys.rosetta.config.RosettaConfiguration
38
+ import com.google.inject.ImplementedBy
38
39
39
40
class TabulatorGenerator {
40
41
private interface TabulatorContext {
@@ -247,38 +248,35 @@ class TabulatorGenerator {
247
248
val innerTabulatorClass = context. toTabulatorJavaClass(inputType)
248
249
val innerTabulatorInstance = classScope. createUniqueIdentifier(" tabulator" )
249
250
' ' '
250
- public class «tabulatorClass» implements «Tabulator»<«inputClass»> {
251
- private final «innerTabulatorClass» «innerTabulatorInstance»;
252
-
253
- @«Inject»
254
- public «tabulatorClass»(«innerTabulatorClass» «innerTabulatorInstance») {
255
- this.«innerTabulatorInstance» = «innerTabulatorInstance»;
256
- }
257
-
258
- @Override
259
- public «List»<«Field»> getFields() {
260
- return «innerTabulatorInstance».getFields();
261
- }
262
-
263
- @Override
264
- public «List»<«FieldValue»> tabulate(«inputClass» «inputParam») {
265
- return «innerTabulatorInstance».tabulate(«inputParam»);
251
+ @«ImplementedBy»(«tabulatorClass».Impl.class)
252
+ public interface «tabulatorClass» extends «Tabulator»<«inputClass»> {
253
+ public class Impl implements «tabulatorClass» {
254
+ private final «innerTabulatorClass» «innerTabulatorInstance»;
255
+
256
+ @«Inject»
257
+ public Impl(«innerTabulatorClass» «innerTabulatorInstance») {
258
+ this.«innerTabulatorInstance» = «innerTabulatorInstance»;
259
+ }
260
+
261
+ @Override
262
+ public «List»<«FieldValue»> tabulate(«inputClass» «inputParam») {
263
+ return «innerTabulatorInstance».tabulate(«inputParam»);
264
+ }
266
265
}
267
266
}
268
267
' ' '
269
268
} else {
270
269
// There is no available tabulator for `inputType`,
271
270
// so we generate a dummy implementation.
272
271
' ' '
273
- public class «tabulatorClass» implements «Tabulator»<«inputClass»> {
274
- @Override
275
- public «List»<«Field»> getFields() {
276
- return «Arrays».asList();
277
- }
278
-
279
- @Override
280
- public «List»<«FieldValue»> tabulate(«inputClass» «inputParam») {
281
- return «Arrays».asList();
272
+ @«ImplementedBy»(«tabulatorClass».Impl.class)
273
+ public interface «tabulatorClass» extends «Tabulator»<«inputClass»> {
274
+ class Impl implements «tabulatorClass» {
275
+
276
+ @Override
277
+ public «List»<«FieldValue»> tabulate(«inputClass» «inputParam») {
278
+ return «Arrays».asList();
279
+ }
282
280
}
283
281
}
284
282
' ' '
@@ -291,41 +289,38 @@ class TabulatorGenerator {
291
289
val classScope = topScope. classScope(tabulatorClass. simpleName)
292
290
val tabulatedFields = findTabulatedFieldsAndCreateIdentifiers(inputType, context, classScope)
293
291
val nestedTabulatorInstances = findNestedTabulatorsAndCreateIdentifiers(inputType, context, classScope)
294
-
295
292
val tabulateScope = classScope. methodScope(" tabulate" )
296
293
val inputParam = tabulateScope. createUniqueIdentifier(" input" )
297
294
' ' '
298
- public class «tabulatorClass» implements «Tabulator»<«inputClass»> {
299
- «FOR attr : inputType.allNonOverridesAttributes»
300
- «IF context.isTabulated(attr)»
301
- «val fieldId = classScope.getIdentifierOrThrow(attr)»
302
- private final «Field» «fieldId»;
303
- «ENDIF»
304
- «ENDFOR»
305
- «IF !nestedTabulatorInstances.empty»
306
-
307
- «FOR tabInst : nestedTabulatorInstances»
308
- private final «context.toTabulatorJavaClass(tabInst.type)» «classScope.getIdentifierOrThrow(tabInst)»;
309
- «ENDFOR»
310
- «ENDIF»
311
-
312
- «IF !nestedTabulatorInstances.empty»@«Inject»«ENDIF»
313
- public «tabulatorClass»(«FOR tabInst : nestedTabulatorInstances SEPARATOR ", "»«context.toTabulatorJavaClass(tabInst.type)» «classScope.getIdentifierOrThrow(tabInst)»«ENDFOR») {
295
+ @«ImplementedBy»(«tabulatorClass».Impl.class)
296
+ public interface «tabulatorClass» extends «Tabulator»<«inputClass»> {
297
+ public class Impl implements «tabulatorClass» {
298
+ «FOR attr : inputType.allNonOverridesAttributes»
299
+ «IF context.isTabulated(attr)»
300
+ «val fieldId = classScope.getIdentifierOrThrow(attr)»
301
+ private final «Field» «fieldId»;
302
+ «ENDIF»
303
+ «ENDFOR»
304
+ «IF !nestedTabulatorInstances.empty»
305
+
314
306
«FOR tabInst : nestedTabulatorInstances»
315
- this.«classScope.getIdentifierOrThrow (tabInst)» = «classScope.getIdentifierOrThrow(tabInst)»;
307
+ private final «context.toTabulatorJavaClass (tabInst.type)» «classScope.getIdentifierOrThrow(tabInst)»;
316
308
«ENDFOR»
317
- «initializeFields(inputType, context, classScope)»
318
- }
319
-
320
- @Override
321
- public «List»<«Field»> getFields() {
322
- return «Arrays».asList(«FOR field : tabulatedFields SEPARATOR ", "»«classScope.getIdentifierOrThrow(field)»«ENDFOR»);
323
- }
324
-
325
- @Override
326
- public «List»<«FieldValue»> tabulate(«inputClass» «inputParam») {
327
- «computeFieldValues(inputType, inputParam, context, tabulateScope)»
328
- return «fieldValuesAsList(inputType, context, tabulateScope)»;
309
+ «ENDIF»
310
+
311
+ «IF !nestedTabulatorInstances.empty»@«Inject»«ENDIF»
312
+ public Impl(«FOR tabInst : nestedTabulatorInstances SEPARATOR ", "»«context.toTabulatorJavaClass(tabInst.type)» «classScope.getIdentifierOrThrow(tabInst)»«ENDFOR») {
313
+ «FOR tabInst : nestedTabulatorInstances»
314
+ this.«classScope.getIdentifierOrThrow(tabInst)» = «classScope.getIdentifierOrThrow(tabInst)»;
315
+ «ENDFOR»
316
+ «initializeFields(inputType, context, classScope)»
317
+ }
318
+
319
+ @Override
320
+ public «List»<«FieldValue»> tabulate(«inputClass» «inputParam») {
321
+ «computeFieldValues(inputType, inputParam, context, tabulateScope)»
322
+ return «fieldValuesAsList(inputType, context, tabulateScope)»;
323
+ }
329
324
}
330
325
}
331
326
' ' '
@@ -352,11 +347,7 @@ class TabulatorGenerator {
352
347
«attr.card.isMany»,
353
348
«rule.map[model].map[name].map[new ModelSymbolId(DottedPath.splitOnDots(it), rule.get.name).toModelSymbolCode].toOptionalCode»,
354
349
«rule.map[identifier].map[' " ' + it + '" ' ].toOptionalCode»,
355
- «IF attrType instanceof Data»
356
- «scope.getIdentifierOrThrow(attrType.toNestedTabulatorInstance)».getFields()
357
- «ELSE»
358
- «Arrays».asList()
359
- «ENDIF»
350
+ «Arrays».asList()
360
351
);
361
352
«ENDIF»
362
353
«ENDFOR»
@@ -383,6 +374,7 @@ class TabulatorGenerator {
383
374
«ENDFOR»
384
375
' ' '
385
376
}
377
+
386
378
private def StringConcatenationClient fieldValue (Attribute attr , GeneratedIdentifier inputParam , JavaScope scope ) {
387
379
val rType = typeProvider. getRTypeOfSymbol(attr)
388
380
@@ -404,28 +396,31 @@ class TabulatorGenerator {
404
396
val attrType = rType. data
405
397
val nestedTabulator = scope. getIdentifierOrThrow(attrType. toNestedTabulatorInstance)
406
398
' ' '
407
- «Optional»<«resultType»> «resultId» = «Optional».ofNullable(«inputParam».get«attr.name.toFirstUpper»())
399
+ «FieldValue» «resultId» = «Optional».ofNullable(«inputParam».get«attr.name.toFirstUpper»())
408
400
«IF attr.card.isMany»
409
401
.map(«lambdaParam» -> «lambdaParam».stream()
410
402
.map(«nestedLambdaParam» -> «nestedTabulator».tabulate(«nestedLambdaParam»«IF !attr.metaAnnotations.empty».getValue()«ENDIF»))
411
- .collect(«Collectors».toList()));
403
+ .collect(«Collectors».toList()))
404
+ .map(fieldValues -> new «MultiNestedFieldValueImpl»(«scope.getIdentifierOrThrow(attr)», Optional.of(fieldValues)))
405
+ .orElse(new «MultiNestedFieldValueImpl»(«scope.getIdentifierOrThrow(attr)», Optional.empty()));
412
406
«ELSE»
413
- .map(«lambdaParam» -> «nestedTabulator».tabulate(«lambdaParam»«IF !attr.metaAnnotations.empty».getValue()«ENDIF»));
407
+ .map(«lambdaParam» -> new «NestedFieldValueImpl»(«scope.getIdentifierOrThrow(attr)», Optional.of(«nestedTabulator».tabulate(«lambdaParam»«IF !attr.metaAnnotations.empty».getValue()«ENDIF»))))
408
+ .orElse(new «NestedFieldValueImpl»(«scope.getIdentifierOrThrow(attr)», Optional.empty()));
414
409
«ENDIF»
415
410
' ' '
416
411
} else {
417
412
val resultType = rType. toPolymorphicListOrSingleJavaType(attr. card. isMany)
418
413
' ' '
419
414
«IF attr.metaAnnotations.empty»
420
- «Optional»<«resultType»> «resultId» = « Optional».ofNullable(«inputParam».get«attr.name.toFirstUpper»());
415
+ «FieldValue» «resultId» = new «FieldValueImpl»(«scope.getIdentifierOrThrow(attr)», « Optional».ofNullable(«inputParam».get«attr.name.toFirstUpper»() ));
421
416
«ELSEIF attr.card.isMany»
422
- «Optional»<«resultType»> «resultId» = «Optional».ofNullable(«inputParam».get«attr.name.toFirstUpper»())
417
+ «FieldValue» «resultId» = new «FieldValueImpl»(«scope.getIdentifierOrThrow(attr)», «Optional».ofNullable(«inputParam».get«attr.name.toFirstUpper»())
423
418
.map(«lambdaParam» -> «lambdaParam».stream()
424
419
.map(«nestedLambdaParam» -> «nestedLambdaParam».getValue())
425
420
.collect(«Collectors».toList()));
426
421
«ELSE»
427
- «Optional»<«resultType»> «resultId» = «Optional».ofNullable(«inputParam».get«attr.name.toFirstUpper»())
428
- .map(«lambdaParam» -> «lambdaParam».getValue());
422
+ «FieldValue» «resultId» = new «FieldValueImpl»(«scope.getIdentifierOrThrow(attr)», «Optional».ofNullable(«inputParam».get«attr.name.toFirstUpper»())
423
+ .map(«lambdaParam» -> «lambdaParam».getValue())) ;
429
424
«ENDIF»
430
425
' ' '
431
426
}
@@ -435,17 +430,7 @@ class TabulatorGenerator {
435
430
' ' '
436
431
«Arrays».asList(
437
432
«FOR attr : type.allNonOverridesAttributes.filter[context.isTabulated(it)] SEPARATOR ","»
438
- «val attrType = attr.typeCall.type»
439
- «val valueClass = if (attrType instanceof Data) {
440
- if (attr.card.isMany) {
441
- MultiNestedFieldValueImpl
442
- } else {
443
- NestedFieldValueImpl
444
- }
445
- } else {
446
- FieldValueImpl
447
- }»
448
- new «valueClass»(«scope.getIdentifierOrThrow(attr)», «scope.getIdentifierOrThrow(attr.toComputedField)»)
433
+ «scope.getIdentifier(attr.toComputedField)»
449
434
«ENDFOR»
450
435
)' ' '
451
436
}
0 commit comments