private static List doFlatten()

in src/main/software/amazon/event/ruler/Event.java [211:245]


    private static List<String> doFlatten(final JsonNode eventRoot) throws IllegalArgumentException {

        final TreeMap<String, List<String>> fields = new TreeMap<>();

        if (!eventRoot.isObject()) {
            throw new IllegalArgumentException("Event must be a JSON object");
        }

        final Stack<String> path = new Stack<>();
        flattenObject(eventRoot, fields, path);

        // Ruler algorithm will explore all possible matches based on field (key value pair) in event, duplicated fields
        // in event do NOT impact final matches but it will downgrade the performance by producing duplicated
        // checking Steps, in worse case, those the duplicated steps can stuck the process and use up all memory, so when
        // building the event, dedupe the fields from event can low such risk.
        final Set<String> uniqueValues = new HashSet<>();
        final List<String> nameVals = new ArrayList<>();
        for (Map.Entry<String, List<String>> entry : fields.entrySet()) {
            String k = entry.getKey();
            List<String> vs = entry.getValue();
            if(vs.size() != 1) {
                uniqueValues.clear();
                for (String v : vs) {
                    if (uniqueValues.add(v)) {
                        nameVals.add(k);
                        nameVals.add(v);
                    }
                }
            } else {
                nameVals.add(k);
                nameVals.add(vs.get(0));
            }
        }
        return nameVals;
    }