KiePMMLRegressionModelFactory { public static Map<String, String> getKiePMMLRegressionModelSourcesMap(final DataDictionary dataDictionary, final TransformationDictionary transformationDictionary, final RegressionModel model, final String packageName) throws IOException { logger.trace("getKiePMMLRegressionModelSourcesMap {} {} {}", dataDictionary, model, packageName); String className = getSanitizedClassName(model.getModelName()); CompilationUnit cloneCU = JavaParserUtils.getKiePMMLModelCompilationUnit(className, packageName, KIE_PMML_REGRESSION_MODEL_TEMPLATE_JAVA, KIE_PMML_REGRESSION_MODEL_TEMPLATE); ClassOrInterfaceDeclaration modelTemplate = cloneCU.getClassByName(className) .orElseThrow(() -> new KiePMMLException(MAIN_CLASS_NOT_FOUND + ": " + className)); String modelName = model.getModelName(); String targetFieldName = getTargetFieldName(dataDictionary, model).orElse(null); List<KiePMMLOutputField> outputFields = getOutputFields(model); Map<String, KiePMMLTableSourceCategory> tablesSourceMap = getRegressionTablesMap(dataDictionary, model, targetFieldName, outputFields, packageName); String nestedTable = tablesSourceMap.size() == 1 ? tablesSourceMap.keySet().iterator().next() : tablesSourceMap .keySet() .stream() .filter(tableName -> tableName.startsWith(packageName + ".KiePMMLRegressionTableClassification")) .findFirst() .orElseThrow(() -> new KiePMMLException("Failed to find expected KiePMMLRegressionTableClassification")); final ConstructorDeclaration constructorDeclaration = modelTemplate.getDefaultConstructor().orElseThrow(() -> new KiePMMLInternalException(String.format(MISSING_DEFAULT_CONSTRUCTOR, modelTemplate.getName()))); setConstructor(className, nestedTable, constructorDeclaration, targetFieldName, MINING_FUNCTION.byName(model.getMiningFunction().value()), modelName); addTransformationsInClassOrInterfaceDeclaration(modelTemplate, transformationDictionary, model.getLocalTransformations()); Map<String, String> toReturn = tablesSourceMap.entrySet() .stream() .collect(Collectors.toMap(Map.Entry::getKey, entry -> entry.getValue().getSource())); toReturn.put(getFullClassName(cloneCU), cloneCU.toString()); return toReturn; } private  KiePMMLRegressionModelFactory(); static KiePMMLRegressionModel getKiePMMLRegressionModelClasses(final DataDictionary dataDictionary,
                                                                          final TransformationDictionary transformationDictionary,
                                                                          final RegressionModel model); static Map<String, String> getKiePMMLRegressionModelSourcesMap(final DataDictionary dataDictionary,
                                                                          final TransformationDictionary transformationDictionary,
                                                                          final RegressionModel model,
                                                                          final String packageName);  }
@Test public void getKiePMMLRegressionModelSourcesMap() throws IOException { Map<String, String> retrieved = KiePMMLRegressionModelFactory.getKiePMMLRegressionModelSourcesMap(dataDictionary, transformationDictionary, regressionModel, PACKAGE_NAME); assertNotNull(retrieved); int expectedSize = regressionTables.size() + 2; assertEquals(expectedSize, retrieved.size()); }