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/03/22 15:17:29 UTC

svn commit: r1736195 - in /qpid/java/trunk: broker-core/src/main/java/org/apache/qpid/server/security/auth/manager/oauth2/ broker-core/src/main/java/org/apache/qpid/server/security/group/cloudfoundry/ broker-plugins/management-http/src/main/java/resour...

Author: lquack
Date: Tue Mar 22 14:17:28 2016
New Revision: 1736195

URL: http://svn.apache.org/viewvc?rev=1736195&view=rev
Log:
QPID-7112: [Java Broker] Add UI for CloudFoundryDashboardManagementGroupProvider

Added:
    qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/groupprovider/cloudfoundrydashboardmanagement/
    qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/groupprovider/cloudfoundrydashboardmanagement/add.html
    qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/groupprovider/cloudfoundrydashboardmanagement/show.html
      - copied, changed from r1735943, qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/common/ContextVariablesEditor.html
    qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/management/groupprovider/cloudfoundrydashboardmanagement/
    qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/management/groupprovider/cloudfoundrydashboardmanagement/add.js
    qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/management/groupprovider/cloudfoundrydashboardmanagement/show.js
Modified:
    qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/security/auth/manager/oauth2/OAuth2AuthenticationProvider.java
    qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/security/group/cloudfoundry/CloudFoundryDashboardManagementGroupProvider.java
    qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/security/group/cloudfoundry/CloudFoundryDashboardManagementGroupProviderImpl.java
    qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/authenticationprovider/oauth2/add.html
    qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/common/ContextVariablesEditor.html
    qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/css/common.css
    qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/common/util.js
    qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/management/GroupProvider.js
    qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addGroupProvider.js
    qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addStore.js
    qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/management/authenticationprovider/oauth2/add.js
    qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/showGroupProvider.html

Modified: qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/security/auth/manager/oauth2/OAuth2AuthenticationProvider.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/security/auth/manager/oauth2/OAuth2AuthenticationProvider.java?rev=1736195&r1=1736194&r2=1736195&view=diff
==============================================================================
--- qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/security/auth/manager/oauth2/OAuth2AuthenticationProvider.java (original)
+++ qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/security/auth/manager/oauth2/OAuth2AuthenticationProvider.java Tue Mar 22 14:17:28 2016
@@ -44,13 +44,13 @@ public interface OAuth2AuthenticationPro
     @ManagedAttribute( description = "Redirect URI to obtain authorization code grant", mandatory = true, defaultValue = "${this:defaultAuthorizationEndpointURI}")
     URI getAuthorizationEndpointURI();
 
-    @ManagedAttribute( description = "Token endpoint URI", mandatory = true, defaultValue = "${this:defaultTokenEndpointURI}" )
+    @ManagedAttribute( description = "Token endpoint URI to exchange an authorization code grant for an access token", mandatory = true, defaultValue = "${this:defaultTokenEndpointURI}" )
     URI getTokenEndpointURI();
 
     @ManagedAttribute( description = "Whether to use basic authentication when accessing the token endpoint", defaultValue = "false" )
     boolean getTokenEndpointNeedsAuth();
 
