/**
* Copyright (c) 2014, Oracle and/or its affiliates.
* All rights reserved.
*/
/**
* @export
* @class oj.IntlConverterUtils
* @classdesc Utility function for converters
* @since 0.7
*/
oj.IntlConverterUtils = {};
/**
* Returns a local Date object provided a local isoString
*
* @param {string} isoString date in isoString format
* @returns {Date} localDate
* @expose
* @since 0.7
*/
oj.IntlConverterUtils.isoToLocalDate = function(isoString)
{
return OraI18nUtils.isoToLocalDate(isoString);
}
/**
* Returns a local isoString provided a Date object
*
* @param {Date} date
* @returns {string} isoString
* @expose
* @since 0.7
*/
oj.IntlConverterUtils.dateToLocalIso = function(date)
{
return OraI18nUtils.dateToLocalIso(date);
}
/**
* Returns a Date object provided an isoString ignoring the timezone
*
* @param {string} isoString date in isoString format
* @returns {Date} date ignoring the timezeon
* @expose
* @ignore
* @since 0.7
*/
oj.IntlConverterUtils._isoToLocalDateIgnoreTimezone = function(isoString)
{
return OraI18nUtils._isoToLocalDateIgnoreTimezone(isoString);
}
oj.IntlConverterUtils._getTimeZone = function(isoString)
{
return OraI18nUtils._getTimeZone(isoString);
}
/**
* Given either an Object literal representing a 'converter' option (used in components) or a
* converter instance of type oj.Converter, this method returns the converter instance.
*
* @param {Object} converterOption
* @returns {Object} converterInstance or null if a converter cannot be determined
* @expose
* @since 0.6
*/
oj.IntlConverterUtils.getConverterInstance = function (converterOption)
{
var cTypeStr = "", cOptions = {}, converterInstance = null, cf;
if (converterOption)
{
if (typeof converterOption === "object")
{
// TODO: Should we check that it duck types oj.Converter?
if (converterOption instanceof oj.Converter ||
(converterOption['parse'] && typeof converterOption['parse'] === "function") ||
(converterOption['format'] && typeof converterOption['format'] === "function"))
{
// we are dealing with a converter instance
converterInstance = converterOption;
}
else
{
// check if there is a type set
cTypeStr = converterOption['type'];
cOptions = converterOption['options'] || {};
}
}
if (!converterInstance)
{
// either we have an object literal or just plain string.
cTypeStr = cTypeStr || converterOption;
if (cTypeStr && typeof cTypeStr === "string")
{
// if we are passed a string get registered type.
cf = oj.Validation.converterFactory(cTypeStr);
converterInstance = cf.createConverter(cOptions);
}
}
}
return converterInstance;
};
// PACKAGE PRIVATE
/**
* Processes an converter option error and returns a oj.ConverterERror instance.
* @param {string} errorCode
* @param {Object} parameterMap
* @return {Object} an oj.ConverterError instance
* @private
*/
oj.IntlConverterUtils.__getConverterOptionError = function(errorCode, parameterMap)
{
oj.Assert.assertObject(parameterMap);
var summary = "", detail = "", propName = parameterMap['propertyName'], reqPropName,
propValueValid;
if (errorCode === "optionTypesMismatch")
{
reqPropName = parameterMap['requiredPropertyName'];
propValueValid = parameterMap['requiredPropertyValueValid'];
// Summary: A value for the property '{requiredPropertyName}' is required when the property
// '{propertyName}' is set to '{propertyValue}'.
summary = oj.Translations.getTranslatedString("oj-converter.optionTypesMismatch.summary",
{'propertyName': propName,
'propertyValue': parameterMap['propertyValue'],
'requiredPropertyName': reqPropName});
detail = oj.IntlConverterUtils._getOptionValueDetailMessage(reqPropName, propValueValid);
}
else if (errorCode === "optionTypeInvalid")
{
// Summary: A value of the expected type was not provided for '{propertyName}'.
propName = parameterMap['propertyName'];
propValueValid = parameterMap['propertyValueValid'];
summary = oj.Translations.getTranslatedString("oj-converter.optionTypeInvalid.summary",
{'propertyName': propName});
detail = oj.IntlConverterUtils._getOptionValueDetailMessage(propName, propValueValid);
}
else if (errorCode === "optionOutOfRange")
{
// The value {propertyValue} is out of range for the option '{propertyName}'.
summary = oj.Translations.getTranslatedString("oj-converter.optionOutOfRange.summary",
{'propertyName': propName,
'propertyValue': parameterMap['propertyValue']});
propValueValid = parameterMap['propertyValueValid'];
detail = oj.IntlConverterUtils._getOptionValueDetailMessage(propName, propValueValid);
}
else if (errorCode === "optionValueInvalid")
{
// An invalid value '{propertyValue}' was specified for the option '{propertyName}'..
summary = oj.Translations.getTranslatedString("oj-converter.optionValueInvalid.summary",
{'propertyName': propName,
'propertyValue': parameterMap['propertyValue']});
propValueValid = parameterMap['propertyValueHint'];
detail = oj.IntlConverterUtils._getOptionValueDetailMessage(propName, propValueValid);
}
return new oj.ConverterError(summary, detail);
};
/**
* Builds the detail message for possible converter option values. Only applicable when errorInfo is
* returned from JET converter implementation.
*
* @param {string} propName name of the property
* @param {Array|string} propValueValid valid value or values expected.
*
* @return {string} the localized message
* @private
*/
oj.IntlConverterUtils._getOptionValueDetailMessage = function (propName, propValueValid)
{
// Detail: An accepted value for '{propertyName}' is '{propertyValueValid}'. or
// Accepted values for '{propertyName}' are '{propertyValueValid}'.
var resourceKey;
if (propValueValid)
{
if (typeof propValueValid === "string")
{
resourceKey = "oj-converter.optionHint.detail";
}
else
{
// we have an array of values
resourceKey = "oj-converter.optionHint.detail-plural";
propValueValid =
propValueValid.join(oj.Translations.getTranslatedString("oj-converter.plural-separator"));
}
return oj.Translations.getTranslatedString(resourceKey,
{'propertyName': propName,
'propertyValueValid': propValueValid});
}
return "";
};
/**
* Returns the default value for non-truthy values.
*
* @returns {string} an empty string
* @private
*/
oj.IntlConverterUtils.__getNullFormattedValue = function ()
{
return "";
};
Source: src/main/javascript/oracle/oj/ojvalidation/IntlConverterUtils.js
Oracle® JavaScript Extension Toolkit (JET)
1.1.2
E65298-01