goog.provide('spv.ds.DsClientSettings');
goog.provide('spv.ds.DsClientValidatedSettings');
/**
* @export
* @constructor
*/
spv.ds.DsClientSettings = function()
{
/**
* @type {?boolean}
* @nocollapse
*/
this.use_jsonp = null;
/**
* @type {?boolean}
* @nocollapse
*/
this.use_nova_protocol = null;
/**
* @type {?boolean}
* @nocollapse
*/
this.debug_print = null;
/**
* A callback to notify whenever the protocol issues an Unauthorized Session
* error. The error will pass to the call-specific error callback if this
* field is null.
* @type {?function( Error )}
* @nocollapse
*/
this.on_unauthorized_session = null;
/**
* A function that is called if the backend service cannot be reached.
* @type {?function( Error )}
* @nocollapse
*/
this.on_service_unavailable = null;
/**
* A function that is called if the backend service generates unexpected errors.
* @type {?function( Error )}
* @nocollapse
*/
this.on_service_failure = null;
/**
* Session Time To Live in seconds.
* Introduced to cleanup test session resources.
*
* 0 --> use server default.
*
* @type {number}
* @nocollapse
*/
this.session_ttl = 0;
/**
* Origin is used to track the outer client URL, the URL to the
* embedding page. The name is admittedly vague but it is the name used
* by the server side code.
*
* @type {?string}
* @nocollapse
*/
this.origin = null;
/**
* The initial value of a session's category.
*
* @type {?string}
* @nocollapse
*/
this.initial_category = null;
/**
* Allows to control which item interpreter logic is used for attempt_bip, bip and other methods
* that access gui items for the current session.
*
* @type {?string}
* @nocollapse
*/
this.item_interpreter_options = null;
};
/**
* Creates new settings by overloading these settings with another set of
* settings. Null properties are left untouched, but defined properties are
* taken from the argument settings.
*
* @export
* @param {!spv.ds.DsClientSettings} other
* @return {!spv.ds.DsClientSettings}
*/
spv.ds.DsClientSettings.prototype.overloadWith = function( other )
{
var new_settings = new spv.ds.DsClientSettings();
new_settings.use_jsonp =
(other.use_jsonp !== null) ?
other.use_jsonp : this.use_jsonp;
new_settings.use_nova_protocol =
(other.use_nova_protocol !== null) ?
other.use_nova_protocol : this.use_nova_protocol;
new_settings.debug_print =
(other.debug_print !== null) ?
other.debug_print : this.debug_print;
new_settings.on_unauthorized_session =
(other.on_unauthorized_session !== null) ?
other.on_unauthorized_session : this.on_unauthorized_session;
new_settings.on_service_unavailable =
(other.on_service_unavailable !== null) ?
other.on_service_unavailable : this.on_service_unavailable;
new_settings.on_service_failure =
(other.on_service_failure !== null) ?
other.on_service_failure : this.on_service_failure;
new_settings.session_ttl = other.session_ttl;
new_settings.origin =
(other.origin !== null) ?
other.origin : this.origin;
new_settings.origin = other.origin;
new_settings.initial_category =
(other.initial_category !== null) ?
other.initial_category : this.initial_category;
new_settings.item_interpreter_options =
(other.item_interpreter_options !== null) ?
other.item_interpreter_options : this.item_interpreter_options;
return new_settings;
};
/**
* @export
*/
spv.ds.DsClientSettings.prototype.assert_valid = function()
{
var error_msg = "Invalid DsClientSettings: ";
if( typeof(this.use_jsonp) != "boolean" )
throw new Error( error_msg + "use_jsonp not set." );
if( typeof(this.debug_print) != "boolean" )
throw new Error( error_msg + "debug_print not set." );
if( typeof(this.session_ttl) != "number" )
throw new Error( error_msg + "session_ttl not set." );
};
/**
* @export
* @return {!string}
*/
spv.ds.DsClientSettings.prototype.toString = function()
{
return "DsClientSettings{ use_jsonp : " + this.use_jsonp +
"; use_nova_protocol : " + this.use_nova_protocol +
"; debug_print : " + this.debug_print +
"}";
}
/**
* Internal type for validation of settings.
* @constructor
* @param {spv.ds.DsClientSettings} settings
*/
spv.ds.DsClientValidatedSettings = function( settings )
{
settings.assert_valid();
/**
* @type {boolean}
*/
this.use_jsonp = settings.use_jsonp === true;
/**
* @type {boolean}
*/
this.use_nova_protocol = settings.use_nova_protocol === true;
/**
* @type {boolean}
*/
this.debug_print = settings.debug_print === true;
/**
* @type {?function(Error)}
*/
this.on_unauthorized_session = settings.on_unauthorized_session;
/**
* @type {?function(Error)}
*/
this.on_service_unavailable = settings.on_service_unavailable;
/**
* @type {?function(Error)}
*/
this.on_service_failure = settings.on_service_failure;
/**
* @type {number}
*/
this.session_ttl = settings.session_ttl;
/**
* @type {string}
*/
this.origin = !!settings.origin ? settings.origin : "";
/**
* @type {string}
*/
this.initial_category = !!settings.initial_category ? settings.initial_category : "";
/**
* @type {string}
*/
this.item_interpreter_options = !!settings.item_interpreter_options ? settings.item_interpreter_options : "";
};