Example #1
0
  private static Pattern getPattern(
      Map<String, NamedCondition> transitionConditions, PatternGroup patternGroup) {
    Pattern pattern = new Pattern();
    for (Step step : patternGroup.steps) {
      Pattern next;
      if (step.isPattern()) {
        next = getPattern(transitionConditions, step.patternGroup);

      } else {
        NamedCondition condition = transitionConditions.get(step.ref);
        if (condition == null)
          throw new IllegalArgumentException("No such condition [" + step.ref + "]");
        next = Pattern.match(condition);
      }
      if (step.repeat) next = next.repeat();
      if (step.optional) next = next.optional();
      next = Pattern.capture(next);
      pattern =
          patternGroup.type == GroupType.OR
              ? Pattern.branch(pattern, next)
              : Pattern.chain(pattern, next);
    }
    return pattern.minimize();
  }