protected void initSubreportFiller(DatasetExpressionEvaluator evaluator) throws JRException {
    if (log.isDebugEnabled()) {
      log.debug("Fill " + filler.fillerId + ": creating subreport filler");
    }

    switch (jasperReport.getPrintOrderValue()) {
      case HORIZONTAL:
        {
          subreportFiller = new JRHorizontalFiller(jasperReport, evaluator, this);
          break;
        }
      case VERTICAL:
        {
          subreportFiller = new JRVerticalFiller(jasperReport, evaluator, this);
          break;
        }
      default:
        {
          throw new JRRuntimeException(
              "Unkown print order " + jasperReport.getPrintOrderValue().getValue() + ".");
        }
    }

    runner = getRunnerFactory().createSubreportRunner(this, subreportFiller);
    subreportFiller.setSubreportRunner(runner);
  }