KiePMMLMiningModelFactory { public static Map<String, String> getKiePMMLMiningModelSourcesMap(final DataDictionary dataDictionary, final TransformationDictionary transformationDictionary, final MiningModel model, final String parentPackageName, final KnowledgeBuilder kBuilder, final List<KiePMMLModel> nestedModels) { logger.trace("getKiePMMLMiningModelSourcesMap {} {} {}", dataDictionary, model, parentPackageName); final String segmentationName = String.format(SEGMENTATIONNAME_TEMPLATE, model.getModelName()); final Map<String, String> toReturn = getSegmentationSourcesMap(parentPackageName, dataDictionary, transformationDictionary, model.getSegmentation(), segmentationName, kBuilder, nestedModels); String segmentationClass = getSanitizedPackageName(parentPackageName + "." + segmentationName) + "." + getSanitizedClassName(segmentationName); if (!toReturn.containsKey(segmentationClass)) { throw new KiePMMLException("Expected generated class " + segmentationClass + " not found"); } String className = getSanitizedClassName(model.getModelName()); CompilationUnit cloneCU = JavaParserUtils.getKiePMMLModelCompilationUnit(className, parentPackageName, KIE_PMML_MINING_MODEL_TEMPLATE_JAVA, KIE_PMML_MINING_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); final ConstructorDeclaration constructorDeclaration = modelTemplate.getDefaultConstructor().orElseThrow(() -> new KiePMMLInternalException(String.format(MISSING_DEFAULT_CONSTRUCTOR, modelTemplate.getName()))); setConstructor(className, constructorDeclaration, targetFieldName, MINING_FUNCTION.byName(model.getMiningFunction().value()), modelName, segmentationClass); addOutputFieldsPopulation(constructorDeclaration.getBody(), outputFields); addTransformationsInClassOrInterfaceDeclaration(modelTemplate, transformationDictionary, model.getLocalTransformations()); toReturn.put(getFullClassName(cloneCU), cloneCU.toString()); return toReturn; } private  KiePMMLMiningModelFactory(); static KiePMMLMiningModel getKiePMMLMiningModel(final DataDictionary dataDictionary,
                                                           final TransformationDictionary transformationDictionary,
                                                           final MiningModel model,
                                                           final KnowledgeBuilder kBuilder); static Map<String, String> getKiePMMLMiningModelSourcesMap(final DataDictionary dataDictionary,
                                                                      final TransformationDictionary transformationDictionary,
                                                                      final MiningModel model,
                                                                      final String parentPackageName,
                                                                      final KnowledgeBuilder kBuilder,
                                                                      final List<KiePMMLModel> nestedModels);  }
@Test public void getKiePMMLMiningModelSourcesMap() { final String packageName = "packagename"; final List<KiePMMLModel> nestedModels = new ArrayList<>(); final Map<String, String> retrieved = KiePMMLMiningModelFactory.getKiePMMLMiningModelSourcesMap(DATA_DICTIONARY, TRANSFORMATION_DICTIONARY, MINING_MODEL, packageName, KNOWLEDGE_BUILDER, nestedModels); assertNotNull(retrieved); int expectedNestedModels = MINING_MODEL.getSegmentation().getSegments().size(); assertEquals(expectedNestedModels, nestedModels.size()); }