From 58d0701df5a48dbe5a4a88b97d3dc058d8977a59 Mon Sep 17 00:00:00 2001 From: Kamil Patryk Kozakowski Date: Sun, 12 Jul 2026 15:34:41 +0200 Subject: [PATCH] Add MachineDomainKeys for shared machine domain extraction. Centralizes domain key normalization from config class names so Standard* machines map to ORDER/DOCUMENT/USER consistently. Co-authored-by: Cursor --- .../analysis/enricher/MachineDomainKeys.java | 41 +++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 state_machine_exporter/src/main/java/click/kamil/springstatemachineexporter/analysis/enricher/MachineDomainKeys.java diff --git a/state_machine_exporter/src/main/java/click/kamil/springstatemachineexporter/analysis/enricher/MachineDomainKeys.java b/state_machine_exporter/src/main/java/click/kamil/springstatemachineexporter/analysis/enricher/MachineDomainKeys.java new file mode 100644 index 0000000..1b28d10 --- /dev/null +++ b/state_machine_exporter/src/main/java/click/kamil/springstatemachineexporter/analysis/enricher/MachineDomainKeys.java @@ -0,0 +1,41 @@ +package click.kamil.springstatemachineexporter.analysis.enricher; + +import java.util.List; +import java.util.Locale; + +/** + * Extracts normalized domain keys from state machine configuration class names + * (e.g. {@code StandardOrderStateMachineConfiguration} → {@code ORDER}). + */ +public final class MachineDomainKeys { + + private MachineDomainKeys() { + } + + public static String extractMachineDomainKey(String machineName) { + String simple = machineName.substring(machineName.lastIndexOf('.') + 1); + String upper = simple.toUpperCase(Locale.ROOT); + for (String marker : List.of("STATEMACHINECONFIGURATION", "STATEMACHINE", "CONFIGURATION", "CONFIG")) { + int idx = upper.indexOf(marker); + if (idx > 0) { + return normalizeDomainKey(upper.substring(0, idx)); + } + } + int stateIdx = upper.indexOf("STATE"); + if (stateIdx > 0) { + return normalizeDomainKey(upper.substring(0, stateIdx)); + } + return normalizeDomainKey(upper); + } + + private static String normalizeDomainKey(String domain) { + if (domain == null || domain.isEmpty()) { + return domain; + } + String upper = domain.toUpperCase(Locale.ROOT); + if (upper.startsWith("STANDARD") && upper.length() > "STANDARD".length()) { + return upper.substring("STANDARD".length()); + } + return upper; + } +}