On 06/29/2011 10:34 AM, Adam Young wrote:
On 06/29/2011 09:37 AM, Adam Young wrote:
Better solution than the algorithm in 256 for nested entities.

_______________________________________________
Freeipa-devel mailing list
Freeipa-devel@redhat.com
https://www.redhat.com/mailman/listinfo/freeipa-devel


_______________________________________________
Freeipa-devel mailing list
Freeipa-devel@redhat.com
https://www.redhat.com/mailman/listinfo/freeipa-devel
Changes for Hyphen and pkey names
From 9c291b68ecd42b4505ccdff92bc9424b4563c1c7 Mon Sep 17 00:00:00 2001
From: Adam Young <ayo...@redhat.com>
Date: Wed, 29 Jun 2011 09:26:49 -0400
Subject: [PATCH] containing entity pkeys

Instead of looking for a match on the entity name, use the nesting structure
of containing entites to grab their pkeys.

https://fedorahosted.org/freeipa/ticket/674
---
 install/ui/entity.js     |    7 ++++++-
 install/ui/navigation.js |   28 ++++++++++++++++++++++------
 2 files changed, 28 insertions(+), 7 deletions(-)

diff --git a/install/ui/entity.js b/install/ui/entity.js
index c04f85d6de4815c9707513d787cadc85e361ce23..2188e041765479e0b7078e2eb6a2295983be84cc 100644
--- a/install/ui/entity.js
+++ b/install/ui/entity.js
@@ -597,7 +597,12 @@ IPA.entity = function (spec) {
         pkey.unshift(IPA.nav.get_state(current_entity.name+'-pkey'));
         return pkey;
     };
-
+    /* most entites only require -pkey for their primary keys, but some
+       are more specific.  This call allows those entites a place
+       to override the other parameters. */
+    that.get_key_names = function() {
+        return [that.name + '-pkey'];
+    }
 
     that.entity_init = that.init;
 
diff --git a/install/ui/navigation.js b/install/ui/navigation.js
index d0b45cc3ca285d9715c919d3060736c614dd8e03..dd957d0a254ea38200864ce299a25dd0f0e89ea6 100644
--- a/install/ui/navigation.js
+++ b/install/ui/navigation.js
@@ -115,14 +115,30 @@ IPA.navigation = function(spec) {
         while(state[key]){
             var value = state[key];
             url_state[key] = value;
-            var entity = value;
-            for (var key2 in state){
-                if ((key2 === entity) || (key2.search('^'+entity) > -1)){
-                    url_state[key2] = state[key2];
-                }
-            }
             key = value;
         }
+
+        /*We are at the leaf node, which is the sleected entity.*/
+        var entity = value;
+        for (var key2 in state){
+            if ((key2 === entity) || (key2.search('^'+entity +'-') > -1)){
+                url_state[key2] = state[key2];
+            }
+        }
+
+        /*
+           Trace back up the nested entities for their pkeys as well
+        */
+        var current_entity = IPA.get_entity(entity);
+        while(current_entity !== null){
+            var key_names = current_entity.get_key_names();
+            for (var j = 0; j < key_names.length; j+= 1){
+                var key_name = key_names[j];
+                url_state[key_name] = state[key_name];
+                current_entity = current_entity.containing_entity;
+            }
+        }
+
         $.bbq.pushState(url_state,2);
         return true;
     };
-- 
1.7.5.2

_______________________________________________
Freeipa-devel mailing list
Freeipa-devel@redhat.com
https://www.redhat.com/mailman/listinfo/freeipa-devel

Reply via email to