Fixes on natures management
authorCharles du Jeu <charles.dujeu@gmail.com>
Wed, 24 Feb 2010 17:17:20 +0000 (17:17 +0000)
committerCharles du Jeu <charles.dujeu@gmail.com>
Wed, 24 Feb 2010 17:17:20 +0000 (17:17 +0000)
git-svn-id: https://svn.argeo.org/commons/trunk@3404 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc

security/runtime/org.argeo.security.ria/src/argeo-ria-lib/security/class/org/argeo/security/ria/UserEditorApplet.js
security/runtime/org.argeo.security.ria/src/argeo-ria-lib/security/class/org/argeo/security/ria/components/CoworkerNatureImpl.js
security/runtime/org.argeo.security.ria/src/argeo-ria-lib/security/class/org/argeo/security/ria/components/INaturePane.js
security/runtime/org.argeo.security.ria/src/argeo-ria-lib/security/class/org/argeo/security/ria/components/NaturesManager.js
security/runtime/org.argeo.security.ria/src/argeo-ria-lib/security/class/org/argeo/security/ria/components/SimpleUserNatureImpl.js
security/runtime/org.argeo.security.ria/src/argeo-ria-lib/security/class/org/argeo/security/ria/components/UserEditor.js

index 8e0eab7e1326d716a97445b850f408295c240a5f..8298228291ddf7a047b40477a969ba225be7f034 100644 (file)
@@ -64,8 +64,8 @@ qx.Class.define("org.argeo.security.ria.UserEditorApplet",
                                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);
@@ -177,12 +177,18 @@ qx.Class.define("org.argeo.security.ria.UserEditorApplet",
                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");
index fff40680682c8ff43f40e0d836570420379d433b..c91e61ab21676b177e362687231d8065263810db 100644 (file)
@@ -3,7 +3,8 @@ qx.Class.define("org.argeo.security.ria.components.CoworkerNatureImpl", {
        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
index 1938fa727bd3e75913a24c82f5c75e50b856956d..713f3141785550cf1069a2b9902277e1b5842dcf 100644 (file)
@@ -3,7 +3,8 @@ qx.Interface.define("org.argeo.security.ria.components.INaturePane", {
        statics : {\r
                NATURE_TYPE : "",\r
                NATURE_LABEL : "",\r
-               NATURE_ICON : ""\r
+               NATURE_ICON : "",\r
+               NATURE_RANK     : 0\r
        },\r
        properties : {\r
                editMode : {\r
index f15bb336b323ca3ff5247c7333b37cd33e59c1b7..8e21466fd30d24eedb491610ed91aad0caf65d57 100644 (file)
@@ -2,7 +2,11 @@ qx.Class.define("org.argeo.security.ria.components.NaturesManager",{
        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
@@ -12,18 +16,27 @@ qx.Class.define("org.argeo.security.ria.components.NaturesManager",{
        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
@@ -31,8 +44,10 @@ qx.Class.define("org.argeo.security.ria.components.NaturesManager",{
                                                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
index 9ddb7420d7d3c4ce15b087a11557b5a995aeb7b6..8f3b94c9000a8af843aae7b7c8fbe477f2464dd2 100644 (file)
@@ -7,7 +7,8 @@ qx.Class.define("org.argeo.security.ria.components.SimpleUserNatureImpl", {
        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
@@ -71,7 +72,8 @@ qx.Class.define("org.argeo.security.ria.components.SimpleUserNatureImpl", {
                \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
@@ -81,7 +83,11 @@ qx.Class.define("org.argeo.security.ria.components.SimpleUserNatureImpl", {
                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
@@ -89,7 +95,12 @@ qx.Class.define("org.argeo.security.ria.components.SimpleUserNatureImpl", {
                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
index 0fc5bb12afe1c70c4b7586f7b8600d16598acaa7..3aa2e2fd080381811454f93b9f5c0d5c26640b39 100644 (file)
@@ -39,7 +39,8 @@ qx.Class.define("org.argeo.security.ria.components.UserEditor",
        },
        currentNatureTabs : {           
        },
-       availableNatures : {            
+       naturesManager : { 
+               check : "org.argeo.security.ria.components.NaturesManager"
        },
        selectedNatureTab : {   
                nullable : true
@@ -52,9 +53,8 @@ qx.Class.define("org.argeo.security.ria.components.UserEditor",
   {
        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"));
@@ -340,7 +340,7 @@ qx.Class.define("org.argeo.security.ria.components.UserEditor",
                        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);
@@ -365,7 +365,7 @@ qx.Class.define("org.argeo.security.ria.components.UserEditor",
                                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));