selectionChange : function(viewName, data){
if(viewName != "editor") return;
var iApplet = org.argeo.ria.components.ViewsManager.getInstance().getViewPaneById("editor").getContent();
- if(iApplet && iApplet.getCurrentNatureTabs() && iApplet.getAvailableNatures()
- && iApplet.getCurrentNatureTabs().length < qx.lang.Object.getLength(iApplet.getAvailableNatures())){
+ if(iApplet && iApplet.getCurrentNatureTabs() && iApplet.getNaturesManager().getDetectedNatures()
+ && iApplet.getCurrentNatureTabs().length < qx.lang.Object.getLength(iApplet.getNaturesManager().getDetectedNatures())){
this.setEnabled(true);
}else{
this.setEnabled(false);
var removeButton = commands["remove_nature"].command.getFormButton();
var natureButton = commands["add_nature"].command.getFormButton();
- var detectedNatures = this.getAvailableNatures();
- var newMenu = [];
- for(var key in detectedNatures){
- newMenu.push({"label" : detectedNatures[key].NATURE_LABEL, "icon":"", "commandId" : detectedNatures[key]});
- }
- commands["add_nature"].command.setMenu(newMenu);
+ this.getNaturesManager().addListener("changeNonAssignedNatures", function(event){
+ var natures = event.getData();
+ var newMenu = [];
+ for(var key in natures){
+ newMenu.push({
+ "label" : natures[key].NATURE_LABEL,
+ "icon":"",
+ "commandId" : natures[key]
+ });
+ }
+ commands["add_nature"].command.setMenu(newMenu);
+ }, this);
natureButton.setShow("icon");
removeButton.setShow("icon");
statics : {\r
NATURE_TYPE : "org.argeo.security.nature.CoworkerNature",\r
NATURE_LABEL : "Co-Worker",\r
- NATURE_ICON : ""\r
+ NATURE_ICON : "",\r
+ NATURE_RANK : 1\r
},\r
\r
construct : function(){\r
statics : {\r
NATURE_TYPE : "",\r
NATURE_LABEL : "",\r
- NATURE_ICON : ""\r
+ NATURE_ICON : "",\r
+ NATURE_RANK : 0\r
},\r
properties : {\r
editMode : {\r
extend : qx.core.Object,\r
properties : {\r
detectedNatures : {\r
- check : "Map"\r
+ check : "Map" \r
+ },\r
+ nonAssignedNatures : {\r
+ check : "Map", \r
+ event : "changeNonAssignedNatures"\r
}\r
},\r
construct : function(){\r
members : {\r
detectNatures : function(){ \r
var natures = {};\r
+ var sortedNatures = {};\r
+ var ranks = {};\r
for (var key in qx.Bootstrap.$$registry) {\r
if (qx.Class.hasInterface(qx.Bootstrap.$$registry[key], org.argeo.security.ria.components.INaturePane)) {\r
// FILTER BY ROLE HERE!\r
var klass = qx.Bootstrap.$$registry[key];\r
natures[klass.NATURE_TYPE] = klass;\r
+ ranks[klass.NATURE_TYPE] = klass.NATURE_RANK;\r
}\r
}\r
- this.setDetectedNatures(natures);\r
+ org.argeo.ria.util.Utils.asort(ranks);\r
+ for(var key in ranks){\r
+ sortedNatures[key] = natures[key];\r
+ }\r
+ this.setDetectedNatures(sortedNatures);\r
+ this.setNonAssignedNatures(sortedNatures);\r
},\r
detectNaturesInData : function(userNaturesList){\r
var detected = this.getDetectedNatures();\r
var userDetected = [];\r
+ var nonAssigned = qx.lang.Object.clone(detected);\r
for(var i = 0;i<userNaturesList.length;i++){\r
var type = userNaturesList[i].type;\r
if(detected[type]){\r
NATURE_CLASS : detected[type],\r
NATURE_DATA : userNaturesList[i]\r
});\r
- }\r
+ delete(nonAssigned[type]);\r
+ } \r
}\r
+ this.setNonAssignedNatures(nonAssigned);\r
return userDetected;\r
}\r
}\r
statics : {\r
NATURE_TYPE : "org.argeo.security.nature.SimpleUserNature",\r
NATURE_LABEL : "Simple User",\r
- NATURE_ICON : ""\r
+ NATURE_ICON : "",\r
+ NATURE_RANK : 0 \r
},\r
properties : {\r
valid : {\r
\r
_applyEditMode : function(value){\r
for(var key in this.fields){\r
- this.fields[key].setEnabled(value);\r
+ if(value && this.fields[key].getReadOnly && this.fields[key].getReadOnly()) continue;\r
+ this.fields[key].setEnabled(value); \r
}\r
},\r
\r
setData : function(dataMap, format){\r
for(var key in this.fields){\r
if(dataMap[key]){\r
- this.fields[key].setValue(dataMap[key]);\r
+ if(qx.Class.hasInterface(qx.Class.getByName(this.fields[key].classname), qx.ui.form.IModelSelection)){\r
+ this.fields[key].setModelSelection([dataMap[key]]);\r
+ }else{\r
+ this.fields[key].setValue(dataMap[key]);\r
+ }\r
}\r
}\r
this.setDataMap(dataMap);\r
getData : function(format){\r
var dataMap = this.getDataMap();\r
for(var key in this.fields){\r
- dataMap[key] = this.fields[key].getValue();\r
+ if(qx.Class.hasInterface(qx.Class.getByName(this.fields[key].classname), qx.ui.form.IModelSelection)){\r
+ var sel = this.fields[key].getModelSelection();\r
+ if(sel && qx.lang.Type.isArray(sel)) dataMap[key] = sel[0]; \r
+ }else{\r
+ dataMap[key] = this.fields[key].getValue();\r
+ }\r
}\r
this.setDataMap(dataMap);\r
return dataMap;\r
},
currentNatureTabs : {
},
- availableNatures : {
+ naturesManager : {
+ check : "org.argeo.security.ria.components.NaturesManager"
},
selectedNatureTab : {
nullable : true
{
initGUI : function(ROLES_LIST){
- this.naturesManager = new org.argeo.security.ria.components.NaturesManager();
- var detectedNatures = this.naturesManager.getDetectedNatures();
- this.setAvailableNatures(detectedNatures);
+ var naturesManager = new org.argeo.security.ria.components.NaturesManager();
+ this.setNaturesManager(naturesManager);
// TOOLBAR
this.buttonGB = new qx.ui.container.Composite(new qx.ui.layout.HBox(5, "right"));
this.usernameField.setValue(user.getName());
this.usernameField.setReadOnly(true);
this.rolesField.setValue(user.getRoles());
- var userNatureTabs = this.naturesManager.detectNaturesInData(user.getNatures());
+ var userNatureTabs = this.getNaturesManager().detectNaturesInData(user.getNatures());
if(userNatureTabs.length){
userNatureTabs.forEach(function(el){
this._addNatureTab(el.NATURE_CLASS, el.NATURE_DATA);
var selectedTab = this.getSelectedNatureTab().getUserData("NATURE_CLASS");
}
this.removeAllTabs();
- var userNatureTabs = this.naturesManager.detectNaturesInData(user.getNatures());
+ var userNatureTabs = this.getNaturesManager().detectNaturesInData(user.getNatures());
if(userNatureTabs.length){
userNatureTabs.forEach(function(el){
this._addNatureTab(el.NATURE_CLASS, el.NATURE_DATA, (selectedTab && selectedTab == el.NATURE_CLASS));