private void _getAllPath()

in mqtt-common/src/main/java/org/apache/rocketmq/mqtt/common/model/Trie.java [268:302]


    private void _getAllPath(TrieNode<K, V> currentNode, String[] topicArray, int level, int maxLevel, boolean findAll, Set<String> result, String path) {
        if (level >= maxLevel && !findAll) {
            if (currentNode.end) {
                result.add(path);
            }
            return;
        }
        if (findAll && currentNode.end) {
            result.add(path);
        }
        if (currentNode.end && level + 1 < maxLevel && topicArray[level + 1].equals("#")) {
            result.add(path);
        }
        if (findAll) {   // match the '#'
            for (String key : currentNode.children.keySet()) {
                _getAllPath(currentNode.children.get(key), topicArray, level + 1, maxLevel, true, result, path + key + Constants.MQTT_TOPIC_DELIMITER);
            }
            return;
        }
        if (topicArray[level].equals("+")) { // match the '+'
            for (String key : currentNode.children.keySet()) {
                _getAllPath(currentNode.children.get(key), topicArray, level + 1, maxLevel, false, result, path + key + Constants.MQTT_TOPIC_DELIMITER);
            }
        } else if (topicArray[level].equals("#")) { // match the '#'
            for (String key : currentNode.children.keySet()) {
                _getAllPath(currentNode.children.get(key), topicArray, level + 1, maxLevel, true, result, path + key + Constants.MQTT_TOPIC_DELIMITER);
            }
        } else {
            if (currentNode.children.get(topicArray[level]) != null) {
                String key = topicArray[level];
                _getAllPath(currentNode.children.get(topicArray[level]), topicArray, level + 1, maxLevel, false, result, path + key + Constants.MQTT_TOPIC_DELIMITER);
            }
        }

    }