SimulationRunMetadataBuilder { public SimulationRunMetadata build() { int available = 0; Map<String, Integer> outputCounter = new HashMap<>(); Map<ScenarioWithIndex, Map<String, Integer>> scenarioCounter = new HashMap<>(); AuditLog auditLog = new AuditLog(); for (ScenarioResultMetadata scenarioResultMetadatum : scenarioResultMetadata) { available = scenarioResultMetadatum.getAvailable().size(); scenarioResultMetadatum.getExecutedWithCounter() .forEach((name, counter) -> outputCounter.compute(name, (key, number) -> number == null ? counter : number + counter)); } for (ScenarioResultMetadata scenarioResultMetadatum : scenarioResultMetadata) { scenarioCounter.put(scenarioResultMetadatum.getScenarioWithIndex(), scenarioResultMetadatum.getExecutedWithCounter()); auditLog.addAuditLogLines(scenarioResultMetadatum.getAuditLogLines()); } return new SimulationRunMetadata(available, outputCounter.keySet().size(), outputCounter, scenarioCounter, auditLog); } private  SimulationRunMetadataBuilder(); SimulationRunMetadataBuilder addScenarioResultMetadata(ScenarioResultMetadata scenarioResultMetadata); SimulationRunMetadata build(); static SimulationRunMetadataBuilder create();  }
@Test public void build() { ScenarioWithIndex scenarioWithIndex1 = new ScenarioWithIndex(1, new Scenario()); ScenarioResultMetadata result1 = new ScenarioResultMetadata(scenarioWithIndex1); result1.addExecuted("d1"); result1.addExecuted("d2"); result1.addAvailable("d1"); result1.addAvailable("d2"); result1.addAvailable("d3"); List<DMNMessage> messagesResult1decision1 = getRandomlyGeneratedDMNMessageList(); List<DMNMessage> messagesResult1decision2 = getRandomlyGeneratedDMNMessageList(); Map<Integer, List<String>> expectedResult1Decision1 = fillAuditMessagesForDecision(result1, messagesResult1decision1, "d1"); Map<Integer, List<String>> expectedResult1Decision2 = fillAuditMessagesForDecision(result1, messagesResult1decision2, "d2"); ScenarioResultMetadata result2 = new ScenarioResultMetadata(new ScenarioWithIndex(2, new Scenario())); List<String> expectedDecisionsResult2 = Arrays.asList("d1", "d3"); result2.addExecuted(expectedDecisionsResult2.get(0)); result2.addExecuted(expectedDecisionsResult2.get(1)); result2.addAvailable("d1"); result2.addAvailable("d2"); result2.addAvailable("d3"); List<DMNMessage> messagesResult2decision1 = getRandomlyGeneratedDMNMessageList(); List<DMNMessage> messagesResult2decision3 = getRandomlyGeneratedDMNMessageList(); Map<Integer, List<String>> expectedResult2Decision1 = fillAuditMessagesForDecision(result1, messagesResult2decision1, "d1"); Map<Integer, List<String>> expectedResult2Decision3 = fillAuditMessagesForDecision(result1, messagesResult2decision3, "d3"); SimulationRunMetadataBuilder builder = SimulationRunMetadataBuilder.create(); builder.addScenarioResultMetadata(result1); builder.addScenarioResultMetadata(result2); SimulationRunMetadata build = builder.build(); assertEquals(3, build.getAvailable()); assertEquals(3, build.getExecuted()); assertEquals(100, build.getCoveragePercentage(), 0.1); assertEquals(2, build.getOutputCounter().get("d1"), 0.1); assertEquals(1, build.getOutputCounter().get("d2"), 0.1); assertEquals(2, build.getScenarioCounter().get(scenarioWithIndex1).size(), 0.1); AuditLog retrieved = build.getAuditLog(); assertNotNull(retrieved); final List<AuditLogLine> auditLogLines = retrieved.getAuditLogLines(); assertNotNull(auditLogLines); assertEquals(auditLogLines.size(), messagesResult1decision1.size() + messagesResult1decision2.size() + messagesResult2decision1.size() + messagesResult2decision3.size()); checkAuditLogLine(auditLogLines, expectedResult1Decision1, expectedResult1Decision2, expectedResult2Decision1, expectedResult2Decision3); }