You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by or...@apache.org on 2014/09/11 19:37:32 UTC

svn commit: r1624345 [1/2] - in /qpid/trunk/qpid/java/broker-plugins: jdbc-provider-bone/src/main/java/resources/js/qpid/management/store/pool/bonecp/ jdbc-provider-bone/src/main/java/resources/virtualhost/store/pool/bonecp/ jdbc-provider-bone/src/main...

Author: orudyy
Date: Thu Sep 11 17:37:32 2014
New Revision: 1624345

URL: http://svn.apache.org/r1624345
Log:
QPID-6093: Add UI to set context variables

Added:
    qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/common/ContextVariablesEditor.html
    qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/editBroker.html
    qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/common/ContextVariablesEditor.js
    qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/editBroker.js
      - copied, changed from r1624299, qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/editVirtualHost.js
Removed:
    qpid/trunk/qpid/java/broker-plugins/jdbc-provider-bone/src/main/java/resources/virtualhost/store/pool/bonecp/add.html
    qpid/trunk/qpid/java/broker-plugins/jdbc-provider-bone/src/main/java/resources/virtualhostnode/store/pool/bonecp/add.html
Modified:
    qpid/trunk/qpid/java/broker-plugins/jdbc-provider-bone/src/main/java/resources/js/qpid/management/store/pool/bonecp/add.js
    qpid/trunk/qpid/java/broker-plugins/jdbc-provider-bone/src/main/java/resources/js/qpid/management/store/pool/bonecp/edit.js
    qpid/trunk/qpid/java/broker-plugins/jdbc-provider-bone/src/main/java/resources/js/qpid/management/store/pool/bonecp/show.js
    qpid/trunk/qpid/java/broker-plugins/jdbc-store/src/main/java/resources/js/qpid/management/store/pool/none/add.js
    qpid/trunk/qpid/java/broker-plugins/jdbc-store/src/main/java/resources/js/qpid/management/virtualhost/jdbc/add.js
    qpid/trunk/qpid/java/broker-plugins/jdbc-store/src/main/java/resources/js/qpid/management/virtualhost/jdbc/edit.js
    qpid/trunk/qpid/java/broker-plugins/jdbc-store/src/main/java/resources/js/qpid/management/virtualhost/jdbc/show.js
    qpid/trunk/qpid/java/broker-plugins/jdbc-store/src/main/java/resources/js/qpid/management/virtualhostnode/jdbc/add.js
    qpid/trunk/qpid/java/broker-plugins/jdbc-store/src/main/java/resources/js/qpid/management/virtualhostnode/jdbc/edit.js
    qpid/trunk/qpid/java/broker-plugins/jdbc-store/src/main/java/resources/js/qpid/management/virtualhostnode/jdbc/show.js
    qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/ConfiguredObjectToMapConverter.java
    qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/RestServlet.java
    qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/addVirtualHostNodeAndVirtualHost.html
    qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/css/common.css
    qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/editVirtualHost.html
    qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/editVirtualHostNode.html
    qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/Broker.js
    qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/VirtualHostNode.js
    qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addVirtualHostNodeAndVirtualHost.js
    qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/editVirtualHost.js
    qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/editVirtualHostNode.js
    qpid/trunk/qpid/java/broker-plugins/management-http/src/test/java/org/apache/qpid/server/management/plugin/servlet/rest/ConfiguredObjectToMapConverterTest.java

