/**
   * Convert report parameter from string into object. Need to be pointed out is it return a Double
   * object when the value type is Float.
   *
   * @param reportParameterValue report parameter value in string.
   * @param parameterValueType report parameter type.
   * @return parameter value object.
   */
  public Object parse(String reportParameterValue, int parameterValueType) {
    Object parameterValueObj = null;

    if (reportParameterValue != null && uLocale != null) {
      switch (parameterValueType) {
        case IScalarParameterDefn.TYPE_STRING:
          {
            StringFormatter sf = getStringFormatter();
            if (sf == null) {
              parameterValueObj = null;
              break;
            }

            try {
              parameterValueObj = sf.parser(reportParameterValue);
            } catch (ParseException e) {
              parameterValueObj = reportParameterValue;
            }
            break;
          }

        case IScalarParameterDefn.TYPE_DATE_TIME:
          {
            parameterValueObj = parseDateTime(reportParameterValue);
            break;
          }

        case IScalarParameterDefn.TYPE_FLOAT:
          {
            NumberFormatter nf = getNumberFormatter();
            if (nf == null) {
              parameterValueObj = null;
              break;
            }

            try {
              Number num = nf.parse(reportParameterValue);

              if (num != null) {
                parameterValueObj = new Double(num.toString());
              }
            } catch (ParseException e) {
              nf.applyPattern("General Number");

              try {
                Number num = nf.parse(reportParameterValue);

                if (num != null) {
                  parameterValueObj = new Double(num.toString());
                }
              } catch (ParseException ex) {
                parameterValueObj = null;
              }
            }

            break;
          }

        case IScalarParameterDefn.TYPE_DECIMAL:
          {
            NumberFormatter nf = getNumberFormatter();
            if (nf == null) {
              parameterValueObj = null;
              break;
            }

            try {
              Number num = nf.parse(reportParameterValue);

              if (num != null) {
                parameterValueObj = new BigDecimal(num.toString());
              }
            } catch (ParseException e) {
              nf.applyPattern("General Number");

              try {
                Number num = nf.parse(reportParameterValue);

                if (num != null) {
                  parameterValueObj = new BigDecimal(num.toString());
                }
              } catch (ParseException ex) {
                parameterValueObj = null;
              }
            }

            break;
          }

        case IScalarParameterDefn.TYPE_BOOLEAN:
          {
            parameterValueObj = Boolean.valueOf(reportParameterValue);
            break;
          }

        case IScalarParameterDefn.TYPE_DATE:
          {
            try {
              parameterValueObj = java.sql.Date.valueOf(reportParameterValue);
            } catch (IllegalArgumentException ie) {
              parameterValueObj = parseDateTime(reportParameterValue);
              if (parameterValueObj != null) {
                parameterValueObj = new java.sql.Date(((Date) parameterValueObj).getTime());
              }
            }
            break;
          }

        case IScalarParameterDefn.TYPE_TIME:
          {
            try {
              parameterValueObj = java.sql.Time.valueOf(reportParameterValue);
            } catch (IllegalArgumentException ie) {
              parameterValueObj = parseDateTime(reportParameterValue);
              if (parameterValueObj != null) {
                parameterValueObj = new java.sql.Time(((Date) parameterValueObj).getTime());
              }
            }
            break;
          }

          // can use class DataTypeUtil to convert
        case IScalarParameterDefn.TYPE_INTEGER:
          {
            NumberFormatter nf = getNumberFormatter();
            if (nf == null) {
              parameterValueObj = null;
              break;
            }

            try {
              Number num = nf.parse(reportParameterValue);

              if (num != null) {
                parameterValueObj = Integer.valueOf(num.intValue());
              }
            } catch (ParseException ex) {
              nf.applyPattern("General Number");

              try {
                Number num = nf.parse(reportParameterValue);

                if (num != null) {
                  parameterValueObj = Integer.valueOf(num.intValue());
                }
              } catch (ParseException pex) {
                try {
                  parameterValueObj = Integer.valueOf(reportParameterValue);
                } catch (NumberFormatException nfe) {
                  parameterValueObj = null;
                }
              }
            }
          }
      }
    }

    return parameterValueObj;
  }