public static Iterator<EventBean> getIterator(
      JoinExecutionStrategy joinExecutionStrategy,
      ResultSetProcessor resultSetProcessor,
      Viewable parentView,
      boolean distinct) {
    Iterator<EventBean> iterator;
    EventType eventType;
    if (joinExecutionStrategy != null) {
      Set<MultiKey<EventBean>> joinSet = joinExecutionStrategy.staticJoin();
      iterator = resultSetProcessor.getIterator(joinSet);
      eventType = resultSetProcessor.getResultEventType();
    } else if (resultSetProcessor != null) {
      iterator = resultSetProcessor.getIterator(parentView);
      eventType = resultSetProcessor.getResultEventType();
    } else {
      iterator = parentView.iterator();
      eventType = parentView.getEventType();
    }

    if (!distinct) {
      return iterator;
    }
    return new EventDistinctIterator(iterator, eventType);
  }