blob: 8fbdd01e50809948ee20888f1e1f883cdcb799e9 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*
*/
define(["dojo/parser",
"dojo/_base/lang",
"dojo/promise/all",
"dojo/Deferred",
"dojo/query",
"dojo/json",
"qpid/common/util",
"dojo/text!showDashboardTab.html",
"qpid/common/MessageDialog",
"qpid/management/dashboard/DashboardWidget",
"dojo/domReady!"],
function (parser, lang, all, Deferred, query, json, util, template, MessageDialog)
{
function DashboardTab(kwArgs)
{
this.controller = kwArgs.controller;
this.tabData = kwArgs.tabData;
this.parent = kwArgs.tabData.modelObject;
this.management = this.controller.management;
this.changed = !this.tabData.data || !this.tabData.data.name;
}
DashboardTab.prototype.getTitle = function ()
{
if (this.tabData.preferenceId && !this.tabData.data)
{
return "Loading...";
}
var name = this.tabData.data.name ? this.tabData.data.name : "New";
var prefix = this.tabData.data.name && !this.changed ? "" : "*";
var path = this.controller.structure.getHierarchicalName(this.parent);
return prefix + "Dashboard:" + name + path;
};
DashboardTab.prototype.open = function (contentPane)
{
this.contentPane = contentPane;
contentPane.containerNode.innerHTML = template;
var parserPromise = parser.parse(contentPane.containerNode);
var preferencePromise = null;
if (this.tabData.preferenceId && !this.tabData.data)
{
preferencePromise = this.management.getPreferenceById(this.parent, this.tabData.preferenceId);
}
else
{
var deferred = new Deferred();
var obj = {};
obj[this.tabData.data.type] = [this.tabData.data];
deferred.resolve(obj);
preferencePromise = deferred.promise;
}
all({parser: parserPromise, preference: preferencePromise})
.then(lang.hitch(this, function (data)
{
for (var type in data.preference)
{
var preferences = data.preference[type];
if (preferences[0])
{
this.tabData.data = preferences[0];
this.changed = !this.tabData.data.name;
}
if (preferences.length !== 1)
{
console.warn("Unexpected number of preferences returned for id "
+ this.tabData.preferenceId);
}
}
if (this.tabData.data)
{
this.onOpen(contentPane.containerNode)
}
else
{
this.management.userPreferences.removeTab(this.tabData);
this.destroy();
}
}), lang.hitch(this, function (e)
{
this.management.errorHandler(e);
}));
};
DashboardTab.prototype.onOpen = function (containerNode)
{
this.contentPane.set("title", this.getTitle());
this.dashboardWidgetNode = query(".dashboardWidgetNode", containerNode)[0];
this.dashboardWidget = new qpid.management.dashboard.DashboardWidget({
management: this.management,
parentObject: this.parent,
preference: this.tabData.data,
controller: this.controller,
structure: this.controller.structure
}, this.dashboardWidgetNode);
this.dashboardWidget.on("save", lang.hitch(this, function(e)
{
this.tabData.data = e.preference;
this.changed = false;
var title = this.getTitle();
this.contentPane.set("title", title);
}));
this.dashboardWidget.on("change", lang.hitch(this, function(e)
{
this.changed = true;
var title = this.getTitle();
this.contentPane.set("title", title);
}));
this.dashboardWidget.on("delete", lang.hitch(this, function(e)
{
this.management.userPreferences.removeTab(this.tabData);
this.destroy();
}));
this.dashboardWidget.on("clone", lang.hitch(this, function(e)
{
this.controller.showTab({
preferenceId: e.preference.id,
tabType: "dashboard",
data: e.preference,
modelObject: e.parentObject
});
}));
this.dashboardWidget.startup();
this.contentPane.on("show", lang.hitch(this, function ()
{
this.dashboardWidget.activate();
}));
this.contentPane.on("hide", lang.hitch(this, function ()
{
this.dashboardWidget.deactivate();
}));
};
DashboardTab.prototype.close = function ()
{
if (!this.changed)
{
this.destroy();
return true;
}
MessageDialog.confirm({
title: "Discard unsaved changed?",
message: "<div>Dashbord contains unsaved changes.<br/>Would you like to close it anyway?</div>",
confirmationId: "dashboard.confirmation.close.changed"
})
.then(lang.hitch(this, function(){this.destroy(true);}));
return false;
};
DashboardTab.prototype.destroy = function (destroyContentPane)
{
if (this.destroyed)
{
return;
}
this.destroyed = true;
this.changed = false;
this.contentPane.onClose();
if (this.dashboardWidget != null)
{
this.dashboardWidget.destroyRecursive();
this.dashboardWidget = null;
}
if (destroyContentPane)
{
this.contentPane.getParent().removeChild(this.contentPane);
this.contentPane.destroyRecursive();
}
};
DashboardTab.stopDisplayingConfirmation = false;
return DashboardTab;
});