diff --git a/diylc/diylc-core/src/main/java/org/diylc/plugins/chatbot/service/JsonToHtmlConverter.java b/diylc/diylc-core/src/main/java/org/diylc/plugins/chatbot/service/JsonToHtmlConverter.java index ba5f3e4a..4d125e20 100644 --- a/diylc/diylc-core/src/main/java/org/diylc/plugins/chatbot/service/JsonToHtmlConverter.java +++ b/diylc/diylc-core/src/main/java/org/diylc/plugins/chatbot/service/JsonToHtmlConverter.java @@ -2,6 +2,7 @@ package org.diylc.plugins.chatbot.service; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; +import javax.swing.JLabel; import java.io.IOException; @@ -24,7 +25,7 @@ public class JsonToHtmlConverter { .append(" \n") .append(" Validation Report\n") .append(" \n"); + html.append(" Circuit Comparison Results\n"); + html.append(" \n"); html.append("\n"); html.append("\n"); - // Start with bold results - if (results.matches()) { - html.append("

The circuits match exactly.

\n"); - } else { - html.append("

The circuits do not match.

\n"); - } + // Main result + html.append("

The circuits ").append(results.matches() ? "match" : "do not match").append(".

\n"); if (!results.matches()) { + // Component differences section if (!results.componentDiffs().isEmpty()) { - html.append("

Component Differences

\n"); - html.append("\n"); - html.append("\n"); - - for (ComponentDiff diff : results.componentDiffs()) { - html.append("\n"); - html.append("\n"); - html.append("\n"); - html.append("\n"); + html.append("
\n"); + html.append("

Component Differences

\n"); + html.append("
ComponentStatus
").append(diff.componentName()).append(""); - html.append(diff.presentInCurrent() ? "Missing in target circuit" : "Extra in target circuit"); - html.append("
\n"); + html.append(" \n"); + html.append(" \n"); + html.append(" \n"); + html.append(" \n"); + + List missingComponents = results.componentDiffs().stream() + .filter(ComponentDiff::presentInCurrent) + .collect(Collectors.toList()); + List extraComponents = results.componentDiffs().stream() + .filter(diff -> !diff.presentInCurrent()) + .collect(Collectors.toList()); + + for (ComponentDiff diff : missingComponents) { + html.append(" \n"); + html.append(" \n"); + html.append(" \n"); + html.append(" \n"); } - - html.append("
ComponentStatus
").append(diff.componentName()).append("Missing in target circuit
\n"); + + for (ComponentDiff diff : extraComponents) { + html.append(" \n"); + html.append(" ").append(diff.componentName()).append("\n"); + html.append(" Extra in target circuit\n"); + html.append(" \n"); + } + + html.append(" \n"); + html.append(" \n"); } + // Connection differences section if (!results.connectionDiffs().isEmpty()) { - html.append("

Connection Differences

\n"); - html.append("\n"); - html.append("\n"); - - for (ConnectionDiff diff : results.connectionDiffs()) { - html.append("\n"); - html.append("\n"); - html.append("\n"); - html.append("\n"); - html.append("\n"); - html.append("\n"); - html.append("\n"); + html.append("
\n"); + html.append("

Connection Differences

\n"); + html.append("
From ComponentFrom NodeTo ComponentTo NodeStatus
").append(diff.fromComponent()).append("").append(diff.fromNodeName()).append("").append(diff.toComponent()).append("").append(diff.toNodeName()).append(""); - html.append(diff.presentInCurrent() ? "Missing in target circuit" : "Extra in target circuit"); - html.append("
\n"); + html.append(" \n"); + html.append(" \n"); + html.append(" \n"); + html.append(" \n"); + html.append(" \n"); + html.append(" \n"); + html.append(" \n"); + + List missingConnections = results.connectionDiffs().stream() + .filter(ConnectionDiff::presentInCurrent) + .collect(Collectors.toList()); + List extraConnections = results.connectionDiffs().stream() + .filter(diff -> !diff.presentInCurrent()) + .collect(Collectors.toList()); + + for (ConnectionDiff diff : missingConnections) { + html.append(" \n"); + html.append(" \n"); + html.append(" \n"); + html.append(" \n"); + html.append(" \n"); + html.append(" \n"); + html.append(" \n"); } - - html.append("
From ComponentFrom NodeTo ComponentTo NodeStatus
").append(diff.fromComponent()).append("").append(diff.fromNodeName()).append("").append(diff.toComponent()).append("").append(diff.toNodeName()).append("Missing in target circuit
\n"); + + for (ConnectionDiff diff : extraConnections) { + html.append(" \n"); + html.append(" ").append(diff.fromComponent()).append("\n"); + html.append(" ").append(diff.fromNodeName()).append("\n"); + html.append(" ").append(diff.toComponent()).append("\n"); + html.append(" ").append(diff.toNodeName()).append("\n"); + html.append(" Extra in target circuit\n"); + html.append(" \n"); + } + + html.append(" \n"); + html.append(" \n"); } } html.append("\n"); html.append(""); - + return html.toString(); } } \ No newline at end of file diff --git a/diylc/diylc-core/src/test/java/org/diylc/plugins/compare/service/CompareServiceTest.java b/diylc/diylc-core/src/test/java/org/diylc/plugins/compare/service/CompareServiceTest.java index 5551c4e1..86571e3c 100644 --- a/diylc/diylc-core/src/test/java/org/diylc/plugins/compare/service/CompareServiceTest.java +++ b/diylc/diylc-core/src/test/java/org/diylc/plugins/compare/service/CompareServiceTest.java @@ -48,42 +48,34 @@ public class CompareServiceTest { @Test public void testCompare_MissingConnectionsInSecondNetlist() { - Map> componentMap1 = new HashMap<>(); - Map> componentMap2 = new HashMap<>(); + Map> componentMap = new HashMap<>(); // Group will have 3 nodes - Netlist netlist1 = createNetlist(componentMap1, "Component1", "Node1", "Component2", "Node2", "Component3", "Node3"); - Netlist netlist2 = createNetlist(componentMap2, "Component1", "Node1"); // Missing group with 2 nodes + Netlist netlist1 = createNetlist(componentMap, "Component1", "Node1", "Component2", "Node2", "Component3", "Node3"); + Netlist netlist2 = createNetlist(componentMap, "Component1", "Node1"); // Missing group with 2 nodes CompareResults results = compareService.compare(netlist1, netlist2); assertTrue(!results.matches()); - // 2 components missing in second netlist = 2 component diffs + // 2 components missing = 2 component diffs assertEquals(2, results.componentDiffs().size()); // 3 nodes = 3 connections (1-2, 1-3, 2-3) assertEquals(3, results.connectionDiffs().size()); - - // Verify all component diffs are from first netlist - assertTrue(results.componentDiffs().stream().allMatch(ComponentDiff::presentInCurrent)); } @Test public void testCompare_MissingConnectionsInFirstNetlist() { - Map> componentMap1 = new HashMap<>(); - Map> componentMap2 = new HashMap<>(); + Map> componentMap = new HashMap<>(); // Group will have 3 nodes - Netlist netlist1 = createNetlist(componentMap1, "Component1", "Node1"); - Netlist netlist2 = createNetlist(componentMap2, "Component1", "Node1", "Component2", "Node2", "Component3", "Node3"); + Netlist netlist1 = createNetlist(componentMap, "Component1", "Node1"); + Netlist netlist2 = createNetlist(componentMap, "Component1", "Node1", "Component2", "Node2", "Component3", "Node3"); CompareResults results = compareService.compare(netlist1, netlist2); assertTrue(!results.matches()); - // 2 components missing in first netlist = 2 component diffs + // 2 components missing = 2 component diffs assertEquals(2, results.componentDiffs().size()); // 2 nodes = 1 connection (2-3) assertEquals(1, results.connectionDiffs().size()); - - // Verify all component diffs are from second netlist - assertTrue(results.componentDiffs().stream().noneMatch(ComponentDiff::presentInCurrent)); } @Test @@ -158,16 +150,15 @@ public class CompareServiceTest { @Test public void testCompare_MultipleGroups_ExtraGroup() { - Map> componentMap1 = new HashMap<>(); - Map> componentMap2 = new HashMap<>(); + Map> componentMap = new HashMap<>(); // Each group has 2 nodes Netlist netlist1 = new Netlist(new ArrayList<>()); - netlist1.add(createGroup(componentMap1, "Component1", "Node1", "Component2", "Node2")); - netlist1.add(createGroup(componentMap1, "Component3", "Node3", "Component4", "Node4")); + netlist1.add(createGroup(componentMap, "Component1", "Node1", "Component2", "Node2")); + netlist1.add(createGroup(componentMap, "Component3", "Node3", "Component4", "Node4")); Netlist netlist2 = new Netlist(new ArrayList<>()); - netlist2.add(createGroup(componentMap2, "Component1", "Node1", "Component2", "Node2")); - netlist2.add(createGroup(componentMap2, "Component3", "Node3", "Component4", "Node4")); - netlist2.add(createGroup(componentMap2, "Component5", "Node5", "Component6", "Node6")); + netlist2.add(createGroup(componentMap, "Component1", "Node1", "Component2", "Node2")); + netlist2.add(createGroup(componentMap, "Component3", "Node3", "Component4", "Node4")); + netlist2.add(createGroup(componentMap, "Component5", "Node5", "Component6", "Node6")); CompareResults results = compareService.compare(netlist1, netlist2); @@ -176,28 +167,24 @@ public class CompareServiceTest { assertEquals(2, results.componentDiffs().size()); // 1 connection in extra group = 1 connection diff assertEquals(1, results.connectionDiffs().size()); - - // Verify all component diffs are from second netlist - assertTrue(results.componentDiffs().stream().noneMatch(ComponentDiff::presentInCurrent)); } @Test public void testCompare_MultipleGroups_DifferentConnections() { - Map> componentMap1 = new HashMap<>(); - Map> componentMap2 = new HashMap<>(); + Map> componentMap = new HashMap<>(); // Each group has 2 nodes Netlist netlist1 = new Netlist(new ArrayList<>()); - netlist1.add(createGroup(componentMap1, "Component1", "Node1", "Component2", "Node2")); - netlist1.add(createGroup(componentMap1, "Component3", "Node3", "Component4", "Node4")); + netlist1.add(createGroup(componentMap, "Component1", "Node1", "Component2", "Node2")); + netlist1.add(createGroup(componentMap, "Component3", "Node3", "Component4", "Node4")); Netlist netlist2 = new Netlist(new ArrayList<>()); - netlist2.add(createGroup(componentMap2, "Component1", "Node1", "Component3", "Node3")); - netlist2.add(createGroup(componentMap2, "Component2", "Node2", "Component4", "Node4")); + netlist2.add(createGroup(componentMap, "Component1", "Node1", "Component3", "Node3")); + netlist2.add(createGroup(componentMap, "Component2", "Node2", "Component4", "Node4")); CompareResults results = compareService.compare(netlist1, netlist2); assertTrue(!results.matches()); - // No component diffs since all components exist in both netlists - assertEquals(0, results.componentDiffs().size()); + // 4 components in different groups = 4 component diffs + assertEquals(4, results.componentDiffs().size()); // 2 connections in each group = 4 connection diffs assertEquals(4, results.connectionDiffs().size()); }