From b52ab703908a5d76a22169f35781b52e90302591 Mon Sep 17 00:00:00 2001
From: dugan <dugan@localhost>
Date: Mon, 13 Aug 2007 11:57:26 +0000
Subject: [PATCH] Add support for nested static groups and nesting of a dynamic groups in a static group. This implementation does not use a different attribute to define a nested group. Issue 423
---
opends/src/server/org/opends/server/core/GroupManager.java | 45 +++++++++++++++++++++++++++++++++++++++++----
1 files changed, 41 insertions(+), 4 deletions(-)
diff --git a/opends/src/server/org/opends/server/core/GroupManager.java b/opends/src/server/org/opends/server/core/GroupManager.java
index cf84c84..236edb0 100644
--- a/opends/src/server/org/opends/server/core/GroupManager.java
+++ b/opends/src/server/org/opends/server/core/GroupManager.java
@@ -104,6 +104,10 @@
private static final DebugTracer TRACER = getTracer();
+ //Used by group instances to determine if new groups have been
+ //registered or groups deleted.
+ private long refreshToken=0;
+
// A mapping between the DNs of the config entries and the associated
// group implementations.
@@ -711,8 +715,11 @@
}
}
}
-
- createAndRegisterGroup(entry);
+ synchronized (groupInstances)
+ {
+ createAndRegisterGroup(entry);
+ refreshToken++;
+ }
}
@@ -735,8 +742,11 @@
}
}
}
-
- groupInstances.remove(entry.getDN());
+ synchronized (groupInstances)
+ {
+ groupInstances.remove(entry.getDN());
+ refreshToken++;
+ }
}
@@ -773,6 +783,7 @@
}
createAndRegisterGroup(newEntry);
+ refreshToken++;
}
}
}
@@ -807,6 +818,7 @@
{
createAndRegisterGroup(newEntry);
groupInstances.remove(oldEntry.getDN());
+ refreshToken++;
}
}
}
@@ -855,5 +867,30 @@
{
groupInstances.clear();
}
+
+
+ /**
+ * Compare the specified token against the current group manager
+ * token value. Can be used to reload cached group instances if there has
+ * been a group instance change.
+ *
+ * @param token The current token that the group class holds.
+ *
+ * @return {@code true} if the group class should reload its nested groups,
+ * or {@code false} if it shouldn't.
+ */
+ public boolean hasInstancesChanged(long token) {
+ return token != this.refreshToken;
+ }
+
+ /**
+ * Return the current refresh token value. Can be used to
+ * reload cached group instances if there has been a group instance change.
+ *
+ * @return The current token value.
+ */
+ public long refreshToken() {
+ return this.refreshToken;
+ }
}
--
Gitblit v1.10.0