/**
   * Refreshes property values of the given report parameter by the given parameter definition and
   * cached parameter definition. If values in cached parameter definition is null or values in
   * cached parameter definition are not equal to values in parameter defnition, update values in
   * given report parameter.
   *
   * @param reportParam the report parameter
   * @param paramDefn the ODA parameter definition
   * @param cachedParamDefn the cached ODA parameter definition in designerValues
   * @param dataType the updated data type
   * @param setHandle the ROM data set that has the corresponding data set parameter
   * @throws SemanticException if value in the data set design is invalid
   */
  void updateLinkedReportParameter(
      AbstractScalarParameterHandle reportParam,
      ParameterDefinition paramDefn,
      ParameterDefinition cachedParamDefn,
      OdaDataSetHandle setHandle)
      throws SemanticException {
    if (paramDefn == null) return;

    CommandStack cmdStack = reportParam.getModuleHandle().getCommandStack();
    try {
      cmdStack.startTrans(null);

      updateAbstractScalarParameter(reportParam, paramDefn, cachedParamDefn, setHandle);

    } catch (SemanticException e) {
      cmdStack.rollback();
      throw e;
    }

    cmdStack.commit();
  }