code: protected boolean checkRule(Event triggerEvent, Rule rule) {
  		Queue<Notification> notifications = getNotifications(triggerEvent, rule);
  		Queue<Notification> windowedNotifications = new PriorityQueue<Notification>(1, Notification.getStartTimeAscendingComparator());
  		Iterator<Expression> expressions = rule.getExpressions().iterator();
  		Expression currentExpression = expressions.next();
  		Notification tail = null;
  
  		while (!notifications.isEmpty()) {
  			tail = notifications.poll();
  			windowedNotifications.add(tail);
  			trim(windowedNotifications, tail.getEndTime().minus(currentExpression.getWindow().toMillis()));
  
  			if (checkExpression(currentExpression, windowedNotifications)) {
  				if (expressions.hasNext()) {
  					currentExpression = expressions.next();
  					windowedNotifications = new LinkedList<Notification>();
  					trim(notifications, tail.getEndTime());
  				}
  				else {
  					return true;
  				}
  			}
  		}
  
  		return false;
  	}
docs: Evaluates a {@link Rule}'s logic by compiling a list of all {@link Notification}s
  and then evaluating each {@link Expression} within the {@link Rule}. All {@link Expression}s
  must evaluate to true within the {@link Rule}'s window for the {@link Rule} to evaluate to
  true. The process follows the "sliding window" pattern.
  
  @param event the {@link Event} that triggered analysis
  @param rule the {@link Rule} being evaluated
  @return the boolean evaluation of the {@link Rule}