//Initialize the existing virtual attribute providers.
for (String providerName : rootConfiguration.listVirtualAttributes())
{
VirtualAttributeCfg cfg =
rootConfiguration.getVirtualAttribute(providerName);
cfg.addChangeListener(this);
if (cfg.isEnabled())
{
String className = cfg.getJavaClass();
try
{
VirtualAttributeProvider<? extends VirtualAttributeCfg> provider =
loadProvider(className, cfg, true);
LinkedHashSet<SearchFilter> filters =
new LinkedHashSet<SearchFilter>();
for (String filterString : cfg.getFilter())
{
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);
}
}
if (cfg.getAttributeType().isSingleValue())
{
if (provider.isMultiValued())
{
Message message = ERR_CONFIG_VATTR_SV_TYPE_WITH_MV_PROVIDER.
get(String.valueOf(cfg.dn()),
cfg.getAttributeType().getNameOrOID(), className);
throw new ConfigException(message);
}
else if (cfg.getConflictBehavior() ==
VirtualAttributeCfgDefn.ConflictBehavior.
MERGE_REAL_AND_VIRTUAL)
{
Message message = ERR_CONFIG_VATTR_SV_TYPE_WITH_MERGE_VALUES.
get(String.valueOf(cfg.dn()),
cfg.getAttributeType().getNameOrOID());
throw new ConfigException(message);
}
}
VirtualAttributeRule rule =
new VirtualAttributeRule(cfg.getAttributeType(), provider,
cfg.getBaseDN(), cfg.getGroupDN(),
filters, cfg.getConflictBehavior());
rules.put(cfg.dn(), rule);
DirectoryServer.registerVirtualAttribute(rule);
}
catch (InitializationException ie)
{
ErrorLogger.logError(ie.getMessageObject());