/**
* @fileoverview This file contains the IPad Protocol Adaptor and its related
* utility function. There is quite a lot of code dedicated to
* data structure conversion, this is intentional and provides a
* layer of abstraction between the exported web service code and
* GUI code. It is unclear at the time of writing if the VIViD
* protocol will be implemented in this client or if the ipad
* protocol will be implemented in the stand alone server. This
* abstraction of the protocol implementation will allow for both
* options.
*
* TODO: add more assertions of protocol data conversions later.
*
* @author anders.rejdebrant@spark-vision.com (Anders Rejdebrant)
*/
goog.provide('spv.vds.impl.IPPAdaptor');
goog.require('spv.vds.impl.IVdsProtocol');
goog.require('spv.vds.impl.IPPCommon');
goog.require('spv.ds.impl.IPPCommon');
goog.require('spv.vds.Campaign');
goog.require('spv.vds.CampaignCollection');
goog.require('spv.vds.ConfigQuickInfoResult');
goog.require('spv.ds.Loan');
goog.require('spv.vds.CCInputParam');
goog.require('spv.vds.VolvoCarSpec');
goog.require('spv.vds.VolvoCarSpecItem');
goog.require('spv.vds.VolvoCarSpecTechData');
goog.require('spv.vds.ipprot.IpadClient');
goog.require('spv.vds.ipprot_nova.IpadClient');
goog.require('spv.vds.ipprot.vds.ConfigQuickInfo');
goog.require('spv.vds.ipprot.vds.ConfigQuickInfoResult');
goog.require('spv.vds.ipprot.specification.Item');
goog.require('spv.vds.ipprot.specification.TechnicalDataAttribute');
goog.require('spv.vds.ipprot.specification.VolvoCarSpecification');
goog.require('spv.vds.ipprot.volvoboosterweb.VolvoRetailer');
goog.require('spv.vds.ipprot.volvocampaigns.Campaign');
goog.require('spv.vds.ipprot.volvocampaigns.CampaignCollection');
goog.require('spv.vds.ipprot.volvocampaigns.DigitalShowroomValues');
/**
* Protocol adaptor for spv.vds.ipprot.IpadClient
*
* Resposible for hiding protocol data types and interpreting reponse data to
* failures in cases where errors are reported inside the normal result data.
* eg. Result codes from load config operations.
*
* @constructor
* @implements {spv.vds.impl.IVdsProtocol}
* @param {string} service_url
*/
spv.vds.impl.IPPAdaptor = function(service_url)
{
var use_jsonp = true;
/** @type {spv.vds.ipprot.IpadClient|spv.vds.ipprot_nova.IpadClient} */
this._impl = new spv.vds.ipprot.IpadClient(service_url, use_jsonp);
};
/**
* @param {string} session_id
* @param {string} config_name
* @param {function(spv.vds.ConfigQuickInfoResult)} on_success
* @param {function(Error)} on_failure
*/
spv.vds.impl.IPPAdaptor.prototype.getConfigQuickInfo = function(
session_id,
config_name,
on_success,
on_failure)
{
/** @param {spv.vds.impl.RawConfigQuickInfoResult} qi_result */
var on_success_wrapper = function( qi_result )
{
on_success( spv.vds.impl.IPPCommon.convertToConfigQuickInfoResult( qi_result ) );
};
this._impl.get_config_quick_info(
session_id,
config_name,
on_success_wrapper,
on_failure);
}
/**
* @param {string} session_id
* @param {Function} on_success
* @param {function(Error)} on_failure
*/
spv.vds.impl.IPPAdaptor.prototype.sessionEnablePrivateLeasing = function(
session_id,
on_success,
on_failure)
{
this._impl.enable_private_leasing(
session_id,
on_success,
on_failure);
}
/**
* @param {string} session_id
* @param {Function} on_success
* @param {function(Error)} on_failure
*/
spv.vds.impl.IPPAdaptor.prototype.sessionDisablePrivateLeasing = function(
session_id,
on_success,
on_failure)
{
this._impl.disable_private_leasing(
session_id,
on_success,
on_failure);
}
/**
* @param {function(Array.<spv.vds.VolvoRetailer>)} on_success
* @param {function(Error)} on_failure
*/
spv.vds.impl.IPPAdaptor.prototype.getRetailers = function(
on_success,
on_failure)
{
/** @param {Array.<spv.vds.impl.RawVolvoRetailer>} rets */
var on_protocol_success = function(rets)
{
var volvo_retailers = spv.vds.impl.IPPCommon.convertToVolvoRetailers(rets);
on_success(volvo_retailers);
};
this._impl.vret_get_retailers(on_protocol_success, on_failure);
};
/**
* @param {spv.ds.Config} config
* @param {string} localization_id
* @param {function(spv.vds.VolvoCarSpec)} on_success
* @param {function(Error)} on_failure
*/
spv.vds.impl.IPPAdaptor.prototype.getSpecification = function(
config,
localization_id,
on_success,
on_failure)
{
/** @param {spv.vds.impl.RawCarSpecification} spec */
var proto_success = function(spec)
{
var volvo_car_spec = spv.vds.impl.IPPCommon.convertToVolvoCarSpec(spec);
on_success(volvo_car_spec);
};
this._impl.vspec_get_specification(
config.data,
config.encoding,
localization_id,
proto_success,
on_failure);
};
/**
* Disables company car pricing.
*
* @param {string} session_id
* @param {function()} on_success
* @param {function(Error)} on_failure
*/
spv.vds.impl.IPPAdaptor.prototype.sessionDisableCCPrices = function(
session_id,
on_success,
on_failure )
{
this._impl.vcomp_disable_company_car_prices(
session_id,
on_success,
on_failure );
};
/**
* Enables company car pricing.
*
* @param {string} session_id
* @param {function()} on_success
* @param {function(Error)} on_failure
*/
spv.vds.impl.IPPAdaptor.prototype.sessionEnableCCPrices = function(
session_id,
on_success,
on_failure )
{
this._impl.vcomp_enable_company_car_prices(
session_id,
on_success,
on_failure );
};
/**
* Updates the parameters for Company Cars pricing.
* @param {string} session_id
* @param {Object.<string,Object>} input_params
* @param {function(Object.<string,spv.vds.CCInputParam>)} on_success
* @param {function(Error)} on_failure
*/
spv.vds.impl.IPPAdaptor.prototype.sessionUpdateCCInputParams = function(
session_id,
input_params,
on_success,
on_failure )
{
/** @param {Object} reply */
var on_success_wrapper = function( reply )
{
/** @type {Array.<Object>} */
var raw_params = reply['cc_input_param_list'];
on_success( spv.vds.impl.IPPCommon.convertObjectsToCCParams( raw_params ) );
};
var raw_params = input_params; // convertCCParamsToObjects( input_params );
//console.log( raw_params );
this._impl.vcomp_update_input_params_2(
session_id,
raw_params,
on_success_wrapper,
on_failure );
};
/**
* @param {string} session_id
* @param {string} feed_id
* @param {function(spv.vds.CampaignCollection)} on_success
* @param {function(Error)} on_failure
*/
spv.vds.impl.IPPAdaptor.prototype.sessionGetCampaigns = function(
session_id,
feed_id,
on_success,
on_failure)
{
/** @param {spv.vds.impl.RawCampaignCollection} proto_cc */
var on_protocol_success = function(proto_cc)
{
var cc = spv.vds.impl.IPPCommon.convertToCampaignCollection(proto_cc);
on_success(cc);
};
this._impl.vcamp_get_campaigns(
session_id,
feed_id,
on_protocol_success,
on_failure);
};
/**
* @param {string} feed_id
* @param {function(spv.vds.CampaignCollection)} on_success
* @param {function(Error)} on_failure
*/
spv.vds.impl.IPPAdaptor.prototype.getCampaigns = function(
feed_id,
on_success,
on_failure )
{
throw new Error( "Not supported in legacy backend." );
};
/**
* @param {string} session_id
* @param {number} down_payment
* @param {number} interest_rate
* @param {number} number_of_months
* @param {function(spv.ds.Loan)} on_success
* @param {function(Error)} on_failure
*/
spv.vds.impl.IPPAdaptor.prototype.sessionSetLoan = function(
session_id,
down_payment,
interest_rate,
number_of_months,
on_success,
on_failure)
{
/** @param {Object} loan_obj */
var on_protocol_success = function(loan_obj)
{
var loan = spv.ds.impl.IPPCommon.convertToLoan(loan_obj);
on_success(loan);
};
this._impl.loan_set_loan_paramters(
session_id,
down_payment,
interest_rate,
number_of_months,
on_protocol_success,
on_failure);
};
/**
* @param {string} session_id
* @param {function(spv.ds.Loan)} on_success
* @param {function(Error)} on_failure
*/
spv.vds.impl.IPPAdaptor.prototype.sessionGetLoan = function(
session_id,
on_success,
on_failure)
{
/** @param {Object} loan_obj */
var on_protocol_success = function(loan_obj)
{
var loan = spv.ds.impl.IPPCommon.convertToLoan(loan_obj);
on_success(loan);
};
this._impl.loan_get_current_loan(
session_id,
on_protocol_success,
on_failure);
};
/**
* @param {string} session_id
* @param {function(spv.ds.Loan)} on_success
* @param {function(Error)} on_failure
*/
spv.vds.impl.IPPAdaptor.prototype.sessionResetLoan = function(
session_id,
on_success,
on_failure)
{
/** @param {Object} loan_obj */
var on_protocol_success = function(loan_obj)
{
var loan = spv.ds.impl.IPPCommon.convertToLoan(loan_obj);
on_success(loan);
};
this._impl.loan_reset(
session_id,
on_protocol_success,
on_failure);
};
/**
* @param {string} session_id
* @param {string} customer_first_name
* @param {string} customer_surname
* @param {string} customer_email
* @param {string} customer_phone
* @param {string} preferred_contact_time
* @param {string} preferred_contact_media
* @param {boolean} want_newsletter
* @param {boolean} want_summary_pdf
* @param {string} retailer_id
* @param {string} mail_link_url
* @param {function()} on_success
* @param {function(Error)} on_failure
*/
spv.vds.impl.IPPAdaptor.prototype.sessionSendMailToCustomerAndRetailer = function(
session_id,
customer_first_name,
customer_surname,
customer_email,
customer_phone,
preferred_contact_time,
preferred_contact_media,
want_newsletter,
want_summary_pdf,
retailer_id,
mail_link_url,
on_success,
on_failure )
{
/** @type {function(spv.vds.impl.RawMailRequestResult)} */
var on_backend_response = function( mail_request_result )
{
var code = spv.vds.ipprot.boosterconfig.RESULT_CODE;
var mail_code = spv.vds.ipprot.volvoboosterweb.MAIL_REQUEST_CODE;
if( mail_request_result.result_code != code.SUCCESS )
{
on_failure( new Error( mail_request_result.result_code ) );
return;
}
if( mail_request_result.retailer_mail_status_code == mail_code.FAILURE )
{
on_failure( new Error( "RETAILER " +
mail_request_result.retailer_mail_status_code ) );
return
}
if( mail_request_result.customer_mail_status_code == mail_code.FAILURE )
{
on_failure( new Error( "CUSTOMER " +
mail_request_result.customer_mail_status_code ) );
return;
}
on_success()
}
this._impl.vret_send_customer_and_retailer_mail(
session_id,
customer_first_name,
customer_surname,
customer_email,
customer_phone,
preferred_contact_time,
preferred_contact_media,
want_newsletter,
want_summary_pdf,
retailer_id,
mail_link_url,
on_backend_response,
on_failure );
};
/**
* @param {string} session_id
* @param {string} customer_first_name
* @param {string} customer_surname
* @param {string} customer_email
* @param {string} customer_phone
* @param {string} retailer_id
* @param {function()} on_success
* @param {function(Error)} on_failure
*/
spv.vds.impl.IPPAdaptor.prototype.sessionSendToTacdis = function(
session_id,
customer_first_name,
customer_surname,
customer_email,
customer_phone,
retailer_id,
on_success,
on_failure)
{
var on_backend_response = function( tacdis_result )
{
if( !tacdis_result.success )
{
on_failure( new Error( "send_to_tacdis failed." ) );
return;
}
on_success()
}
this._impl.send_to_tacdis(
session_id,
customer_first_name,
customer_surname,
customer_email,
customer_phone,
retailer_id,
on_backend_response,
on_failure);
};
/**
* @param {string} session_id
* @param {string} customer_email
* @param {boolean} want_newsletter
* @param {boolean} want_summary_pdf
* @param {string} mail_link_url
* @param {function()} on_success
* @param {function(Error)} on_failure
*/
spv.vds.impl.IPPAdaptor.prototype.sessionSendMailToCustomer = function(
session_id,
customer_email,
want_newsletter,
want_summary_pdf,
mail_link_url,
on_success,
on_failure )
{
/** @type {function(spv.vds.impl.RawMailRequestResult)} */
var on_backend_response = function( mail_request_result )
{
var code = spv.vds.ipprot.boosterconfig.RESULT_CODE;
var mail_code = spv.vds.ipprot.volvoboosterweb.MAIL_REQUEST_CODE;
if( mail_request_result.result_code != code.SUCCESS )
{
on_failure( new Error( mail_request_result.result_code ) );
return;
}
if( mail_request_result.retailer_mail_status_code == mail_code.FAILURE )
{
on_failure( new Error( "RETAILER " +
mail_request_result.retailer_mail_status_code ) );
return
}
if( mail_request_result.customer_mail_status_code == mail_code.FAILURE )
{
on_failure( new Error( "CUSTOMER " +
mail_request_result.customer_mail_status_code ) );
return;
}
on_success()
}
this._impl.vret_send_customer_mail(
session_id,
customer_email,
want_newsletter,
want_summary_pdf,
mail_link_url,
on_backend_response,
on_failure);
};
/**
* @param {string} session_id
* @param {string} business_group_retailer_id
* @param {function()} on_success
* @param {function(Error)} on_failure
*/
spv.vds.impl.IPPAdaptor.prototype.sessionSetRetailerBusinessGroup = function (
session_id,
business_group_retailer_id,
on_success,
on_failure) {
throw new Error("Not supported in legacy backend.");
};
/**
* @param {string} session_id
* @param {string} template_name
* @param {string} retailer_id
* @param {function(string)} on_success
* @param {function(Error)} on_failure
*/
spv.vds.impl.IPPAdaptor.prototype.sessionGenerateRetailerHtmlForPdf = function(
session_id,
template_name,
retailer_id,
on_success,
on_failure)
{
throw new Error("Not supported in legacy backend.");
};