Fixes on natures management
[lgpl/argeo-commons.git] / security / runtime / org.argeo.security.ria / src / argeo-ria-lib / security / class / org / argeo / security / ria / components / NaturesManager.js
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