/*
* @file Simple info access (SINA) API: Factory
* @namespace sap.bc.ina.api.sina
* @requires jQuery
* @copyright Copyright (c) 2013 SAP AG. All rights reserved.
*/
if (typeof window === 'undefined') {
$.import("sinaxsjq.xsjslib");
$.import("filter.xsjslib");
$.import("impl/inav2/filter.xsjslib");
$.import("sinabase.xsjslib");
$.import("impl/inav2/jsontemplates.xsjslib");
$.import("proxy.xsjslib");
$.import("impl/inav2/proxy.xsjslib");
$.import("system.xsjslib");
$.import("impl/inav2/system.xsjslib");
$.import("impl/inav2/sina_impl.xsjslib");
}
(function(global, isXS) {
"use strict";
var executeSina = function($) {
if (!$)
{
$ = global.$;
}
if (!isXS) {
global.sap.bc.ina.api.sina.expandPackage(global, 'sap.bc.ina.api.sina');
}
var module = global.sap.bc.ina.api.sina;
module.properties = module.properties || {};
var api = global.sap.bc.ina.api;
// var inaV2Proxy = global.sap.bc.ina.api.sina.impl.inav2.proxy;
// // var config = proxy.config;
// var inaV2System = global.sap.bc.ina.api.sina.impl.inav2.system;
var sinabase = global.sap.bc.ina.api.sina.sinabase;
// =========================================================================
// global fields
// =========================================================================
if(global.sap.bc.ina.api.sina.impl&&global.sap.bc.ina.api.sina.impl.inav2&&global.sap.bc.ina.api.sina.impl.inav2.sina_impl&&global.sap.bc.ina.api.sina.impl.inav2.sina_impl.IMPL_TYPE){
/**
* SAP HANA info access HTTP service implementation of SINA.
* @memberOf sap.bc.ina.api
* @constant
*/
api.SINA_TYPE_INAV2 = global.sap.bc.ina.api.sina.impl.inav2.sina_impl.IMPL_TYPE;
}
/**
* Factory method for the SINA API. Optionally, you can choose a service implementation to be used.
* @memberOf sap.bc.ina.api.sina
* @param {Object} [properties]
* @param {String} [properties.impl_type=sap.bc.ina.api.sina.impl.inav2.sina_impl.IMPL_TYPE] Define the service type to be used by the SINA API.
* @return {sap.bc.ina.api.sina.sinabase.Sina} The instance of SINA. If no properties object was provided, it will return an instance
* that uses the info access HTTP service (V2) on an SAP HANA system.
* @since SAP HANA SPS 06
* @public
*/
global.sap.bc.ina.api.sina.getSina = function(properties) {
properties = properties || {};
properties.impl_type = properties.impl_type || api.SINA_TYPE_INAV2;
if(properties.impl_type === api.SINA_TYPE_INAV2){
if (!properties.system) {
//create default proxy with settings from config.js
var sys;
// if (config) {
// proxyProperties = {
// httpMethod : config.httpMethod,
// cachelifetime : config.cachelifetime,
// demoMode : config.demoMode,
// record : config.record
// };
// }
var inaV2Proxy = global.sap.bc.ina.api.sina.impl.inav2.proxy;
var inaV2System = global.sap.bc.ina.api.sina.impl.inav2.system;
var newProxy = new inaV2Proxy.Proxy(properties);
if (properties.systemType && properties.systemType.toUpperCase() === "ABAP") {
sys = new inaV2System.ABAPSystem({
'proxy': newProxy
});
} else {
sys = new inaV2System.HANASystem({
'proxy': newProxy
});
}
newProxy.setXSRFService(sys.infoUrl);
properties.system = sys;
}
}
if(sinabase.provider[properties.impl_type]&&sinabase.provider[properties.impl_type].sina){
var sina = new sinabase.provider[properties.impl_type].sina(properties);
sina._provider = sinabase.provider[properties.impl_type];
return sina;
}
return {};
};
if (!isXS) {
module.properties.noDefaultSina = module.properties.noDefaultSina || false;
if (module.properties.noDefaultSina !== undefined && !module.properties.noDefaultSina) {
/**
* Default instantiation of SINA. After page load a SINA instance will be provided with default
* settings if there is not already a global SINA instance at sap.bc.ina.api.sina.
* If you need other settings, create your own SINA instance using the factory @link {sap.bc.ina.api.sina.getSina}
* You can turn off the default instatiation by setting a variable sap.bc.ina.api.properties.noDefaultSina to true
* BEFORE sina.js is loaded!
* @memberOf sap.bc.ina.api.sina
* @type {sap.bc.ina.api.sina.impl.inav2.Sina}
* @since SAP HANA SPS 06
*/
global.sap.bc.ina.api.sina = $.extend({}, module, module.getSina(module.properties)); // without extend the new global sina instance would overwrite everything after sap.bc.ina.sina !!!
return global.sap.bc.ina.api.sina;
}
return {};
} else {
global.sap.bc.ina.api.sinaxs = global.sap.bc.ina.api.sinaxs || module.getSina(module.properties);
return global.sap.bc.ina.api.sinaxs;
}
};
if (isXS) {
executeSina($.sap.bc.ina.api.sina.sinaxsjq.jq);
}
else if(global.sap && global.sap.ushell){
executeSina(); // only concatenated sina is in ushell repo!
}
else if (typeof define === "function" && define.amd) {
define( ["jquery",
"require",
"./filter",
"./impl/inav2/sina_impl"],
function($) {
var sina = executeSina($);
// sina.filter = global.sap.bc.ina.api.sina.impl.inav2.filter;
// sina.systems = global.sap.bc.ina.api.sina.impl.inav2.system;
return sina;
});
}
else {
executeSina();
}
}(typeof window === 'undefined' ? $ : window, typeof window === 'undefined'));