docs: @Nonnull
    public static JSAnonymousFunction createFooterCallbackColumnSum (@Nonnull FooterCallbackSumColumn... aColumns)
    {
      ValueEnforcer.notEmpty (aColumns, "Columns");
  
      final JSAnonymousFunction ret = new JSAnonymousFunction ();
      ret.param ("tfoot");
      ret.param ("data");
      ret.param ("start");
      ret.param ("end");
      ret.param ("display");
      final JSVar aAPI = ret.body ().var ("api", JSExpr.THIS.invoke ("api"));
  
      for (final FooterCallbackSumColumn aColumn : aColumns)
      {
        final String sSuffix = Integer.toString (aColumn.getPrintColumn ());
        final JSVar aIntVal = ret.body ().var ("funcIntVal" + sSuffix, aColumn.getJSFuncIntVal ());
        final JSVar aPrintSum = ret.body ().var ("funcPrintSum" + sSuffix, aColumn.getJSFuncPrintSum ());
  
        // The reduce function: plus
        final JSAnonymousFunction aFuncReduce = new JSAnonymousFunction ();
        {
          final JSVar aParam1 = aFuncReduce.param ("a");
          final JSVar aParam2 = aFuncReduce.param ("b");
          aFuncReduce.body ()
                     ._return (JSExpr.invoke (aIntVal).arg (aParam1).plus (JSExpr.invoke (aIntVal).arg (aParam2)));
        }
        final JSVar aReduce = ret.body ().var ("funcReduce" + sSuffix, aFuncReduce);
  
        // Calc overall total
        final JSVar aTotal = ret.body ()
                                .var ("total" + sSuffix,
                                      aAPI.invoke ("column")
                                          .arg (aColumn.getCalcColumn ())
                                          .invoke ("data")
                                          .invoke ("reduce")
                                          .arg (aReduce)
                                          .arg (0));
        // Calc visible total
        final JSVar aPageTotal = ret.body ()
                                    .var ("pagetotal" + sSuffix,
                                          aAPI.invoke ("column")
                                              .arg (aColumn.getCalcColumn ())
                                              .arg (new JSAssocArray ().add ("page", "current"))
                                              .invoke ("data")
                                              .invoke ("reduce")
                                              .arg (aReduce)
                                              .arg (0));
        // Update the respective footer
        ret.body ()
           .add (JQuery.jQuery (aAPI.invoke ("column").arg (aColumn.getPrintColumn ()).invoke ("footer"))
                       .html (JSExpr.invoke (aPrintSum).arg (aTotal).arg (aPageTotal)));
      }
  
      return ret;
    }