diff --git a/consilens-cli/src/main/java/com/consilens/cli/service/DiffService.java b/consilens-cli/src/main/java/com/consilens/cli/service/DiffService.java index 8605d24..c212834 100644 --- a/consilens-cli/src/main/java/com/consilens/cli/service/DiffService.java +++ b/consilens-cli/src/main/java/com/consilens/cli/service/DiffService.java @@ -53,7 +53,7 @@ public class DiffService { * @return diff result */ public CliDiffResult performDiff(CliConfiguration config) throws Exception { - log.info("Starting diff operation with strategy: {}, algorithm: {}", + log.info("Starting diff operation with strategy: {}, algorithm: {}", config.getStrategyMode(), config.getAlgorithm()); long startTime = System.currentTimeMillis(); @@ -63,9 +63,10 @@ public CliDiffResult performDiff(CliConfiguration config) throws Exception { try { lifecycle.onDiffStart(diffContext); - CompareRuntime runtime = new DefaultCompareRuntime(); + CompareRuntime runtime = createCompareRuntime(); DiffResult coreResult = runtime.execute(toCompareRequest(config)); + publishDifferences(coreResult, lifecycle, diffContext); lifecycle.onDiffComplete(coreResult, diffContext); // Convert core result to CLI result @@ -99,7 +100,11 @@ public CliDiffResult performDiff(CliConfiguration config) throws Exception { } } - private DiffLifecycle buildLifecycle(CliConfiguration config) { + protected CompareRuntime createCompareRuntime() { + return new DefaultCompareRuntime(); + } + + protected DiffLifecycle buildLifecycle(CliConfiguration config) { ResultConfig resultConfig = config.getResult(); if (resultConfig == null || resultConfig.getSinks() == null || resultConfig.getSinks().isEmpty()) { return new NoopDiffLifecycle(); @@ -107,7 +112,7 @@ private DiffLifecycle buildLifecycle(CliConfiguration config) { return new DefaultDiffLifecycle(resultConfig); } - private DiffContext buildDiffContext(CliConfiguration config) { + protected DiffContext buildDiffContext(CliConfiguration config) { TablePath sourcePath = null; TablePath targetPath = null; List sourceColumnNames = new ArrayList<>(); @@ -152,6 +157,13 @@ private DiffContext buildDiffContext(CliConfiguration config) { .build(); } + private void publishDifferences(DiffResult coreResult, DiffLifecycle lifecycle, DiffContext diffContext) throws Exception { + if (coreResult == null || coreResult.getDifferences() == null || coreResult.getDifferences().isEmpty()) { + return; + } + lifecycle.onDifferencesFound(coreResult.getDifferences(), diffContext); + } + /** * Convert core DiffResult to CLI DiffResult. */ @@ -564,7 +576,7 @@ private Integer integerValue(Object value) { * Perform a dry run to validate configuration without executing diff. */ public CliDiffResult performDryRun(CliConfiguration config) throws Exception { - log.info("Performing dry run for diff operation with strategy: {}, algorithm: {}", + log.info("Performing dry run for diff operation with strategy: {}, algorithm: {}", config.getStrategyMode(), config.getAlgorithm()); ConnectorProbeService probeService = new ConnectorProbeService(); ComparisonConfig comparison = config.getComparison();