-    @ManagedAttribute( description = "Identity resolver endpoint URI", mandatory = true, defaultValue = "${this:defaultIdentityResolverEndpointURI}"  )
+    @ManagedAttribute( description = "Identity resolver endpoint URI to get user information associated with a given access token", mandatory = true, defaultValue = "${this:defaultIdentityResolverEndpointURI}"  )
     URI getIdentityResolverEndpointURI();
 
     @ManagedAttribute( description = "The type of the IdentityResolver", mandatory = true,
@@ -66,10 +66,10 @@ public interface OAuth2AuthenticationPro
     @ManagedAttribute( description = "Client secret to identify qpid to the OAuth endpoints", mandatory = true, secure = true )
     String getClientSecret();
 
-    @ManagedAttribute( description = "The OAuth access token scope passed to the authorization endpoint", defaultValue = "${this:defaultScope}")
+    @ManagedAttribute( description = "The OAuth2 access token scope passed to the authorization endpoint", defaultValue = "${this:defaultScope}")
     String getScope();
 
-    @ManagedAttribute( description = "TrustStore to use when contacting OAuth endpoints" )
+    @ManagedAttribute( description = "TrustStore to use when contacting OAuth2 endpoints" )
     TrustStore getTrustStore();
 
     @ManagedAttribute( defaultValue = "[ \"XOAUTH2\" ]")

Modified: qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/security/group/cloudfoundry/CloudFoundryDashboardManagementGroupProvider.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/security/group/cloudfoundry/CloudFoundryDashboardManagementGroupProvider.java?rev=1736195&r1=1736194&r2=1736195&view=diff
==============================================================================
--- qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/security/group/cloudfoundry/CloudFoundryDashboardManagementGroupProvider.java (original)
+++ qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/security/group/cloudfoundry/CloudFoundryDashboardManagementGroupProvider.java Tue Mar 22 14:17:28 2016
@@ -42,13 +42,13 @@ public interface CloudFoundryDashboardMa
     @ManagedContextDefault(name = QPID_GROUPPROVIDER_CLOUDFOUNDRY_READ_TIMEOUT)
     int DEFAULT_QPID_GROUPPROVIDER_CLOUDFOUNDRY_READ_TIMEOUT = 60000;
 
-    @ManagedAttribute( mandatory = true )
+    @ManagedAttribute( description = "The CloudFoundry dashboard SSO base URI. The API version and service instance information will be appended by this GroupProvider.", mandatory = true )
     URI getCloudFoundryEndpointURI();
 
-    @ManagedAttribute()
+    @ManagedAttribute( description = "The TrustStore that contains the CA certificate that signed the CloudFoundry endpoint." )
     TrustStore getTrustStore();
 
-    @ManagedAttribute( mandatory = true )
+    @ManagedAttribute( description = "A service instance id to qpid management group mapping. If the CloudFoundry endpoint grants a user permission to manage a service instance the user will be associated with the corresponding management group.", mandatory = true )
     Map<String, String> getServiceToManagementGroupMapping();
 
     @DerivedAttribute

Modified: qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/security/group/cloudfoundry/CloudFoundryDashboardManagementGroupProviderImpl.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/security/group/cloudfoundry/CloudFoundryDashboardManagementGroupProviderImpl.java?rev=1736195&r1=1736194&r2=1736195&view=diff
==============================================================================
--- qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/security/group/cloudfoundry/CloudFoundryDashboardManagementGroupProviderImpl.java (original)
+++ qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/security/group/cloudfoundry/CloudFoundryDashboardManagementGroupProviderImpl.java Tue Mar 22 14:17:28 2016
@@ -42,6 +42,8 @@ import java.util.Set;
 
 import com.fasterxml.jackson.core.JsonProcessingException;
 import com.fasterxml.jackson.databind.ObjectMapper;
+import com.google.common.util.concurrent.Futures;
+import com.google.common.util.concurrent.ListenableFuture;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -51,6 +53,8 @@ import org.apache.qpid.server.model.Brok
 import org.apache.qpid.server.model.ConfiguredObject;
 import org.apache.qpid.server.model.ManagedAttributeField;
 import org.apache.qpid.server.model.ManagedObjectFactoryConstructor;
+import org.apache.qpid.server.model.State;
+import org.apache.qpid.server.model.StateTransition;
 import org.apache.qpid.server.model.TrustStore;
 import org.apache.qpid.server.security.auth.manager.oauth2.OAuth2UserPrincipal;
 import org.apache.qpid.server.security.group.GroupPrincipal;
@@ -112,6 +116,7 @@ public class CloudFoundryDashboardManage
         super.validateChange(proxyForValidation, changedAttributes);
         final CloudFoundryDashboardManagementGroupProvider<?> validationProxy = (CloudFoundryDashboardManagementGroupProvider<?>) proxyForValidation;
         validateSecureEndpoint(validationProxy);
+        validateMapping(validationProxy);
     }
 
     @Override
