Пример #1
0
  private Set<String> getMatchingSubscriptions(String partition, String topic) {

    Set<String> topicFilterKeys = new HashSet<>();

    ListIterator<String> pathIterator =
        Arrays.asList(topic.split(Constant.PATH_SEPARATOR)).listIterator();

    List<String> growingTitles = new ArrayList<>();

    while (pathIterator.hasNext()) {

      String name = pathIterator.next();

      List<String> slWildCardList = new ArrayList<>(growingTitles);

      if (pathIterator.hasNext()) {
        // We deal with wildcard.
        slWildCardList.add(Constant.SINGLE_LEVEL_WILDCARD);
        topicFilterKeys.add(quickCheckIdKey(partition, slWildCardList));

      } else {
        // we deal with full topic
        slWildCardList.add(name);
      }

      List<String> reverseSlWildCardList = new ArrayList<>(slWildCardList);

      growingTitles.add(name);

      int sizeOfTopic = slWildCardList.size();
      if (sizeOfTopic > 1) {
        sizeOfTopic -= 1;

        for (int i = 0; i < sizeOfTopic; i++) {

          if (i >= 0) {
            slWildCardList.set(i, Constant.MULTI_LEVEL_WILDCARD);
            reverseSlWildCardList.set(sizeOfTopic - i, Constant.MULTI_LEVEL_WILDCARD);

            topicFilterKeys.add(quickCheckIdKey(partition, slWildCardList));
            topicFilterKeys.add(quickCheckIdKey(partition, reverseSlWildCardList));
          }
        }
      }
    }

    topicFilterKeys.add(quickCheckIdKey(partition, growingTitles));

    return topicFilterKeys;
  }