code: public void run(Map<String, Object> extra) {
          if (getParameterConfig() != null)
          {
              Boolean parametersRequired = false;
              List<String> requiredParameters = new ArrayList<String>();
              for (ParamConfig paramConfig : getParameterConfig())
              {
                  if (BooleanUtils.isTrue(paramConfig.getRequired()))
                  {
                      try {
                          if (StringUtils.isBlank(ObjectUtils.toString(PropertyUtils.getProperty(paramConfig, "value"))))
                          {
                              parametersRequired = true;
                              requiredParameters.add(paramConfig.getName());
                          }
                      } catch (IllegalAccessException e) {
                          e.printStackTrace();
                      } catch (InvocationTargetException e) {
                          e.printStackTrace();
                      } catch (NoSuchMethodException e) {
                          e.printStackTrace();
                      }
                  }
              }
              if (parametersRequired)
              {
                  errors.add("Some required parameters weren't filled in: " + StringUtils.join(requiredParameters ,", ")+ ".");
                  return;
              }
          }
          runReport(extra);
      }
docs: Runs the report.
  @param extra middleware provided values, such as date/time, system configuration, logged in user, permissions
  and what ever else is of value to the user.