@@ -119,6 +124,7 @@ public class CloudFoundryDashboardManage
     {
         super.onValidate();
         validateSecureEndpoint(this);
+        validateMapping(this);
     }
 
     private void validateSecureEndpoint(final CloudFoundryDashboardManagementGroupProvider<?> provider)
@@ -130,6 +136,22 @@ public class CloudFoundryDashboardManage
         }
     }
 
+    private void validateMapping(final CloudFoundryDashboardManagementGroupProvider<?> provider)
+    {
+        for(Map.Entry<String, String> entry : provider.getServiceToManagementGroupMapping().entrySet())
+        {
+            if ("".equals(entry.getKey()))
+            {
+                throw new IllegalConfigurationException("Service instance id may not be empty");
+            }
+            if ("".equals(entry.getValue()))
+            {
+                throw new IllegalConfigurationException("Group name for service id '"
+                                                        + entry.getKey() + "' may not be empty");
+            }
+        }
+    }
+
     @Override
     public Set<Principal> getGroupPrincipalsForUser(Principal userPrincipal)
     {
@@ -228,6 +250,20 @@ public class CloudFoundryDashboardManage
         }
     }
 
+    @StateTransition( currentState = { State.UNINITIALIZED, State.QUIESCED, State.ERRORED }, desiredState = State.ACTIVE )
+    private ListenableFuture<Void> activate()
+    {
+        setState(State.ACTIVE);
+        return Futures.immediateFuture(null);
+    }
+
+    @StateTransition(currentState = {State.ACTIVE}, desiredState = State.DELETED)
+    private ListenableFuture<Void> doDelete()
+    {
+        deleted();
+        return Futures.immediateFuture(null);
+    }
+
     @Override
     public URI getCloudFoundryEndpointURI()
     {

Modified: qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/authenticationprovider/oauth2/add.html
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/authenticationprovider/oauth2/add.html?rev=1736195&r1=1736194&r2=1736195&view=diff
==============================================================================
--- qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/authenticationprovider/oauth2/add.html (original)
+++ qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/authenticationprovider/oauth2/add.html Tue Mar 22 14:17:28 2016
@@ -118,14 +118,16 @@
     </div>
     <div class="clear">
         <div class="formLabel-labelCell tableContainer-labelCell">Trust Store:</div>
-        <div class="formLabel-controlCell tableContainer-valueCell">
-            <input type="text" id="addAuthenticationProvider.trustStore"
-                   data-dojo-type="dijit/form/ValidationTextBox"
-                   data-dojo-props="
-                              name: 'trustStore',
-                              placeHolder: 'trust store',
-                              promptMessage: 'Enter the name of the trust store to use for the above endpoints.',
-                              title: 'Enter the name of the trust store to use for the above endpoints'"/>
+        <div class="tableContainer-valueCell formLabel-controlCell">
+            <select class="trustStore" data-dojo-type="dijit/form/FilteringSelect"
+                    data-dojo-props="
+                                    required: false,
+                                    name: 'trustStore',
+                                    placeHolder: 'Select trust store',
+                                    promptMessage: 'Select the trust store containing the certificate of the CA that signed the endpoints\' certificates',
+                                    title: 'Select trust store for secure connection',
+                                    searchAttr: 'name'">
+            </select>
         </div>
     </div>
     <div class="clear">

Modified: qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/common/ContextVariablesEditor.html
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/common/ContextVariablesEditor.html?rev=1736195&r1=1736194&r2=1736195&view=diff
==============================================================================
--- qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/common/ContextVariablesEditor.html (original)
+++ qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/common/ContextVariablesEditor.html Tue Mar 22 14:17:28 2016
@@ -17,7 +17,7 @@
   ~ under the License.
   -->
 <div class="contextEditor">
-    <div class="contextGrid">
+    <div class="dialogGrid">
         <div class="grid"></div>
     </div>
     <div>

Modified: qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/css/common.css
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/css/common.css?rev=1736195&r1=1736194&r2=1736195&view=diff
==============================================================================
--- qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/css/common.css (original)
+++ qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/css/common.css Tue Mar 22 14:17:28 2016
@@ -323,7 +323,7 @@ div .messages {
     margin-right:5px;
 }
 
-.contextGrid
+.dialogGrid
 {
     width:100%;
     max-height: 140px;

Added: qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/groupprovider/cloudfoundrydashboardmanagement/add.html
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/groupprovider/cloudfoundrydashboardmanagement/add.html?rev=1736195&view=auto
==============================================================================
--- qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/groupprovider/cloudfoundrydashboardmanagement/add.html (added)
+++ qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/groupprovider/cloudfoundrydashboardmanagement/add.html Tue Mar 22 14:17:28 2016
@@ -0,0 +1,63 @@
+<!--
+ -
+ - 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>
+    <div class="clear">
+        <div class="formLabel-labelCell tableContainer-labelCell">CloudFoundry Endpoint URL*:</div>
+        <div class="formLabel-controlCell tableContainer-valueCell">
+            <input type="text" class="cloudFoundryEndpointURI"
+                   data-dojo-type="dijit/form/ValidationTextBox"
+                   data-dojo-props="
+                              name: 'cloudFoundryEndpointURI',
+                              required: true,
+                              placeHolder: 'URL to CloudFoundry endpoint',
+                              title: 'Enter the URL to the CloudFoundry endpoint',
+                              promptMessage: 'Enter the URL to the CloudFoundry endpoint'"/>
+        </div>
+    </div>
+    <div class="clear">
+        <div class="formLabel-labelCell tableContainer-labelCell">Trust Store:</div>
+        <div class="tableContainer-valueCell formLabel-controlCell">
+            <select class="trustStore" data-dojo-type="dijit/form/FilteringSelect"
+                    data-dojo-props="
+                                    required: false,
+                                    name: 'trustStore',
+                                    placeHolder: 'Select trust store',
+                                    promptMessage: 'Select the trust store containing the certificate of the CA that signed the endpoint\'s certificate',
+                                    title: 'Select trust store for secure connection',
+                                    searchAttr: 'name'">
+            </select>
+        </div>
+    </div>
+    <div class="clear">
+        <div class="formLabel-labelCell tableContainer-labelCell">Service To Group Mapping*:</div>
+        <div class="tableContainer-valueCell clear">
+            <div class="dialogGrid">
+                <div class="serviceToManagementGroupMapping"></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>
+            </div>
+        </div>
+    </div>
+    <div class="clear"></div>
+</div>

Copied: qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/groupprovider/cloudfoundrydashboardmanagement/show.html (from r1735943, qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/common/ContextVariablesEditor.html)
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/groupprovider/cloudfoundrydashboardmanagement/show.html?p2=qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/groupprovider/cloudfoundrydashboardmanagement/show.html&p1=qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/common/ContextVariablesEditor.html&r1=1735943&r2=1736195&rev=1736195&view=diff
==============================================================================
--- qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/common/ContextVariablesEditor.html (original)
+++ qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/groupprovider/cloudfoundrydashboardmanagement/show.html Tue Mar 22 14:17:28 2016
@@ -16,20 +16,18 @@
   ~ specific language governing permissions and limitations
   ~ under the License.
   -->
-<div class="contextEditor">
-    <div class="contextGrid">
-        <div class="grid"></div>
+<div>
+    <div class="clear">
+        <div class="formLabel-labelCell">CloudFoundry endpoint URL:</div>
+        <div class="cloudFoundryEndpointURI formValue-valueCell"></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 class="clear">
+        <div class="formLabel-labelCell">Trust Store:</div>
+        <div class="trustStore formValue-valueCell"></div>
     </div>
-</div>
\ No newline at end of file
+    <div class="clear">
+        <div class="formLabel-labelCell">Service to Management Group Mapping:</div>
+        <div class="formValue-valueCell"><table class="serviceToManagementGroupMappingTable"></table></div>
+    </div>
+    <div class="clear"></div>
+</div>

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=1736195&r1=1736194&r2=1736195&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 Tue Mar 22 14:17:28 2016
@@ -547,17 +547,17 @@ define(["dojo/_base/xhr",
                for(var i in formWidgets)
                {
                    var widget = formWidgets[i];
-                   var value = widget.value;
-                   var propName = widget.name;
-                   if (propName && (widget.required || value ))
+                   var value = widget.get("value");
+                   var propName = widget.get("name");
+                   if (propName && (widget.get("required") || value ))
                    {
-                       if (widget.excluded)
+                       if (widget.get("excluded"))
                        {
                           continue;
                        }
                        if (widget instanceof dijit.form.RadioButton)
                        {
-                           if (widget.checked)
+                           if (widget.get("checked"))
                            {
                                var currentValue = values[propName];
                                if (currentValue)
@@ -579,7 +579,7 @@ define(["dojo/_base/xhr",
                        }
                        else if (widget instanceof dijit.form.CheckBox)
                        {
-                           values[ propName ] = widget.checked;
+                           values[ propName ] = widget.get("checked");
                        }
                        else
                        {
@@ -636,6 +636,21 @@ define(["dojo/_base/xhr",
                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);
@@ -740,6 +755,39 @@ define(["dojo/_base/xhr",
                                      util.xhrErrorHandler);
            }
 
+           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)

Modified: qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/management/GroupProvider.js
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/management/GroupProvider.js?rev=1736195&r1=1736194&r2=1736195&view=diff
==============================================================================
--- qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/management/GroupProvider.js (original)
+++ qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/management/GroupProvider.js Tue Mar 22 14:17:28 2016
@@ -134,6 +134,7 @@ define(["dojo/parser",
            GroupProvider.prototype.editGroupProvider = function()
            {
                 var management = this.controller.management;
+                var that = this;
                 management.load(this.modelObj,{ actuals: true }).then(
                           function(actualData)
                           {

Modified: qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addGroupProvider.js
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addGroupProvider.js?rev=1736195&r1=1736194&r2=1736195&view=diff
==============================================================================
--- qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addGroupProvider.js (original)
+++ qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addGroupProvider.js Tue Mar 22 14:17:28 2016
@@ -25,7 +25,8 @@ define([
         "dojo/parser",
         "dojo/_base/array",
         "dojo/_base/event",
-        'dojo/json',
+        "dojo/_base/lang",
+        "dojo/json",
         "qpid/common/util",
         "dojo/text!addGroupProvider.html",
         "dojo/store/Memory",
@@ -42,7 +43,7 @@ define([
         "dijit/layout/ContentPane",
         "dojox/layout/TableContainer",
         "dojo/domReady!"],
-    function (dom, construct, registry, parser, array, event, json, util, template)
+    function (dom, construct, registry, parser, array, event, lang, json, util, template)
     {
 
         var addGroupProvider =
@@ -75,9 +76,14 @@ define([
             {
                 this.management = management;
                 this.modelObj = modelObj;
-                this.initialData = actualData;
+                this.initialData = lang.clone(actualData);
                 this.groupProviderForm.reset();
 
+                var supportedTypes = management.metadata.getTypesForCategory("GroupProvider");
+                supportedTypes.sort();
+                var supportedTypesStore = util.makeTypeStore(supportedTypes);
+                this.groupProviderType.set("store", supportedTypesStore);
+
                 if (actualData)
                 {
                     this._destroyTypeFields(this.containerNode);
@@ -86,10 +92,6 @@ define([
                 this.groupProviderName.set("disabled", actualData == null ? false : true);
                 this.groupProviderType.set("disabled", actualData == null ? false : true);
                 this.dialog.set("title", actualData == null ? "Add Group Provider" : "Edit Group Provider - " + actualData.name);
-                var supportedTypes = management.metadata.getTypesForCategory("GroupProvider");
-                supportedTypes.sort();
-                var supportedTypesStore = util.makeTypeStore(supportedTypes);
-                this.groupProviderType.set("store", supportedTypesStore);
                 this.dialog.show();
             },
             _initFields:function(data)

Modified: qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addStore.js
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addStore.js?rev=1736195&r1=1736194&r2=1736195&view=diff
==============================================================================
--- qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addStore.js (original)
+++ qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addStore.js Tue Mar 22 14:17:28 2016
@@ -94,7 +94,14 @@ define(["dojo/_base/lang",
                 }
                 this.storeName.set("disabled", effectiveData == null ? false : true);
                 this.storeType.set("disabled", effectiveData == null ? false : true);
-                this.dialog.set("title", effectiveData == null ? "Add Key Store" : "Edit Key Store - " + effectiveData.name)
+                if (effectiveData == null)
+                {
+                    this.dialog.set("title", "Add " + this.category);
+                }
+                else
+                {
+                    this.dialog.set("title", "Edit " + this.category + " - " + effectiveData.name);
+                }
                 this.dialog.show();
             },
             _initFields:function(data)

Modified: qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/management/authenticationprovider/oauth2/add.js
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/management/authenticationprovider/oauth2/add.js?rev=1736195&r1=1736194&r2=1736195&view=diff
==============================================================================
--- qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/management/authenticationprovider/oauth2/add.js (original)
+++ qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/management/authenticationprovider/oauth2/add.js Tue Mar 22 14:17:28 2016
@@ -30,39 +30,24 @@ define(["dojo/dom",
     {
         var addAuthenticationProvier =
         {
-            show: function(data)
-            {
+            show: function (data) {
                 var that = this;
-                this.metadata = data.metadata;
-                this.containerNode = data.containerNode;
-                data.containerNode.innerHTML = template;
-                return parser.parse(this.containerNode).then(function(instances)
-                {
-                    var identityResolverType = registry.byId("addAuthenticationProvider.identityResolverType");
-                    var validValues = that.metadata.getMetaData(data.category, data.type).attributes.identityResolverType.validValues;
-                    var validValueStore = util.makeTypeStore(validValues);
-                    identityResolverType.set("store", validValueStore);
+                util.parse(data.containerNode, template, function(){that._postParse(data);});
+            },
+            _postParse: function(data)
+            {
+                var identityResolverType = registry.byId("addAuthenticationProvider.identityResolverType");
+                var validValues = data.metadata.getMetaData(data.category, data.type).attributes.identityResolverType.validValues;
+                var validValueStore = util.makeTypeStore(validValues);
+                identityResolverType.set("store", validValueStore);
 
+                util.makeInstanceStore(data.parent.management, "Broker", "TrustStore", function(trustStoresStore)
+                {
+                    var trustStore = registry.byNode(query(".trustStore", data.containerNode)[0]);
+                    trustStore.set("store", trustStoresStore);
                     if (data.data)
                     {
-                        var authorizationEndpointURI = registry.byId("addAuthenticationProvider.authorizationEndpointURI");
-                        authorizationEndpointURI.set("value", data.data.authorizationEndpointURI);
-                        var tokenEndpointURI = registry.byId("addAuthenticationProvider.tokenEndpointURI");
-                        tokenEndpointURI.set("value", data.data.tokenEndpointURI);
-                        var tokenEndpointNeedsAuth = registry.byId("addAuthenticationProvider.tokenEndpointNeedsAuth");
-                        tokenEndpointNeedsAuth.set("value", data.data.tokenEndpointNeedsAuth);
-                        var identityResolverEndpointURI = registry.byId("addAuthenticationProvider.identityResolverEndpointURI");
-                        identityResolverEndpointURI.set("value", data.data.identityResolverEndpointURI);
-                        identityResolverType.set("value", data.data.identityResolverType);
-                        var clientId = registry.byId("addAuthenticationProvider.clientId");
-                        clientId.set("value", data.data.clientId);
-                        var clientSecret = registry.byId("addAuthenticationProvider.clientSecret");
-                        clientSecret.set("value", data.data.clientSecret);
-                        var scope = registry.byId("addAuthenticationProvider.scope");
-                        scope.set("value", data.data.scope);
-                        var postLogoutURI = registry.byId("addAuthenticationProvider.postLogoutURI");
-                        postLogoutURI.set("value", data.data.postLogoutURI);
-
+                        util.initialiseFields(data.data, data.containerNode, data.metadata, "AuthenticationProvider", "OAuth2");
                     }
                 });
             }

Added: qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/management/groupprovider/cloudfoundrydashboardmanagement/add.js
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/management/groupprovider/cloudfoundrydashboardmanagement/add.js?rev=1736195&view=auto
==============================================================================
--- qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/management/groupprovider/cloudfoundrydashboardmanagement/add.js (added)
+++ qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/management/groupprovider/cloudfoundrydashboardmanagement/add.js Tue Mar 22 14:17:28 2016
@@ -0,0 +1,197 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+define(["dojo/dom",
+        "dojo/query",
+        "dojo/_base/array",
+        "dojo/_base/connect",
+        "dojo/_base/lang",
+        "dojo/store/Memory",
+        "dijit/registry",
+        "qpid/common/util",
+        "dojo/text!groupprovider/cloudfoundrydashboardmanagement/add.html",
+        "dijit/form/FilteringSelect",
+        "dojo/domReady!"],
+    function (dom, query, array, connect, lang, Memory, registry, util, template) {
+
+        return {
+            _nextGridItemId : 0,
+
+            show: function (data) {
+                var that = this;
+                this.containerNode = data.containerNode;
+                util.parse(data.containerNode, template, function(){that._postParse(data);});
+            },
+
+            _postParse: function(data)
+            {
+                var that = this;
+                util.makeInstanceStore(data.parent.management, "Broker", "TrustStore", function(trustStoresStore)
+                {
+                    var trustStore = registry.byNode(query(".trustStore", data.containerNode)[0]);
+                    trustStore.set("store", trustStoresStore);
+                    if (data.data)
+                    {
+                        util.initialiseFields(data.data, data.containerNode, data.parent.management.metadata, "GroupProvider", "CloudFoundryDashboardManagement");
+                    }
+                });
+
+                this._setupGrid();
+                if (data.data && data.data.serviceToManagementGroupMapping)
+                {
+                    this._populateGrid(data.data.serviceToManagementGroupMapping);
+                }
+            },
+
+            _setupGrid: function() {
+                var that = this;
+                var gridNode = query(".serviceToManagementGroupMapping", this.containerNode)[0];
+                var addButtonNode = query(".addButton", this.containerNode)[0];
+                var deleteButtonNode = query(".deleteButton", this.containerNode)[0];
+                var addButton = registry.byNode(addButtonNode);
+                var deleteButton = registry.byNode(deleteButtonNode);
+                var layout = [[
+                    {name: "Service Instance Id", field: "serviceInstanceId", width: "50%", editable: true},
+                    {name: 'Group Name', field: 'groupName', width: '50%', editable: true}
+                ]];
+                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: 'serviceInstanceId', descending: false}],
+                    plugins: {indirectSelection: true}
+                }, gridNode);
+
+                grid.name = "serviceToManagementGroupMapping";
+                this._grid = grid;
+
+                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);
+
+                deleteButton.set("disabled", true);
+                addButton.on("click", function (event) {
+                    that._newItem();
+                });
+                deleteButton.on("click", function (event) {
+                    that._deleteSelected();
+                });
+                grid._getValueAttr = function() {
+                    var value = {};
+                    that._grid.store.fetch({
+                            onComplete:function(items,request)
+                            {
+                                array.forEach(items, function(item)
+                                {
+                                    value[item.serviceInstanceId] = item.groupName;
+                                });
+                            }
+                        });
+                    return value;
+                };
+
+                grid.startup();
+            },
+
+            _populateGrid: function(serviceToManagementGroupMapping) {
+                var that = this;
+                // delete previous store data
+                this._grid.store.fetch({
+                    onComplete:function(items,request)
+                    {
+                        if(items.length)
+                        {
+                            array.forEach(items, function(item)
+                            {
+                                that._grid.store.deleteItem(item);
+                            });
+                        }
+                    }
+                });
+
+                // add new data into grid store
+                this._nextGridItemId = 0;
+                for(var serviceInstanceId in serviceToManagementGroupMapping)
+                {
+                    var groupName = serviceToManagementGroupMapping[serviceInstanceId];
+                    var storeItem = {
+                        id: this._nextId(),
+                        serviceInstanceId: serviceInstanceId,
+                        groupName: groupName
+                    };
+                    this._grid.store.newItem(storeItem);
+                }
+                this._grid.store.save();
+            },
+
+            _nextId: function()
+            {
+                this._nextGridItemId = this._nextGridItemId + 1;
+                return this._nextGridItemId;
+            },
+
+            _newItem: function()
+            {
+                var newItem = { id: this._nextId(), serviceInstanceId: "", groupName: "" };
+                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)
+                        {
+                            grid.store.deleteItem(selectedItem);
+                        }
+                    });
+                    grid.store.save();
+                    grid.selection.deselectAll();
+                }
+            }
+
+        };
+    }
+);

Added: qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/management/groupprovider/cloudfoundrydashboardmanagement/show.js
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/management/groupprovider/cloudfoundrydashboardmanagement/show.js?rev=1736195&view=auto
==============================================================================
--- qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/management/groupprovider/cloudfoundrydashboardmanagement/show.js (added)
+++ qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/management/groupprovider/cloudfoundrydashboardmanagement/show.js Tue Mar 22 14:17:28 2016
@@ -0,0 +1,55 @@
+/*
+ *
+ * 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/query",
+        "dojo/_base/lang",
+        "dojox/html/entities",
+        "dojo/domReady!"],
+    function (util, query, lang, entities)
+    {
+        var fieldNames = ["cloudFoundryEndpointURI", "trustStore", "serviceToManagementGroupMapping"];
+
+        function GroupProvider(params)
+        {
+            this.containerNode = params.containerNode;
+            util.buildUI(params.containerNode, params.parent, "groupprovider/cloudfoundrydashboardmanagement/show.html", fieldNames, this);
+            params.parent.editButton.set("disabled", false);
+        }
+
+        GroupProvider.prototype.update = function(restData)
+        {
+            var data = restData || {};
+            if (data.serviceToManagementGroupMapping)
+            {
+                var tableContent = "";
+                for (var serviceInstanceId in data.serviceToManagementGroupMapping)
+                {
+                    tableContent += "<tr><td>" + entities.encode(serviceInstanceId) + "</td><td>: " + entities.encode(data.serviceToManagementGroupMapping[serviceInstanceId]) + "</td></tr>\n";
+                }
+                var table = query(".serviceToManagementGroupMappingTable", this.containerNode)[0];
+                table.innerHTML = tableContent;
+            }
+            util.updateUI(data, fieldNames, this);
+        }
+
+        return GroupProvider;
+    }
+);

Modified: qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/showGroupProvider.html
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/showGroupProvider.html?rev=1736195&r1=1736194&r2=1736195&view=diff
==============================================================================
--- qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/showGroupProvider.html (original)
+++ qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/showGroupProvider.html Tue Mar 22 14:17:28 2016
@@ -37,8 +37,8 @@
         <div class="providerDetails"></div>
         <br/>
         <div class="dijitDialogPaneActionBar">
-            <input class="deleteGroupProviderButton" type="button" value="Delete" label="Delete" data-dojo-type="dijit.form.Button" />
             <input class="editGroupProviderButton" type="button" value="Edit" label="Edit" data-dojo-type="dijit.form.Button" data-dojo-props="disabled:true"/>
+            <input class="deleteGroupProviderButton" type="button" value="Delete" label="Delete" data-dojo-type="dijit.form.Button" />
         </div>
     </div>
 </div>




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