blob: 8fb13f87980ebe9f5443e6fa9713313963369b26 [file] [log] [blame]
// Copyright (c) 2000-2017 Ericsson Telecom AB //
// All rights reserved. This program and the accompanying materials are made available under the //
// terms of the Eclipse Public License v1.0 which accompanies this distribution, and is available at //
// http://www.eclipse.org/legal/epl-v10.html //
///////////////////////////////////////////////////////////////////////////////////////////////////////
/** Common functionality for applications, such as
- mainLoop,
- request issuing
- response comparison
- binding between view and viewModel */
var WebApplications = WebApplications || [];
WebApplications.push({'application': new CustomizableApp()});
function CustomizableApp() {
"use strict";
var m_appBase = new WebAppBase();
var m_DataSourceUtils = new DataSourceUtils();
var m_webAppModel;
var m_viewModel;
var m_view;
var m_Binder;
var m_model;
var m_frameWork;
var cssfiles = [];
this.info = function() {
return {
defaultIcon: "WebApplications/CustomizableApp/Res/main_icon.png",
defaultName: "CustomizableApp"
};
};
this.load = function(webAppModel, params, framework) {
m_frameWork = framework;
var jsfiles = [
"WebApplications/CustomizableApp/ViewModel.js",
"WebApplications/CustomizableApp/View.js",
"WebApplications/CustomizableApp/Model.js"
];
var alwaysLoadableJsFiles = [];
function setupLoaded(ok, setup, setupName) {
if (ok) {
// load js and css files of main files, views and viewmodels, start the application
new MultipleDirectoryListTask(
[
"WebApplications/CustomizableApp/Views",
"WebApplications/CustomizableApp/ViewModels",
params.customization + "/ViewModels",
params.customization + "/Views"
],
m_webAppModel.getFileHandler()
).taskOperation(function(ok, resources) {
jsfiles = jsfiles.concat(resources.jsfiles);
cssfiles = resources.cssfiles;
//htmlfiles = resources.htmlfiles;
m_appBase.load(jsfiles, alwaysLoadableJsFiles, start, m_webAppModel.getFileHandler());
});
} else {
alert("Failed to load setup " + setupName);
}
}
function appConfigLoaded(config) {
if (config.filesToInclude != undefined) {
alwaysLoadableJsFiles = config.filesToInclude;
}
if (params.setup != undefined) {
m_webAppModel.getSetupModel().loadSetup(params.setup, setupLoaded, false, params.setupParams);
} else if (config.setup != undefined) {
m_webAppModel.getSetupModel().loadSetup(config.setup, setupLoaded, false, config.setupParams);
} else {
alert('No setup was specified in config.');
}
}
m_webAppModel = webAppModel;
// set setup directory
if (params.customization != undefined) {
m_webAppModel.getSetupModel().setSetupDirectory(params.customization + '/Setups');
} else {
alert('Customizable app customization directory not set in params.');
return;
}
// load app config
m_webAppModel.loadAppConfig(params.customization + '/AppConfig.json', appConfigLoaded);
};
this.unload = function(webappUnloaded) {
m_appBase.unload(destroy);
webappUnloaded(true);
};
/** private functions */
function start(p_callback) {
m_model = new CCustomizableApp_Model(m_webAppModel, m_frameWork);
m_viewModel = new CViewModel(m_model, m_DataSourceUtils);
m_view = new CView(m_viewModel, "customAppMainview", "TSGuiFrameworkMain");
function callback(ok, msg) {
if (ok) {
m_webAppModel.getFileHandler().loadCssFiles(cssfiles, "customAppMainview");
m_viewModel.applicationCreated();
m_viewModel.initRequestSelectionsAndFiltersAtStart();
m_view.applicationCreated();
m_Binder = new CBinder(m_viewModel, m_view, m_DataSourceUtils);
m_Binder.start();
} else {
alert(msg);
}
if (typeof p_callback === "function") {
p_callback();
}
}
var taskList = new SyncTaskList([new GenericTask(m_viewModel.init), new GenericTask(m_view.init)], callback);
taskList.taskOperation();
}
function destroy() {
m_view.destroy();
m_Binder.stop();
m_Binder = undefined;
m_view = undefined;
m_viewModel = undefined;
}
}
function CBinder(aViewModel, aView, aDataSourceUtils)
{
"use strict";
/** constructor and private members */
var mOutstandingRequests = 0;
var mLastResponse;
var mViewModel = aViewModel;
var mView = aView;
var ERunningState = {EStopped:0, ERunning:1, EStopping:2};
var mRunning = ERunningState.EStopped;
var mThis = this;
var mRefreshInterval = 1000;
if (mViewModel.getUIConfig().refreshInterval != undefined) {
mRefreshInterval = mViewModel.getUIConfig().refreshInterval;
}
var mDataSourceUtils = aDataSourceUtils;
aViewModel.setBinder(this);
var mInterval;
/** public functions */
this.start = function()
{
if (mRunning !== ERunningState.ERunning)
{
mRunning = ERunningState.ERunning;
mThis.mainLoop();
if (mRefreshInterval != -1) {
mInterval = setInterval(mThis.mainLoop, mRefreshInterval);
}
}
};
this.stop = function()
{
mRunning = ERunningState.EStopping;
if (mInterval != undefined)
clearInterval(mInterval);
mInterval = undefined;
};
this.notifyChange = function(aDisableViews, aFiredFromLoop)
{
function dataArrived(aData) {
if (aDisableViews && mViewModel.getUIConfig().overlayEnabledOnSelect) {
mView.enableViews();
}
responseArrived(aData)
}
if (mOutstandingRequests == 0 || !aFiredFromLoop)
{
if (aDisableViews && mViewModel.getUIConfig().overlayEnabledOnSelect) {
mView.disableViews();
}
mViewModel.getChangedData(dataArrived);
mOutstandingRequests++;
}
};
this.mainLoop = function()
{
if (mRunning === ERunningState.ERunning)
{
mThis.notifyChange(false, true);
}
};
this.reloadSetup = function()
{
mViewModel.getChangedData(function(aResponse) {
mView.destroySetupOnly();
mView.reInitSetup();
mViewModel.applicationCreated();
mView.applicationCreated();
mView.refreshView(true);
mLastResponse = null;
mThis.enableViews();
mThis.start();
});
}
this.enableViews = function() {
mView.enableViews();
};
this.disableViews = function(aDoNotShowSpinningCircle) {
mView.disableViews(aDoNotShowSpinningCircle);
};
this.isRunning = function() {
return mRunning === ERunningState.ERunning;
}
/** private functions */
function responseArrived(aData)
{
mOutstandingRequests--;
if (aData)
{
if (mRunning === ERunningState.ERunning)
{
if (!mDataSourceUtils.dataSkeletonEquals(mLastResponse, aData))
{
if (mDataSourceUtils.isResponseToRequest(aData, mViewModel.getRequest()))
{
mLastResponse = aData;
mViewModel.initRequestSelectionsAndFilters();
mView.refreshView(true);
}
}
else
{
mView.refreshView(false);
}
}
else if (mRunning === ERunningState.EStopping)
{
mRunning = ERunningState.EStopped;
}
}
}
}
//# sourceURL=CustomizableApp\Main.js