* Commands definition, see {@link org.argeo.ria.event.CommandsManager#definitions}
*/
commands : {
- init : {}
+ init : {
+ "reload" : {
+ label : "Reload Data",
+ icon : "org.argeo.security.ria/view-refresh.png",
+ shortcut : "Control+h",
+ enabled : true,
+ menu : "Roles",
+ toolbar : "roles",
+ callback : function(e){
+ this.loadRolesList();
+ },
+ command : null
+ },
+ "new_role" : {
+ label : "Create Role",
+ icon : "org.argeo.security.ria/list-add.png",
+ shortcut : null,
+ enabled : true,
+ menu : "Roles",
+ toolbar : null,
+ callback : function(e){
+ // Prompt for new name
+ var modal = new org.argeo.ria.components.Modal();
+ modal.makePromptForm("Please enter a role name", function(roleName){
+ var service = org.argeo.security.ria.SecurityAPI.getCreateRoleService(roleName);
+ service.addListener("completed", function(response){
+ this.loadRolesList();
+ }, this);
+ service.send();
+ }, this);
+ modal.attachAndShow();
+ },
+ command : null
+ },
+ "delete_role" : {
+ label : "Delete Role",
+ icon : "org.argeo.security.ria/list-remove.png",
+ shortcut : null,
+ enabled : true,
+ menu : "Roles",
+ toolbar : null,
+ callback : function(e){
+ // Call service to delete
+ var roles = this.getViewSelection().getNodes();
+ var modal = new org.argeo.ria.components.Modal("Delete");
+ modal.addConfirm("Are you sure you want to delete the selected roles?");
+ modal.addListener("ok", function(e){
+ for(var i=0;i<roles.length;i++){
+ var service = org.argeo.security.ria.SecurityAPI.getDeleteRoleService(roles[i]);
+ service.addListener("completed", function(response){
+ this.loadRolesList();
+ }, this);
+ service.send();
+ }
+ }, this);
+ modal.attachAndShow();
+ },
+ selectionChange : function(viewName, data){
+ if(viewName != "roles") return;
+ this.setEnabled(!(data == null || !data.length));
+ },
+ command : null
+ },
+ "edit_role" : {
+ label : "Edit Role",
+ icon : "org.argeo.security.ria/document-properties.png",
+ shortcut : "Control+r",
+ enabled : true,
+ menu : "Roles",
+ toolbar : null,
+ callback : function(e){
+ // Call service to delete
+ this.setGuiMode("edit");
+ },
+ selectionChange : function(viewName, data){
+ if(viewName != "roles") return;
+ this.setEnabled(!(data == null || !data.length || data.length > 1));
+ },
+ command : null
+ }
+ }
},
viewSelection : {
nullable:false,
check:"org.argeo.ria.components.ViewSelection"
},
+ guiMode : {
+ apply : "_applyGuiMode"
+ },
+ rolesList : {
+ check : "Array",
+ event : "changeRolesList"
+ },
+ chooserOriginalSelection : {},
+ chooserSelectionModified : {
+ init:false,
+ event : "chooserSelectionWasModified"
+ },
instanceId : {init:""},
instanceLabel : {init:""}
},
*/
init : function(viewPane){
this.setView(viewPane);
- this.setViewSelection(new org.argeo.ria.components.ViewSelection(viewPane.getViewId()));
+ this.setViewSelection(new org.argeo.ria.components.ViewSelection(viewPane.getViewId()));
+
+ this.toolBar = new qx.ui.toolbar.ToolBar();
+ this.toolBarPart = new qx.ui.toolbar.Part();
+ this.toolBar.add(this.toolBarPart);
+ viewPane.add(this.toolBar);
+
this.tableModel = new qx.ui.table.model.Simple();
this.tableModel.setColumns(["Role Name"]);
this.table = new qx.ui.table.Table(this.tableModel, {
return new qx.ui.table.columnmodel.Resize(obj)
}
});
- this.table.setStatusBarVisible(false);
+ this.table.setStatusBarVisible(false);
+ this.table.setShowCellFocusIndicator(false);
+ this.table.setColumnVisibilityButtonVisible(false);
+ this.table.highlightFocusedRow(false);
viewPane.add(this.table, {height:"100%"});
+ this.table.getSelectionModel().addListener("changeSelection", function(){
+ this._selectionToValues(this.table.getSelectionModel(), this.getViewSelection());
+ }, this);
- var selectionModel = this.table.getSelectionModel();
- selectionModel.addListener("changeSelection", function(){
- var ranges = selectionModel.getSelectedRanges();
+ this.rolesUsersStub = {"ROLE_ADMIN":["gandalf"],"ROLE_USER":["demo","frodo","gandalf"]};
+
+ this.toggleButton = new qx.ui.form.ToggleButton("Filter", "org.argeo.security.ria/go-next.png");
+ this.toggleButton.set({
+ show:"icon",
+ margin:2,
+ toolTip :new qx.ui.tooltip.ToolTip("Apply automatic filtering on Users list")
});
+
+ // TOGGLE THE GUI MODES
+ this.toggleButton.addListener("changeValue", function(event){
+ this.setGuiMode(event.getData()?"filter":"clear");
+ }, this);
+
+ this.saveButton = new qx.ui.form.Button("Save", "org.argeo.security.ria/document-save.png");
+ this.saveButton.set({
+ show:"icon",
+ margin:2,
+ toolTip :new qx.ui.tooltip.ToolTip("Save changes"),
+ visibility : "excluded"
+ });
+
+ this.cancelButton = new qx.ui.form.Button("Cancel", "org.argeo.security.ria/window-close.png");
+ this.cancelButton.set({
+ show:"icon",
+ margin:2,
+ toolTip :new qx.ui.tooltip.ToolTip("Cancel changes"),
+ visibility : "excluded"
+ });
+
+ this.saveButton.addListener("execute", function(){
+ if(!this.usersAppletReference){
+ this.setGuiMode(this.initialState);
+ return;
+ }
+ var newSelection = this.usersAppletReference.getViewSelection().getNodes();
+ var diff = this._selectionDiff(this.getChooserOriginalSelection(), newSelection);
+ this.saveRoleModifications(diff.deltaPlus, diff.deltaMinus);
+ this.setGuiMode(this.initialState);
+ }, this);
+ this.cancelButton.addListener("execute", function(){
+ if(!this.getChooserSelectionModified()){
+ this.setGuiMode(this.initialState);
+ return;
+ }
+ var modal = new org.argeo.ria.components.Modal("Warning");
+ modal.addConfirm("There are unsaved changes!\n Are you sure you want to close?");
+ modal.addListener("ok", function(){
+ this.setGuiMode(this.initialState);
+ }, this);
+ modal.attachAndShow();
+ }, this);
+
+ this.table.addListener("cellDblclick", function(cellEvent){
+ this.setGuiMode("edit");
+ }, this);
+ this.addListener("changeRolesList", function(event){
+ var data = [];
+ event.getData().forEach(function(el){data.push([el]);});
+ this.tableModel.setData(data);
+ }, this);
+
+ this.setGuiMode("clear");
+ },
+
+ _applyGuiMode : function(guiMode, previousMode){
+ var selectionModel = this.table.getSelectionModel();
+ if(!this.usersAppletReference){
+ var vManager = org.argeo.ria.components.ViewsManager.getInstance();
+ this.usersAppletReference = vManager.getViewPaneById("users").getContent();
+ }
+
+ this.saveButton.setVisibility((guiMode=="edit"?"visible":"excluded"));
+ this.cancelButton.setVisibility((guiMode=="edit"?"visible":"excluded"));
+ this.table.setEnabled((guiMode=="edit"?false:true));
+ this.toggleButton.setVisibility((guiMode=="edit"?"excluded":"visible"));
+
+ if(guiMode == "filter"){
+ if(this.usersAppletReference){
+ this.usersAppletReference.setGuiMode(("filter"));
+ var viewSel = this.usersAppletReference.getViewSelection();
+ viewSel.removeListener("changeSelection", this.monitorChooserSelectionChanges, this);
+ }
+ selectionModel.addListener("changeSelection", this.selectionToFilter, this);
+ if(selectionModel.getSelectedCount()){
+ var orig = selectionModel.getSelectedRanges()[0].minIndex;
+ }
+ selectionModel.setSelectionMode(qx.ui.table.selection.Model.MULTIPLE_INTERVAL_SELECTION_TOGGLE);
+ if(orig){
+ selectionModel.addSelectionInterval(orig, orig);
+ }
+ this.selectionToFilter();
+ }else if(guiMode == "edit"){
+ if(!this.usersAppletReference) return;
+ this.initialState = previousMode;
+ if(previousMode == "filter"){
+ this.usersAppletReference.setGuiMode(("clear"));
+ selectionModel.removeListener("changeSelection", this.selectionToFilter, this);
+ }
+ this.usersAppletReference.setGuiMode(("chooser"));
+ this.selectionToChooser(); // Warning, to be called before calling listener!
+ var viewSel = this.usersAppletReference.getViewSelection();
+ viewSel.addListener("changeSelection", this.monitorChooserSelectionChanges, this);
+ }else if(guiMode == "clear"){
+ if(this.usersAppletReference){
+ this.usersAppletReference.setGuiMode(("clear"));
+ var viewSel = this.usersAppletReference.getViewSelection();
+ viewSel.removeListener("changeSelection", this.monitorChooserSelectionChanges, this);
+ }
+ this.table.setEnabled(true);
+ selectionModel.removeListener("changeSelection", this.selectionToFilter, this);
+ if(selectionModel.getSelectedCount()){
+ var orig = selectionModel.getSelectedRanges()[0].minIndex;
+ }
+ selectionModel.setSelectionMode(qx.ui.table.selection.Model.SINGLE_SELECTION);
+ if(orig){
+ selectionModel.addSelectionInterval(orig, orig);
+ }
+ }
+ },
+
+ saveRoleModifications : function(deltaPlus, deltaMinus){
+ // LOAD CONCERNED USERS
+ var selectionModel = this.table.getSelectionModel();
+ if(!selectionModel.getSelectedCount()){
+ return;
+ }
+ var roleValue = this._selectionToValues(selectionModel)[0];
+
+ var users = deltaPlus.concat(deltaMinus);
+ var modal = new org.argeo.ria.components.Modal("Batch Update", "", "Please wait, updating roles for selected users");
+ modal.attachAndShow();
+ for(var i=0;i<users.length;i++){
+ var user = users[i];
+ var userDetailService = org.argeo.security.ria.SecurityAPI.getUserDetailsService(users[i]);
+ userDetailService.addListener("completed", function(response){
+ var userRoles = response.getContent().roles;
+ if(qx.lang.Array.contains(deltaPlus, user)){
+ userRoles.push(roleValue);
+ }else if(qx.lang.Array.contains(deltaMinus, user)){
+ qx.lang.Array.remove(userRoles, roleValue);
+ }
+ var userSaveService = org.argeo.security.ria.SecurityAPI.getUpdateUserService(response.getContent());
+ userSaveService.setAsynchronous(false);
+ userSaveService.send();
+ }, this);
+ userDetailService.setAsynchronous(false);
+ userDetailService.send();
+ }
+ this.fireDataEvent("changeRolesList", this.getRolesList());
+ modal.hide();
+ modal.destroy();
+ },
+
+ monitorChooserSelectionChanges : function(event){
+ if(!this.usersAppletReference || this.getChooserSelectionModified()) return;
+ var initialSelection = this.getChooserOriginalSelection();
+ var crtSelection = event.getTarget().getNodes();
+ if(!qx.lang.Array.equals(initialSelection.sort(), crtSelection.sort())){
+ this.setChooserSelectionModified(true);
+ this.saveButton.setEnabled(true);
+ }
+ },
+
+ selectionToFilter : function(){
+ if(!this.usersAppletReference) return;
+ var selectionModel = this.table.getSelectionModel();
+ if(!selectionModel.getSelectedCount()){
+ this.usersAppletReference.resetHiddenRows();
+ return;
+ }
+ this.usersAppletReference.applyFilter(this._selectionToValues(selectionModel), "roles", true);
+ },
+
+ selectionToChooser : function(){
+ if(!this.usersAppletReference) return;
+ var selectionModel = this.table.getSelectionModel();
+ if(!selectionModel.getSelectedCount()){
+ this.usersAppletReference.resetHiddenRows();
+ return;
+ }
+ var uniqueValue = this._selectionToValues(selectionModel)[0];
+ //var initSelection = this.rolesUsersStub[uniqueValue];
+ this.usersAppletReference.applySelection(uniqueValue, "roles");
+ var initSelection = this.usersAppletReference.getViewSelection().getNodes();
+ this.setChooserOriginalSelection(initSelection);
+ this.setChooserSelectionModified(false);
+ this.saveButton.setEnabled(false);
+ },
+
+ _selectionToValues : function(selectionModel, viewSelection){
+ if(viewSelection){
+ viewSelection.setBatchMode(true);
+ viewSelection.clear();
+ }
+ if(!selectionModel.getSelectedCount()) return [];
+ var ranges = selectionModel.getSelectedRanges();
+ var values = [];
+ for(var i=0;i<ranges.length;i++){
+ for(var j=ranges[i].minIndex;j<=ranges[i].maxIndex;j++){
+ values.push(this.tableModel.getData()[j][0]);
+ if(viewSelection){
+ viewSelection.addNode(this.tableModel.getData()[j][0]);
+ }
+ }
+ }
+ if(viewSelection){
+ viewSelection.setBatchMode(false);
+ }
+ return values;
+ },
+
+ _selectionDiff : function(initialSelection, modifiedSelection){
+ var deltaMinus = qx.lang.Array.clone(initialSelection);
+ var deltaPlus = qx.lang.Array.clone(modifiedSelection);
+ qx.lang.Array.exclude(deltaPlus, initialSelection);
+ qx.lang.Array.exclude(deltaMinus, modifiedSelection);
+ return {deltaPlus : deltaPlus, deltaMinus : deltaMinus};
},
/**
* Load a given row : the data passed must be a simple data array.
* @param data {Element} The text xml description.
*/
- load : function(){
- var data = [["ROLE_ADMIN"],["ROLE_USER"]];
- this.tableModel.setData(data);
+ load : function(){
+
+ var commands = this.getCommands();
+ this.toolBarPart.add(commands["new_role"].command.getToolbarButton());
+ this.toolBarPart.add(commands["delete_role"].command.getToolbarButton());
+ this.toolBarPart.add(commands["edit_role"].command.getToolbarButton());
+ this.toolBar.addSpacer();
+ this.toolBar.add(this.toggleButton);
+ this.toolBar.add(this.saveButton);
+ this.toolBar.add(this.cancelButton);
+ this.toolBar.setShow("icon");
+
+ this.loadRolesList();
+
+ },
+
+ loadRolesList : function(){
+ this.setRolesList([]);
+ var service = org.argeo.security.ria.SecurityAPI.getListRolesService();
+ service.addListener("completed", function(response){
+ this.setRolesList(response.getContent());
+ }, this);
+ service.send();
},
addScroll : function(){