// obtains the data and calculates the grid of results
  private static void calculate(CalculationRunner runner) {
    // the trades that will have measures calculated
    List<Trade> trades = createCdsTrades();

    // the columns, specifying the measures to be calculated
    List<Column> columns =
        ImmutableList.of(
            Column.of(Measure.PRESENT_VALUE),
            Column.of(Measure.PAR_RATE),
            Column.of(Measure.RECOVERY01),
            Column.of(Measure.JUMP_TO_DEFAULT),
            Column.of(Measure.IR01_PARALLEL_PAR),
            Column.of(Measure.IR01_PARALLEL_ZERO),
            Column.of(Measure.CS01_PARALLEL_PAR),
            Column.of(Measure.CS01_PARALLEL_HAZARD),
            Column.of(Measure.IR01_BUCKETED_PAR),
            Column.of(Measure.IR01_BUCKETED_ZERO),
            Column.of(Measure.CS01_BUCKETED_PAR),
            Column.of(Measure.CS01_BUCKETED_HAZARD));

    // use the built-in example market data
    ExampleMarketDataBuilder marketDataBuilder = ExampleMarketData.builder();

    // the complete set of rules for calculating measures
    CalculationRules rules =
        CalculationRules.builder()
            .pricingRules(StandardComponents.pricingRules())
            .marketDataRules(marketDataBuilder.rules())
            .build();

    // build a market data snapshot for the valuation date
    LocalDate valuationDate = LocalDate.of(2014, 10, 16);
    MarketEnvironment marketSnapshot = marketDataBuilder.buildSnapshot(valuationDate);

    // calculate the results
    Results results = runner.calculateSingleScenario(rules, trades, columns, marketSnapshot);

    // use the report runner to transform the engine results into a trade report
    ReportCalculationResults calculationResults =
        ReportCalculationResults.of(valuationDate, trades, columns, results);

    TradeReportTemplate reportTemplate = ExampleData.loadTradeReportTemplate("cds-report-template");
    TradeReport tradeReport = TradeReport.of(calculationResults, reportTemplate);
    tradeReport.writeAsciiTable(System.out);
  }