protected void copyValue(JRFillSubreportReturnValue returnValue) {
    try {
      JRFillVariable variable = filler.getVariable(returnValue.getToVariable());
      Object value = subreportFiller.getVariableValue(returnValue.getSubreportVariable());

      Object newValue =
          returnValue
              .getIncrementer()
              .increment(variable, value, AbstractValueProvider.getCurrentValueProvider());
      variable.setOldValue(newValue);
      variable.setValue(newValue);
      variable.setIncrementedValue(newValue);
    } catch (JRException e) {
      throw new JRRuntimeException(e);
    }
  }
  protected void revertToOldValues() {
    if (fields != null && fields.length > 0) {
      for (int i = 0; i < fields.length; i++) {
        JRFillField field = fields[i];
        field.setValue(field.getOldValue());
        field.setOldValue(field.getPreviousOldValue());
      }
    }

    if (variables != null && variables.length > 0) {
      for (int i = 0; i < variables.length; i++) {
        JRFillVariable variable = variables[i];
        variable.setValue(variable.getOldValue());
        variable.setOldValue(variable.getPreviousOldValue());
      }
    }
  }