From e997c365bd02ab75d40ffe14117b6ed7be4109de Mon Sep 17 00:00:00 2001
From: Jean-Noel Rouvignac <jean-noel.rouvignac@forgerock.com>
Date: Thu, 12 Dec 2013 10:24:37 +0000
Subject: [PATCH] VirtualAttributeConfigManager.java: Extracted methods createRule(), buildFilters(), areFiltersAcceptable(). In loadProvider(), called StaticUtils.collectionToString().
---
opends/src/server/org/opends/server/core/VirtualAttributeConfigManager.java | 297 +++++++++++++++++++++-------------------------------------
1 files changed, 109 insertions(+), 188 deletions(-)
diff --git a/opends/src/server/org/opends/server/core/VirtualAttributeConfigManager.java b/opends/src/server/org/opends/server/core/VirtualAttributeConfigManager.java
index 325cc0b..572423f 100644
--- a/opends/src/server/org/opends/server/core/VirtualAttributeConfigManager.java
+++ b/opends/src/server/org/opends/server/core/VirtualAttributeConfigManager.java
@@ -23,51 +23,35 @@
*
*
* Copyright 2007-2009 Sun Microsystems, Inc.
- * Portions Copyright 2011 ForgeRock AS
+ * Portions Copyright 2011-2013 ForgeRock AS
*/
package org.opends.server.core;
-import org.opends.server.types.SearchScope;
-import org.opends.messages.Message;
-
-
import java.lang.reflect.Method;
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-import java.util.LinkedHashSet;
+import java.util.*;
+import java.util.Map.Entry;
import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentMap;
+import org.opends.messages.Message;
import org.opends.server.admin.ClassPropertyDefinition;
import org.opends.server.admin.server.ConfigurationAddListener;
import org.opends.server.admin.server.ConfigurationChangeListener;
import org.opends.server.admin.server.ConfigurationDeleteListener;
-import org.opends.server.admin.std.meta.VirtualAttributeCfgDefn;
-import org.opends.server.admin.std.server.VirtualAttributeCfg;
-import org.opends.server.admin.std.server.RootCfg;
import org.opends.server.admin.server.ServerManagementContext;
+import org.opends.server.admin.std.meta.VirtualAttributeCfgDefn;
+import org.opends.server.admin.std.server.RootCfg;
+import org.opends.server.admin.std.server.VirtualAttributeCfg;
import org.opends.server.api.VirtualAttributeProvider;
import org.opends.server.config.ConfigException;
-import org.opends.server.types.ConfigChangeResult;
-import org.opends.server.types.DebugLogLevel;
-import org.opends.server.types.DirectoryException;
-import org.opends.server.types.DN;
-
-
-import org.opends.server.types.InitializationException;
-import org.opends.server.types.ResultCode;
-import org.opends.server.types.SearchFilter;
-import org.opends.server.types.VirtualAttributeRule;
-
-import static org.opends.server.loggers.debug.DebugLogger.*;
-import org.opends.server.loggers.debug.DebugTracer;
import org.opends.server.loggers.ErrorLogger;
+import org.opends.server.loggers.debug.DebugTracer;
+import org.opends.server.types.*;
+
import static org.opends.messages.ConfigMessages.*;
-
+import static org.opends.server.loggers.debug.DebugLogger.*;
import static org.opends.server.util.StaticUtils.*;
-
-
/**
* This class defines a utility that will be used to manage the set of
* virtual attribute providers defined in the Directory Server. It will
@@ -85,18 +69,18 @@
*/
private static final DebugTracer TRACER = getTracer();
- // A mapping between the DNs of the config entries and the associated
- // virtual attribute rules.
- private ConcurrentHashMap<DN,VirtualAttributeRule> rules;
-
-
+ /**
+ * A mapping between the DNs of the config entries and the associated virtual
+ * attribute rules.
+ */
+ private final ConcurrentMap<DN, VirtualAttributeRule> rules =
+ new ConcurrentHashMap<DN, VirtualAttributeRule>();
/**
* Creates a new instance of this virtual attribute config manager.
*/
public VirtualAttributeConfigManager()
{
- rules = new ConcurrentHashMap<DN,VirtualAttributeRule>();
}
@@ -146,26 +130,14 @@
VirtualAttributeProvider<? extends VirtualAttributeCfg> provider =
loadProvider(className, cfg, true);
- LinkedHashSet<SearchFilter> filters =
- new LinkedHashSet<SearchFilter>();
- for (String filterString : cfg.getFilter())
+ Map<Message, DirectoryException> reasons =
+ new LinkedHashMap<Message, DirectoryException>();
+ Set<SearchFilter> filters = buildFilters(cfg, reasons);
+ if (!reasons.isEmpty())
{
- try
- {
- filters.add(SearchFilter.createFilterFromString(filterString));
- }
- catch (DirectoryException de)
- {
- if (debugEnabled())
- {
- TRACER.debugCaught(DebugLogLevel.ERROR, de);
- }
-
- Message message = ERR_CONFIG_VATTR_INVALID_SEARCH_FILTER.get(
- filterString, String.valueOf(cfg.dn()),
- de.getMessageObject());
- throw new ConfigException(message, de);
- }
+ Entry<Message, DirectoryException> entry =
+ reasons.entrySet().iterator().next();
+ throw new ConfigException(entry.getKey(), entry.getValue());
}
if (cfg.getAttributeType().isSingleValue())
@@ -188,12 +160,7 @@
}
}
- VirtualAttributeRule rule =
- new VirtualAttributeRule(cfg.getAttributeType(), provider,
- cfg.getBaseDN(),
- SearchScope.valueOf(cfg.getScope().name()),
- cfg.getGroupDN(),
- filters, cfg.getConflictBehavior());
+ VirtualAttributeRule rule = createRule(cfg, provider, filters);
rules.put(cfg.dn(), rule);
DirectoryServer.registerVirtualAttribute(rule);
}
@@ -206,11 +173,23 @@
}
}
+ private VirtualAttributeRule createRule(VirtualAttributeCfg cfg,
+ VirtualAttributeProvider<? extends VirtualAttributeCfg> provider,
+ Set<SearchFilter> filters)
+ {
+ return new VirtualAttributeRule(cfg.getAttributeType(), provider,
+ cfg.getBaseDN(),
+ SearchScope.valueOf(cfg.getScope().name()),
+ cfg.getGroupDN(),
+ filters,
+ cfg.getConflictBehavior());
+ }
/**
* {@inheritDoc}
*/
+ @Override
public boolean isConfigurationAddAcceptable(
VirtualAttributeCfg configuration,
List<Message> unacceptableReasons)
@@ -233,55 +212,14 @@
// If there were any search filters provided, then make sure they are all
// valid.
- for (String filterString : configuration.getFilter())
- {
- try
- {
- SearchFilter.createFilterFromString(filterString);
- }
- catch (DirectoryException de)
- {
- if (debugEnabled())
- {
- TRACER.debugCaught(DebugLogLevel.ERROR, de);
- }
-
- Message message = ERR_CONFIG_VATTR_INVALID_SEARCH_FILTER.get(
- filterString,
- String.valueOf(configuration.dn()),
- de.getMessageObject());
- unacceptableReasons.add(message);
- return false;
- }
- }
-
- // If we've gotten here, then it's fine.
- return true;
+ return areFiltersAcceptable(configuration, unacceptableReasons);
}
-
-
- /**
- * {@inheritDoc}
- */
- public ConfigChangeResult applyConfigurationAdd(
- VirtualAttributeCfg configuration)
+ private Set<SearchFilter> buildFilters(VirtualAttributeCfg cfg,
+ Map<Message, DirectoryException> unacceptableReasons)
{
- ResultCode resultCode = ResultCode.SUCCESS;
- boolean adminActionRequired = false;
- ArrayList<Message> messages = new ArrayList<Message>();
-
- configuration.addChangeListener(this);
-
- if (! configuration.isEnabled())
- {
- return new ConfigChangeResult(resultCode, adminActionRequired, messages);
- }
-
- // Make sure that we can parse all of the search filters.
- LinkedHashSet<SearchFilter> filters =
- new LinkedHashSet<SearchFilter>();
- for (String filterString : configuration.getFilter())
+ Set<SearchFilter> filters = new LinkedHashSet<SearchFilter>();
+ for (String filterString : cfg.getFilter())
{
try
{
@@ -294,16 +232,46 @@
TRACER.debugCaught(DebugLogLevel.ERROR, de);
}
- if (resultCode == ResultCode.SUCCESS)
- {
- resultCode = ResultCode.INVALID_ATTRIBUTE_SYNTAX;
- }
-
Message message = ERR_CONFIG_VATTR_INVALID_SEARCH_FILTER.get(
filterString,
- String.valueOf(configuration.dn()),
+ String.valueOf(cfg.dn()),
de.getMessageObject());
- messages.add(message);
+ unacceptableReasons.put(message, de);
+ }
+ }
+ return filters;
+ }
+
+
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public ConfigChangeResult applyConfigurationAdd(
+ VirtualAttributeCfg configuration)
+ {
+ ResultCode resultCode = ResultCode.SUCCESS;
+ boolean adminActionRequired = false;
+ List<Message> messages = new ArrayList<Message>();
+
+ configuration.addChangeListener(this);
+
+ if (! configuration.isEnabled())
+ {
+ return new ConfigChangeResult(resultCode, adminActionRequired, messages);
+ }
+
+ // Make sure that we can parse all of the search filters.
+ Map<Message, DirectoryException> reasons =
+ new LinkedHashMap<Message, DirectoryException>();
+ Set<SearchFilter> filters = buildFilters(configuration, reasons);
+ if (!reasons.isEmpty())
+ {
+ messages.addAll(reasons.keySet());
+ if (resultCode == ResultCode.SUCCESS)
+ {
+ resultCode = ResultCode.INVALID_ATTRIBUTE_SYNTAX;
}
}
@@ -326,14 +294,7 @@
if (resultCode == ResultCode.SUCCESS)
{
- VirtualAttributeRule rule =
- new VirtualAttributeRule(configuration.getAttributeType(), provider,
- configuration.getBaseDN(),
- SearchScope.valueOf(configuration.getScope().name()),
- configuration.getGroupDN(),
- filters,
- configuration.getConflictBehavior());
-
+ VirtualAttributeRule rule = createRule(configuration, provider, filters);
rules.put(configuration.dn(), rule);
DirectoryServer.registerVirtualAttribute(rule);
}
@@ -346,6 +307,7 @@
/**
* {@inheritDoc}
*/
+ @Override
public boolean isConfigurationDeleteAcceptable(
VirtualAttributeCfg configuration,
List<Message> unacceptableReasons)
@@ -359,12 +321,13 @@
/**
* {@inheritDoc}
*/
+ @Override
public ConfigChangeResult applyConfigurationDelete(
VirtualAttributeCfg configuration)
{
ResultCode resultCode = ResultCode.SUCCESS;
boolean adminActionRequired = false;
- ArrayList<Message> messages = new ArrayList<Message>();
+ List<Message> messages = new ArrayList<Message>();
VirtualAttributeRule rule = rules.remove(configuration.dn());
if (rule != null)
@@ -381,6 +344,7 @@
/**
* {@inheritDoc}
*/
+ @Override
public boolean isConfigurationChangeAcceptable(
VirtualAttributeCfg configuration,
List<Message> unacceptableReasons)
@@ -403,29 +367,20 @@
// If there were any search filters provided, then make sure they are all
// valid.
- for (String filterString : configuration.getFilter())
+ return areFiltersAcceptable(configuration, unacceptableReasons);
+ }
+
+ private boolean areFiltersAcceptable(VirtualAttributeCfg cfg,
+ List<Message> unacceptableReasons)
+ {
+ Map<Message, DirectoryException> reasons =
+ new LinkedHashMap<Message, DirectoryException>();
+ buildFilters(cfg, reasons);
+ if (!reasons.isEmpty())
{
- try
- {
- SearchFilter.createFilterFromString(filterString);
- }
- catch (DirectoryException de)
- {
- if (debugEnabled())
- {
- TRACER.debugCaught(DebugLogLevel.ERROR, de);
- }
-
- Message message = ERR_CONFIG_VATTR_INVALID_SEARCH_FILTER.get(
- filterString,
- String.valueOf(configuration.dn()),
- de.getMessageObject());
- unacceptableReasons.add(message);
- return false;
- }
+ unacceptableReasons.addAll(reasons.keySet());
+ return false;
}
-
- // If we've gotten here, then it's fine.
return true;
}
@@ -434,12 +389,13 @@
/**
* {@inheritDoc}
*/
+ @Override
public ConfigChangeResult applyConfigurationChange(
VirtualAttributeCfg configuration)
{
ResultCode resultCode = ResultCode.SUCCESS;
boolean adminActionRequired = false;
- ArrayList<Message> messages = new ArrayList<Message>();
+ List<Message> messages = new ArrayList<Message>();
// Get the existing rule if it's already enabled.
@@ -462,31 +418,15 @@
// Make sure that we can parse all of the search filters.
- LinkedHashSet<SearchFilter> filters =
- new LinkedHashSet<SearchFilter>();
- for (String filterString : configuration.getFilter())
+ Map<Message, DirectoryException> reasons =
+ new LinkedHashMap<Message, DirectoryException>();
+ Set<SearchFilter> filters = buildFilters(configuration, reasons);
+ if (!reasons.isEmpty())
{
- try
+ messages.addAll(reasons.keySet());
+ if (resultCode == ResultCode.SUCCESS)
{
- filters.add(SearchFilter.createFilterFromString(filterString));
- }
- catch (DirectoryException de)
- {
- if (debugEnabled())
- {
- TRACER.debugCaught(DebugLogLevel.ERROR, de);
- }
-
- if (resultCode == ResultCode.SUCCESS)
- {
- resultCode = ResultCode.INVALID_ATTRIBUTE_SYNTAX;
- }
-
- Message message = ERR_CONFIG_VATTR_INVALID_SEARCH_FILTER.get(
- filterString,
- String.valueOf(configuration.dn()),
- de.getMessageObject());
- messages.add(message);
+ resultCode = ResultCode.INVALID_ATTRIBUTE_SYNTAX;
}
}
@@ -509,13 +449,7 @@
if (resultCode == ResultCode.SUCCESS)
{
- VirtualAttributeRule rule =
- new VirtualAttributeRule(configuration.getAttributeType(), provider,
- configuration.getBaseDN(),
- SearchScope.valueOf(configuration.getScope().name()),
- configuration.getGroupDN(),
- filters,
- configuration.getConflictBehavior());
+ VirtualAttributeRule rule = createRule(configuration, provider, filters);
rules.put(configuration.dn(), rule);
if (existingRule == null)
@@ -566,7 +500,6 @@
propertyDefinition.loadClass(className,
VirtualAttributeProvider.class);
VirtualAttributeProvider<? extends VirtualAttributeCfg> provider =
- (VirtualAttributeProvider<? extends VirtualAttributeCfg>)
providerClass.newInstance();
if (initialize)
@@ -588,20 +521,9 @@
unacceptableReasons);
if (! acceptable)
{
- StringBuilder buffer = new StringBuilder();
- if (! unacceptableReasons.isEmpty())
- {
- Iterator<Message> iterator = unacceptableReasons.iterator();
- buffer.append(iterator.next());
- while (iterator.hasNext())
- {
- buffer.append(". ");
- buffer.append(iterator.next());
- }
- }
-
+ String reasons = collectionToString(unacceptableReasons, ". ");
Message message = ERR_CONFIG_VATTR_CONFIG_NOT_ACCEPTABLE.get(
- String.valueOf(configuration.dn()), buffer.toString());
+ String.valueOf(configuration.dn()), reasons);
throw new InitializationException(message);
}
}
@@ -617,4 +539,3 @@
}
}
}
-
--
Gitblit v1.10.0