Author: olamy
Date: Mon Mar  4 17:14:51 2013
New Revision: 1452404

URL: http://svn.apache.org/r1452404
Log:
[MRM-1736] map roles to ldap groups
ui to add mappings

Modified:
    
archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/js/archiva/general-admin.js
    
archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/js/knockout.simpleGrid.js
    
archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/js/templates/archiva/general-admin.html

Modified: 
archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/js/archiva/general-admin.js
URL: 
http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/js/archiva/general-admin.js?rev=1452404&r1=1452403&r2=1452404&view=diff
==============================================================================
--- 
archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/js/archiva/general-admin.js
 (original)
+++ 
archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/js/archiva/general-admin.js
 Mon Mar  4 17:14:51 2013
@@ -1390,24 +1390,6 @@ define("archiva.general-admin",["jquery"
 
     this.allRoleNames=[];
 
-    self.gridViewModel = new ko.simpleGrid.viewModel({
-      data: self.redbackRuntimeConfiguration().configurationPropertiesEntries,
-      columns: [
-       {
-         headerText: $.i18n.prop('redback.runtime.properties.key.label'),
-         rowText: "key"
-       },
-       {
-         headerText: $.i18n.prop('redback.runtime.properties.value.label'),
-         rowText: "value"
-       }
-      ],
-      pageSize: 10,
-      gridUpdateCallBack: function(){
-        activatePopoverDoc();
-      }
-    });
-
     findUserManagerImplementationInformation=function(id){
       for(var i= 0;i<self.userManagerImplementationInformations().length;i++){
         $.log(id+""+self.userManagerImplementationInformations()[i].beanId);
@@ -1712,14 +1694,111 @@ define("archiva.general-admin",["jquery"
         self.modifiesLdapGroupMappings().push(ldapGroupMapping);
       }
       
$.log('modifyLdapGroupMapping:'+ldapGroupMapping.group()+','+self.modifiesLdapGroupMappings().length);
+      //$("#ldap-group-mappings-div select" ).select2({width: "element"});
     };
+    //olamy could be better but some reason doesn't work and I didn't find 
enough to understand why :-)
+    /*self.gridldapMappingsViewModel = new ko.simpleGrid.viewModel({
+     data: self.redbackRuntimeConfiguration().ldapGroupMappings,
+     pageSize: 10,
+     gridUpdateCallBack: function(){
+       $.log("ldapGroupsMapping: gridUpdateCallBack");
+       $("#main-content").find("#ldap-group-mappings-div select" 
).select2({width: "element"});
+     }
+    });*/
+
+    self.gridViewModel = new ko.simpleGrid.viewModel({
+     data: self.redbackRuntimeConfiguration().configurationPropertiesEntries,
+     columns: [
+       {
+         headerText: $.i18n.prop('redback.runtime.properties.key.label'),
+         rowText: "key"
+       },
+       {
+         headerText: $.i18n.prop('redback.runtime.properties.value.label'),
+         rowText: "value"
+       }
+     ],
+     pageSize: 10,
+     gridUpdateCallBack: function(){
+       activatePopoverDoc();
+     }
+    });
+
+    this.newLdapGroupMapping=ko.observable(new 
LdapGroupMapping("",[],false,self.modifyLdapGroupMapping));
 
     addLdapGroupMapping=function(){
-      $.log("addLdapGroupMapping");
-      self.redbackRuntimeConfiguration().ldapGroupMappings.push(new 
LdapGroupMapping("",[],false,self.modifyLdapGroupMapping));
-      $("#ldap-group-mappings-div select" ).select2({width: "element"});
+      // FIXME validate datas from ldapGroupMapping
+      $.log("addLdapGroupMapping:"+self.newLdapGroupMapping().group());
+
+      var mainContent=$("#main-content");
+      var saveButton = mainContent.find("#redback-runtime-configuration-save" 
);
+      saveButton.button('loading');
+      clearUserMessages();
+      var userMessages=$("#user-messages");
+      userMessages.html(mediumSpinnerImg());
+      $.ajax("restServices/redbackServices/ldapGroupMappingService",
+             {
+               type: "PUT",
+               contentType: 'application/json',
+               data:ko.toJSON(new 
LdapGroupMapping(self.newLdapGroupMapping().group(),self.newLdapGroupMapping().roleNames(),false,self.modifyLdapGroupMapping)),
+               dataType: 'json',
+               success: function(data) {
+                 self.redbackRuntimeConfiguration().ldapGroupMappings
+                         .unshift(new 
LdapGroupMapping(self.newLdapGroupMapping().group(),self.newLdapGroupMapping().roleNames(),false,self.modifyLdapGroupMapping));
+                 self.newLdapGroupMapping=ko.observable(new 
LdapGroupMapping("",[],false,self.modifyLdapGroupMapping));
+                 
$.log("addLdapGroupMapping:"+self.redbackRuntimeConfiguration().ldapGroupMappings().length);
+                 $("#ldap-group-mappings-div select" ).select2({width: 
"element"});
+                 var 
message=$.i18n.prop('redback-runtime-ldap-group-mapping.added');
+                 displaySuccessMessage(message);
+               },
+               error: function(data) {
+                 var res = $.parseJSON(data.responseText);
+                 displayRestError(res);
+               }
+             }
+      ).always(
+        function(){
+          removeMediumSpinnerImg(userMessages);
+          saveButton.button('reset');
+        }
+      );
+
+
     }
 
+    deleteLdapGroupMapping=function(ldapGroupMapping){
+
+
+      var mainContent=$("#main-content");
+      var saveButton = mainContent.find("#redback-runtime-configuration-save" 
);
+      saveButton.button('loading');
+      clearUserMessages();
+      var userMessages=$("#user-messages");
+      userMessages.html(mediumSpinnerImg());
+      
$.ajax("restServices/redbackServices/ldapGroupMappingService/"+ldapGroupMapping.group(),
+             {
+               type: "DELETE",
+               contentType: 'application/json',
+               dataType: 'json',
+               success: function(data) {
+                 $.log("deleteLdapGroupMapping:"+ldapGroupMapping.group());
+                 
self.redbackRuntimeConfiguration().ldapGroupMappings.remove(ldapGroupMapping);
+                 $("#ldap-group-mappings-div select" ).select2({width: 
"element"});
+                 var 
message=$.i18n.prop('redback-runtime-ldap-group-mapping.deleted');
+                 displaySuccessMessage(message);
+               },
+               error: function(data) {
+                 var res = $.parseJSON(data.responseText);
+                 displayRestError(res);
+               }
+             }
+      ).always(
+              function(){
+                removeMediumSpinnerImg(userMessages);
+                saveButton.button('reset');
+              }
+      );
+    }
   }
 
   ManagerImplementationInformation=function(beanId,descriptionKey,readOnly){
@@ -1890,6 +1969,7 @@ define("archiva.general-admin",["jquery"
     
redbackRuntimeConfigurationViewModel.redbackRuntimeConfiguration().modified(false);
 
     $("#main-content").html( $("#redback-runtime-configuration-main" ).tmpl() 
);
+    
$.log("applyBindings:#redback-runtime-configuration-content:"+redbackRuntimeConfigurationViewModel.redbackRuntimeConfiguration().ldapGroupMappings().length);
     
ko.applyBindings(redbackRuntimeConfigurationViewModel,$("#redback-runtime-configuration-content"
 ).get(0));
     activateRedbackRuntimeGeneralFormValidation();
     activateLdapConfigurationFormValidation();
@@ -1897,7 +1977,6 @@ define("archiva.general-admin",["jquery"
   }
 
   LdapGroupMapping=function(group,roleNames,automatic,subscribeFn){
-    $.log("new LdapGroupMapping");
     var self=this;
     this.modified=ko.observable(false);
     //private String group;

Modified: 
archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/js/knockout.simpleGrid.js
URL: 
http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/js/knockout.simpleGrid.js?rev=1452404&r1=1452403&r2=1452404&view=diff
==============================================================================
--- 
archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/js/knockout.simpleGrid.js
 (original)
+++ 
archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/js/knockout.simpleGrid.js
 Mon Mar  4 17:14:51 2013
@@ -32,7 +32,9 @@
 
       this.itemsOnCurrentPage = ko.computed(function () {
           var startIndex = this.pageSize * this.currentPageIndex();
-          return this.data.slice(startIndex, startIndex + this.pageSize);
+          var items = this.data.slice(startIndex, startIndex + this.pageSize);
+          //$.log("itemsOnCurrentPage:"+items.length);
+          return items;
       }, this);
 
       this.maxPageIndex = ko.computed(function () {

Modified: 
archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/js/templates/archiva/general-admin.html
URL: 
http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/js/templates/archiva/general-admin.html?rev=1452404&r1=1452403&r2=1452404&view=diff
==============================================================================
--- 
archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/js/templates/archiva/general-admin.html
 (original)
+++ 
archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/js/templates/archiva/general-admin.html
 Mon Mar  4 17:14:51 2013
@@ -1150,7 +1150,6 @@
     </div>
 
     <div class="tab-pane" id="redback-runtime-properties-content">
-
       <div class="well">
         <table id="propertiesTable" class="table-hover"
                data-bind="simpleGrid: 
gridViewModel,simpleGridTemplate:'properties-grid',pageLinksId:'properties-grid-pagination'">
@@ -1248,10 +1247,28 @@
 
 </script>
 
-<script id="redback-runtime-general-content-impl-informations" 
type="text/html">
-  <div class="well draggable-item">
-    ${$data.description}
-  </div>
+<script id="redback-runtime-ldap-mapping-grid" type="text/html">
+  <thead>
+    <tr>
+      <th>${$.i18n.prop('redback.runtime.ldap.mapping.group.label')}</th>
+      <th>${$.i18n.prop('redback.runtime.ldap.mapping.roles.label')}</th>
+    </tr>
+    </thead>
+    <tbody id="ldap-group-mappings-tbody">
+
+    {{each(i, ldapGroupMapping) itemsOnCurrentPage()}}
+      <tr>
+        <td>${ldapGroupMapping.group()}
+          <select id="roles-group-${ldapGroupMapping.group()}" 
data-bind="options: ldapGroups, value: ldapGroupMapping.group, optionsCaption: 
'Select a LDAP Group'"
+                  size="1"></select>
+        </td>
+        <td>
+          <select id="roles-group-mapping-${ldapGroupMapping.group()}" 
data-bind="options: $parent.allRoleNames, selectedOptions: 
ldapGroupMapping.roleNames"
+                  size="5" multiple="true" ></select>
+        </td>
+      </tr>
+    {{/each}}
+  </tbody>
 </script>
 
 <script id="redback-runtime-ldap-mapping-tmpl" type="text/html">
@@ -1259,16 +1276,36 @@
   <table class="table table-condensed">
     <thead>
       <tr>
+        <th></th>
         <th>${$.i18n.prop('redback.runtime.ldap.mapping.group.label')}</th>
         <th>${$.i18n.prop('redback.runtime.ldap.mapping.roles.label')}</th>
       </tr>
     </thead>
     <tbody id="ldap-group-mappings-tbody">
+      <tr>
+        <td>
+          <span class="btn btn-success">
+            <i class="icon-plus-sign icon-white" title="add mapping" 
data-bind="click: function(){ addLdapGroupMapping() }"/>
+          </span>
+        </td>
+        <td>
+          <select data-bind="options: ldapGroups, optionsCaption: 'Select a 
LDAP Group',value: $parent.newLdapGroupMapping().group" size="1">
+          </select>
+        </td>
+        <td>
+          <select data-bind="options: $parent.allRoleNames, selectedOptions: 
$parent.newLdapGroupMapping().roleNames"
+                  size="5" multiple="true" ></select>
+        </td>
+      </tr>
     {{each(i, ldapGroupMapping) ldapGroupMappings()}}
       <tr>
-        <td>${ldapGroupMapping.group()}
-          <select id="roles-group-${ldapGroupMapping.group()}" 
data-bind="options: ldapGroups, value: ldapGroupMapping.group, optionsCaption: 
'Select a LDAP Group'"
-                  size="1"></select>
+        <td>
+          <span class="btn btn-danger">
+            <i class="icon-minus-sign icon-white" title="remove mapping" 
data-bind="click: function(){ deleteLdapGroupMapping(ldapGroupMapping)}"/>
+          </span>
+        </td>
+        <td>
+          ${ldapGroupMapping.group}
         </td>
         <td>
           <select id="roles-group-mapping-${ldapGroupMapping.group()}" 
data-bind="options: $parent.allRoleNames, selectedOptions: 
ldapGroupMapping.roleNames"
@@ -1278,17 +1315,12 @@
     {{/each}}
     </tbody>
   </table>
-  <div>
-    <span class="btn btn-success">
-      <i class="icon-plus-sign icon-white" title="add mapping" 
data-bind="click: function(){ addLdapGroupMapping() }"/>
-    </span>
-    <table class="table table-condensed">
-      <tr>
-        <td></td>
-        <td></td>
-      </tr>
-    </table>
+
   </div>
+</script>
 
+<script id="redback-runtime-general-content-impl-informations" 
type="text/html">
+  <div class="well draggable-item">
+    ${$data.description}
   </div>
 </script>


Reply via email to