QX 0.8.3
[lgpl/argeo-commons.git] / security / runtime / org.argeo.security.ria / src / argeo-ria-lib / security / class / org / argeo / security / ria / UserEditorApplet.js
index e85b5241093f7c40f1660940160fe230539d3f74..c7921dcc8ffc7af6be67d9dae0de9e4aa2a5aed0 100644 (file)
@@ -139,8 +139,14 @@ qx.Class.define("org.argeo.security.ria.UserEditorApplet",
        rolesList : {
                
        },
-       instanceId : {init:""},
-       instanceLabel : {init:"Editor"},
+       instanceId : {
+               init:"",
+               event : "changeInstanceId"
+       },
+       instanceLabel : {
+               init:"Editor",
+               event : "changeInstanceLabel"
+       },
        loaded : {
                init : false
        },
@@ -184,8 +190,8 @@ qx.Class.define("org.argeo.security.ria.UserEditorApplet",
                
                this.setCurrentNatureTabs([]);
                this.naturesTab = new qx.ui.tabview.TabView("top");
-               this.naturesTab.addListener("changeSelected", function(e){
-                       this.setSelectedNatureTab(e.getData());
+               this.naturesTab.addListener("changeSelection", function(e){
+                       this.setSelectedNatureTab(e.getData()[0] || null);
                        this.getViewSelection().triggerEvent();
                }, this);
                
@@ -259,10 +265,15 @@ qx.Class.define("org.argeo.security.ria.UserEditorApplet",
                }else{
                        user.setRoles([]);
                }
-               user.setPassword(this.passPane.getData());
                
                // GO TO AND RETURN FROM SERVER
                if(user.isCreate()){
+                       if(!this.passPane.validate()){
+                               this.error("Warning, passwords differ!");
+                               return;
+                       }
+                       user.setPassword(this.passPane.getData());
+                       var create = true;
                        var userExists = false;
                        var req = org.argeo.security.ria.SecurityAPI.getUserExistsService(user.getName());
                        req.addListener("completed", function(response){
@@ -274,20 +285,45 @@ qx.Class.define("org.argeo.security.ria.UserEditorApplet",
                                this.error("User already exists, choose another name!");
                                return;
                        }
+               }else{
+                       var pass = this.passPane.getData();
+                       if(pass != null && !this.passPane.validate()){
+                               this.error("Warning, passwords differ!");
+                               return;                                 
+                       }
                }
-               var userService = user.getSaveService();
-               userService.send();
-               userService.addListener("completed", function(response){
-                       if(response.getContent().status && response.getContent().status == "ERROR"){
-                               return;
+               this.passPane.clear();
+               var saveCompletedCallback = qx.lang.Function.bind(function(){
+                       if(create){
+                               this.setInstanceLabel("User " + user.getName());
+                               this.setInstanceId(user.getName());
                        }
                        this._setGuiInCreateMode(false);
-                       user.load(response.getContent(), "json");
                        this.partialRefreshUser(user, ["details","natures"]);
                        this.setModified(false);
                        this.getViewSelection().triggerEvent();
-                       this.fireDataEvent("savedUser", user);
+                       this.fireDataEvent("savedUser", user);                          
                }, this);
+               var userService = user.getSaveService();
+               userService.addListener("completed", function(response){
+                       if(response.getContent().status && response.getContent().status == "ERROR"){
+                               return;
+                       }
+                       user.load(response.getContent(), "json");
+                       if(pass!=null){
+                               var passService = org.argeo.security.ria.SecurityAPI.getUpdateUserPassService(user.getName(), pass);
+                               passService.addListener("completed", function(response){
+                                       if(response.getContent().status){
+                                               this.info(response.getContent().message);
+                                       }
+                                       saveCompletedCallback();
+                               }, this);
+                               passService.send();
+                       }else{
+                               saveCompletedCallback();
+                       }
+               }, this);               
+               userService.send();
        },
        
        _addNatureTab : function(natureClass, natureData, select){
@@ -358,7 +394,7 @@ qx.Class.define("org.argeo.security.ria.UserEditorApplet",
                        this.setNaturesModified(true);
                }, this);  
                if(select){
-                       this.naturesTab.setSelected(page);
+                       this.naturesTab.setSelection([page]);
                }
                return page;
        },
@@ -378,7 +414,8 @@ qx.Class.define("org.argeo.security.ria.UserEditorApplet",
        },
        
        removeSelectedTab : function(){
-               var selected = this.naturesTab.getSelected();
+               if(this.naturesTab.isSelectionEmpty()) return;
+               var selected = this.naturesTab.getSelection()[0];
                var tabClass = selected.getUserData("NATURE_CLASS");
                var user = this.getCurrentUser();
                user.removeNature(tabClass.NATURE_TYPE);
@@ -387,8 +424,8 @@ qx.Class.define("org.argeo.security.ria.UserEditorApplet",
        },
        
        removeAllTabs : function(){
-               while(this.naturesTab.getSelected()){
-                       this._removeNatureTab(this.naturesTab.getSelected().getUserData("NATURE_CLASS"));
+               while(!this.naturesTab.isSelectionEmpty()){
+                       this._removeNatureTab(this.naturesTab.getSelection()[0].getUserData("NATURE_CLASS"));
                }
        },
          
@@ -450,7 +487,7 @@ qx.Class.define("org.argeo.security.ria.UserEditorApplet",
        },
        
        partialRefreshUser : function(user, target){
-               if(!qx.lang.Array.isArray(target)) target = [target];
+               if(!qx.lang.Type.isArray(target)) target = [target];
                
                if(qx.lang.Array.contains(target,"natures")){
                        if(this.getSelectedNatureTab()){