{
extend : qx.ui.container.Composite,
implement : [org.argeo.ria.components.IView],
-
+
construct : function(){
this.base(arguments);
this.setLayout(new qx.ui.layout.VBox(5));
},
-
+
+ events : {
+ "savedUser" : "qx.event.type.Data"
+ },
+
properties :
{
/**
*/
view : {
init : null
- },
+ },
/**
* Commands definition, see {@link org.argeo.ria.event.CommandsManager#definitions}
*/
rolesList : {
},
- instanceId : {init:""},
- instanceLabel : {init:"Editor"},
+ instanceId : {
+ init:"",
+ event : "changeInstanceId"
+ },
+ instanceLabel : {
+ init:"Editor",
+ event : "changeInstanceLabel"
+ },
loaded : {
init : false
},
* @param viewPane {org.argeo.ria.components.ViewPane} The viewPane.
*/
init : function(viewPane, data){
- if(!data){
+ if(!data.USER){
var now = new Date();
this.setInstanceId(now.getTime());
this.setInstanceLabel("New User");
}else{
- this.setInstanceId(data);
- this.setInstanceLabel("User " + data);
+ this.setInstanceId(data.USER);
+ this.setInstanceLabel("User " + data.USER);
}
this.setView(viewPane);
this.setViewSelection(new org.argeo.ria.components.ViewSelection(viewPane.getViewId()));
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);
this.basicGB.add(this.usernameField, {row:0,column:1});
this.rolesField = new org.argeo.ria.components.ui.MultipleComboBox();
- this.rolesField.setChoiceValues(["ROLE_ADMIN", "ROLE_USER", "ROLE_USER1"]);
+ this.rolesField.setChoiceValues(data.ROLES_LIST);
this.basicGB.add(new qx.ui.basic.Label("Roles"), {row:1,column:0});
this.basicGB.add(this.rolesField, {row:1,column:1});
saveUser : function(){
var user = this.getCurrentUser();
user.setName(this.usernameField.getValue());
- user.setRoles((this.rolesField.getValue()||"").split(","));
- // GO TO AND RETURN FROM SERVER
- user.setNatures([
- {
- "email" : "",
- "firstName" : "",
- "lastName" : "",
- "type" : "org.argeo.security.nature.SimpleUserNature"
- }]
- );
- this.partialRefreshUser(user, ["details","natures"]);
- this.setModified(false);
+ var roles = this.rolesField.getValue();
+ if(roles && roles != ""){
+ user.setRoles(roles.split(","));
+ }else{
+ user.setRoles([]);
+ }
+
+ // 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){
+ userExists = response.getContent().value;
+ }, this);
+ req.setAsynchronous(false);
+ req.send();
+ if(userExists){
+ 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;
+ }
+ }
+ this.passPane.clear();
+ var saveCompletedCallback = qx.lang.Function.bind(function(){
+ if(create){
+ this.setInstanceLabel("User " + user.getName());
+ this.setInstanceId(user.getName());
+ }
+ this._setGuiInCreateMode(false);
+ this.partialRefreshUser(user, ["details","natures"]);
+ this.setModified(false);
+ this.getViewSelection().triggerEvent();
+ 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){
cancelB.setVisibility("visible");
});
cancelB.addListener("execute", function(){
+ if(newClass.getIsNew()){
+ this._removeNatureTab(natureClass);
+ }
newClass.setEditMode(false);
editB.setVisibility("visible");
saveB.setVisibility("excluded");
cancelB.setVisibility("excluded");
- });
+ }, this);
saveB.addListener("execute", function(){
// SAVE CURRENT NATURE
+ var data = newClass.getData();
+ if(newClass.getIsNew()){
+ this.getCurrentUser().addNature(data);
+ }else{
+ this.getCurrentUser().updateNature(data);
+ }
+ this.saveUser();
this.setNaturesModified(false);
newClass.setEditMode(false);
editB.setVisibility("visible");
cancelB.setVisibility("excluded");
}, this);
if(natureData){
- newClass.setData(natureData);
+ newClass.setData(natureData);
cancelB.execute();
}else{
+ newClass.setIsNew(true);
editB.execute();
}
this.naturesTab.add(page);
this.setNaturesModified(true);
}, this);
if(select){
- this.naturesTab.setSelected(page);
+ this.naturesTab.setSelection([page]);
}
return page;
},
},
removeSelectedTab : function(){
- var selected = this.naturesTab.getSelected();
- this._removeNatureTab(selected.getUserData("NATURE_CLASS"));
+ 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);
+ this.saveUser();
+ this._removeNatureTab(tabClass);
},
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"));
+ }
+ },
+
+ _setGuiInCreateMode : function(bool){
+ if(bool){
+ if(!this.natureButtonGB.isVisible()) return;
+ this.natureButtonGB.hide();
+ this.fakePane.setVisibility("excluded");
+ }else{
+ if(this.natureButtonGB.isVisible()) return;
+ this.natureButtonGB.show();
+ this.fakePane.setVisibility("visible");
}
},
-
+
_attachListeners : function(){
this.usernameField.addListener("changeValue", function(){
this.setModified(true);
if(value) this.getViewSelection().triggerEvent();
},
- loadUserData : function(user){
- this.setCurrentUser(user);
- this.usernameField.setValue(user.getName());
- this.usernameField.setReadOnly(true);
- this.rolesField.setValue(user.getRoles());
- var userNatureTabs = this.naturesManager.detectNaturesInData(user.getNatures());
- if(userNatureTabs.length){
- userNatureTabs.forEach(function(el){
- this._addNatureTab(el.NATURE_CLASS, el.NATURE_DATA);
- }, this);
- }
+ loadUserData : function(userName){
+ var userDataService = org.argeo.security.ria.SecurityAPI.getUserDetailsService(userName);
+ userDataService.addListener("completed", function(response){
+ var user = new org.argeo.security.ria.model.User();
+ user.load(response.getContent(), "json");
+ this.setCurrentUser(user);
+ this.usernameField.setValue(user.getName());
+ this.usernameField.setReadOnly(true);
+ this.rolesField.setValue(user.getRoles());
+ var userNatureTabs = this.naturesManager.detectNaturesInData(user.getNatures());
+ if(userNatureTabs.length){
+ userNatureTabs.forEach(function(el){
+ this._addNatureTab(el.NATURE_CLASS, el.NATURE_DATA);
+ }, this);
+ }
+ this._attachListeners();
+ }, this);
+ userDataService.send();
},
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()){
+ var selectedTab = this.getSelectedNatureTab().getUserData("NATURE_CLASS");
+ }
this.removeAllTabs();
var userNatureTabs = this.naturesManager.detectNaturesInData(user.getNatures());
if(userNatureTabs.length){
userNatureTabs.forEach(function(el){
- this._addNatureTab(el.NATURE_CLASS, el.NATURE_DATA);
+ this._addNatureTab(el.NATURE_CLASS, el.NATURE_DATA, (selectedTab && selectedTab == el.NATURE_CLASS));
}, this);
- }
+ }
}
if(qx.lang.Array.contains(target,"details")){
this.setInstanceLabel("User "+user.getName());
* Load a given row : the data passed must be a simple data array.
* @param data {Element} The text xml description.
*/
- load : function(user){
+ load : function(userName){
if(this.getLoaded()){
return;
- }
- this.setRolesList(["ROLE_ADMIN", "ROLE_USER"]);
-
+ }
// MUST BE DONE AFTER COMMANDS ARE INITIALIZED!
var commands = this.getCommands();
var saveButton = commands["save_user"].command.getFormButton();
this.natureButtonGB.add(natureButton);
this.natureButtonGB.add(removeButton);
- if(user){
- this.loadUserData(user);
- this._attachListeners();
+ if(userName){
+ this.loadUserData(userName);
+ this._setGuiInCreateMode(false);
}else{
this.setCurrentUser(new org.argeo.security.ria.model.User());
+ this._setGuiInCreateMode(true);
this._attachListeners();
this.setModified(true);
}