package com.guidewire.rating.flow.domain.util uses gw.rating.flow.domain.CalcRoutine uses gw.rating.flow.domain.GenerationContext uses gw.rating.flow.domain.Statement uses gw.validation.PCValidationContext internal final class CalcRoutineSimpleCodeGenerator extends CalcRoutineCodeGenerator { construct(definition: CalcRoutineDefinition, orderedSteps: List, validationContext: PCValidationContext, worksheets: boolean, useUniquePackageNameSuffix: boolean) { super(definition, orderedSteps, validationContext, worksheets, useUniquePackageNameSuffix) } override protected function generate(): String { var statements: List try { statements = Statements // Has the side effect, if there are errors, of throwing or altering validation context } catch (e) { // Validation context must be null. throw new IllegalStateException(e.Message, e) // Because our tests want only IllegalStateException-s } if (ValidationContext != null and ValidationContext.Result.hasErrors()) { return null } var context = new GenerationContext(ValidationContext, GosuShop.createSymbolTable(true), GosuShop.createTypeUsesMap({}), 1, _definition.PolicyLinePatternCode, WorksheetsEnabled) context.CodegenStrategy = SIMPLE // Add all the beginning boilerplate: imports, class declaration, class statics, execute(), parameters, ... addProlog(context) context.append("\n") addExecuteMethod(context) if (ValidationContext != null and ValidationContext.Result.hasErrors()) { return null } // Closing boilerplate: braces, etc. addEpilog(context) context.replace(CalcRoutineCodeGeneratorUtils.prettyPrint(context.GeneratedCode)) var headerLineCount = addHeaderComments(context) // Prepends var sourceCode = context.GeneratedCode fixStatementLineAndColumnNumbers(statements, sourceCode, headerLineCount) return sourceCode } private function addProlog(context : GenerationContext) { context.append("package ").append(PackageName).append("\n") context.append("\n") addImports(context) context.append("final class ${RoutineName} implements ").append(RATE_ROUTINE_INTERFACE).append(" {\n") addIdentification(context) addRatingFunctionSources(context) addExecutionLoggerSymbols(context) // Always add logger symbols addProperties(context) } private function addExecuteMethod(context : GenerationContext) { context.append("override function execute(") .append(CalcRoutine.RATE_BOOK).append(": entity.RateBook, ") .append(COST_DATA_WRAPPER).append(": ").append(COST_DATA_WRAPPER_TYPE_NAME).append(", ") .append(PARAMETER_SET_ARGUMENT_NAME).append(": java.util.Map) {\n") addParameterDeclarations(context) addParameterInitializations(context) var n = Statements.size() - 1 for (stmt in Statements index i) { stmt.generate(context) if (i < n) { context.append('\n') } } context.append('\n}') // close execute(...) { } private function addEpilog(context: GenerationContext) { context.append("\n}") // Close "class ${Name} {" } }