private void compare(final VersionedProcessGroup groupA, final VersionedProcessGroup groupB, final Set<FlowDifference> differences, final boolean compareNamePos) {
if (compareComponents(groupA, groupB, differences, compareNamePos, compareNamePos, true)) {
return;
}
if (groupA == null) {
differences.add(difference(DifferenceType.COMPONENT_ADDED, groupA, groupB, groupA, groupB));
return;
}
if (groupB == null) {
differences.add(difference(DifferenceType.COMPONENT_REMOVED, groupA, groupB, groupA, groupB));
return;
}
addIfDifferent(differences, DifferenceType.VERSIONED_FLOW_COORDINATES_CHANGED, groupA, groupB, VersionedProcessGroup::getVersionedFlowCoordinates);
if (groupA.getVersionedFlowCoordinates() == null && groupB.getVersionedFlowCoordinates() == null) {
differences.addAll(compareComponents(groupA.getConnections(), groupB.getConnections(), this::compare));
differences.addAll(compareComponents(groupA.getProcessors(), groupB.getProcessors(), this::compare));
differences.addAll(compareComponents(groupA.getControllerServices(), groupB.getControllerServices(), this::compare));
differences.addAll(compareComponents(groupA.getFunnels(), groupB.getFunnels(), this::compare));
differences.addAll(compareComponents(groupA.getInputPorts(), groupB.getInputPorts(), this::compare));
differences.addAll(compareComponents(groupA.getLabels(), groupB.getLabels(), this::compare));
differences.addAll(compareComponents(groupA.getOutputPorts(), groupB.getOutputPorts(), this::compare));
differences.addAll(compareComponents(groupA.getProcessGroups(), groupB.getProcessGroups(), (a, b, diffs) -> compare(a, b, diffs, true)));
differences.addAll(compareComponents(groupA.getRemoteProcessGroups(), groupB.getRemoteProcessGroups(), this::compare));
}
}