package holeg.model; import holeg.power_flow.ComplexNumber; import java.util.HashSet; public class GridComparator { public static boolean isEqual(Grid a, Grid b) { if (a == b) return true; if (a == null || b == null) return false; if (a.getNodes().size() != b.getNodes().size()) return false; if (a.getEdges().size() != b.getEdges().size()) return false; // Check if nodes are equal HashSet nodesChecked = new HashSet<>(); for (GridNode node : a.getNodes()) { // Find a matching node boolean found = false; for (GridNode bNode : b.getNodes()) { if (nodesChecked.contains(bNode)) continue; if (isEqualProperties(node, bNode)) { found = true; nodesChecked.add(bNode); break; } } // No node found with matching properties if (!found) return false; } // Check if edges are equal HashSet edgesChecked = new HashSet<>(); for (GridEdge edge : a.getEdges()) { // Find a matching edge boolean found = false; for (GridEdge bEdge : b.getEdges()) { if (edgesChecked.contains(bEdge)) continue; if (isEqual(edge, bEdge)) { found = true; edgesChecked.add(bEdge); break; } } // No edge found with matching properties if (!found) return false; } return true; } private static boolean isEqual(GridEdge a, GridEdge b) { if (!isEqualProperties(a, b)) return false; if (isEqualProperties(a.getFrom(), b.getFrom()) && isEqualProperties(a.getTo(), b.getTo())) return true; if (isEqualProperties(a.getTo(), b.getFrom()) && isEqualProperties(a.getFrom(), b.getTo())) return true; return false; } public static boolean isEqualProperties(GridNode a, GridNode b) { if (a == b) return true; if (a == null || b == null) return false; if (!a.getTypeByDesign().equals(b.getTypeByDesign())) return false; if (!ComplexNumber.equals(a.getPowerConsumption(), b.getPowerConsumption())) return false; if (!ComplexNumber.equals(a.getPowerGeneration(), b.getPowerGeneration())) return false; return true; } public static boolean isEqualProperties(GridEdge a, GridEdge b) { if (a == b) return true; if (a == null || b == null) return false; if (a.getLengthKilometers() != b.getLengthKilometers()) return false; if (!ComplexNumber.equals(a.getOverrideImpedance(), b.getOverrideImpedance())) return false; if (a.getOverrideShuntSusceptance() != b.getOverrideShuntSusceptance()) return false; return true; } }