You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by lq...@apache.org on 2016/05/02 17:57:54 UTC
svn commit: r1741993 [6/29] - in /qpid/java/trunk:
bdbstore/src/main/java/resources/js/qpid/management/virtualhost/bdb/
bdbstore/src/main/java/resources/js/qpid/management/virtualhost/bdb_ha/
bdbstore/src/main/java/resources/js/qpid/management/virtualh...
Modified: qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/common/util.js
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/common/util.js?rev=1741993&r1=1741992&r2=1741993&view=diff
==============================================================================
--- qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/common/util.js (original)
+++ qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/common/util.js Mon May 2 15:57:52 2016
@@ -50,872 +50,881 @@ define(["dojo/_base/xhr",
"dojox/validate/us",
"dojox/validate/web",
"dojo/domReady!"],
- function (xhr, array, event, lang, json, dom, geometry, domStyle, win, query, parser, Memory, w, on, entities, widgetconfigurer, registry, WarningPane, updater)
- {
- var util = {};
- if (Array.isArray)
- {
- util.isArray = function (object)
- {
- return Array.isArray(object);
- };
- }
- else
- {
- util.isArray = function (object)
- {
- return object instanceof Array;
- };
- }
-
- util.flattenStatistics = function (data)
- {
- var attrName, stats, propName, theList;
- for (attrName in data)
- {
- if (data.hasOwnProperty(attrName))
- {
- if (attrName == "statistics")
- {
- stats = data.statistics;
- for (propName in stats)
- {
- if (stats.hasOwnProperty(propName))
- {
- data[propName] = stats[propName];
- }
- }
- }
- else if (data[attrName] instanceof Array)
- {
- theList = data[attrName];
-
- for (var i = 0; i < theList.length; i++)
- {
- util.flattenStatistics(theList[i]);
- }
- }
- }
- }
- };
-
- util.isReservedExchangeName = function (exchangeName)
- {
- return exchangeName == null || exchangeName == "" || "<<default>>" == exchangeName
- || exchangeName.indexOf("amq.") == 0 || exchangeName.indexOf("qpid.") == 0;
- };
-
- util.confirmAndDeleteGridSelection = function (grid, confirmationMessageStart, deleteFunction)
- {
- var data = grid.selection.getSelected();
- var confirmed = false;
- if (data.length)
- {
- var confirmationMessage = null;
- if (data.length == 1)
- {
- confirmationMessage = confirmationMessageStart + " '" + data[0].name + "'?";
- }
- else
- {
- var names = '';
- for (var i = 0; i < data.length; i++)
- {
- if (names)
- {
- names += ', ';
- }
- names += "\"" + data[i].name + "\"";
- }
- confirmationMessage = confirmationMessageStart + "s " + names + "?";
- }
-
- if (confirm(confirmationMessage))
- {
- confirmed = true;
- deleteFunction(data);
- }
- }
- return confirmed;
- }
-
- util.buildDeleteQuery = function (data, url, idParam)
- {
- var queryParam;
- for (var i = 0; i < data.length; i++)
- {
- if (queryParam)
- {
- queryParam += "&";
- }
- else
- {
- queryParam = "?";
- }
- queryParam += ( idParam || "id" ) + "=" + encodeURIComponent(data[i].id);
- }
- return url + queryParam;
- }
-
- util.deleteSelectedObjects =
- function (grid, confirmationMessageStart, management, modelObj, updater, idParam, callback)
- {
- return util.confirmAndDeleteGridSelection(grid, confirmationMessageStart, function (data)
- {
- util.deleteObjects(management, data, modelObj, idParam, grid, updater, callback);
- });
- }
-
- util.deleteObjects = function (management, data, modelObj, idParam, grid, updater, callback)
- {
- var name = idParam || "id";
- var parameters = {};
- parameters[name] = [];
- for (var i = 0; i < data.length; i++)
- {
- parameters[name].push(data[i].id);
-
- }
- management.remove(modelObj, parameters).then(function (result)
- {
- grid.selection.deselectAll();
- if (updater)
- {
- updater.update();
- }
- if (callback)
- {
- callback(data);
- }
- }, util.xhrErrorHandler);
- }
-
- util.deleteSelectedRows =
- function (grid, confirmationMessageStart, management, url, updater, idParam, callback)
- {
- return util.confirmAndDeleteGridSelection(grid, confirmationMessageStart, function (data)
- {
- util.deleteData(management, data, url, idParam, grid, updater, callback);
- });
- }
-
- util.deleteData = function (management, data, url, idParam, grid, updater, callback)
- {
- var query = util.buildDeleteQuery(data, url, idParam);
- management.del({url: query}).then(function (result)
- {
- grid.selection.deselectAll();
- if (updater)
- {
- updater.update();
- }
- if (callback)
- {
- callback(data);
- }
- }, util.xhrErrorHandler);
- }
-
- util.findAllWidgets = function (root)
- {
- return query("[widgetid]", root).map(registry.byNode).filter(function (w)
- {
- return w;
- });
- };
-
- util.tabErrorHandler = function (error, tabData)
- {
- var category = tabData.category;
- var name = tabData.name;
- var message = category.charAt(0).toUpperCase() + category.slice(1) + " '" + name
- + "' is unavailable or deleted. Tab auto-refresh is stopped.";
-
- var cleanUpTab = function ()
- {
- // stop updating the tab
- updater.remove(tabData.updater);
-
- // delete tab widgets
- var widgets = registry.findWidgets(tabData.contentPane.containerNode);
- array.forEach(widgets, function (item)
- {
- item.destroyRecursive();
- });
- dom.empty(tabData.contentPane.containerNode);
- }
-
- var closeTab = function (e)
- {
- tabData.contentPane.onClose()
- tabData.tabContainer.removeChild(tabData.contentPane);
- tabData.contentPane.destroyRecursive();
- };
-
- util.responseErrorHandler(error,
- {
- "404": util.warnOn404ErrorHandler(message,
- tabData.contentPane.containerNode,
- cleanUpTab,
- closeTab)
- });
- }
-
- util.warnOn404ErrorHandler = function (message, containerNode, cleanUpCallback, onClickHandler)
- {
- return function ()
- {
- try
- {
- if (cleanUpCallback)
- {
- cleanUpCallback();
- }
-
- var node = dom.create("div", {innerHTML: message}, containerNode);
- var warningPane = new WarningPane({message: message}, node);
- if (onClickHandler)
- {
- warningPane.on("click", onClickHandler);
- }
- else
- {
- warningPane.closeButton.set("disabled", true);
- }
- }
- catch (e)
- {
- console.error(e);
- }
- };
- };
-
- util.responseErrorHandler = function (error, responseCodeHandlerMap, defaultCallback)
- {
- var handler;
- if (error)
- {
- var status = error.status || (error.response ? error.response.status : null);
- if (status != undefined && status != null)
- {
- handler = responseCodeHandlerMap[String(status)];
- }
- }
-
- if (!handler)
- {
- handler = defaultCallback || util.consoleLoggingErrorHandler;
- }
-
- handler(error);
- };
-
- util.consoleLoggingErrorHandler = function (error)
- {
- var message = util.getErrorMessage(error, "Unexpected error is reported by the broker");
- console.error(message);
- };
-
- util.xhrErrorHandler = function (error)
- {
- var fallback = "Unexpected error - see server logs";
- var statusCodeNode = dojo.byId("errorDialog.statusCode");
- var errorMessageNode = dojo.byId("errorDialog.errorMessage");
- var userMustReauth = false;
-
- if (error)
- {
- var status = error.status || (error.response ? error.response.status : null);
- if (status != undefined && status != null)
- {
- var message;
-
- if (status == 0)
- {
- message = "Unable to contact the Broker";
- }
- else if (status == 401)
- {
- message = "Authentication required";
- userMustReauth = true;
- }
- else if (status == 403)
- {
- message = "Access Forbidden";
- }
- else
- {
- message = util.getErrorMessage(error, fallback);
- }
-
- errorMessageNode.innerHTML = entities.encode(message ? message : fallback);
- statusCodeNode.innerHTML = entities.encode(String(status));
-
- dojo.byId("errorDialog.advice.retry").style.display = userMustReauth ? "none" : "block";
- dojo.byId("errorDialog.advice.reconnect").style.display = userMustReauth ? "block" : "none";
-
- domStyle.set(registry.byId("errorDialog.button.cancel").domNode,
- 'display',
- userMustReauth ? "none" : "block");
- domStyle.set(registry.byId("errorDialog.button.relogin").domNode,
- 'display',
- userMustReauth ? "block" : "none");
-
- }
- else
- {
- statusCodeNode.innerHTML = "";
- errorMessageNode.innerHTML = fallback;
- }
-
- var dialog = dijit.byId("errorDialog");
- if (!dialog.open)
- {
- dialog.show();
- }
- }
- };
-
- util.getErrorMessage = function (error, fallback)
- {
- var message = error.message ? error.message : fallback;
-
- var responseText = error.responseText ? error.responseText : (error.response
- ? error.response.text
- : null);
-
- // Try for a more detail error sent by the Broker as json
- if (responseText)
- {
- try
- {
- var errorObj = json.parse(responseText);
- message = errorObj.hasOwnProperty("errorMessage") ? errorObj.errorMessage : message;
- }
- catch (e)
- {
- // Ignore
- }
- }
- return message || fallback;
- };
-
- util.equals = function (object1, object2)
- {
- if (object1 && object2)
- {
- if (typeof object1 != typeof object2)
- {
- return false;
- }
- else
- {
- if (object1 instanceof Array || typeof object1 == "array")
- {
- if (object1.length != object2.length)
- {
- return false;
- }
-
- for (var i = 0, l = object1.length; i < l; i++)
- {
- var item = object1[i];
- if (item && (item instanceof Array || typeof item == "array" || item instanceof Object))
- {
- if (!this.equals(item, object2[i]))
- {
- return false;
- }
- }
- else if (item != object2[i])
- {
- return false;
- }
- }
-
- return true;
- }
- else if (object1 instanceof Object)
- {
- for (propName in object1)
- {
- if (object1.hasOwnProperty(propName) != object2.hasOwnProperty(propName))
- {
- return false;
- }
- else if (typeof object1[propName] != typeof object2[propName])
- {
- return false;
- }
- }
-
- for (propName in object2)
- {
- var object1Prop = object1[propName];
- var object2Prop = object2[propName];
-
- if (object2.hasOwnProperty(propName) != object1.hasOwnProperty(propName))
- {
- return false;
- }
- else if (typeof object1Prop != typeof object2Prop)
- {
- return false;
- }
-
- if (!object2.hasOwnProperty(propName))
- {
- // skip functions
- continue;
- }
-
- if (object1Prop && (object1Prop instanceof Array || typeof object1Prop == "array"
- || object1Prop instanceof Object))
- {
- if (!this.equals(object1Prop, object2Prop))
- {
- return false;
- }
- }
- else if (object1Prop != object2Prop)
- {
- return false;
- }
- }
- return true;
- }
- }
- }
- return object1 === object2;
- }
-
- util.parseHtmlIntoDiv = function (containerNode, htmlTemplateLocation, postParseCallback)
- {
- xhr.get({
- url: htmlTemplateLocation,
- sync: true,
- load: function (template)
- {
- util.parse(containerNode, template, postParseCallback);
- }
- });
- }
-
- util.parse = function (containerNode, template, postParseCallback)
- {
- containerNode.innerHTML = template;
- parser.parse(containerNode).then(function (instances)
- {
- if (postParseCallback && typeof postParseCallback == "function")
- {
- postParseCallback();
- }
- }, function (e)
- {
- console.error("Parse error:" + e);
- });
- }
- util.buildUI = function (containerNode, parent, htmlTemplateLocation, fieldNames, obj, postParseCallback)
- {
- this.parseHtmlIntoDiv(containerNode, htmlTemplateLocation, function ()
- {
- if (fieldNames && obj)
- {
- for (var i = 0; i < fieldNames.length; i++)
- {
- var fieldName = fieldNames[i];
- obj[fieldName] = query("." + fieldName, containerNode)[0];
- }
- }
-
- if (postParseCallback && typeof postParseCallback == "function")
- {
- postParseCallback();
- }
- });
-
- }
-
- util.updateUI = function (data, fieldNames, obj, formatters)
- {
- for (var i = 0; i < fieldNames.length; i++)
- {
- var fieldName = fieldNames[i];
- var value = data[fieldName];
- var fieldNode = obj[fieldName];
- if (fieldNode)
- {
- if (formatters && fieldNode.className)
- {
- var clazzes = fieldNode.className.split(" ");
- for (var idx in clazzes)
- {
- var clazz = clazzes[idx];
- var fmt = formatters[clazz];
- if (fmt && value)
- {
- value = fmt(value);
- }
- }
- }
- fieldNode.innerHTML =
- (value == undefined || value == null) ? "" : entities.encode(String(value));
- }
- }
- }
-
- util.applyMetadataToWidgets = function (domRoot, category, type, meta)
- {
- this.applyToWidgets(domRoot, category, type, null, meta);
- }
-
- util.applyToWidgets = function (domRoot, category, type, data, meta)
- {
- var widgets = util.findAllWidgets(domRoot);
- array.forEach(widgets, function (widget)
- {
- widgetconfigurer.config(widget, category, type, data, meta);
- });
- }
-
- util.disableWidgetsForImmutableFields = function (domRoot, category, type, meta)
- {
- var widgets = util.findAllWidgets(domRoot);
- array.forEach(widgets, function (widget)
- {
- widgetconfigurer.disableIfImmutable(widget, category, type, meta);
- });
- }
-
- util.getFormWidgetValues = function (form, initialData)
- {
- var values = {};
- var formWidgets = form.getChildren();
- for (var i in formWidgets)
- {
- var widget = formWidgets[i];
- var value = widget.get("value") != "undefined" ? widget.get("value") : undefined;
- var propName = widget.get("name") != "undefined" ? widget.get("name") : undefined;
- var required = widget.get("required") != "undefined" ? widget.get("required") : undefined;
- var excluded = widget.get("excluded") != "undefined" ? widget.get("excluded") : undefined;
- var checked = widget.get("checked") != "undefined" ? widget.get("checked") : undefined;
- var type = widget.get("type") != "undefined" ? widget.get("type") : undefined;
- if (!excluded && propName && (value !== undefined || required))
- {
- if (widget instanceof dijit.form.RadioButton)
- {
- if (checked)
- {
- var currentValue = values[propName];
- if (currentValue)
- {
- if (lang.isArray(currentValue))
- {
- currentValue.push(value)
- }
- else
- {
- values[propName] = [currentValue, value];
- }
- }
- else
- {
- values[propName] = value;
- }
- }
- }
- else if (widget instanceof dijit.form.CheckBox)
- {
- values[propName] = checked;
- }
- else
- {
- if (type == "password")
- {
- if (value)
- {
- values[propName] = value;
- }
- }
- else
- {
- values[propName] = value ? value : null;
- }
- }
- }
- }
- if (initialData)
- {
- for (var propName in values)
- {
- if (values[propName] == initialData[propName])
- {
- delete values[propName];
- }
- }
- }
- return values;
- }
-
- util.updateUpdatableStore = function (updatableStore, data)
- {
- var currentRowCount = updatableStore.grid.rowCount;
- updatableStore.grid.domNode.style.display = data ? "block" : "none";
- updatableStore.update(data || []);
- if (data)
- {
- if (currentRowCount == 0 && data.length == 1)
- {
- // grid with a single row is not rendering properly after being hidden
- // force rendering
- updatableStore.grid.render();
- }
- }
- }
-
- util.makeTypeStore = function (types)
- {
- var typeData = [];
- for (var i = 0; i < types.length; i++)
- {
- var type = types[i];
- typeData.push({
- id: type,
- name: type
- });
- }
- return new Memory({data: typeData});
- }
-
- util.makeInstanceStore = function (management, parentCategory, category, callback)
- {
- var obj = {
- type: category.toLowerCase(),
- parent: {type: parentCategory.toLowerCase()}
- };
- management.load(obj).then(function (data)
- {
- var items = [];
- for (var i = 0; i < data.length; i++)
- {
- items.push({
- id: data[i].name,
- name: data[i].name
- });
- }
- var store = new Memory({data: items});
- callback(store);
- });
- };
-
- util.setMultiSelectOptions = function (multiSelectWidget, options)
- {
- util.addMultiSelectOptions(multiSelectWidget, options, true);
- }
-
- util.addMultiSelectOptions = function (multiSelectWidget, options, clearExistingOptions)
- {
- if (clearExistingOptions)
- {
- var children = multiSelectWidget.children;
- var initialLength = children.length;
- for (var i = initialLength - 1; i >= 0; i--)
- {
- var child = children.item(i);
- multiSelectWidget.removeChild(child);
- }
- }
- for (var i = 0; i < options.length; i++)
- {
- // construct new option for list
- var newOption = win.doc.createElement('option');
- var value = options[i];
- newOption.innerHTML = value;
- newOption.value = value;
-
- // add new option to list
- multiSelectWidget.appendChild(newOption);
- }
- }
-
- var singleContextVarRegexp = "(\\${[\\w+\\.\\-:]+})";
-
- util.numericOrContextVarRegexp = function (constraints)
- {
- return "^(\\d+)|" + singleContextVarRegexp + "$";
- }
-
- util.signedOrContextVarRegexp = function (constraints)
- {
- return "^(-?\\d+)|" + singleContextVarRegexp + "$";
- }
-
- util.nameOrContextVarRegexp = function (constraints)
- {
- return "^(\\w+)|" + singleContextVarRegexp + "$";
- }
-
- util.jdbcUrlOrContextVarRegexp = function (constraints)
- {
- return "^(jdbc:.*:.*)|" + singleContextVarRegexp + "$";
- }
-
- util.nodeAddressOrContextVarRegexp = function (constraints)
- {
- return "^(([0-9a-zA-Z.\\-_]|::)+:[0-9]{1,5})|" + singleContextVarRegexp + "$";
- }
-
- util.resizeContentAreaAndRepositionDialog = function (contentNode, dialog)
- {
- var viewport = w.getBox();
- var contentDimension = dojo.position(contentNode);
- var dialogDimension = dojo.position(dialog.domNode);
- var dialogTitleAndFooterHeight = dialogDimension.h - contentDimension.h;
- var dialogLeftRightSpaces = dialogDimension.w - contentDimension.w;
-
- var resize = function ()
- {
- var viewport = w.getBox();
- var width = viewport.w * dialog.maxRatio;
- var height = viewport.h * dialog.maxRatio;
- var dialogDimension = dojo.position(dialog.domNode);
-
- var maxContentHeight = height - dialogTitleAndFooterHeight;
-
- // if width style is set on a dialog node, use dialog width
- if (dialog.domNode.style && dialog.domNode.style.width)
- {
- width = dialogDimension.w;
- }
- var maxContentWidth = width - dialogLeftRightSpaces;
- domStyle.set(contentNode,
+ function (xhr,
+ array,
+ event,
+ lang,
+ json,
+ dom,
+ geometry,
+ domStyle,
+ win,
+ query,
+ parser,
+ Memory,
+ w,
+ on,
+ entities,
+ widgetconfigurer,
+ registry,
+ WarningPane,
+ updater)
+ {
+ var util = {};
+ if (Array.isArray)
+ {
+ util.isArray = function (object)
+ {
+ return Array.isArray(object);
+ };
+ }
+ else
+ {
+ util.isArray = function (object)
+ {
+ return object instanceof Array;
+ };
+ }
+
+ util.flattenStatistics = function (data)
+ {
+ var attrName, stats, propName, theList;
+ for (attrName in data)
+ {
+ if (data.hasOwnProperty(attrName))
+ {
+ if (attrName == "statistics")
+ {
+ stats = data.statistics;
+ for (propName in stats)
+ {
+ if (stats.hasOwnProperty(propName))
+ {
+ data[propName] = stats[propName];
+ }
+ }
+ }
+ else if (data[attrName] instanceof Array)
+ {
+ theList = data[attrName];
+
+ for (var i = 0; i < theList.length; i++)
+ {
+ util.flattenStatistics(theList[i]);
+ }
+ }
+ }
+ }
+ };
+
+ util.isReservedExchangeName = function (exchangeName)
+ {
+ return exchangeName == null || exchangeName == "" || "<<default>>" == exchangeName || exchangeName.indexOf(
+ "amq.") == 0 || exchangeName.indexOf("qpid.") == 0;
+ };
+
+ util.confirmAndDeleteGridSelection = function (grid, confirmationMessageStart, deleteFunction)
+ {
+ var data = grid.selection.getSelected();
+ var confirmed = false;
+ if (data.length)
+ {
+ var confirmationMessage = null;
+ if (data.length == 1)
+ {
+ confirmationMessage = confirmationMessageStart + " '" + data[0].name + "'?";
+ }
+ else
+ {
+ var names = '';
+ for (var i = 0; i < data.length; i++)
+ {
+ if (names)
+ {
+ names += ', ';
+ }
+ names += "\"" + data[i].name + "\"";
+ }
+ confirmationMessage = confirmationMessageStart + "s " + names + "?";
+ }
+
+ if (confirm(confirmationMessage))
+ {
+ confirmed = true;
+ deleteFunction(data);
+ }
+ }
+ return confirmed;
+ }
+
+ util.buildDeleteQuery = function (data, url, idParam)
+ {
+ var queryParam;
+ for (var i = 0; i < data.length; i++)
+ {
+ if (queryParam)
+ {
+ queryParam += "&";
+ }
+ else
+ {
+ queryParam = "?";
+ }
+ queryParam += ( idParam || "id" ) + "=" + encodeURIComponent(data[i].id);
+ }
+ return url + queryParam;
+ }
+
+ util.deleteSelectedObjects =
+ function (grid, confirmationMessageStart, management, modelObj, updater, idParam, callback)
+ {
+ return util.confirmAndDeleteGridSelection(grid, confirmationMessageStart, function (data)
+ {
+ util.deleteObjects(management, data, modelObj, idParam, grid, updater, callback);
+ });
+ }
+
+ util.deleteObjects = function (management, data, modelObj, idParam, grid, updater, callback)
+ {
+ var name = idParam || "id";
+ var parameters = {};
+ parameters[name] = [];
+ for (var i = 0; i < data.length; i++)
+ {
+ parameters[name].push(data[i].id);
+
+ }
+ management.remove(modelObj, parameters)
+ .then(function (result)
+ {
+ grid.selection.deselectAll();
+ if (updater)
+ {
+ updater.update();
+ }
+ if (callback)
+ {
+ callback(data);
+ }
+ }, util.xhrErrorHandler);
+ }
+
+ util.deleteSelectedRows = function (grid, confirmationMessageStart, management, url, updater, idParam, callback)
+ {
+ return util.confirmAndDeleteGridSelection(grid, confirmationMessageStart, function (data)
+ {
+ util.deleteData(management, data, url, idParam, grid, updater, callback);
+ });
+ }
+
+ util.deleteData = function (management, data, url, idParam, grid, updater, callback)
+ {
+ var query = util.buildDeleteQuery(data, url, idParam);
+ management.del({url: query})
+ .then(function (result)
+ {
+ grid.selection.deselectAll();
+ if (updater)
+ {
+ updater.update();
+ }
+ if (callback)
+ {
+ callback(data);
+ }
+ }, util.xhrErrorHandler);
+ }
+
+ util.findAllWidgets = function (root)
+ {
+ return query("[widgetid]", root)
+ .map(registry.byNode)
+ .filter(function (w)
+ {
+ return w;
+ });
+ };
+
+ util.tabErrorHandler = function (error, tabData)
+ {
+ var category = tabData.category;
+ var name = tabData.name;
+ var message = category.charAt(0)
+ .toUpperCase() + category.slice(1) + " '" + name
+ + "' is unavailable or deleted. Tab auto-refresh is stopped.";
+
+ var cleanUpTab = function ()
+ {
+ // stop updating the tab
+ updater.remove(tabData.updater);
+
+ // delete tab widgets
+ var widgets = registry.findWidgets(tabData.contentPane.containerNode);
+ array.forEach(widgets, function (item)
+ {
+ item.destroyRecursive();
+ });
+ dom.empty(tabData.contentPane.containerNode);
+ }
+
+ var closeTab = function (e)
+ {
+ tabData.contentPane.onClose()
+ tabData.tabContainer.removeChild(tabData.contentPane);
+ tabData.contentPane.destroyRecursive();
+ };
+
+ util.responseErrorHandler(error, {
+ "404": util.warnOn404ErrorHandler(message, tabData.contentPane.containerNode, cleanUpTab, closeTab)
+ });
+ }
+
+ util.warnOn404ErrorHandler = function (message, containerNode, cleanUpCallback, onClickHandler)
+ {
+ return function ()
+ {
+ try
+ {
+ if (cleanUpCallback)
+ {
+ cleanUpCallback();
+ }
+
+ var node = dom.create("div", {innerHTML: message}, containerNode);
+ var warningPane = new WarningPane({message: message}, node);
+ if (onClickHandler)
+ {
+ warningPane.on("click", onClickHandler);
+ }
+ else
+ {
+ warningPane.closeButton.set("disabled", true);
+ }
+ }
+ catch (e)
+ {
+ console.error(e);
+ }
+ };
+ };
+
+ util.responseErrorHandler = function (error, responseCodeHandlerMap, defaultCallback)
+ {
+ var handler;
+ if (error)
+ {
+ var status = error.status || (error.response ? error.response.status : null);
+ if (status != undefined && status != null)
+ {
+ handler = responseCodeHandlerMap[String(status)];
+ }
+ }
+
+ if (!handler)
+ {
+ handler = defaultCallback || util.consoleLoggingErrorHandler;
+ }
+
+ handler(error);
+ };
+
+ util.consoleLoggingErrorHandler = function (error)
+ {
+ var message = util.getErrorMessage(error, "Unexpected error is reported by the broker");
+ console.error(message);
+ };
+
+ util.xhrErrorHandler = function (error)
+ {
+ var fallback = "Unexpected error - see server logs";
+ var statusCodeNode = dojo.byId("errorDialog.statusCode");
+ var errorMessageNode = dojo.byId("errorDialog.errorMessage");
+ var userMustReauth = false;
+
+ if (error)
+ {
+ var status = error.status || (error.response ? error.response.status : null);
+ if (status != undefined && status != null)
+ {
+ var message;
+
+ if (status == 0)
+ {
+ message = "Unable to contact the Broker";
+ }
+ else if (status == 401)
+ {
+ message = "Authentication required";
+ userMustReauth = true;
+ }
+ else if (status == 403)
+ {
+ message = "Access Forbidden";
+ }
+ else
+ {
+ message = util.getErrorMessage(error, fallback);
+ }
+
+ errorMessageNode.innerHTML = entities.encode(message ? message : fallback);
+ statusCodeNode.innerHTML = entities.encode(String(status));
+
+ dojo.byId("errorDialog.advice.retry").style.display = userMustReauth ? "none" : "block";
+ dojo.byId("errorDialog.advice.reconnect").style.display = userMustReauth ? "block" : "none";
+
+ domStyle.set(registry.byId("errorDialog.button.cancel").domNode,
+ 'display',
+ userMustReauth ? "none" : "block");
+ domStyle.set(registry.byId("errorDialog.button.relogin").domNode,
+ 'display',
+ userMustReauth ? "block" : "none");
+
+ }
+ else
+ {
+ statusCodeNode.innerHTML = "";
+ errorMessageNode.innerHTML = fallback;
+ }
+
+ var dialog = dijit.byId("errorDialog");
+ if (!dialog.open)
+ {
+ dialog.show();
+ }
+ }
+ };
+
+ util.getErrorMessage = function (error, fallback)
+ {
+ var message = error.message ? error.message : fallback;
+
+ var responseText = error.responseText ? error.responseText : (error.response ? error.response.text : null);
+
+ // Try for a more detail error sent by the Broker as json
+ if (responseText)
+ {
+ try
+ {
+ var errorObj = json.parse(responseText);
+ message = errorObj.hasOwnProperty("errorMessage") ? errorObj.errorMessage : message;
+ }
+ catch (e)
+ {
+ // Ignore
+ }
+ }
+ return message || fallback;
+ };
+
+ util.equals = function (object1, object2)
+ {
+ if (object1 && object2)
+ {
+ if (typeof object1 != typeof object2)
+ {
+ return false;
+ }
+ else
+ {
+ if (object1 instanceof Array || typeof object1 == "array")
+ {
+ if (object1.length != object2.length)
+ {
+ return false;
+ }
+
+ for (var i = 0, l = object1.length; i < l; i++)
+ {
+ var item = object1[i];
+ if (item && (item instanceof Array || typeof item == "array" || item instanceof Object))
+ {
+ if (!this.equals(item, object2[i]))
{
- "overflow": "auto",
- maxHeight: maxContentHeight + "px",
- maxWidth: maxContentWidth + "px"
- });
-
- var dialogX = viewport.w / 2 - dialogDimension.w / 2;
- var dialogY = viewport.h / 2 - dialogDimension.h / 2;
- domStyle.set(dialog.domNode,
+ return false;
+ }
+ }
+ else if (item != object2[i])
+ {
+ return false;
+ }
+ }
+
+ return true;
+ }
+ else if (object1 instanceof Object)
+ {
+ for (propName in object1)
+ {
+ if (object1.hasOwnProperty(propName) != object2.hasOwnProperty(propName))
+ {
+ return false;
+ }
+ else if (typeof object1[propName] != typeof object2[propName])
+ {
+ return false;
+ }
+ }
+
+ for (propName in object2)
+ {
+ var object1Prop = object1[propName];
+ var object2Prop = object2[propName];
+
+ if (object2.hasOwnProperty(propName) != object1.hasOwnProperty(propName))
+ {
+ return false;
+ }
+ else if (typeof object1Prop != typeof object2Prop)
+ {
+ return false;
+ }
+
+ if (!object2.hasOwnProperty(propName))
+ {
+ // skip functions
+ continue;
+ }
+
+ if (object1Prop && (object1Prop instanceof Array || typeof object1Prop == "array"
+ || object1Prop instanceof Object))
+ {
+ if (!this.equals(object1Prop, object2Prop))
{
- top: dialogY + "px",
- left: dialogX + "px"
- });
- dialog.resize();
- };
- resize();
- on(window, "resize", resize);
- }
-
- util.setContextData = function (contextUI, management, modelObj, actualData, effectiveData, callback)
- {
- management.load(modelObj,
- {
- actuals: true,
- inheritedActuals: true
- }).then(function (inheritedActuals)
- {
- contextUI.setData(actualData.context,
- effectiveData.context,
- inheritedActuals[0].context);
- if (callback)
- {
- callback();
- }
- }, util.xhrErrorHandler);
- }
-
- util.setToBrokerEffectiveContext = function (contextUI, management, callback)
- {
- var brokerModelObj = {type: "broker"};
- management.load(brokerModelObj, {depth: 0}).then(function (effectiveData)
- {
- util.setContextData(contextUI,
- management,
- brokerModelObj,
- {},
- effectiveData[0],
- function ()
- {
- if (callback)
- {
- callback();
- }
- });
- });
- }
-
- util.initialiseFields = function (data, containerNode, metadata, category, type)
- {
- var attributes = metadata.getMetaData(category, type).attributes;
-
- var widgets = registry.findWidgets(containerNode);
- array.forEach(widgets, function (item)
- {
- var widgetName = item.name;
- if (widgetName in attributes)
- {
- var attribute = attributes[widgetName];
- var value = data[widgetName];
- if (value)
- {
- if (item instanceof dijit.form.CheckBox)
- {
- item.set("checked", value);
- }
- else
- {
- var copy = lang.clone(value);
- if (attribute.secure && /^\*+/.test(value))
- {
- item.set("required", false);
- item.set("placeHolder", copy);
- }
- else
- {
- item.set("value", copy);
- }
- }
- }
- }
- });
- }
-
- util.abortReaderSafely = function (reader)
- {
- if (reader && reader.readyState > 0)
- {
- try
- {
- this.reader.abort();
- }
- catch (ex)
- {
- // Ignore - read no longer in progress
- }
- }
- }
-
- util.buildCheckboxMarkup = function (val)
- {
- return "<input type='checkbox' disabled='disabled' " + (val ? "checked='checked'" : "") + " />";
- }
-
- util.makeTypeStoreFromMetadataByCategory = function (metadata, category)
- {
- var supportedTypes = metadata.getTypesForCategory(category);
- supportedTypes.sort();
- return this.makeTypeStore(supportedTypes);
- }
-
- util.extend = function (childConstructor, parentConstructor)
- {
- var childPrototype = Object.create(parentConstructor.prototype);
- childPrototype.constructor = childConstructor;
- childConstructor.prototype = childPrototype;
- return childConstructor;
- }
+ return false;
+ }
+ }
+ else if (object1Prop != object2Prop)
+ {
+ return false;
+ }
+ }
+ return true;
+ }
+ }
+ }
+ return object1 === object2;
+ }
+
+ util.parseHtmlIntoDiv = function (containerNode, htmlTemplateLocation, postParseCallback)
+ {
+ xhr.get({
+ url: htmlTemplateLocation,
+ sync: true,
+ load: function (template)
+ {
+ util.parse(containerNode, template, postParseCallback);
+ }
+ });
+ }
+
+ util.parse = function (containerNode, template, postParseCallback)
+ {
+ containerNode.innerHTML = template;
+ parser.parse(containerNode)
+ .then(function (instances)
+ {
+ if (postParseCallback && typeof postParseCallback == "function")
+ {
+ postParseCallback();
+ }
+ }, function (e)
+ {
+ console.error("Parse error:" + e);
+ });
+ }
+ util.buildUI = function (containerNode, parent, htmlTemplateLocation, fieldNames, obj, postParseCallback)
+ {
+ this.parseHtmlIntoDiv(containerNode, htmlTemplateLocation, function ()
+ {
+ if (fieldNames && obj)
+ {
+ for (var i = 0; i < fieldNames.length; i++)
+ {
+ var fieldName = fieldNames[i];
+ obj[fieldName] = query("." + fieldName, containerNode)[0];
+ }
+ }
+
+ if (postParseCallback && typeof postParseCallback == "function")
+ {
+ postParseCallback();
+ }
+ });
+
+ }
+
+ util.updateUI = function (data, fieldNames, obj, formatters)
+ {
+ for (var i = 0; i < fieldNames.length; i++)
+ {
+ var fieldName = fieldNames[i];
+ var value = data[fieldName];
+ var fieldNode = obj[fieldName];
+ if (fieldNode)
+ {
+ if (formatters && fieldNode.className)
+ {
+ var clazzes = fieldNode.className.split(" ");
+ for (var idx in clazzes)
+ {
+ var clazz = clazzes[idx];
+ var fmt = formatters[clazz];
+ if (fmt && value)
+ {
+ value = fmt(value);
+ }
+ }
+ }
+ fieldNode.innerHTML = (value == undefined || value == null) ? "" : entities.encode(String(value));
+ }
+ }
+ }
+
+ util.applyMetadataToWidgets = function (domRoot, category, type, meta)
+ {
+ this.applyToWidgets(domRoot, category, type, null, meta);
+ }
+
+ util.applyToWidgets = function (domRoot, category, type, data, meta)
+ {
+ var widgets = util.findAllWidgets(domRoot);
+ array.forEach(widgets, function (widget)
+ {
+ widgetconfigurer.config(widget, category, type, data, meta);
+ });
+ }
+
+ util.disableWidgetsForImmutableFields = function (domRoot, category, type, meta)
+ {
+ var widgets = util.findAllWidgets(domRoot);
+ array.forEach(widgets, function (widget)
+ {
+ widgetconfigurer.disableIfImmutable(widget, category, type, meta);
+ });
+ }
+
+ util.getFormWidgetValues = function (form, initialData)
+ {
+ var values = {};
+ var formWidgets = form.getChildren();
+ for (var i in formWidgets)
+ {
+ var widget = formWidgets[i];
+ var value = widget.get("value") != "undefined" ? widget.get("value") : undefined;
+ var propName = widget.get("name") != "undefined" ? widget.get("name") : undefined;
+ var required = widget.get("required") != "undefined" ? widget.get("required") : undefined;
+ var excluded = widget.get("excluded") != "undefined" ? widget.get("excluded") : undefined;
+ var checked = widget.get("checked") != "undefined" ? widget.get("checked") : undefined;
+ var type = widget.get("type") != "undefined" ? widget.get("type") : undefined;
+ if (!excluded && propName && (value !== undefined || required))
+ {
+ if (widget instanceof dijit.form.RadioButton)
+ {
+ if (checked)
+ {
+ var currentValue = values[propName];
+ if (currentValue)
+ {
+ if (lang.isArray(currentValue))
+ {
+ currentValue.push(value)
+ }
+ else
+ {
+ values[propName] = [currentValue, value];
+ }
+ }
+ else
+ {
+ values[propName] = value;
+ }
+ }
+ }
+ else if (widget instanceof dijit.form.CheckBox)
+ {
+ values[propName] = checked;
+ }
+ else
+ {
+ if (type == "password")
+ {
+ if (value)
+ {
+ values[propName] = value;
+ }
+ }
+ else
+ {
+ values[propName] = value ? value : null;
+ }
+ }
+ }
+ }
+ if (initialData)
+ {
+ for (var propName in values)
+ {
+ if (values[propName] == initialData[propName])
+ {
+ delete values[propName];
+ }
+ }
+ }
+ return values;
+ }
+
+ util.updateUpdatableStore = function (updatableStore, data)
+ {
+ var currentRowCount = updatableStore.grid.rowCount;
+ updatableStore.grid.domNode.style.display = data ? "block" : "none";
+ updatableStore.update(data || []);
+ if (data)
+ {
+ if (currentRowCount == 0 && data.length == 1)
+ {
+ // grid with a single row is not rendering properly after being hidden
+ // force rendering
+ updatableStore.grid.render();
+ }
+ }
+ }
+
+ util.makeTypeStore = function (types)
+ {
+ var typeData = [];
+ for (var i = 0; i < types.length; i++)
+ {
+ var type = types[i];
+ typeData.push({
+ id: type,
+ name: type
+ });
+ }
+ return new Memory({data: typeData});
+ }
+
+ util.makeInstanceStore = function (management, parentCategory, category, callback)
+ {
+ var obj = {
+ type: category.toLowerCase(),
+ parent: {type: parentCategory.toLowerCase()}
+ };
+ management.load(obj)
+ .then(function (data)
+ {
+ var items = [];
+ for (var i = 0; i < data.length; i++)
+ {
+ items.push({
+ id: data[i].name,
+ name: data[i].name
+ });
+ }
+ var store = new Memory({data: items});
+ callback(store);
+ });
+ };
+
+ util.setMultiSelectOptions = function (multiSelectWidget, options)
+ {
+ util.addMultiSelectOptions(multiSelectWidget, options, true);
+ }
+
+ util.addMultiSelectOptions = function (multiSelectWidget, options, clearExistingOptions)
+ {
+ if (clearExistingOptions)
+ {
+ var children = multiSelectWidget.children;
+ var initialLength = children.length;
+ for (var i = initialLength - 1; i >= 0; i--)
+ {
+ var child = children.item(i);
+ multiSelectWidget.removeChild(child);
+ }
+ }
+ for (var i = 0; i < options.length; i++)
+ {
+ // construct new option for list
+ var newOption = win.doc.createElement('option');
+ var value = options[i];
+ newOption.innerHTML = value;
+ newOption.value = value;
+
+ // add new option to list
+ multiSelectWidget.appendChild(newOption);
+ }
+ }
+
+ var singleContextVarRegexp = "(\\${[\\w+\\.\\-:]+})";
+
+ util.numericOrContextVarRegexp = function (constraints)
+ {
+ return "^(\\d+)|" + singleContextVarRegexp + "$";
+ }
+
+ util.signedOrContextVarRegexp = function (constraints)
+ {
+ return "^(-?\\d+)|" + singleContextVarRegexp + "$";
+ }
+
+ util.nameOrContextVarRegexp = function (constraints)
+ {
+ return "^(\\w+)|" + singleContextVarRegexp + "$";
+ }
+
+ util.jdbcUrlOrContextVarRegexp = function (constraints)
+ {
+ return "^(jdbc:.*:.*)|" + singleContextVarRegexp + "$";
+ }
+
+ util.nodeAddressOrContextVarRegexp = function (constraints)
+ {
+ return "^(([0-9a-zA-Z.\\-_]|::)+:[0-9]{1,5})|" + singleContextVarRegexp + "$";
+ }
+
+ util.resizeContentAreaAndRepositionDialog = function (contentNode, dialog)
+ {
+ var viewport = w.getBox();
+ var contentDimension = dojo.position(contentNode);
+ var dialogDimension = dojo.position(dialog.domNode);
+ var dialogTitleAndFooterHeight = dialogDimension.h - contentDimension.h;
+ var dialogLeftRightSpaces = dialogDimension.w - contentDimension.w;
+
+ var resize = function ()
+ {
+ var viewport = w.getBox();
+ var width = viewport.w * dialog.maxRatio;
+ var height = viewport.h * dialog.maxRatio;
+ var dialogDimension = dojo.position(dialog.domNode);
+
+ var maxContentHeight = height - dialogTitleAndFooterHeight;
+
+ // if width style is set on a dialog node, use dialog width
+ if (dialog.domNode.style && dialog.domNode.style.width)
+ {
+ width = dialogDimension.w;
+ }
+ var maxContentWidth = width - dialogLeftRightSpaces;
+ domStyle.set(contentNode, {
+ "overflow": "auto",
+ maxHeight: maxContentHeight + "px",
+ maxWidth: maxContentWidth + "px"
+ });
+
+ var dialogX = viewport.w / 2 - dialogDimension.w / 2;
+ var dialogY = viewport.h / 2 - dialogDimension.h / 2;
+ domStyle.set(dialog.domNode, {
+ top: dialogY + "px",
+ left: dialogX + "px"
+ });
+ dialog.resize();
+ };
+ resize();
+ on(window, "resize", resize);
+ }
+
+ util.setContextData = function (contextUI, management, modelObj, actualData, effectiveData, callback)
+ {
+ management.load(modelObj, {
+ actuals: true,
+ inheritedActuals: true
+ })
+ .then(function (inheritedActuals)
+ {
+ contextUI.setData(actualData.context, effectiveData.context, inheritedActuals[0].context);
+ if (callback)
+ {
+ callback();
+ }
+ }, util.xhrErrorHandler);
+ }
+
+ util.setToBrokerEffectiveContext = function (contextUI, management, callback)
+ {
+ var brokerModelObj = {type: "broker"};
+ management.load(brokerModelObj, {depth: 0})
+ .then(function (effectiveData)
+ {
+ util.setContextData(contextUI, management, brokerModelObj, {}, effectiveData[0], function ()
+ {
+ if (callback)
+ {
+ callback();
+ }
+ });
+ });
+ }
+
+ util.initialiseFields = function (data, containerNode, metadata, category, type)
+ {
+ var attributes = metadata.getMetaData(category, type).attributes;
+
+ var widgets = registry.findWidgets(containerNode);
+ array.forEach(widgets, function (item)
+ {
+ var widgetName = item.name;
+ if (widgetName in attributes)
+ {
+ var attribute = attributes[widgetName];
+ var value = data[widgetName];
+ if (value)
+ {
+ if (item instanceof dijit.form.CheckBox)
+ {
+ item.set("checked", value);
+ }
+ else
+ {
+ var copy = lang.clone(value);
+ if (attribute.secure && /^\*+/.test(value))
+ {
+ item.set("required", false);
+ item.set("placeHolder", copy);
+ }
+ else
+ {
+ item.set("value", copy);
+ }
+ }
+ }
+ }
+ });
+ }
+
+ util.abortReaderSafely = function (reader)
+ {
+ if (reader && reader.readyState > 0)
+ {
+ try
+ {
+ this.reader.abort();
+ }
+ catch (ex)
+ {
+ // Ignore - read no longer in progress
+ }
+ }
+ }
+
+ util.buildCheckboxMarkup = function (val)
+ {
+ return "<input type='checkbox' disabled='disabled' " + (val ? "checked='checked'" : "") + " />";
+ }
+
+ util.makeTypeStoreFromMetadataByCategory = function (metadata, category)
+ {
+ var supportedTypes = metadata.getTypesForCategory(category);
+ supportedTypes.sort();
+ return this.makeTypeStore(supportedTypes);
+ }
+
+ util.extend = function (childConstructor, parentConstructor)
+ {
+ var childPrototype = Object.create(parentConstructor.prototype);
+ childPrototype.constructor = childConstructor;
+ childConstructor.prototype = childPrototype;
+ return childConstructor;
+ }
- return util;
- });
+ return util;
+ });
Modified: qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/common/widgetconfigurer.js
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/common/widgetconfigurer.js?rev=1741993&r1=1741992&r2=1741993&view=diff
==============================================================================
--- qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/common/widgetconfigurer.js (original)
+++ qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/common/widgetconfigurer.js Mon May 2 15:57:52 2016
@@ -27,147 +27,144 @@ define(["dojo/_base/xhr",
"qpid/common/properties",
"dojo/text!strings.html",
"dojo/domReady!"], function (xhr, string, query, dom, domConstruct, domAttr, registry, properties, template)
- {
- var widgetconfigurer = {
- _init: function ()
- {
- var stringsTemplate = domConstruct.create("div", {innerHTML: template});
- var promptTemplateWithDefaultNode = query("[id='promptTemplateWithDefault']", stringsTemplate)[0];
-
- // The following will contain ${prompt} and ${default} formatted with html elements
- this.promptTemplateWithDefault = promptTemplateWithDefaultNode.innerHTML;
-
- domConstruct.destroy(stringsTemplate);
- },
- _processWidgetPrompt: function (widget, category, type, meta)
- {
- var widgetName = widget.name;
- if (widgetName && (widget instanceof dijit.form.ValidationTextBox || widget
- instanceof dijit.form.FilteringSelect))
- {
- // If not done so already, save the prompt text specified on the widget. We do this so if we
- // config the same widget again, we can apply the default again (which may be different if the user
- // has selected a different type within the category).
- if (typeof widget.get("qpid.originalPromptMessage") == "undefined")
- {
- widget.set("qpid.originalPromptMessage", widget.get("promptMessage"));
- }
-
- var promptMessage = widget.get("qpid.originalPromptMessage");
- var defaultValue = meta.getDefaultValueForAttribute(category, type, widgetName);
- if (defaultValue)
- {
- var newPromptMessage = string.substitute(this.promptTemplateWithDefault,
- {
- 'default': defaultValue,
- 'prompt': promptMessage
- });
-
- if (promptMessage != newPromptMessage)
- {
- widget.set("promptMessage", newPromptMessage);
- }
- }
- }
- else if (widget instanceof dijit.Tooltip)
- {
- // If it is a tooltop, find the connected widget and use its name to lookup the default from the metadata.
- if (typeof widget.get("qpid.originalLabel") == "undefined")
- {
- widget.set("qpid.originalLabel", widget.get("label"));
- }
-
- var message = widget.get("qpid.originalLabel");
- var connectId = widget.get("connectId")[0];
- var connectWidget = registry.byId(connectId);
- if (connectWidget)
- {
- var connectWidgetName = connectWidget.get("name");
- var defaultValue = meta.getDefaultValueForAttribute(category, type, connectWidgetName);
- if (defaultValue)
- {
- var newMessage = string.substitute(this.promptTemplateWithDefault,
- {
- 'default': defaultValue,
- 'prompt': message
- });
-
- if (message != newMessage)
- {
- widget.set("label", newMessage);
- }
- }
- }
- }
- },
- _processWidgetValue: function (widget, category, type, data, meta)
- {
- var widgetName = widget.name;
- if (widgetName)
- {
- var defaultValue = meta.getDefaultValueForAttribute(category, type, widgetName);
- var dataValue = data && widgetName in data ? data[widgetName] : null;
-
- // Stash the default value and initial value so we can later differentiate
- // when sending updates to the server
-
- if (defaultValue)
- {
- widget.defaultValue = defaultValue;
- }
-
- if (dataValue)
- {
- widget.initialValue = dataValue;
- }
-
- if (widget instanceof dijit.form.FilteringSelect || widget
- instanceof dojox.form.CheckedMultiSelect)
- {
- var widgetValue = dataValue == null ? defaultValue : dataValue;
- if (widgetValue)
- {
- widget.set("value", widgetValue);
- }
- }
- else if (widget instanceof dijit.form.CheckBox)
- {
- var widgetValue = dataValue == null ? (defaultValue == "true") : dataValue;
- widget.set("checked", widgetValue ? true : false);
- }
- else
- {
- if (dataValue)
- {
- widget.set("value", dataValue);
- }
- }
- }
- },
- config: function (widget, category, type, data, meta)
- {
- this._processWidgetPrompt(widget, category, type, meta);
- if (data != null)
- {
- this._processWidgetValue(widget, category, type, data, meta);
- }
- },
- disableIfImmutable: function (widget, category, type, meta)
- {
- var widgetName = widget.name;
- if (widgetName)
- {
- var immutable = meta.isImmutable(category, type, widgetName);
- if (immutable)
- {
- widget.attr("disabled", "disabled");
- }
-
- }
- }
- };
+{
+ var widgetconfigurer = {
+ _init: function ()
+ {
+ var stringsTemplate = domConstruct.create("div", {innerHTML: template});
+ var promptTemplateWithDefaultNode = query("[id='promptTemplateWithDefault']", stringsTemplate)[0];
+
+ // The following will contain ${prompt} and ${default} formatted with html elements
+ this.promptTemplateWithDefault = promptTemplateWithDefaultNode.innerHTML;
+
+ domConstruct.destroy(stringsTemplate);
+ },
+ _processWidgetPrompt: function (widget, category, type, meta)
+ {
+ var widgetName = widget.name;
+ if (widgetName && (widget instanceof dijit.form.ValidationTextBox || widget
+ instanceof dijit.form.FilteringSelect))
+ {
+ // If not done so already, save the prompt text specified on the widget. We do this so if we
+ // config the same widget again, we can apply the default again (which may be different if the user
+ // has selected a different type within the category).
+ if (typeof widget.get("qpid.originalPromptMessage") == "undefined")
+ {
+ widget.set("qpid.originalPromptMessage", widget.get("promptMessage"));
+ }
+
+ var promptMessage = widget.get("qpid.originalPromptMessage");
+ var defaultValue = meta.getDefaultValueForAttribute(category, type, widgetName);
+ if (defaultValue)
+ {
+ var newPromptMessage = string.substitute(this.promptTemplateWithDefault, {
+ 'default': defaultValue,
+ 'prompt': promptMessage
+ });
+
+ if (promptMessage != newPromptMessage)
+ {
+ widget.set("promptMessage", newPromptMessage);
+ }
+ }
+ }
+ else if (widget instanceof dijit.Tooltip)
+ {
+ // If it is a tooltop, find the connected widget and use its name to lookup the default from the metadata.
+ if (typeof widget.get("qpid.originalLabel") == "undefined")
+ {
+ widget.set("qpid.originalLabel", widget.get("label"));
+ }
+
+ var message = widget.get("qpid.originalLabel");
+ var connectId = widget.get("connectId")[0];
+ var connectWidget = registry.byId(connectId);
+ if (connectWidget)
+ {
+ var connectWidgetName = connectWidget.get("name");
+ var defaultValue = meta.getDefaultValueForAttribute(category, type, connectWidgetName);
+ if (defaultValue)
+ {
+ var newMessage = string.substitute(this.promptTemplateWithDefault, {
+ 'default': defaultValue,
+ 'prompt': message
+ });
+
+ if (message != newMessage)
+ {
+ widget.set("label", newMessage);
+ }
+ }
+ }
+ }
+ },
+ _processWidgetValue: function (widget, category, type, data, meta)
+ {
+ var widgetName = widget.name;
+ if (widgetName)
+ {
+ var defaultValue = meta.getDefaultValueForAttribute(category, type, widgetName);
+ var dataValue = data && widgetName in data ? data[widgetName] : null;
+
+ // Stash the default value and initial value so we can later differentiate
+ // when sending updates to the server
+
+ if (defaultValue)
+ {
+ widget.defaultValue = defaultValue;
+ }
+
+ if (dataValue)
+ {
+ widget.initialValue = dataValue;
+ }
+
+ if (widget instanceof dijit.form.FilteringSelect || widget instanceof dojox.form.CheckedMultiSelect)
+ {
+ var widgetValue = dataValue == null ? defaultValue : dataValue;
+ if (widgetValue)
+ {
+ widget.set("value", widgetValue);
+ }
+ }
+ else if (widget instanceof dijit.form.CheckBox)
+ {
+ var widgetValue = dataValue == null ? (defaultValue == "true") : dataValue;
+ widget.set("checked", widgetValue ? true : false);
+ }
+ else
+ {
+ if (dataValue)
+ {
+ widget.set("value", dataValue);
+ }
+ }
+ }
+ },
+ config: function (widget, category, type, data, meta)
+ {
+ this._processWidgetPrompt(widget, category, type, meta);
+ if (data != null)
+ {
+ this._processWidgetValue(widget, category, type, data, meta);
+ }
+ },
+ disableIfImmutable: function (widget, category, type, meta)
+ {
+ var widgetName = widget.name;
+ if (widgetName)
+ {
+ var immutable = meta.isImmutable(category, type, widgetName);
+ if (immutable)
+ {
+ widget.attr("disabled", "disabled");
+ }
+
+ }
+ }
+ };
- widgetconfigurer._init();
+ widgetconfigurer._init();
- return widgetconfigurer;
- });
+ return widgetconfigurer;
+});
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org