Modified: qpid/trunk/qpid/java/broker-plugins/jdbc-provider-bone/src/main/java/resources/js/qpid/management/store/pool/bonecp/add.js
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-plugins/jdbc-provider-bone/src/main/java/resources/js/qpid/management/store/pool/bonecp/add.js?rev=1624345&r1=1624344&r2=1624345&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-plugins/jdbc-provider-bone/src/main/java/resources/js/qpid/management/store/pool/bonecp/add.js (original)
+++ qpid/trunk/qpid/java/broker-plugins/jdbc-provider-bone/src/main/java/resources/js/qpid/management/store/pool/bonecp/add.js Thu Sep 11 17:37:32 2014
@@ -32,34 +32,13 @@ define(["dojo/_base/xhr",
         "dijit/form/FilteringSelect",
         "dojo/domReady!"],
     function (xhr, dom, construct, win, registry, parser, array, event, json, string, Memory, FilteringSelect) {
-        var fieldNames = ["maxConnectionsPerPartition", "minConnectionsPerPartition", "partitionCount"];
         return {
-            show: function(poolSpecificDivId, formFieldPrefix, htmlUrl) {
-                var node = dom.byId(poolSpecificDivId);
-                var that = this;
-
-                array.forEach(registry.toArray(),
-                              function(item) {
-                                  if(item.id.substr(0,formFieldPrefix.length) == formFieldPrefix) {
-                                      item.destroyRecursive();
-                                  }
-                              });
-
-                xhr.get({url: htmlUrl,
-                     sync: true,
-                     load:  function(data) {
-
-                       node.innerHTML = data;
-                       parser.parse(node);
-
-                       for ( var i = 0 ; i < fieldNames.length; i++ )
-                       {
-                         var widgetName = fieldNames[i];
-                         var widget = registry.byId(formFieldPrefix + widgetName);
-                         widget.set("regExpGen", util.numericOrContextVarRegexp);
-                       }
-
-                     }});
+            show: function(data) {
+                data.context.addInheritedContext({
+                    "qpid.jdbcstore.bonecp.partitionCount": "4",
+                    "qpid.jdbcstore.bonecp.minConnectionsPerPartition": "5",
+                    "qpid.jdbcstore.bonecp.maxConnectionsPerPartition": "10"
+                    });
             }
         };
     });

Modified: qpid/trunk/qpid/java/broker-plugins/jdbc-provider-bone/src/main/java/resources/js/qpid/management/store/pool/bonecp/edit.js
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-plugins/jdbc-provider-bone/src/main/java/resources/js/qpid/management/store/pool/bonecp/edit.js?rev=1624345&r1=1624344&r2=1624345&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-plugins/jdbc-provider-bone/src/main/java/resources/js/qpid/management/store/pool/bonecp/edit.js (original)
+++ qpid/trunk/qpid/java/broker-plugins/jdbc-provider-bone/src/main/java/resources/js/qpid/management/store/pool/bonecp/edit.js Thu Sep 11 17:37:32 2014
@@ -27,32 +27,7 @@ define(["dojo/_base/xhr",
         "qpid/common/util",
         "dojo/domReady!"],
     function (xhr, dom, construct, win, registry, parser, util) {
-        var fieldNames = ["maxConnectionsPerPartition", "minConnectionsPerPartition", "partitionCount"];
         return {
-            show: function(data) {
-                var that = this;
-                xhr.get({url: "virtualhost/store/pool/bonecp/add.html",
-                     sync: true,
-                     load:  function(template) {
-                        for ( var i = 0 ; i < fieldNames.length; i++ )
-                        {
-                          var widgetName = fieldNames[i];
-                          var widget = registry.byId("formAddVirtualHost.qpid.jdbcstore.bonecp." + widgetName);
-                          if (widget)
-                          {
-                             widget.destroyRecursive();
-                          }
-                        }
-                        data.containerNode.innerHTML = template;
-                        parser.parse(data.containerNode);
-                        for ( var i = 0 ; i < fieldNames.length; i++ )
-                        {
-                          var widgetName = fieldNames[i];
-                          var widget = registry.byId("formAddVirtualHost.qpid.jdbcstore.bonecp." + widgetName);
-                          widget.set("value", data.data.context["qpid.jdbcstore.bonecp." + widgetName]);
-                          widget.set("regExpGen", util.numericOrContextVarRegexp);
-                        }
-                     }});
-            }
+            show: function(data) { }
         };
     });

Modified: qpid/trunk/qpid/java/broker-plugins/jdbc-provider-bone/src/main/java/resources/js/qpid/management/store/pool/bonecp/show.js
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-plugins/jdbc-provider-bone/src/main/java/resources/js/qpid/management/store/pool/bonecp/show.js?rev=1624345&r1=1624344&r2=1624345&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-plugins/jdbc-provider-bone/src/main/java/resources/js/qpid/management/store/pool/bonecp/show.js (original)
+++ qpid/trunk/qpid/java/broker-plugins/jdbc-provider-bone/src/main/java/resources/js/qpid/management/store/pool/bonecp/show.js Thu Sep 11 17:37:32 2014
@@ -51,10 +51,11 @@ define(["dojo/_base/xhr",
 
     BoneCP.prototype.update=function(data)
     {
+
       for(var i=0; i<fieldNames.length;i++)
       {
         var fieldName = fieldNames[i];
-        var value = data.context["qpid.jdbcstore.bonecp."+fieldName];
+        var value = data && data.context ? data.context["qpid.jdbcstore.bonecp."+fieldName] : "";
         this[fieldName].innerHTML= value?entities.encode(String(value)):"";
       }
     };

Modified: qpid/trunk/qpid/java/broker-plugins/jdbc-store/src/main/java/resources/js/qpid/management/store/pool/none/add.js
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-plugins/jdbc-store/src/main/java/resources/js/qpid/management/store/pool/none/add.js?rev=1624345&r1=1624344&r2=1624345&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-plugins/jdbc-store/src/main/java/resources/js/qpid/management/store/pool/none/add.js (original)
+++ qpid/trunk/qpid/java/broker-plugins/jdbc-store/src/main/java/resources/js/qpid/management/store/pool/none/add.js Thu Sep 11 17:37:32 2014
@@ -33,24 +33,9 @@ define(["dojo/_base/xhr",
         "dojo/domReady!"],
     function (xhr, dom, construct, win, registry, parser, array, event, json, string, Memory, FilteringSelect) {
         return {
-            show: function(poolSpecificDivId, formFieldPrefix, htmlUrl) {
-                var node = dom.byId(poolSpecificDivId);
-                var that = this;
-
-                array.forEach(registry.toArray(),
-                              function(item) {
-                                  if(item.id.substr(0,formFieldPrefix.length) == formFieldPrefix) {
-                                      item.destroyRecursive();
-                                  }
-                              });
-
-                xhr.get({url: htmlUrl,
-                     sync: true,
-                     load:  function(data) {
-                                node.innerHTML = data;
-                                parser.parse(node);
-
-                     }});
+            show: function(data)
+            {
+                data.context.removeDynamicallyAddedInheritedContext();
             }
         };
     });

Modified: qpid/trunk/qpid/java/broker-plugins/jdbc-store/src/main/java/resources/js/qpid/management/virtualhost/jdbc/add.js
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-plugins/jdbc-store/src/main/java/resources/js/qpid/management/virtualhost/jdbc/add.js?rev=1624345&r1=1624344&r2=1624345&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-plugins/jdbc-store/src/main/java/resources/js/qpid/management/virtualhost/jdbc/add.js (original)
+++ qpid/trunk/qpid/java/broker-plugins/jdbc-store/src/main/java/resources/js/qpid/management/virtualhost/jdbc/add.js Thu Sep 11 17:37:32 2014
@@ -65,7 +65,7 @@ define(["dojo/_base/xhr",
                           require(["qpid/management/store/pool/"+type.toLowerCase()+"/add"],
                           function(poolType)
                           {
-                              poolType.show("addVirtualHost.poolSpecificDiv", "formAddVirtualHost.qpid.jdbcstore.bonecp", "virtualhost/store/pool/"+type.toLowerCase()+"/add.html");
+                              poolType.show({containerNode:poolTypeFieldsDiv, context: data.parent.virtualHostContext});
                           });
                       }
                     }

Modified: qpid/trunk/qpid/java/broker-plugins/jdbc-store/src/main/java/resources/js/qpid/management/virtualhost/jdbc/edit.js
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-plugins/jdbc-store/src/main/java/resources/js/qpid/management/virtualhost/jdbc/edit.js?rev=1624345&r1=1624344&r2=1624345&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-plugins/jdbc-store/src/main/java/resources/js/qpid/management/virtualhost/jdbc/edit.js (original)
+++ qpid/trunk/qpid/java/broker-plugins/jdbc-store/src/main/java/resources/js/qpid/management/virtualhost/jdbc/edit.js Thu Sep 11 17:37:32 2014
@@ -68,7 +68,7 @@ define(["qpid/common/util",
                             require(["qpid/management/store/pool/"+type.toLowerCase()+"/edit"],
                             function(poolType)
                             {
-                                poolType.show({containerNode:poolTypeFieldsDiv, data: data.data})
+                                poolType.show({containerNode:poolTypeFieldsDiv, data: data.data, context: data.parent.context})
                             });
                         }
                       }

Modified: qpid/trunk/qpid/java/broker-plugins/jdbc-store/src/main/java/resources/js/qpid/management/virtualhost/jdbc/show.js
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-plugins/jdbc-store/src/main/java/resources/js/qpid/management/virtualhost/jdbc/show.js?rev=1624345&r1=1624344&r2=1624345&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-plugins/jdbc-store/src/main/java/resources/js/qpid/management/virtualhost/jdbc/show.js (original)
+++ qpid/trunk/qpid/java/broker-plugins/jdbc-store/src/main/java/resources/js/qpid/management/virtualhost/jdbc/show.js Thu Sep 11 17:37:32 2014
@@ -35,7 +35,7 @@ define(["qpid/common/util", "dojo/query"
         var previousConnectionPoolType = this.connectionPoolType ? this.connectionPoolType.innerHTML : null;
         util.updateUI(data, fieldNames, this);
         this.usernameAttributeContainer.style.display = data.username ? "block" : "none";
-        if (!this.poolDetails || previousConnectionPoolType != data.connectionPoolType)
+        if (data.connectionPoolType && (!this.poolDetails || previousConnectionPoolType != data.connectionPoolType))
         {
             var that = this;
             require(["qpid/management/store/pool/" + data.connectionPoolType.toLowerCase() + "/show"],

Modified: qpid/trunk/qpid/java/broker-plugins/jdbc-store/src/main/java/resources/js/qpid/management/virtualhostnode/jdbc/add.js
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-plugins/jdbc-store/src/main/java/resources/js/qpid/management/virtualhostnode/jdbc/add.js?rev=1624345&r1=1624344&r2=1624345&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-plugins/jdbc-store/src/main/java/resources/js/qpid/management/virtualhostnode/jdbc/add.js (original)
+++ qpid/trunk/qpid/java/broker-plugins/jdbc-store/src/main/java/resources/js/qpid/management/virtualhostnode/jdbc/add.js Thu Sep 11 17:37:32 2014
@@ -67,7 +67,7 @@ define(["dojo/_base/xhr",
                           require(["qpid/management/store/pool/"+type.toLowerCase()+"/add"],
                           function(poolType)
                           {
-                              poolType.show("addVirtualHostNode.poolSpecificDiv", "formAddVirtualHostNode.qpid.jdbcstore.bonecp", "virtualhostnode/store/pool/" + type.toLowerCase() + "/add.html");
+                            poolType.show({containerNode:poolTypeFieldsDiv, context: data.parent.virtualHostNodeContext});
                           });
                       }
                     }

Modified: qpid/trunk/qpid/java/broker-plugins/jdbc-store/src/main/java/resources/js/qpid/management/virtualhostnode/jdbc/edit.js
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-plugins/jdbc-store/src/main/java/resources/js/qpid/management/virtualhostnode/jdbc/edit.js?rev=1624345&r1=1624344&r2=1624345&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-plugins/jdbc-store/src/main/java/resources/js/qpid/management/virtualhostnode/jdbc/edit.js (original)
+++ qpid/trunk/qpid/java/broker-plugins/jdbc-store/src/main/java/resources/js/qpid/management/virtualhostnode/jdbc/edit.js Thu Sep 11 17:37:32 2014
@@ -67,7 +67,7 @@ define(["qpid/common/util",
                               require(["qpid/management/store/pool/"+type.toLowerCase()+"/edit"],
                               function(poolType)
                               {
-                                  poolType.show({containerNode:poolTypeFieldsDiv, data: data.data})
+                                  poolType.show({containerNode:poolTypeFieldsDiv, data: data.data, context: data.parent.context})
 
                                   if (!(data.data.state == "STOPPED" || data.data.state == "ERRORED"))
                                   {

Modified: qpid/trunk/qpid/java/broker-plugins/jdbc-store/src/main/java/resources/js/qpid/management/virtualhostnode/jdbc/show.js
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-plugins/jdbc-store/src/main/java/resources/js/qpid/management/virtualhostnode/jdbc/show.js?rev=1624345&r1=1624344&r2=1624345&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-plugins/jdbc-store/src/main/java/resources/js/qpid/management/virtualhostnode/jdbc/show.js (original)
+++ qpid/trunk/qpid/java/broker-plugins/jdbc-store/src/main/java/resources/js/qpid/management/virtualhostnode/jdbc/show.js Thu Sep 11 17:37:32 2014
@@ -40,7 +40,7 @@ define(["qpid/common/util", "dojo/query"
       util.updateUI(data, fieldNames, this);
 
       this.usernameAttributeContainer.style.display = data.username ? "block" : "none";
-      if (!this.poolDetails || previousConnectionPoolType != data.connectionPoolType)
+      if (data.connectionPoolType && (!this.poolDetails || previousConnectionPoolType != data.connectionPoolType))
       {
         var that = this;
         require(["qpid/management/store/pool/" + data.connectionPoolType.toLowerCase() + "/show"],

Modified: qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/ConfiguredObjectToMapConverter.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/ConfiguredObjectToMapConverter.java?rev=1624345&r1=1624344&r2=1624345&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/ConfiguredObjectToMapConverter.java (original)
+++ qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/ConfiguredObjectToMapConverter.java Thu Sep 11 17:37:32 2014
@@ -35,6 +35,7 @@ import java.util.TreeMap;
 
 import org.apache.qpid.server.model.ConfiguredObject;
 import org.apache.qpid.server.model.ConfiguredObjectAttribute;
+import org.apache.qpid.server.model.Model;
 
 public class ConfiguredObjectToMapConverter
 {
@@ -56,9 +57,20 @@ public class ConfiguredObjectToMapConver
                                                   final boolean includeSystemContext,
                                                   final boolean extractAsConfig)
     {
+        return convertObjectToMap(confObject, clazz, depth, useActualValues, false, includeSystemContext, extractAsConfig);
+    }
+
+    public Map<String, Object> convertObjectToMap(final ConfiguredObject<?> confObject,
+                                                  Class<? extends ConfiguredObject> clazz,
+                                                  int depth,
+                                                  final boolean useActualValues,
+                                                  final boolean inheritedActuals,
+                                                  final boolean includeSystemContext,
+                                                  final boolean extractAsConfig)
+    {
         Map<String, Object> object = new LinkedHashMap<>();
 
-        incorporateAttributesIntoMap(confObject, object, useActualValues, includeSystemContext, extractAsConfig);
+        incorporateAttributesIntoMap(confObject, object, useActualValues, inheritedActuals, includeSystemContext, extractAsConfig);
         if(!extractAsConfig)
         {
             incorporateStatisticsIntoMap(confObject, object);
@@ -66,7 +78,7 @@ public class ConfiguredObjectToMapConver
 
         if(depth > 0)
         {
-            incorporateChildrenIntoMap(confObject, clazz, depth, object, useActualValues, includeSystemContext, extractAsConfig);
+            incorporateChildrenIntoMap(confObject, clazz, depth, object, useActualValues, inheritedActuals, includeSystemContext, extractAsConfig);
         }
         return object;
     }
@@ -76,6 +88,7 @@ public class ConfiguredObjectToMapConver
             final ConfiguredObject<?> confObject,
             Map<String, Object> object,
             final boolean useActualValues,
+            final boolean inheritedActuals,
             final boolean includeSystemContext,
             final boolean extractAsConfig)
     {
@@ -115,7 +128,7 @@ public class ConfiguredObjectToMapConver
                     Map<String, Object> contextValues = new HashMap<>();
                     if (useActualValues)
                     {
-                        contextValues.putAll(confObject.getContext());
+                        collectContext(contextValues, confObject.getModel(), confObject, inheritedActuals);
                     }
                     else
                     {
@@ -165,6 +178,27 @@ public class ConfiguredObjectToMapConver
         }
     }
 
+    private void collectContext(Map<String, Object> contextValues, Model model, ConfiguredObject<?> confObject, boolean inheritedContext)
+    {
+        Object value = confObject.getActualAttributes().get(ConfiguredObject.CONTEXT);
+        if (inheritedContext)
+        {
+            Collection<Class<? extends ConfiguredObject>> parents = model.getParentTypes(confObject.getCategoryClass());
+            if(parents != null && !parents.isEmpty())
+            {
+                ConfiguredObject parent = confObject.getParent(parents.iterator().next());
+                if(parent != null)
+                {
+                    collectContext(contextValues, model, parent, inheritedContext);
+                }
+            }
+        }
+        if (value instanceof Map)
+        {
+            contextValues.putAll((Map<String,String>)value);
+        }
+    }
+
     private void incorporateStatisticsIntoMap(
             final ConfiguredObject<?> confObject, Map<String, Object> object)
     {
@@ -184,6 +218,7 @@ public class ConfiguredObjectToMapConver
             int depth,
             Map<String, Object> object,
             final boolean useActualValues,
+            final boolean inheritedActuals,
             final boolean includeSystemContext,
             final boolean extractAsConfig)
     {
@@ -225,6 +260,7 @@ public class ConfiguredObjectToMapConver
                                                                 childClass,
                                                                 depth - 1,
                                                                 useActualValues,
+                                                                inheritedActuals,
                                                                 includeSystemContext,
                                                                 extractAsConfig));
                         }

Modified: qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/RestServlet.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/RestServlet.java?rev=1624345&r1=1624344&r2=1624345&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/RestServlet.java (original)
+++ qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/RestServlet.java Thu Sep 11 17:37:32 2014
@@ -59,6 +59,7 @@ public class RestServlet extends Abstrac
     public static final String ACTUALS_PARAM = "actuals";
     public static final String SORT_PARAM = "sort";
     public static final String INCLUDE_SYS_CONTEXT_PARAM = "includeSysContext";
+    public static final String INHERITED_ACTUALS_PARAM = "inheritedActuals";
     public static final String EXTRACT_INITIAL_CONFIG_PARAM = "extractInitialConfig";
 
     public static final Set<String> RESERVED_PARAMS =
@@ -66,7 +67,8 @@ public class RestServlet extends Abstrac
                                         SORT_PARAM,
                                         ACTUALS_PARAM,
                                         INCLUDE_SYS_CONTEXT_PARAM,
-                                        EXTRACT_INITIAL_CONFIG_PARAM));
+                                        EXTRACT_INITIAL_CONFIG_PARAM,
+                                        INHERITED_ACTUALS_PARAM));
 
     private Class<? extends ConfiguredObject>[] _hierarchy;
 
@@ -326,25 +328,27 @@ public class RestServlet extends Abstrac
         int depth;
         boolean actuals;
         boolean includeSystemContext;
-
+        boolean inheritedActuals;
         if(extractInitialConfig)
         {
             depth = Integer.MAX_VALUE;
             actuals = true;
             includeSystemContext = false;
+            inheritedActuals = false;
         }
         else
         {
             depth = getDepthParameterFromRequest(request);
             actuals = getBooleanParameterFromRequest(request, ACTUALS_PARAM);
             includeSystemContext = getBooleanParameterFromRequest(request, INCLUDE_SYS_CONTEXT_PARAM);
+            inheritedActuals = getBooleanParameterFromRequest(request, INHERITED_ACTUALS_PARAM);
         }
 
         List<Map<String, Object>> output = new ArrayList<Map<String, Object>>();
         for(ConfiguredObject configuredObject : allObjects)
         {
             output.add(_objectConverter.convertObjectToMap(configuredObject, getConfiguredClass(),
-                    depth, actuals, includeSystemContext, extractInitialConfig));
+                    depth, actuals, inheritedActuals, includeSystemContext, extractInitialConfig));
         }
 
         Writer writer = getOutputWriter(request, response);

Modified: qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/addVirtualHostNodeAndVirtualHost.html
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/addVirtualHostNodeAndVirtualHost.html?rev=1624345&r1=1624344&r2=1624345&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/addVirtualHostNodeAndVirtualHost.html (original)
+++ qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/addVirtualHostNodeAndVirtualHost.html Thu Sep 11 17:37:32 2014
@@ -58,6 +58,12 @@
                     <div class="clear"></div>
 
                     <div id="addVirtualHostNode.typeFields"></div>
+
+                    <div data-dojo-type="dijit/TitlePane" data-dojo-props="title: 'Context variables',  open: false">
+                        <div id="addVirtualHostNode.context"></div>
+                    </div>
+
+
                 </fieldset>
             </div>
         </form>
@@ -85,6 +91,11 @@
                 <div class="clear"></div>
 
                 <div id="addVirtualHost.typeFields"></div>
+
+                  <div data-dojo-type="dijit/TitlePane" data-dojo-props="title: 'Context variables',  open: false">
+                      <div id="addVirtualHost.context"></div>
+                  </div>
+
               </fieldset>
             </div>
         </form>

Added: qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/common/ContextVariablesEditor.html
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/common/ContextVariablesEditor.html?rev=1624345&view=auto
==============================================================================
--- qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/common/ContextVariablesEditor.html (added)
+++ qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/common/ContextVariablesEditor.html Thu Sep 11 17:37:32 2014
@@ -0,0 +1,35 @@
+<!--
+  ~ 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.
+  -->
+<div class="contextEditor">
+    <div class="contextGrid">
+        <div class="grid"></div>
+    </div>
+    <div>
+        <button data-dojo-type="dijit/form/Button" class="addButton" type="button" data-dojo-props="title:'Add new entry'">+</button>
+        <button data-dojo-type="dijit/form/Button" class="deleteButton" type="button" data-dojo-props="title:'Remove selected entry'">-</button>
+        <span class="dijit dijitReset dijitInline">
+            <label>Show</label>
+            <select class="filter" name="filter" data-dojo-type="dijit/form/Select">
+                <option value="*" selected="selected">All</option>
+                <option value="false">Local</option>
+                <option value="true" >Inherited</option>
+            </select>
+        </span>
+    </div>
+</div>
\ No newline at end of file

Modified: qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/css/common.css
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/css/common.css?rev=1624345&r1=1624344&r2=1624345&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/css/common.css (original)
+++ qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/css/common.css Thu Sep 11 17:37:32 2014
@@ -283,3 +283,26 @@ div .messages {
 .dijitMultiSelect {
     width : 14.75em;
 }
+
+.highlightedText
+{
+    font-weight: bold;
+}
+
+.normalText
+{
+    font-weight: normal;
+}
+
+.contextEditor
+{
+    margin-left:5px;
+    margin-right:5px;
+}
+
+.contextGrid
+{
+    width:100%;
+    max-height: 140px;
+    overflow: auto;
+}
\ No newline at end of file

Added: qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/editBroker.html
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/editBroker.html?rev=1624345&view=auto
==============================================================================
--- qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/editBroker.html (added)
+++ qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/editBroker.html Thu Sep 11 17:37:32 2014
@@ -0,0 +1,118 @@
+<!--
+  ~ 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.
+  -->
+<div class="dijitHidden">
+  <div data-dojo-type="dijit/Dialog" data-dojo-props="title:'Edit Broker'" id="editBrokerDialog">
+      <form id="editBrokerForm" method="post" data-dojo-type="dijit/form/Form">
+          <div id="editBroker.allFields">
+              <div class="clear">
+                  <div class="formLabel-labelCell tableContainer-labelCell">Name*:</div>
+                  <div class="formLabel-controlCell tableContainer-valueCell">
+                      <input type="text" id="editBroker.name"
+                             data-dojo-type="dijit/form/ValidationTextBox"
+                             data-dojo-props="
+                              name: 'name',
+                              placeHolder: 'name',
+                              required: true,
+                              disabled: false,
+                              trim: true,
+                              promptMessage: 'Identifies the broker instance.',
+                              title: 'Enter broker name'" />
+                  </div>
+              </div>
+              <div class="clear">
+                  <div class="formLabel-labelCell tableContainer-labelCell">Default Virtual Host*:</div>
+                  <div class="formLabel-controlCell tableContainer-valueCell">
+                      <input type="text" id="editBroker.defaultVirtualHost"
+                             data-dojo-type="dijit/form/FilteringSelect"
+                             data-dojo-props="
+                              name: 'defaultVirtualHost',
+                              required: true,
+                              promptMessage: 'Default virtual host used for clients that do not specify one when connecting.',
+                              title: 'Select default virtual host' " />
+                  </div>
+              </div>
+              <div class="clear">
+                  <div class="formLabel-labelCell tableContainer-labelCell">Statistics reporting period (ms):</div>
+                  <div class="formLabel-controlCell tableContainer-valueCell">
+                      <input type="text" id="editBroker.statisticsReportingPeriod"
+                             data-dojo-type="dijit/form/ValidationTextBox"
+                             data-dojo-props="
+                              name: 'statisticsReportingPeriod',
+                              trim: true,
+                              placeholder: 'Time in ms',
+                              label: 'Statistics reporting period (ms):',
+                              promptMessage: 'Frequency with which statistics are reported to broker log.'" />
+                  </div>
+              </div>
+              <div class="clear">
+                  <div class="formLabel-labelCell tableContainer-labelCell">Statistics reporting period enabled:</div>
+                  <div class="formLabel-controlCell tableContainer-valueCell">
+                      <input type="text" id="editBroker.statisticsReportingResetEnabled"
+                             data-dojo-type="dijit/form/CheckBox"
+                             data-dojo-props=" name: 'statisticsReportingResetEnabled' " />
+                  </div>
+              </div>
+
+              <div class="clear formBox">
+                  <fieldset>
+                      <legend>Global Connection Defaults</legend>
+                      <div class="clear">
+                          <div class="formLabel-labelCell tableContainer-labelCell">Maximum number of sessions:</div>
+                          <div class="tableContainer-valueCell formLabel-controlCell">
+                              <input data-dojo-type="dijit/form/ValidationTextBox"
+                                     id="editBroker.connection.sessionCountLimit"
+                                     data-dojo-props="
+                                     name: 'connection.sessionCountLimit',
+                                     placeHolder: 'Number of sessions',
+                                     trim: true,
+                                     promptMessage: 'Maximum number of sessions per connection' "/>
+                          </div>
+                      </div>
+                      <div class="clear">
+                          <div class="formLabel-labelCell tableContainer-labelCell">Heart beat delay (ms)::</div>
+                          <div class="tableContainer-valueCell formLabel-controlCell">
+                              <input data-dojo-type="dijit/form/ValidationTextBox"
+                                     id="editBroker.connection.heartBeatDelay"
+                                     data-dojo-props="
+                                     name: 'connection.heartBeatDelay',
+                                     trim: true,
+                                     invalidMessage: 'Invalid value',
+                                     placeHolder: 'Time in ms',
+                                     promptMessage: 'Interval between heart beat messages exchanged between broker and clients'"/>
+                          </div>
+                      </div>
+                  </fieldset>
+              </div>
+
+              <div data-dojo-type="dijit/TitlePane" data-dojo-props="title: 'Context variables',  open: false">
+                  <div id="editBroker.context"
+                       data-dojo-type="qpid/common/ContextVariablesEditor"
+                       data-dojo-props="name: 'context', title: 'Context variables'" ></div>
+              </div>
+
+              <div class="clear"></div>
+
+              <div class="dijitDialogPaneActionBar">
+                  <button data-dojo-type="dijit/form/Button" id="editBroker.saveButton" data-dojo-props="label: 'Save'">Save</button>
+                  <button data-dojo-type="dijit/form/Button" id="editBroker.cancelButton" data-dojo-props="label: 'Cancel'" ></button>
+              </div>
+          </div>
+      </form>
+  </div>
+</div>

Modified: qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/editVirtualHost.html
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/editVirtualHost.html?rev=1624345&r1=1624344&r2=1624345&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/editVirtualHost.html (original)
+++ qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/editVirtualHost.html Thu Sep 11 17:37:32 2014
@@ -119,8 +119,13 @@
                       </input>
                   </div>
               </div>
+
               <div class="clear"></div>
 
+              <div data-dojo-type="dijit/TitlePane" data-dojo-props="title: 'Context variables',  open: false">
+                    <div id="editVirtualHost.context" ></div>
+              </div>
+
               <div class="dijitDialogPaneActionBar">
                   <button data-dojo-type="dijit/form/Button" id="editVirtualHost.saveButton" data-dojo-props="label: 'Save'">Save</button>
                   <button data-dojo-type="dijit/form/Button" id="editVirtualHost.cancelButton" data-dojo-props="label: 'Cancel'" ></button>

Modified: qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/editVirtualHostNode.html
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/editVirtualHostNode.html?rev=1624345&r1=1624344&r2=1624345&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/editVirtualHostNode.html (original)
+++ qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/editVirtualHostNode.html Thu Sep 11 17:37:32 2014
@@ -39,6 +39,10 @@
 
           <div class="clear"></div>
 
+          <div data-dojo-type="dijit/TitlePane" data-dojo-props="title: 'Context variables',  open: false">
+                  <div id="editVirtualHostNode.context" ></div>
+          </div>
+
           <div class="dijitDialogPaneActionBar">
               <button data-dojo-type="dijit/form/Button" id="editVirtualHostNode.saveButton" data-dojo-props="label: 'Save'">Save</button>
               <button data-dojo-type="dijit/form/Button" id="editVirtualHostNode.cancelButton" data-dojo-props="label: 'Cancel'" ></button>

Added: qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/common/ContextVariablesEditor.js
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/common/ContextVariablesEditor.js?rev=1624345&view=auto
==============================================================================
--- qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/common/ContextVariablesEditor.js (added)
+++ qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/common/ContextVariablesEditor.js Thu Sep 11 17:37:32 2014
@@ -0,0 +1,526 @@
+/*
+ *
+ * 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([
+        "qpid/common/util",
+        "dojo/_base/xhr",
+        "dojo/_base/declare",
+        "dojo/_base/array",
+        "dojo/_base/connect",
+        "dojo/_base/lang",
+        "dojo/dom-construct",
+        "dojo/parser",
+        "dojo/query",
+        "dojo/store/Memory",
+        "dojo/data/ObjectStore",
+        "dijit/_WidgetBase",
+        "dijit/registry",
+        "dojo/text!common/ContextVariablesEditor.html",
+        "dijit/form/Button",
+        "dojox/grid/EnhancedGrid",
+        "dojox/grid/enhanced/_Plugin",
+        "dijit/form/Select",
+        "dojox/validate/us",
+        "dojox/validate/web",
+        "dojo/domReady!"],
+function (util, xhr, declare, array, connect, lang, domConstruct, parser, query, Memory, ObjectStore, _WidgetBase, registry, template)
+ {
+
+  return declare("qpid.common.ContextVariablesEditor", [_WidgetBase], {
+
+    value: null,
+    effectiveValues: null,
+    inheritedActualValues: null,
+    domNode: null,
+    _grid: null,
+    _addButton: null,
+    _deleteButton: null,
+    _filterBox: null,
+    _nextGridItemId: 0,
+    _dynamicInheritedContext: {},
+
+    constructor: function(args)
+    {
+      this._args = args;
+    },
+
+    buildRendering: function()
+    {
+      this.domNode = domConstruct.create("div", {innerHTML: template});
+      parser.parse(this.domNode);
+    },
+
+    postCreate: function()
+    {
+        this.inherited(arguments);
+        var that = this;
+        var gridNode = query(".grid", this.domNode)[0];
+        var addButtonNode = query(".addButton", this.domNode)[0];
+        var deleteButtonNode = query(".deleteButton", this.domNode)[0];
+        var addButton = registry.byNode(addButtonNode);
+        var deleteButton = registry.byNode(deleteButtonNode);
+        var layout = [[
+                      { name: "Name", field: "name", width: "40%", editable: true },
+                      { name: 'Actual Value', field: 'actualValue', width: '30%', editable: true},
+                      { name: 'Effective Value', field: 'effectiveValue', width: '30%', editable: false}
+                    ]];
+        var data = [];
+        var objectStore = new dojo.data.ObjectStore({objectStore: new Memory({data:data, idProperty: "id"})});
+        var grid = new dojox.grid.EnhancedGrid({
+                selectionMode: "multiple",
+                store: objectStore,
+                singleClickEdit: true,
+                structure: layout,
+                autoHeight: true,
+                sortFields: [{attribute: 'name', descending: false}],
+                plugins: {indirectSelection: true}
+                }, gridNode);
+        grid.canEdit =  function(inCell, inRowIndex)
+        {
+            var item = grid.getItem(inRowIndex);
+            return inCell.field == "actualValue" || (inCell.field=="name" && item && item["inherited"] == false);
+        };
+
+        this._grid = grid;
+        this._deleteButton = deleteButton;
+        this._addButtonNode = addButtonNode;
+
+        var toggleGridButtons =  function(index)
+        {
+            var data = grid.selection.getSelected();
+            deleteButton.set("disabled", !data || data.length==0);
+        };
+
+        connect.connect(grid.selection, 'onSelected', toggleGridButtons);
+        connect.connect(grid.selection, 'onDeselected', toggleGridButtons);
+        connect.connect(grid, 'onStyleRow' , this, function(row) { that._onStyleRow(row); });
+
+        deleteButton.set("disabled", true);
+        addButton.on("click", function(event) { that._newItem(); });
+        deleteButton.on("click", function(event) { that._deleteSelected(); });
+        grid.on("applyEdit", function(inRowIndex) { that._onEdit(inRowIndex); });
+        grid.startup();
+        this._filterBox = registry.byNode(query(".filter", this.domNode)[0]);
+        this._filterBox.on("change", function(value) { if (value) { that._filter(value); } });
+    },
+    resize: function()
+    {
+        this._grid.render();
+    },
+    load: function(restUrl, data)
+    {
+        data = data || {};
+        var actualValues = data.actualValues;
+        var allEffectiveValues = data.effectiveValues;
+        var inheritedActualValues = data.inheritedActualValues;
+        if (!actualValues)
+        {
+            xhr.get(
+                {
+                  url: restUrl,
+                  sync: true,
+                  content: { actuals: true },
+                  handleAs: "json",
+                  load: function(data)
+                  {
+                    actualValues = data[0].context;
+                  }
+                }
+            );
+        }
+        if (!allEffectiveValues)
+        {
+            xhr.get(
+                {
+                  url: restUrl,
+                  sync: true,
+                  content: { actuals: false },
+                  handleAs: "json",
+                  load: function(data)
+                  {
+                    allEffectiveValues = data[0].context;
+                  }
+                }
+            );
+        }
+        if (!inheritedActualValues)
+        {
+            xhr.get(
+                {
+                  url: restUrl,
+                  sync: true,
+                  content: { actuals: true, inheritedActuals: true},
+                  handleAs: "json",
+                  load: function(data)
+                  {
+                    inheritedActualValues = data[0].context;
+                  }
+                }
+            );
+        }
+        this.setData(actualValues, allEffectiveValues, inheritedActualValues);
+    },
+    setData: function(actualValues, allEffectiveValues, inheritedActualValues)
+    {
+      this.value = actualValues;
+      this.effectiveValues = allEffectiveValues;
+      this.inheritedActualValues = inheritedActualValues;
+
+      var values = this._mergeValues(actualValues, allEffectiveValues, inheritedActualValues);
+      this._originalValues = values;
+
+      var grid = this._grid;
+      if (grid)
+      {
+        // delete previous store data
+        grid.store.fetch({
+            onComplete:function(items,request)
+            {
+                if(items.length)
+                {
+                    array.forEach(items, function(item)
+                    {
+                       grid.store.deleteItem(item);
+                    });
+                }
+            }
+        });
+
+        // add new data into grid store
+        this._nextGridItemId = 0;
+        for(var i=0; i<values.length; i++)
+        {
+          var item = values[i];
+          var storeItem = {
+                            id: this._nextId(),
+                            name: item.name,
+                            actualValue: item.actualValue,
+                            effectiveValue: item.effectiveValue,
+                            "inherited": item["inherited"],
+                            changed: false
+                          };
+          grid.store.newItem(storeItem);
+        }
+        grid.store.save();
+      }
+      this._filter(this._filterBox.value);
+      this._handleOnChange(actualValues);
+    },
+    addInheritedContext: function(object)
+    {
+        if (object)
+        {
+            var grid = this._grid;
+            for(key in object)
+            {
+                for(var i=0;i< this._originalValues.length;i++)
+                {
+                    var varExists = false;
+                    if (this._originalValues[i].name == key)
+                    {
+                        varExists = true;
+                        break;
+                    }
+                }
+                if (!varExists && !(key in this._dynamicInheritedContext))
+                {
+                    this._dynamicInheritedContext[key] = object[key];
+                    var storeItem = {
+                        id: this._nextId(),
+                        name: key,
+                        actualValue: object[key],
+                        effectiveValue: "",
+                        "inherited": true,
+                        changed: false
+                    };
+                    grid.store.newItem(storeItem);
+                    this._originalValues.push({name: key,
+                                           actualValue: object[key],
+                                           effectiveValue: "",
+                                           "inherited": true,
+                                           changed: false});
+                }
+            }
+            grid.store.save();
+            this._filter(this._filterBox.value);
+        }
+    },
+    removeDynamicallyAddedInheritedContext: function()
+    {
+        if (this._dynamicInheritedContext)
+        {
+            var that = this;
+            var grid = this._grid;
+            grid.store.fetch({
+                onComplete:function(items,request)
+                {
+                    if(items.length)
+                    {
+                        for(key in that._dynamicInheritedContext)
+                        {
+                            var item = null;
+                            for(var i=0;i<items.length;i++)
+                            {
+                                if (items[i].name == key)
+                                {
+                                    item = items[i];
+                                    break;
+                                }
+                            }
+                            if (item && !item.changed)
+                            {
+                                grid.store.deleteItem(item);
+                                that._deleteOriginalItem(item);
+                            }
+                        }
+                        grid.store.save();
+                        that._dynamicInheritedContext = {};
+                    }
+                }
+            });
+        }
+    },
+    destroy: function()
+    {
+      if (this.domNode)
+      {
+        this.domNode.destroy();
+        this.domNode = null;
+      }
+      if (this._grid != null)
+      {
+        this._grid.destroyRecursively();
+        this._grid = null;
+      }
+      if (this._addButton != null)
+      {
+        this._addButton.destroyRecursively();
+        this._addButton = null;
+      }
+      if (this._deleteButton != null)
+      {
+        this._deleteButton.destroyRecursively();
+        this._deleteButton = null;
+      }
+    },
+    onChange: function(newValue){},
+    _newItem: function()
+    {
+        var newItem = { id: this._nextId(), name: "", actualValue: "", effectiveValue: "", "inherited": false, changed: true};
+        var grid = this._grid;
+        grid.store.newItem(newItem);
+        grid.store.save();
+        grid.store.fetch(
+        {
+               onComplete:function(items,request)
+               {
+                   var rowIndex = items.length - 1;
+                   window.setTimeout(function()
+                   {
+                       grid.focus.setFocusIndex(rowIndex, 1 );
+                   },10);
+               }
+        });
+    },
+    _deleteSelected: function()
+    {
+        var that = this;
+        var grid = this._grid;
+        var data = grid.selection.getSelected();
+        if(data.length > 0)
+        {
+            array.forEach(data, function(selectedItem) {
+                if (selectedItem !== null && !selectedItem["inherited"])
+                {
+                    grid.store.deleteItem(selectedItem);
+                    that._deleteOriginalItem(selectedItem.name);
+                }
+            });
+            grid.store.save();
+            grid.selection.deselectAll();
+            this._valueChanged();
+        }
+    },
+    _deleteOriginalItem: function(key)
+    {
+        for(var i=0;i< this._originalValues.length;i++)
+        {
+            if (this._originalValues[i].name == key)
+            {
+                this._originalValues = this._originalValues.splice(i, 1);
+                break;
+            }
+        }
+    },
+    _onEdit:function(inRowIndex)
+    {
+        var grid = this._grid;
+        var item = grid.getItem(inRowIndex);
+        var previousItems = this._originalValues;
+        var previousItemActualValue = null;
+        for(var i=0;i<previousItems.length;i++)
+        {
+            if (previousItems[i].name == item.name)
+            {
+                previousItemActualValue = previousItems[i].actualValue;
+                break;
+            }
+        }
+
+        if (item.actualValue != previousItemActualValue)
+        {
+            if (!item.changed)
+            {
+                grid.store.setValue(item, "changed", true);
+                grid.store.save();
+            }
+        }
+        else
+        {
+            if (item["inherited"]== true && item.changed)
+            {
+                grid.store.setValue(item, "changed", false);
+                grid.store.save();
+            }
+        }
+        this._valueChanged();
+    },
+    _onStyleRow:  function(row)
+     {
+        var grid = this._grid;
+        var inRowIndex = row.index;
+        var item = grid.getItem(inRowIndex);
+        if (item && (item["inherited"] == false || item.changed))
+        {
+          row.customClasses += " highlightedText";
+        }
+        else
+        {
+          row.customClasses += " normalText";
+        }
+        grid.focus.styleRow(row);
+        grid.edit.styleRow(row);
+    },
+    _filter: function(value)
+    {
+        this._grid.filter({"inherited": value});
+    },
+    _nextId: function()
+    {
+        this._nextGridItemId = this._nextGridItemId + 1;
+        return this._nextGridItemId;
+    },
+    _valueChanged: function()
+    {
+        if (this._grid)
+        {
+            var value ={};
+            var grid = this._grid;
+            grid.store.fetch({
+                    onComplete:function(items,request)
+                    {
+                        if(items.length > 0)
+                        {
+                            array.forEach(items, function(item)
+                            {
+                               if (item !== null && item.name && ((item["inherited"] && item.changed) || !item["inherited"]))
+                               {
+                                   value[item.name]=item.actualValue;
+                               }
+                            });
+                        }
+                    }
+            });
+            if (!util.equals(this.value, value))
+            {
+                this.value = value;
+                this._handleOnChange(value);
+            }
+        }
+    },
+    _setValueAttr: function(actualValues)
+    {
+        this.value = actualValues;
+        if (this.inheritedActualValues!=null && this.effectiveValues != null)
+        {
+            this.setData(this.value, this.effectiveValues, this.inheritedActualValues);
+        }
+    },
+    _setEffectiveValuesAttr: function(effectiveValues)
+    {
+      this.effectiveValues = effectiveValues;
+      if (this.value != null && this.inheritedActualValues !=null)
+      {
+        this.setData(this.value, this.effectiveValues, this.inheritedActualValues);
+      }
+    },
+    _setInheritedActualValues: function(inheritedActualValues)
+    {
+      this.inheritedActualValues = inheritedActualValues;
+      if (this.value!= null && this.effectiveValues != null)
+      {
+        this.setData(this.value, this.effectiveValues, this.inheritedActualValues);
+      }
+    },
+    _mergeValues: function(actualValues, allEffectiveValues, inheritedActualValues)
+    {
+        var fields = [];
+
+        if (allEffectiveValues)
+        {
+            for(var key in allEffectiveValues)
+            {
+                if (!actualValues || !(key in actualValues))
+                {
+                    var actualValue = inheritedActualValues &&  key in inheritedActualValues ? inheritedActualValues[key] : allEffectiveValues[key];
+                    fields.push({name: key, actualValue: actualValue, effectiveValue:  allEffectiveValues[key], "inherited": true});
+                }
+            }
+        }
+
+        if (actualValues)
+        {
+            for(var key in actualValues)
+            {
+                var effectiveValue = allEffectiveValues && key in allEffectiveValues ? allEffectiveValues[key]: actualValues[key];
+                fields.push({name: key, actualValue: actualValues[key], effectiveValue: effectiveValue, "inherited": false});
+            }
+        }
+        return fields;
+    },
+    _handleOnChange: function(newValue)
+    {
+      if (!util.equals(this._lastValueReported, newValue))
+      {
+        this._lastValueReported = newValue;
+        if(this._onChangeHandle)
+        {
+          this._onChangeHandle.remove();
+        }
+        this._onChangeHandle = this.defer(function()
+        {
+            this._onChangeHandle = null;
+            this.onChange(newValue);
+        });
+      }
+    }
+
+  });
+});
\ No newline at end of file

Modified: qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/Broker.js
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/Broker.js?rev=1624345&r1=1624344&r2=1624345&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/Broker.js (original)
+++ qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/Broker.js Thu Sep 11 17:37:32 2014
@@ -36,6 +36,7 @@ define(["dojo/_base/xhr",
         "qpid/management/addKeystore",
         "qpid/management/addGroupProvider",
         "qpid/management/addAccessControlProvider",
+        "qpid/management/editBroker",
         "dojox/grid/enhanced/plugins/Pagination",
         "dojox/grid/enhanced/plugins/IndirectSelection",
         "dijit/layout/AccordionContainer",
@@ -49,7 +50,8 @@ define(["dojo/_base/xhr",
         "dijit/Menu",
         "dijit/MenuItem",
         "dojo/domReady!"],
-       function (xhr, parser, query, json, connect, properties, updater, util, UpdatableStore, EnhancedGrid, registry, entities, addAuthenticationProvider, addVirtualHostNodeAndVirtualHost, addPort, addKeystore, addGroupProvider, addAccessControlProvider) {
+       function (xhr, parser, query, json, connect, properties, updater, util, UpdatableStore, EnhancedGrid, registry, entities,
+        addAuthenticationProvider, addVirtualHostNodeAndVirtualHost, addPort, addKeystore, addGroupProvider, addAccessControlProvider, editBroker) {
 
            function Broker(name, parent, controller) {
                this.name = name;
@@ -60,95 +62,6 @@ define(["dojo/_base/xhr",
                     this.modelObj.parent = {};
                     this.modelObj.parent[ parent.type] = parent;
                }
-               this.attributeWidgetFactories = [{
-                     name: "name",
-                     createWidget: function(brokerData) {
-                        return new dijit.form.ValidationTextBox({
-                          required: true,
-                          trim: true,
-                          regExpGen: util.nameOrContextVarRegexp,
-                          value: brokerData.name,
-                          label: "Name*:",
-                          name: "name",
-                          promptMessage: "Identifies the broker instance."})
-                    }
-               }, {
-                       name: "defaultVirtualHost",
-                       createWidget: function(brokerData) {
-                         var nodes = brokerData.virtualhostnodes;
-                         var data = [];
-                         if (nodes) {
-                           for (var i=0; i< nodes.length; i++) {
-                               if (nodes[i].virtualhosts)
-                               {
-                                   data.push({id: nodes[i].virtualhosts[0].name, name: nodes[i].virtualhosts[0].name});
-                               }
-                           }
-                         }
-                         var hostsStore = new dojo.store.Memory({ data: data });
-                         return new dijit.form.FilteringSelect({
-                           required: true, store: hostsStore,
-                           value: brokerData.defaultVirtualHost,
-                           label: "Default Virtual Host*:",
-                           name: "defaultVirtualHost",
-                           promptMessage: "Default virtual host used for clients that don't specify one when connecting."})
-                       }
-               }, {
-                       name: "statisticsReportingPeriod",
-                       createWidget: function(brokerData) {
-                         return new dijit.form.ValidationTextBox({
-                           trim: "true",
-                           regExpGen: util.numericOrContextVarRegexp,
-                           required: false,
-                           value: brokerData.statisticsReportingPeriod,
-                           placeholder: "Time in ms",
-                           label: "Statistics reporting period (ms):",
-                           name: "statisticsReportingPeriod",
-                           promptMessage: "Frequency with which statistics are reported to broker log."
-                         });
-                       }
-               }, {
-                       name: "statisticsReportingResetEnabled",
-                       createWidget: function(brokerData)
-                       {
-                         return new dijit.form.CheckBox({
-                           required: false, checked: brokerData.statisticsReportingResetEnabled, value: "true",
-                           label: "Statistics reporting period enabled:",
-                           name: "statisticsReportingResetEnabled"
-                         });
-                       }
-               }, {
-                       name: "connection.sessionCountLimit",
-                       groupName: "Global Connection Defaults",
-                       createWidget: function(brokerData)
-                       {
-                         return new dijit.form.ValidationTextBox({
-                           trim: "true",
-                           regExpGen: util.numericOrContextVarRegexp,
-                           required: false,
-                           value: brokerData["connection.sessionCountLimit"],
-                           placeholder: "Number of sessions",
-                           label: "Maximum number of sessions:",
-                           name: "connection.sessionCountLimit",
-                           promptMessage: "Maximum number of sessions per connection"
-                         });
-                       }
-               }, {
-                       name: "connection.heartBeatDelay",
-                       createWidget: function(brokerData) {
-                         return new dijit.form.ValidationTextBox({
-                           trim: "true",
-                           regExpGen: util.numericOrContextVarRegexp,
-                           invalidMessage: "Invalid value",
-                           required: false,
-                           value: brokerData["connection.heartBeatDelay"],
-                           placeholder: "Time in ms",
-                           label: "Heart beat delay (ms):",
-                           name: "connection.heartBeatDelay",
-                           promptMessage: "Interval between heart beat messages exchanged between broker and clients"
-                         });
-                       }
-               } ];
            }
 
            Broker.prototype.getTitle = function()
@@ -227,20 +140,9 @@ define(["dojo/_base/xhr",
 
                             var editButton = query(".editBroker", contentPane.containerNode)[0];
                             connect.connect(registry.byNode(editButton), "onClick",
-                                function(evt){
-                                  var query = "api/latest/broker";
-
-                                  xhr.get({url: query, sync: properties.useSyncGet, handleAs: "json", content: { actuals: true, depth: 2 }})
-                                      .then(function(data)
-                                      {
-                                        var brokerData = data[0];
-
-                                        util.showSetAttributesDialog(
-                                          that.attributeWidgetFactories,
-                                          brokerData,
-                                          query,
-                                          "Set broker attributes", "Broker", "broker");
-                                      });
+                                function(evt)
+                                {
+                                  editBroker.show(that.brokerUpdater.brokerData);
                                 }
                             );
 

Modified: qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/VirtualHostNode.js
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/VirtualHostNode.js?rev=1624345&r1=1624344&r2=1624345&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/VirtualHostNode.js (original)
+++ qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/VirtualHostNode.js Thu Sep 11 17:37:32 2014
@@ -107,7 +107,7 @@ define(["dojo/_base/xhr",
                this.editNodeButton.on("click",
                 function(event)
                 {
-                    editVirtualHostNode.show(that.name);
+                    editVirtualHostNode.show(that.vhostNodeUpdater.nodeData);
                 }
                );
 
@@ -179,6 +179,7 @@ define(["dojo/_base/xhr",
                xhr.get({url: this.query, sync: properties.useSyncGet, handleAs: "json"}).then(
                    function(data)
                    {
+                     that.nodeData = data[0];
                      that.updateUI(data[0]);
                    }
                );

Modified: qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addVirtualHostNodeAndVirtualHost.js
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addVirtualHostNodeAndVirtualHost.js?rev=1624345&r1=1624344&r2=1624345&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addVirtualHostNodeAndVirtualHost.js (original)
+++ qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addVirtualHostNodeAndVirtualHost.js Thu Sep 11 17:37:32 2014
@@ -36,6 +36,9 @@ define(["dojo/_base/xhr",
         "qpid/common/util",
         "qpid/common/metadata",
         "dojo/text!addVirtualHostNodeAndVirtualHost.html",
+        "qpid/common/ContextVariablesEditor",
+        "dijit/TitlePane",
+        "dijit/layout/ContentPane",
         "dijit/form/Form",
         "dijit/form/CheckBox",
         "dijit/form/RadioButton",
@@ -100,7 +103,65 @@ define(["dojo/_base/xhr",
 
         this.virtualHostForm.reset();
         this.virtualHostType.set("value", null);
+        if (!this.virtualHostNodeContext)
+        {
+                this.virtualHostNodeContext = new qpid.common.ContextVariablesEditor({name: 'context', title: 'Context variables'});
+                this.virtualHostNodeContext.placeAt(dom.byId("addVirtualHostNode.context"));
+                var that = this;
+                this.virtualHostNodeContext.on("change", function(value){
+                    var inherited = that.virtualHostContext.inheritedActualValues;
+                    var effective = that.virtualHostContext.effectiveValues;
+                    var actuals = that.virtualHostContext.value;
+                    for(var key in value)
+                    {
+                        var val = value[key];
+                        if (!(key in actuals))
+                        {
+                            inherited[key] = val;
+                            if (!(key in effective))
+                            {
+                                effective[key] = val.indexOf("${") == -1 ? val : "";
+                            }
+                        }
+                    }
+                    that.virtualHostContext.setData(that.virtualHostContext.value,effective,inherited);
+                });
+        }
+        if (!this.virtualHostContext)
+        {
+                this.virtualHostContext = new qpid.common.ContextVariablesEditor({name: 'context', title: 'Context variables'});
+                this.virtualHostContext.placeAt(dom.byId("addVirtualHost.context"));
+
+        }
+        var inheritedActualValues = null;
+        xhr.get(
+            {
+              url: "api/latest/broker",
+              sync: true,
+              content: { actuals: true, inheritedActuals: true},
+              handleAs: "json",
+              load: function(data)
+              {
+                inheritedActualValues = data[0].context;
+              }
+            }
+        );
 
+        var effectiveValues = null;
+        xhr.get(
+            {
+              url: "api/latest/broker",
+              sync: true,
+              handleAs: "json",
+              load: function(data)
+              {
+                effectiveValues = data[0].context;
+              }
+            }
+        );
+
+        this.virtualHostNodeContext.setData({},effectiveValues,inheritedActualValues);
+        this.virtualHostContext.setData({},effectiveValues,inheritedActualValues);
         this.dialog.show();
       },
       destroy: function()
@@ -133,7 +194,14 @@ define(["dojo/_base/xhr",
           var widgets = registry.findWidgets(typeFieldsContainer);
           array.forEach(widgets, function(item) { item.destroyRecursive();});
           domConstruct.empty(typeFieldsContainer);
-
+          if (category)
+          {
+              var context = this["v" + category.substring(1) + "Context"];
+              if (context)
+              {
+                context.removeDynamicallyAddedInheritedContext();
+              }
+          }
           if (type)
           {
             var that = this;
@@ -214,7 +282,17 @@ define(["dojo/_base/xhr",
           var success = false,failureReason=null;
 
           var virtualHostNodeData = this._getValues(this.virtualHostNodeForm);
+          var virtualHostNodeContext = this.virtualHostNodeContext.get("value");
+          if (virtualHostNodeContext)
+          {
+            virtualHostNodeData["context"] = virtualHostNodeContext;
+          }
           var virtualHostData = this._getValues(this.virtualHostForm);
+          var virtualHostContext = this.virtualHostContext.get("value");
+          if (virtualHostContext)
+          {
+            virtualHostData["context"] = virtualHostContext;
+          }
 
           //Default the VH name to be the same as the VHN name.
           virtualHostData["name"] = virtualHostNodeData["name"];

Copied: qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/editBroker.js (from r1624299, qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/editVirtualHost.js)
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/editBroker.js?p2=qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/editBroker.js&p1=qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/editVirtualHost.js&r1=1624299&r2=1624345&rev=1624345&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/editVirtualHost.js (original)
+++ qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/editBroker.js Thu Sep 11 17:37:32 2014
@@ -33,7 +33,8 @@ define(["dojo/_base/xhr",
         "dojo/store/Memory",
         "dojo/data/ObjectStore",
         "qpid/common/util",
-        "dojo/text!editVirtualHost.html",
+        "dojo/text!editBroker.html",
+        "qpid/common/ContextVariablesEditor",
         "dijit/Dialog",
         "dijit/form/CheckBox",
         "dijit/form/FilteringSelect",
@@ -45,36 +46,41 @@ define(["dojo/_base/xhr",
         "dojo/domReady!"],
   function (xhr, entities, array, event, lang, win, dom, domConstruct, registry, parser, json, query, Memory, ObjectStore, util, template)
   {
-    var fields = [ "name", "queue.deadLetterQueueEnabled", "storeTransactionIdleTimeoutWarn", "storeTransactionIdleTimeoutClose", "storeTransactionOpenTimeoutWarn", "storeTransactionOpenTimeoutClose", "housekeepingCheckPeriod", "housekeepingThreadCount"];
-    var numericFieldNames = ["storeTransactionIdleTimeoutWarn", "storeTransactionIdleTimeoutClose", "storeTransactionOpenTimeoutWarn", "storeTransactionOpenTimeoutClose", "housekeepingCheckPeriod", "housekeepingThreadCount"];
+    var fields = [ "name", "defaultVirtualHost", "statisticsReportingPeriod", "statisticsReportingResetEnabled", "connection.sessionCountLimit", "connection.heartBeatDelay"];
+    var numericFieldNames = ["statisticsReportingPeriod", "connection.sessionCountLimit", "connection.heartBeatDelay"];
 
-
-    var virtualHostEditor =
+    var brokerEditor =
     {
       init: function()
       {
         var that=this;
         this.containerNode = domConstruct.create("div", {innerHTML: template});
         parser.parse(this.containerNode);
-        this.allFieldsContainer = dom.byId("editVirtualHost.allFields");
-        this.typeFieldsContainer = dom.byId("editVirtualHost.typeFields");
-        this.dialog = registry.byId("editVirtualHostDialog");
-        this.saveButton = registry.byId("editVirtualHost.saveButton");
-        this.cancelButton = registry.byId("editVirtualHost.cancelButton");
+
+        this.dialog = registry.byId("editBrokerDialog");
+        this.saveButton = registry.byId("editBroker.saveButton");
+        this.cancelButton = registry.byId("editBroker.cancelButton");
         this.cancelButton.on("click", function(e){that._cancel(e);});
         this.saveButton.on("click", function(e){that._save(e);});
         for(var i = 0; i < fields.length; i++)
         {
             var fieldName = fields[i];
-            this[fieldName] = registry.byId("editVirtualHost." + fieldName);
+            this[fieldName] = registry.byId("editBroker." + fieldName);
+        }
+        this.form = registry.byId("editBrokerForm");
+        this.context = registry.byId("editBroker.context");
+        util.applyMetadataToWidgets(this.containerNode, "Broker", "broker");
+
+        for(var i = 0; i < numericFieldNames.length; i++)
+        {
+            this[numericFieldNames[i]].set("regExpGen", util.numericOrContextVarRegexp);
         }
-        this.form = registry.byId("editVirtualHostForm");
       },
-      show: function(hostData)
+      show: function(brokerData)
       {
         var that=this;
-        this.query = "api/latest/virtualhost/" + encodeURIComponent(hostData.nodeName) + "/" + encodeURIComponent(hostData.hostName);
-        this.dialog.set("title", "Edit Virtual Host - " + entities.encode(String(hostData.hostName)));
+        this.query = "api/latest/broker";
+        this.dialog.set("title", "Edit Broker - " + entities.encode(String(brokerData.name)));
         xhr.get(
             {
               url: this.query,
@@ -83,7 +89,7 @@ define(["dojo/_base/xhr",
               handleAs: "json",
               load: function(data)
               {
-                that._show(data[0]);
+                that._show(data[0], brokerData);
               }
             }
         );
@@ -112,6 +118,11 @@ define(["dojo/_base/xhr",
           if(this.form.validate())
           {
               var data = util.getFormWidgetValues(this.form, this.initialData);
+              var context = this.context.get("value");
+              if (context && !util.equals(context, this.initialData.context))
+              {
+                data["context"] = context;
+              }
 
               var success = false,failureReason=null;
               xhr.put({
@@ -138,10 +149,25 @@ define(["dojo/_base/xhr",
               alert('Form contains invalid data.  Please correct first');
           }
       },
-      _show:function(virtualHostData)
+      _show:function(actualData, effectiveData)
       {
+          this.initialData = actualData;
+          var nodes = effectiveData.virtualhostnodes
+          var data = [];
+          if (nodes)
+          {
+             for (var i=0; i< nodes.length; i++)
+             {
+                 if (nodes[i].virtualhosts)
+                 {
+                     data.push({id: nodes[i].virtualhosts[0].name, name: nodes[i].virtualhosts[0].name});
+                 }
+             }
+          }
+          var hostsStore = new dojo.store.Memory({ data: data });
+          this["defaultVirtualHost"].set("store", hostsStore);
+
 
-          this.initialData = virtualHostData;
           for(var i = 0; i < fields.length; i++)
           {
             var fieldName = fields[i];
@@ -150,53 +176,21 @@ define(["dojo/_base/xhr",
 
             if (widget instanceof dijit.form.CheckBox)
             {
-              widget.set("checked", virtualHostData[fieldName]);
+              widget.set("checked", actualData[fieldName]);
             }
             else
             {
-              widget.set("value", virtualHostData[fieldName]);
+              widget.set("value", actualData[fieldName]);
             }
           }
-
-          // Add regexp to the numeric fields
-          for(var i = 0; i < numericFieldNames.length; i++)
-          {
-            this[numericFieldNames[i]].set("regExpGen", util.numericOrContextVarRegexp);
-          }
-
-          var that = this;
-
-          var widgets = registry.findWidgets(this.typeFieldsContainer);
-          array.forEach(widgets, function(item) { item.destroyRecursive();});
-          domConstruct.empty(this.typeFieldsContainer);
-
-          require(["qpid/management/virtualhost/" + virtualHostData.type.toLowerCase() + "/edit"],
-             function(TypeUI)
-             {
-                try
-                {
-                    TypeUI.show({containerNode:that.typeFieldsContainer, parent: that, data: virtualHostData});
-                    that.form.connectChildren();
-
-                    util.applyMetadataToWidgets(that.allFieldsContainer, "VirtualHost", virtualHostData.type);
-                }
-                catch(e)
-                {
-                    if (console && console.warn )
-                    {
-                        console.warn(e);
-                    }
-                }
-             }
-          );
-
+          this.context.load(this.query, {actualValues: actualData.context, effectiveValues: effectiveData.context});
           this.dialog.startup();
           this.dialog.show();
       }
     };
 
-    virtualHostEditor.init();
+    brokerEditor.init();
 
-    return virtualHostEditor;
+    return brokerEditor;
   }
 );

Modified: qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/editVirtualHost.js
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/editVirtualHost.js?rev=1624345&r1=1624344&r2=1624345&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/editVirtualHost.js (original)
+++ qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/editVirtualHost.js Thu Sep 11 17:37:32 2014
@@ -34,6 +34,7 @@ define(["dojo/_base/xhr",
         "dojo/data/ObjectStore",
         "qpid/common/util",
         "dojo/text!editVirtualHost.html",
+        "qpid/common/ContextVariablesEditor",
         "dijit/Dialog",
         "dijit/form/CheckBox",
         "dijit/form/FilteringSelect",
@@ -73,6 +74,11 @@ define(["dojo/_base/xhr",
       show: function(hostData)
       {
         var that=this;
+        if (!this.context)
+        {
+         this.context = new qpid.common.ContextVariablesEditor({name: 'context', title: 'Context variables'});
+         this.context.placeAt(dom.byId("editVirtualHost.context"));
+        }
         this.query = "api/latest/virtualhost/" + encodeURIComponent(hostData.nodeName) + "/" + encodeURIComponent(hostData.hostName);
         this.dialog.set("title", "Edit Virtual Host - " + entities.encode(String(hostData.hostName)));
         xhr.get(
@@ -83,7 +89,7 @@ define(["dojo/_base/xhr",
               handleAs: "json",
               load: function(data)
               {
-                that._show(data[0]);
+                that._show(data[0], hostData);
               }
             }
         );
@@ -112,7 +118,11 @@ define(["dojo/_base/xhr",
           if(this.form.validate())
           {
               var data = util.getFormWidgetValues(this.form, this.initialData);
-
+              var context = this.context.get("value");
+              if (context && !util.equals(context, this.initialData.context))
+              {
+                data["context"] = context;
+              }
               var success = false,failureReason=null;
               xhr.put({
                   url: this.query,
@@ -138,10 +148,10 @@ define(["dojo/_base/xhr",
               alert('Form contains invalid data.  Please correct first');
           }
       },
-      _show:function(virtualHostData)
+      _show:function(actualData, effectiveData)
       {
 
-          this.initialData = virtualHostData;
+          this.initialData = actualData;
           for(var i = 0; i < fields.length; i++)
           {
             var fieldName = fields[i];
@@ -150,14 +160,16 @@ define(["dojo/_base/xhr",
 
             if (widget instanceof dijit.form.CheckBox)
             {
-              widget.set("checked", virtualHostData[fieldName]);
+              widget.set("checked", actualData[fieldName]);
             }
             else
             {
-              widget.set("value", virtualHostData[fieldName]);
+              widget.set("value", actualData[fieldName]);
             }
           }
 
+          this.context.load(this.query, {actualValues:actualData.context, effectiveValues:effectiveData.context});
+
           // Add regexp to the numeric fields
           for(var i = 0; i < numericFieldNames.length; i++)
           {
@@ -170,15 +182,15 @@ define(["dojo/_base/xhr",
           array.forEach(widgets, function(item) { item.destroyRecursive();});
           domConstruct.empty(this.typeFieldsContainer);
 
-          require(["qpid/management/virtualhost/" + virtualHostData.type.toLowerCase() + "/edit"],
+          require(["qpid/management/virtualhost/" + actualData.type.toLowerCase() + "/edit"],
              function(TypeUI)
              {
                 try
                 {
-                    TypeUI.show({containerNode:that.typeFieldsContainer, parent: that, data: virtualHostData});
+                    TypeUI.show({containerNode:that.typeFieldsContainer, parent: that, data: actualData});
                     that.form.connectChildren();
 
-                    util.applyMetadataToWidgets(that.allFieldsContainer, "VirtualHost", virtualHostData.type);
+                    util.applyMetadataToWidgets(that.allFieldsContainer, "VirtualHost", actualData.type);
                 }
                 catch(e)
                 {



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org