From b892b0038d7dc619ee4fac7058189736d2d73f0d Mon Sep 17 00:00:00 2001
From: Ludovic Poitou <ludovic.poitou@forgerock.com>
Date: Thu, 07 Apr 2011 12:41:00 +0000
Subject: [PATCH] Fix OPENDJ-112 - The Changelog virtual attribute appears in al entries, should only apply to rootDSE. The changes introduce a scope in the VirtualAttributeRule. The default is Whole_Subtree. The changelog virtual attributes are now registered with a BASE_OBJECT scope and "" base DNs, meaning the rootDSE only. Also each virtual attribute provider override the hasValue() method for optimization and avoiding computing the values and throwing them away.

---
 opends/src/server/org/opends/server/core/VirtualAttributeConfigManager.java |   26 ++++++++++++++++----------
 1 files changed, 16 insertions(+), 10 deletions(-)

diff --git a/opends/src/server/org/opends/server/core/VirtualAttributeConfigManager.java b/opends/src/server/org/opends/server/core/VirtualAttributeConfigManager.java
index ee6da9a..325cc0b 100644
--- a/opends/src/server/org/opends/server/core/VirtualAttributeConfigManager.java
+++ b/opends/src/server/org/opends/server/core/VirtualAttributeConfigManager.java
@@ -23,8 +23,10 @@
  *
  *
  *      Copyright 2007-2009 Sun Microsystems, Inc.
+ *      Portions Copyright 2011 ForgeRock AS
  */
 package org.opends.server.core;
+import org.opends.server.types.SearchScope;
 import org.opends.messages.Message;
 
 
@@ -188,8 +190,10 @@
 
           VirtualAttributeRule rule =
                new VirtualAttributeRule(cfg.getAttributeType(), provider,
-                                        cfg.getBaseDN(), cfg.getGroupDN(),
-                                        filters, cfg.getConflictBehavior());
+                     cfg.getBaseDN(),
+                     SearchScope.valueOf(cfg.getScope().name()),
+                     cfg.getGroupDN(),
+                     filters, cfg.getConflictBehavior());
           rules.put(cfg.dn(), rule);
           DirectoryServer.registerVirtualAttribute(rule);
         }
@@ -324,10 +328,11 @@
     {
       VirtualAttributeRule rule =
            new VirtualAttributeRule(configuration.getAttributeType(), provider,
-                                    configuration.getBaseDN(),
-                                    configuration.getGroupDN(),
-                                    filters,
-                                    configuration.getConflictBehavior());
+                 configuration.getBaseDN(),
+                 SearchScope.valueOf(configuration.getScope().name()),
+                 configuration.getGroupDN(),
+                 filters,
+                 configuration.getConflictBehavior());
 
       rules.put(configuration.dn(), rule);
       DirectoryServer.registerVirtualAttribute(rule);
@@ -506,10 +511,11 @@
     {
       VirtualAttributeRule rule =
            new VirtualAttributeRule(configuration.getAttributeType(), provider,
-                                    configuration.getBaseDN(),
-                                    configuration.getGroupDN(),
-                                    filters,
-                                    configuration.getConflictBehavior());
+                 configuration.getBaseDN(),
+                 SearchScope.valueOf(configuration.getScope().name()),
+                 configuration.getGroupDN(),
+                 filters,
+                 configuration.getConflictBehavior());
 
       rules.put(configuration.dn(), rule);
       if (existingRule == null)

--
Gitblit v1.10.0