Example #1
0
  private static MatchEventSpec analyzeMatchEvent(EvalNode relativeNode) {
    LinkedHashMap<String, Pair<EventType, String>> taggedEventTypes =
        new LinkedHashMap<String, Pair<EventType, String>>();
    LinkedHashMap<String, Pair<EventType, String>> arrayEventTypes =
        new LinkedHashMap<String, Pair<EventType, String>>();

    // Determine all the filter nodes used in the pattern
    EvalNodeAnalysisResult evalNodeAnalysisResult =
        EvalNodeUtil.recursiveAnalyzeChildNodes(relativeNode);

    // collect all filters underneath
    for (EvalFilterNode filterNode : evalNodeAnalysisResult.getFilterNodes()) {
      String optionalTag = filterNode.getEventAsName();
      if (optionalTag != null) {
        taggedEventTypes.put(
            optionalTag,
            new Pair<EventType, String>(
                filterNode.getFilterSpec().getFilterForEventType(),
                filterNode.getFilterSpec().getFilterForEventTypeName()));
      }
    }

    // collect those filters under a repeat since they are arrays
    Set<String> arrayTags = new HashSet<String>();
    for (EvalMatchUntilNode matchUntilNode : evalNodeAnalysisResult.getRepeatNodes()) {
      EvalNodeAnalysisResult matchUntilAnalysisResult =
          EvalNodeUtil.recursiveAnalyzeChildNodes(matchUntilNode.getChildNodes().get(0));
      for (EvalFilterNode filterNode : matchUntilAnalysisResult.getFilterNodes()) {
        String optionalTag = filterNode.getEventAsName();
        if (optionalTag != null) {
          arrayTags.add(optionalTag);
        }
      }
    }

    // for each array tag change collection
    for (String arrayTag : arrayTags) {
      if (taggedEventTypes.get(arrayTag) != null) {
        arrayEventTypes.put(arrayTag, taggedEventTypes.get(arrayTag));
        taggedEventTypes.remove(arrayTag);
      }
    }

    return new MatchEventSpec(taggedEventTypes, arrayEventTypes);
  }