From 22094368c2865dcfb6daf8366425212b721a4657 Mon Sep 17 00:00:00 2001
From: matthew_swift <matthew_swift@localhost>
Date: Thu, 05 Feb 2009 17:42:14 +0000
Subject: [PATCH] Merge ASN1 branch to trunk
---
opends/src/server/org/opends/server/schema/CollationMatchingRuleFactory.java | 1309 ++++++++++++++++++++++++++++------------------------------
1 files changed, 632 insertions(+), 677 deletions(-)
diff --git a/opends/src/server/org/opends/server/schema/CollationMatchingRuleFactory.java b/opends/src/server/org/opends/server/schema/CollationMatchingRuleFactory.java
index 0237d4a..8e9995a 100644
--- a/opends/src/server/org/opends/server/schema/CollationMatchingRuleFactory.java
+++ b/opends/src/server/org/opends/server/schema/CollationMatchingRuleFactory.java
@@ -25,14 +25,22 @@
* Copyright 2008-2009 Sun Microsystems, Inc.
*/
-
package org.opends.server.schema;
+
+
+import static org.opends.messages.ConfigMessages.*;
+import static org.opends.messages.CoreMessages.*;
+import static org.opends.messages.SchemaMessages.*;
+import static org.opends.server.loggers.ErrorLogger.*;
+import static org.opends.server.schema.SchemaConstants.*;
+import static org.opends.server.util.ServerConstants.*;
+import static org.opends.server.util.StaticUtils.*;
+
+import java.nio.CharBuffer;
import java.text.CollationKey;
import java.text.Collator;
-import java.nio.CharBuffer;
import java.util.ArrayList;
-import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
@@ -40,99 +48,90 @@
import java.util.LinkedList;
import java.util.List;
import java.util.Locale;
-
import java.util.Map;
import java.util.Set;
import java.util.SortedSet;
import java.util.TreeSet;
+
import org.opends.messages.Message;
import org.opends.server.admin.server.ConfigurationChangeListener;
-import org.opends.server.admin.std.meta.CollationMatchingRuleCfgDefn.
- MatchingRuleType;
-import org.opends.server.api.ExtensibleIndexer;
-import org.opends.server.api.IndexQueryFactory;
-import org.opends.server.api.MatchingRuleFactory;
+import org.opends.server.admin.std.meta.
+ CollationMatchingRuleCfgDefn.MatchingRuleType;
import org.opends.server.admin.std.server.CollationMatchingRuleCfg;
+import org.opends.server.api.ExtensibleIndexer;
import org.opends.server.api.ExtensibleMatchingRule;
+import org.opends.server.api.IndexQueryFactory;
import org.opends.server.api.MatchingRule;
+import org.opends.server.api.MatchingRuleFactory;
import org.opends.server.backends.jeb.AttributeIndex;
import org.opends.server.config.ConfigException;
import org.opends.server.core.DirectoryServer;
-import org.opends.server.protocols.asn1.ASN1OctetString;
import org.opends.server.types.AttributeValue;
+import org.opends.server.types.ByteSequence;
import org.opends.server.types.ByteString;
import org.opends.server.types.ConditionResult;
import org.opends.server.types.ConfigChangeResult;
import org.opends.server.types.DirectoryException;
import org.opends.server.types.IndexConfig;
import org.opends.server.types.InitializationException;
-
import org.opends.server.types.ResultCode;
-import static org.opends.server.schema.SchemaConstants.*;
-import static org.opends.server.loggers.ErrorLogger.logError;
-import static org.opends.messages.SchemaMessages.*;
-import static org.opends.messages.CoreMessages.*;
-import static org.opends.messages.ConfigMessages.*;
-import static org.opends.server.util.StaticUtils.*;
-import static org.opends.server.api.ExtensibleIndexer.*;
-import static org.opends.server.util.ServerConstants.*;
/**
- * This class is a factory class for Collation matching rules. It creates
- * different matching rules based on the configuration entries.
+ * This class is a factory class for Collation matching rules. It
+ * creates different matching rules based on the configuration entries.
*/
-public final class CollationMatchingRuleFactory
- extends MatchingRuleFactory<CollationMatchingRuleCfg>
- implements ConfigurationChangeListener<CollationMatchingRuleCfg>
+public final class CollationMatchingRuleFactory extends
+ MatchingRuleFactory<CollationMatchingRuleCfg> implements
+ ConfigurationChangeListener<CollationMatchingRuleCfg>
{
- //Whether equality matching rules are enabled.
+ // Whether equality matching rules are enabled.
private boolean equalityMatchingRuleType;
- //Whether less-than matching rules are enabled.
+ // Whether less-than matching rules are enabled.
private boolean lessThanMatchingRuleType;
- //Whether less-than-equal-to matching rules are enabled.
+ // Whether less-than-equal-to matching rules are enabled.
private boolean lessThanEqualToMatchingRuleType;
- //Whether less-than-equal-to matching rules are enabled.
+ // Whether less-than-equal-to matching rules are enabled.
private boolean greaterThanMatchingRuleType;
- //Whether greater-than matching rules are enabled.
+ // Whether greater-than matching rules are enabled.
private boolean greaterThanEqualToMatchingRuleType;
- //Whether greater-than-equal-to matching rules are enabled.
+ // Whether greater-than-equal-to matching rules are enabled.
private boolean substringMatchingRuleType;
- //Stores the list of available locales on this JVM.
+ // Stores the list of available locales on this JVM.
private static final Set<Locale> supportedLocales;
- //Current Configuration.
+ // Current Configuration.
private CollationMatchingRuleCfg currentConfig;
- //Map of OID and the Matching Rule.
- private final Map<String, MatchingRule> matchingRules;
-
+ // Map of OID and the Matching Rule.
+ private final Map<String, MatchingRule> matchingRules;
static
{
supportedLocales = new HashSet<Locale>();
- for(Locale l:Locale.getAvailableLocales())
+ for (Locale l : Locale.getAvailableLocales())
{
supportedLocales.add(l);
}
}
+
/**
* Creates a new instance of CollationMatchingRuleFactory.
*/
public CollationMatchingRuleFactory()
{
- //Initialize the matchingRules.
- matchingRules = new HashMap<String,MatchingRule>();
+ // Initialize the matchingRules.
+ matchingRules = new HashMap<String, MatchingRule>();
}
@@ -151,11 +150,13 @@
/**
* Adds a new mapping of OID and MatchingRule.
*
- * @param oid OID of the matching rule
- * @param matchingRule instance of a MatchingRule.
+ * @param oid
+ * OID of the matching rule
+ * @param matchingRule
+ * instance of a MatchingRule.
*/
private final void addMatchingRule(String oid,
- MatchingRule matchingRule)
+ MatchingRule matchingRule)
{
matchingRules.put(oid, matchingRule);
}
@@ -165,8 +166,9 @@
/**
* Returns the Matching rule for the specified OID.
*
- * @param oid OID of the matching rule to be searched.
- * @return MatchingRule corresponding to an OID.
+ * @param oid
+ * OID of the matching rule to be searched.
+ * @return MatchingRule corresponding to an OID.
*/
private final MatchingRule getMatchingRule(String oid)
{
@@ -175,7 +177,6 @@
-
/**
* Clears the Map containing matching Rules.
*/
@@ -189,35 +190,36 @@
/**
* Reads the configuration and initializes matching rule types.
*
- * @param ruleTypes The Set containing allowed matching rule types.
+ * @param ruleTypes
+ * The Set containing allowed matching rule types.
*/
- private void initializeMatchingRuleTypes(SortedSet<MatchingRuleType>
- ruleTypes)
+ private void initializeMatchingRuleTypes(
+ SortedSet<MatchingRuleType> ruleTypes)
{
- for(MatchingRuleType type:ruleTypes)
+ for (MatchingRuleType type : ruleTypes)
{
- switch(type)
+ switch (type)
{
- case EQUALITY:
- equalityMatchingRuleType = true;
- break;
- case LESS_THAN:
- lessThanMatchingRuleType = true;
- break;
- case LESS_THAN_OR_EQUAL_TO:
- lessThanEqualToMatchingRuleType = true;
- break;
- case GREATER_THAN:
- greaterThanMatchingRuleType = true;
- break;
- case GREATER_THAN_OR_EQUAL_TO:
- greaterThanEqualToMatchingRuleType = true;
- break;
- case SUBSTRING:
- substringMatchingRuleType = true;
- break;
- default:
- //No default values allowed.
+ case EQUALITY:
+ equalityMatchingRuleType = true;
+ break;
+ case LESS_THAN:
+ lessThanMatchingRuleType = true;
+ break;
+ case LESS_THAN_OR_EQUAL_TO:
+ lessThanEqualToMatchingRuleType = true;
+ break;
+ case GREATER_THAN:
+ greaterThanMatchingRuleType = true;
+ break;
+ case GREATER_THAN_OR_EQUAL_TO:
+ greaterThanEqualToMatchingRuleType = true;
+ break;
+ case SUBSTRING:
+ substringMatchingRuleType = true;
+ break;
+ default:
+ // No default values allowed.
}
}
}
@@ -227,7 +229,8 @@
/**
* Creates a new Collator instance.
*
- * @param locale Locale for the collator
+ * @param locale
+ * Locale for the collator
* @return Returns a new Collator instance
*/
private Collator createCollator(Locale locale)
@@ -244,49 +247,52 @@
* {@inheritDoc}
*/
@Override
- public void initializeMatchingRule(CollationMatchingRuleCfg configuration)
- throws ConfigException, InitializationException
+ public void initializeMatchingRule(
+ CollationMatchingRuleCfg configuration) throws ConfigException,
+ InitializationException
{
initializeMatchingRuleTypes(configuration.getMatchingRuleType());
- for(String collation:configuration.getCollation())
+ for (String collation : configuration.getCollation())
{
CollationMapper mapper = new CollationMapper(collation);
String nOID = mapper.getNumericOID();
String languageTag = mapper.getLanguageTag();
- if(nOID==null || languageTag==null)
+ if (nOID == null || languageTag == null)
{
Message msg =
- WARN_ATTR_INVALID_COLLATION_MATCHING_RULE_FORMAT.
- get(collation);
+ WARN_ATTR_INVALID_COLLATION_MATCHING_RULE_FORMAT
+ .get(collation);
logError(msg);
continue;
}
Locale locale = getLocale(languageTag);
- if(locale!=null)
+ if (locale != null)
{
- createLessThanMatchingRule(mapper,locale);
- createLessThanOrEqualToMatchingRule(mapper,locale);
- createEqualityMatchingRule(mapper,locale);
- createGreaterThanOrEqualToMatchingRule(mapper,locale);
- createGreaterThanMatchingRule(mapper,locale);
- createSubstringMatchingRule(mapper,locale);
+ createLessThanMatchingRule(mapper, locale);
+ createLessThanOrEqualToMatchingRule(mapper, locale);
+ createEqualityMatchingRule(mapper, locale);
+ createGreaterThanOrEqualToMatchingRule(mapper, locale);
+ createGreaterThanMatchingRule(mapper, locale);
+ createSubstringMatchingRule(mapper, locale);
}
else
{
- //This locale is not supported by JVM.
+ // This locale is not supported by JVM.
Message msg =
- WARN_ATTR_INVALID_COLLATION_MATCHING_RULE_LOCALE.
- get(collation,configuration.dn().toNormalizedString(),
+ WARN_ATTR_INVALID_COLLATION_MATCHING_RULE_LOCALE.get(
+ collation, configuration.dn().toNormalizedString(),
languageTag);
logError(msg);
}
}
- //Save this configuration.
+
+ // Save this configuration.
currentConfig = configuration;
- //Register for change events.
+
+ // Register for change events.
currentConfig.addCollationChangeListener(this);
}
@@ -298,7 +304,7 @@
@Override
public void finalizeMatchingRule()
{
- //De-register the listener.
+ // De-register the listener.
currentConfig.removeCollationChangeListener(this);
}
@@ -308,64 +314,68 @@
* {@inheritDoc}
*/
public ConfigChangeResult applyConfigurationChange(
- CollationMatchingRuleCfg configuration)
+ CollationMatchingRuleCfg configuration)
{
- ResultCode resultCode = ResultCode.SUCCESS;
- boolean adminActionRequired = false;
- ArrayList<Message> messages = new ArrayList<Message>();
+ ResultCode resultCode = ResultCode.SUCCESS;
+ boolean adminActionRequired = false;
+ ArrayList<Message> messages = new ArrayList<Message>();
- if(!configuration.isEnabled() ||
- currentConfig.isEnabled()!=configuration.isEnabled())
+ if (!configuration.isEnabled()
+ || currentConfig.isEnabled() != configuration.isEnabled())
{
- //Don't do anything if:
+ // Don't do anything if:
// 1. The configuration is disabled.
// 2. There is a change in the enable status
- // i.e. (disable->enable or enable->disable). In this case, the
- // ConfigManager will have already created the new Factory object.
- return new ConfigChangeResult(resultCode,
- adminActionRequired, messages);
+ // i.e. (disable->enable or enable->disable). In this case, the
+ // ConfigManager will have already created the new Factory object.
+ return new ConfigChangeResult(resultCode, adminActionRequired,
+ messages);
}
- //Since we have come here it means that this Factory is enabled and
- //there is a change in the CollationMatchingRuleFactory's configuration.
- // Deregister all the Matching Rule corresponding to this factory..
- for(MatchingRule rule: getMatchingRules())
+ // Since we have come here it means that this Factory is enabled and
+ // there is a change in the CollationMatchingRuleFactory's
+ // configuration.
+ // Deregister all the Matching Rule corresponding to this factory.
+ for (MatchingRule rule : getMatchingRules())
{
DirectoryServer.deregisterMatchingRule(rule);
}
- //Clear the associated matching rules.
+
+ // Clear the associated matching rules.
resetRules();
initializeMatchingRuleTypes(configuration.getMatchingRuleType());
- for(String collation:configuration.getCollation())
+ for (String collation : configuration.getCollation())
{
CollationMapper mapper = new CollationMapper(collation);
String languageTag = mapper.getLanguageTag();
Locale locale = getLocale(languageTag);
- createLessThanMatchingRule(mapper,locale);
- createLessThanOrEqualToMatchingRule(mapper,locale);
- createEqualityMatchingRule(mapper,locale);
- createGreaterThanOrEqualToMatchingRule(mapper,locale);
- createGreaterThanMatchingRule(mapper,locale);
- createSubstringMatchingRule(mapper,locale);
+ createLessThanMatchingRule(mapper, locale);
+ createLessThanOrEqualToMatchingRule(mapper, locale);
+ createEqualityMatchingRule(mapper, locale);
+ createGreaterThanOrEqualToMatchingRule(mapper, locale);
+ createGreaterThanMatchingRule(mapper, locale);
+ createSubstringMatchingRule(mapper, locale);
}
try
{
- for(MatchingRule matchingRule: getMatchingRules())
+ for (MatchingRule matchingRule : getMatchingRules())
{
DirectoryServer.registerMatchingRule(matchingRule, false);
}
}
catch (DirectoryException de)
{
- Message message = WARN_CONFIG_SCHEMA_MR_CONFLICTING_MR.get(
- String.valueOf(configuration.dn()), de.getMessageObject());
+ Message message =
+ WARN_CONFIG_SCHEMA_MR_CONFLICTING_MR.get(String
+ .valueOf(configuration.dn()), de.getMessageObject());
adminActionRequired = true;
messages.add(message);
}
currentConfig = configuration;
- return new ConfigChangeResult(resultCode, adminActionRequired, messages);
+ return new ConfigChangeResult(resultCode, adminActionRequired,
+ messages);
}
@@ -374,44 +384,45 @@
* {@inheritDoc}
*/
public boolean isConfigurationChangeAcceptable(
- CollationMatchingRuleCfg configuration,
- List<Message> unacceptableReasons)
+ CollationMatchingRuleCfg configuration,
+ List<Message> unacceptableReasons)
{
boolean configAcceptable = true;
- //If the new configuration disables this factory, don't do anything.
- if(!configuration.isEnabled())
+ // If the new configuration disables this factory, don't do
+ // anything.
+ if (!configuration.isEnabled())
{
return configAcceptable;
}
-
- //If it comes here we don't need to verify MatchingRuleType; it should be
- //okay as its syntax is verified by the admin framework. Iterate over the
- //collations and verify if the format is okay. Also, verify if the
- //locale is allowed by the JVM.
- for(String collation:configuration.getCollation())
+ // If it comes here we don't need to verify MatchingRuleType; it
+ // should be okay as its syntax is verified by the admin framework.
+ // Iterate over the collations and verify if the format is okay.
+ // Also,
+ // verify if the locale is allowed by the JVM.
+ for (String collation : configuration.getCollation())
{
CollationMapper mapper = new CollationMapper(collation);
String nOID = mapper.getNumericOID();
String languageTag = mapper.getLanguageTag();
- if(nOID==null || languageTag==null)
+ if (nOID == null || languageTag == null)
{
configAcceptable = false;
Message msg =
- WARN_ATTR_INVALID_COLLATION_MATCHING_RULE_FORMAT.
- get(collation);
+ WARN_ATTR_INVALID_COLLATION_MATCHING_RULE_FORMAT
+ .get(collation);
unacceptableReasons.add(msg);
continue;
}
Locale locale = getLocale(languageTag);
- if(locale==null)
+ if (locale == null)
{
Message msg =
- WARN_ATTR_INVALID_COLLATION_MATCHING_RULE_LOCALE.
- get(collation,configuration.dn().toNormalizedString(),
+ WARN_ATTR_INVALID_COLLATION_MATCHING_RULE_LOCALE.get(
+ collation, configuration.dn().toNormalizedString(),
languageTag);
unacceptableReasons.add(msg);
configAcceptable = false;
@@ -426,31 +437,34 @@
/**
* Creates Less-than Matching Rule.
*
- * @param mapper CollationMapper containing OID and the language Tag.
- * @param locale Locale value
+ * @param mapper
+ * CollationMapper containing OID and the language Tag.
+ * @param locale
+ * Locale value
*/
- private void createLessThanMatchingRule(CollationMapper mapper,Locale locale)
+ private void createLessThanMatchingRule(CollationMapper mapper,
+ Locale locale)
{
- if(!lessThanMatchingRuleType)
- return;
+ if (!lessThanMatchingRuleType) return;
- String oid = mapper.getNumericOID()+".1";
+ String oid = mapper.getNumericOID() + ".1";
String lTag = mapper.getLanguageTag();
Collection<String> names = new HashSet<String>();
MatchingRule matchingRule = getMatchingRule(oid);
- if(matchingRule!=null)
+ if (matchingRule != null)
{
- for(String name: matchingRule.getAllNames())
+ for (String name : matchingRule.getAllNames())
{
names.add(name);
}
}
- names.add(lTag+".lt");
+ names.add(lTag + ".lt");
names.add(lTag + ".1");
- matchingRule = new CollationLessThanMatchingRule(oid, names, locale);
+ matchingRule =
+ new CollationLessThanMatchingRule(oid, names, locale);
addMatchingRule(oid, matchingRule);
}
@@ -459,33 +473,34 @@
/**
* Creates Less-Than-Equal-To Matching Rule.
*
- * @param mapper CollationMapper containing OID and the language Tag.
- * @param locale Locale value
+ * @param mapper
+ * CollationMapper containing OID and the language Tag.
+ * @param locale
+ * Locale value
*/
- private void createLessThanOrEqualToMatchingRule(CollationMapper mapper,
- Locale locale)
+ private void createLessThanOrEqualToMatchingRule(
+ CollationMapper mapper, Locale locale)
{
- if(!lessThanEqualToMatchingRuleType)
- return;
+ if (!lessThanEqualToMatchingRuleType) return;
- String oid = mapper.getNumericOID()+".2";
+ String oid = mapper.getNumericOID() + ".2";
String lTag = mapper.getLanguageTag();
Collection<String> names = new HashSet<String>();
MatchingRule matchingRule = getMatchingRule(oid);
- if(matchingRule!=null)
+ if (matchingRule != null)
{
- for(String name: matchingRule.getAllNames())
+ for (String name : matchingRule.getAllNames())
{
names.add(name);
}
}
- names.add(lTag+".lte");
+ names.add(lTag + ".lte");
names.add(lTag + ".2");
matchingRule =
- new CollationLessThanOrEqualToMatchingRule(oid,names,locale);
+ new CollationLessThanOrEqualToMatchingRule(oid, names, locale);
addMatchingRule(oid, matchingRule);
}
@@ -494,22 +509,28 @@
/**
* Creates Equality Matching Rule.
*
- * @param mapper CollationMapper containing OID and the language Tag.
- * @param locale Locale value
+ * @param mapper
+ * CollationMapper containing OID and the language Tag.
+ * @param locale
+ * Locale value
*/
- private void createEqualityMatchingRule(CollationMapper mapper,Locale locale)
+ private void createEqualityMatchingRule(CollationMapper mapper,
+ Locale locale)
{
- if(!equalityMatchingRuleType)
+ if (!equalityMatchingRuleType)
+ {
return;
- //Register the default OID as equality matching rule.
+ }
+
+ // Register the default OID as equality matching rule.
String lTag = mapper.getLanguageTag();
String nOID = mapper.getNumericOID();
MatchingRule matchingRule = getMatchingRule(nOID);
Collection<String> names = new HashSet<String>();
- if(matchingRule!=null)
+ if (matchingRule != null)
{
- for(String name: matchingRule.getAllNames())
+ for (String name : matchingRule.getAllNames())
{
names.add(name);
}
@@ -517,26 +538,26 @@
names.add(lTag);
matchingRule =
- new CollationEqualityMatchingRule(nOID,
- Collections.<String>emptySet(),locale);
+ new CollationEqualityMatchingRule(nOID, Collections
+ .<String> emptySet(), locale);
addMatchingRule(nOID, matchingRule);
// Register OID.3 as the equality matching rule.
String OID = mapper.getNumericOID() + ".3";
MatchingRule equalityMatchingRule = getMatchingRule(OID);
- if(equalityMatchingRule!=null)
+ if (equalityMatchingRule != null)
{
- for(String name: equalityMatchingRule.getAllNames())
+ for (String name : equalityMatchingRule.getAllNames())
{
names.add(name);
}
}
- names.add(lTag+".eq");
- names.add(lTag+".3");
+ names.add(lTag + ".eq");
+ names.add(lTag + ".3");
equalityMatchingRule =
- new CollationEqualityMatchingRule(OID,names,locale);
+ new CollationEqualityMatchingRule(OID, names, locale);
addMatchingRule(OID, equalityMatchingRule);
}
@@ -545,32 +566,34 @@
/**
* Creates Greater-than-equal-to Matching Rule.
*
- * @param mapper CollationMapper containing OID and the language Tag.
- * @param locale Locale value
+ * @param mapper
+ * CollationMapper containing OID and the language Tag.
+ * @param locale
+ * Locale value
*/
- private void createGreaterThanOrEqualToMatchingRule(CollationMapper mapper,
- Locale locale)
+ private void createGreaterThanOrEqualToMatchingRule(
+ CollationMapper mapper, Locale locale)
{
- if(!greaterThanEqualToMatchingRuleType)
- return;
+ if (!greaterThanEqualToMatchingRuleType) return;
- String oid = mapper.getNumericOID()+".4";
+ String oid = mapper.getNumericOID() + ".4";
String lTag = mapper.getLanguageTag();
Collection<String> names = new HashSet<String>();
MatchingRule matchingRule = getMatchingRule(oid);
- if(matchingRule!=null)
+ if (matchingRule != null)
{
- for(String name: matchingRule.getAllNames())
+ for (String name : matchingRule.getAllNames())
{
names.add(name);
}
}
- names.add(lTag+".gte");
+ names.add(lTag + ".gte");
names.add(lTag + ".4");
matchingRule =
- new CollationGreaterThanOrEqualToMatchingRule(oid,names,locale);
+ new CollationGreaterThanOrEqualToMatchingRule(oid, names,
+ locale);
addMatchingRule(oid, matchingRule);
}
@@ -579,32 +602,33 @@
/**
* Creates Greater-than Matching Rule.
*
- * @param mapper CollationMapper containing OID and the language Tag.
- * @param locale Locale value
+ * @param mapper
+ * CollationMapper containing OID and the language Tag.
+ * @param locale
+ * Locale value
*/
private void createGreaterThanMatchingRule(CollationMapper mapper,
- Locale locale)
+ Locale locale)
{
- if(!greaterThanMatchingRuleType)
- return;
+ if (!greaterThanMatchingRuleType) return;
- String oid = mapper.getNumericOID()+".5";
+ String oid = mapper.getNumericOID() + ".5";
String lTag = mapper.getLanguageTag();
Collection<String> names = new HashSet<String>();
MatchingRule matchingRule = getMatchingRule(oid);
- if(matchingRule!=null)
+ if (matchingRule != null)
{
- for(String name: matchingRule.getAllNames())
+ for (String name : matchingRule.getAllNames())
{
names.add(name);
}
}
- names.add(lTag+".gt");
+ names.add(lTag + ".gt");
names.add(lTag + ".5");
matchingRule =
- new CollationGreaterThanMatchingRule(oid,names,locale);
+ new CollationGreaterThanMatchingRule(oid, names, locale);
addMatchingRule(oid, matchingRule);
}
@@ -613,45 +637,47 @@
/**
* Creates substring Matching Rule.
*
- * @param mapper CollationMapper containing OID and the language Tag.
- * @param locale Locale value
+ * @param mapper
+ * CollationMapper containing OID and the language Tag.
+ * @param locale
+ * Locale value
*/
- private void createSubstringMatchingRule(CollationMapper mapper,Locale locale)
+ private void createSubstringMatchingRule(CollationMapper mapper,
+ Locale locale)
{
- if(!substringMatchingRuleType)
- return;
+ if (!substringMatchingRuleType) return;
- String oid = mapper.getNumericOID()+".6";
+ String oid = mapper.getNumericOID() + ".6";
String lTag = mapper.getLanguageTag();
Collection<String> names = new HashSet<String>();
MatchingRule matchingRule = getMatchingRule(oid);
- if(matchingRule!=null)
+ if (matchingRule != null)
{
- for(String name: matchingRule.getAllNames())
+ for (String name : matchingRule.getAllNames())
{
names.add(name);
}
}
- names.add(lTag+".sub");
+ names.add(lTag + ".sub");
names.add(lTag + ".6");
matchingRule =
- new CollationSubstringMatchingRule(oid,names,locale);
+ new CollationSubstringMatchingRule(oid, names, locale);
addMatchingRule(oid, matchingRule);
}
-
/**
* Verifies if the locale is supported by the JVM.
*
- * @param lTag The language tag specified in the configuration.
- * @return Locale The locale correspoding to the languageTag.
+ * @param lTag
+ * The language tag specified in the configuration.
+ * @return Locale The locale correspoding to the languageTag.
*/
private Locale getLocale(String lTag)
{
- //Separates the language and the country from the locale.
+ // Separates the language and the country from the locale.
Locale locale;
String lang = null;
String country = null;
@@ -660,20 +686,20 @@
int countryIndex = lTag.indexOf("-");
int variantIndex = lTag.lastIndexOf("-");
- if(countryIndex > 0)
+ if (countryIndex > 0)
{
- lang = lTag.substring(0,countryIndex);
+ lang = lTag.substring(0, countryIndex);
- if(variantIndex>countryIndex)
+ if (variantIndex > countryIndex)
{
- country = lTag.substring(countryIndex+1,variantIndex);
- variant = lTag.substring(variantIndex+1,lTag.length());
- locale = new Locale(lang,country,variant);
+ country = lTag.substring(countryIndex + 1, variantIndex);
+ variant = lTag.substring(variantIndex + 1, lTag.length());
+ locale = new Locale(lang, country, variant);
}
else
{
- country = lTag.substring(countryIndex+1,lTag.length());
- locale = new Locale(lang,country);
+ country = lTag.substring(countryIndex + 1, lTag.length());
+ locale = new Locale(lang, country);
}
}
else
@@ -682,9 +708,9 @@
locale = new Locale(lTag);
}
- if(!supportedLocales.contains(locale))
+ if (!supportedLocales.contains(locale))
{
- //This locale is not supported by this JVM.
+ // This locale is not supported by this JVM.
locale = null;
}
return locale;
@@ -695,30 +721,22 @@
/**
* Collation Extensible matching rule.
*/
- private abstract class CollationMatchingRule
- extends ExtensibleMatchingRule
+ private abstract class CollationMatchingRule extends
+ ExtensibleMatchingRule
{
- //Names for this class.
+ // Names for this class.
private final Collection<String> names;
-
-
- //Collator for performing equality match.
+ // Collator for performing equality match.
protected final Collator collator;
-
-
- //Numeric OID of the rule.
+ // Numeric OID of the rule.
private final String nOID;
-
-
- //Locale associated with this rule.
+ // Locale associated with this rule.
private final Locale locale;
-
-
- //Indexer of this rule.
+ // Indexer of this rule.
protected ExtensibleIndexer indexer;
@@ -726,14 +744,16 @@
/**
* Constructs a new CollationMatchingRule.
*
- * @param nOID OID of the collation matching rule
- * @param names names of this matching rule
- * @param locale Locale of the collation matching rule
+ * @param nOID
+ * OID of the collation matching rule
+ * @param names
+ * names of this matching rule
+ * @param locale
+ * Locale of the collation matching rule
*/
- private CollationMatchingRule(String nOID,Collection<String> names,
- Locale locale)
+ private CollationMatchingRule(String nOID,
+ Collection<String> names, Locale locale)
{
- super();
this.names = names;
this.collator = createCollator(locale);
this.locale = locale;
@@ -748,9 +768,9 @@
@Override
public String getName()
{
- //Concatenate all the names and return.
+ // Concatenate all the names and return.
StringBuilder builder = new StringBuilder();
- for(String name: getAllNames())
+ for (String name : getAllNames())
{
builder.append(name);
builder.append("\b");
@@ -806,12 +826,13 @@
/**
- * Returns the name of the index database for this matching rule.
- * An index name for this rule will be based upon the Locale. This will
- * ensure that multiple collation matching rules corresponding to the same
- * Locale can share the same index database.
- * @return The name of the index for this matching rule.
- */
+ * Returns the name of the index database for this matching rule. An
+ * index name for this rule will be based upon the Locale. This will
+ * ensure that multiple collation matching rules corresponding to
+ * the same Locale can share the same index database.
+ *
+ * @return The name of the index for this matching rule.
+ */
public String getIndexName()
{
String language = locale.getLanguage();
@@ -833,42 +854,42 @@
-
/**
* {@inheritDoc}
*/
@Override
public Collection<ExtensibleIndexer> getIndexers(IndexConfig config)
{
- if(indexer == null)
+ if (indexer == null)
{
- //The default implementation contains shared indexer and doesn't use the
- //config.
+ // The default implementation contains shared indexer and
+ // doesn't use the config.
indexer = new CollationSharedExtensibleIndexer(this);
}
return Collections.singletonList(indexer);
}
}
-
-
/**
- *Collation rule for Equality matching rule.
+ * Collation rule for Equality matching rule.
*/
- private final class CollationEqualityMatchingRule
- extends CollationMatchingRule
+ private final class CollationEqualityMatchingRule extends
+ CollationMatchingRule
{
/**
* Constructs a new CollationEqualityMatchingRule.
*
- * @param nOID OID of the collation matching rule
- * @param names names of this matching rule
- * @param locale Locale of the collation matching rule
+ * @param nOID
+ * OID of the collation matching rule
+ * @param names
+ * names of this matching rule
+ * @param locale
+ * Locale of the collation matching rule
*/
- private CollationEqualityMatchingRule(String nOID,Collection<String> names,
- Locale locale)
+ private CollationEqualityMatchingRule(String nOID,
+ Collection<String> names, Locale locale)
{
- super(nOID,names,locale);
+ super(nOID, names, locale);
}
@@ -877,30 +898,11 @@
* {@inheritDoc}
*/
@Override
- public ByteString normalizeValue(ByteString value)
- throws DirectoryException
+ public ByteString normalizeValue(ByteSequence value)
+ throws DirectoryException
{
- CollationKey key = collator.getCollationKey(value.stringValue());
- return new ASN1OctetString(key.toByteArray());
- }
-
-
-
- /**
- * Indicates whether the two provided normalized values are equal to
- * each other.
- *
- * @param value1 The normalized form of the first value to
- * compare.
- * @param value2 The normalized form of the second value to
- * compare.
- *
- * @return {@code true} if the provided values are equal, or
- * {@code false} if not.
- */
- private boolean areEqual(ByteString value1, ByteString value2)
- {
- return Arrays.equals(value1.value(), value2.value());
+ CollationKey key = collator.getCollationKey(value.toString());
+ return ByteString.wrap(key.toByteArray());
}
@@ -909,10 +911,10 @@
* {@inheritDoc}
*/
@Override
- public ConditionResult valuesMatch(ByteString attributeValue,
- ByteString assertionValue)
+ public ConditionResult valuesMatch(ByteSequence attributeValue,
+ ByteSequence assertionValue)
{
- if (areEqual(attributeValue, assertionValue))
+ if (assertionValue.equals(attributeValue))
{
return ConditionResult.TRUE;
}
@@ -928,26 +930,22 @@
* {@inheritDoc}
*/
@Override
- public <T> T createIndexQuery(ByteString assertionValue,
- IndexQueryFactory<T> factory) throws DirectoryException
+ public <T> T createIndexQuery(ByteSequence assertionValue,
+ IndexQueryFactory<T> factory) throws DirectoryException
{
- //Normalize the assertion value.
- ByteString normalValue = normalizeValue(assertionValue);
- return factory.createExactMatchQuery(
- indexer.getExtensibleIndexID(),
- normalValue.value());
+ // Normalize the assertion value.
+ return factory.createExactMatchQuery(indexer
+ .getExtensibleIndexID(), normalizeValue(assertionValue));
}
}
-
-
/**
* Collation rule for Substring matching rule.
*/
- private final class CollationSubstringMatchingRule
- extends CollationMatchingRule
+ private final class CollationSubstringMatchingRule extends
+ CollationMatchingRule
{
- //Substring Indexer associated with this instance.
+ // Substring Indexer associated with this instance.
private CollationSubstringExtensibleIndexer subIndexer;
@@ -955,14 +953,17 @@
/**
* Constructs a new CollationSubstringMatchingRule.
*
- * @param nOID OID of the collation matching rule
- * @param names names of this matching rule
- * @param locale Locale of the collation matching rule
+ * @param nOID
+ * OID of the collation matching rule
+ * @param names
+ * names of this matching rule
+ * @param locale
+ * Locale of the collation matching rule
*/
private CollationSubstringMatchingRule(String nOID,
- Collection<String> names,Locale locale)
+ Collection<String> names, Locale locale)
{
- super(nOID,names,locale);
+ super(nOID, names, locale);
}
@@ -971,11 +972,11 @@
* {@inheritDoc}
*/
@Override
- public ByteString normalizeValue(ByteString value)
- throws DirectoryException
+ public ByteString normalizeValue(ByteSequence value)
+ throws DirectoryException
{
- CollationKey key = collator.getCollationKey(value.stringValue());
- return new ASN1OctetString(key.toByteArray());
+ CollationKey key = collator.getCollationKey(value.toString());
+ return ByteString.wrap(key.toByteArray());
}
@@ -985,26 +986,29 @@
*/
private final class Assertion
{
- //Initial part of the substring filter.
+ // Initial part of the substring filter.
private String subInitial;
-
- //any parts of the substring filter.
+ // any parts of the substring filter.
private List<String> subAny;
-
- //Final part of the substring filter.
+ // Final part of the substring filter.
private String subFinal;
/**
* Creates a new instance of Assertion.
- * @param subInitial Initial part of the filter.
- * @param subAny Any part of the filter.
- * @param subFinal Final part of the filter.
+ *
+ * @param subInitial
+ * Initial part of the filter.
+ * @param subAny
+ * Any part of the filter.
+ * @param subFinal
+ * Final part of the filter.
*/
- Assertion(String subInitial, List<String> subAny, String subFinal)
+ private Assertion(String subInitial, List<String> subAny,
+ String subFinal)
{
this.subInitial = subInitial;
this.subAny = subAny;
@@ -1015,6 +1019,7 @@
/**
* Returns the Initial part of the assertion.
+ *
* @return Initial part of assertion.
*/
private String getInitial()
@@ -1026,6 +1031,7 @@
/**
* Returns the any part of the assertion.
+ *
* @return Any part of the assertion.
*/
private List<String> getAny()
@@ -1037,6 +1043,7 @@
/**
* Returns the final part of the assertion.
+ *
* @return Final part of the assertion.
*/
private String getFinal()
@@ -1049,23 +1056,25 @@
/**
* Parses the assertion from a given value.
- * @param value The value that needs to be parsed.
+ *
+ * @param value
+ * The value that needs to be parsed.
* @return The parsed Assertion object containing the
* @throws org.opends.server.types.DirectoryException
*/
- private Assertion parseAssertion(ByteString value)
- throws DirectoryException
+ private Assertion parseAssertion(ByteSequence value)
+ throws DirectoryException
{
- // Get a string representation of the value.
- String filterString = value.stringValue();
+ // Get a string representation of the value.
+ String filterString = value.toString();
int endPos = filterString.length();
- // Find the locations of all the asterisks in the value. Also,
+ // Find the locations of all the asterisks in the value. Also,
// check to see if there are any escaped values, since they will
// need special treatment.
boolean hasEscape = false;
LinkedList<Integer> asteriskPositions = new LinkedList<Integer>();
- for (int i=0; i < endPos; i++)
+ for (int i = 0; i < endPos; i++)
{
if (filterString.charAt(i) == 0x2A) // The asterisk.
{
@@ -1077,18 +1086,17 @@
}
}
-
// If there were no asterisks, then this isn't a substring filter.
if (asteriskPositions.isEmpty())
{
- Message message = ERR_SEARCH_FILTER_SUBSTRING_NO_ASTERISKS.get(
- filterString, 0, endPos);
- throw new DirectoryException(
- ResultCode.PROTOCOL_ERROR, message);
+ Message message =
+ ERR_SEARCH_FILTER_SUBSTRING_NO_ASTERISKS.get(filterString,
+ 0, endPos);
+ throw new DirectoryException(ResultCode.PROTOCOL_ERROR, message);
}
// If the value starts with an asterisk, then there is no
- // subInitial component. Otherwise, parse out the subInitial.
+ // subInitial component. Otherwise, parse out the subInitial.
String subInitial;
int firstPos = asteriskPositions.removeFirst();
if (firstPos == 0)
@@ -1100,12 +1108,12 @@
if (hasEscape)
{
CharBuffer buffer = CharBuffer.allocate(firstPos);
- for (int i=0; i < firstPos; i++)
+ for (int i = 0; i < firstPos; i++)
{
if (filterString.charAt(i) == 0x5C)
{
- char escapeValue = hexToEscapedChar(filterString, i +1);
- i +=2; //Move to the next sequence.
+ char escapeValue = hexToEscapedChar(filterString, i + 1);
+ i += 2; // Move to the next sequence.
buffer.put(escapeValue);
}
else
@@ -1121,11 +1129,10 @@
}
else
{
- subInitial = filterString.substring(0,firstPos);
+ subInitial = filterString.substring(0, firstPos);
}
}
-
// Next, process through the rest of the asterisks to get the
// subAny values.
List<String> subAny = new ArrayList<String>();
@@ -1136,12 +1143,12 @@
if (hasEscape)
{
CharBuffer buffer = CharBuffer.allocate(length);
- for (int i=firstPos+1; i < asteriskPos; i++)
+ for (int i = firstPos + 1; i < asteriskPos; i++)
{
if (filterString.charAt(i) == 0x5C)
{
char escapeValue = hexToEscapedChar(filterString, i + 1);
- i +=2; //Move to the next sequence.
+ i += 2; // Move to the next sequence.
buffer.put(escapeValue);
}
else
@@ -1157,18 +1164,17 @@
}
else
{
- subAny.add(filterString.substring(firstPos+1, firstPos+length+1));
+ subAny.add(filterString.substring(firstPos + 1, firstPos
+ + length + 1));
}
-
firstPos = asteriskPos;
}
-
// Finally, see if there is anything after the last asterisk,
// which would be the subFinal value.
String subFinal;
- if (firstPos == (endPos-1))
+ if (firstPos == (endPos - 1))
{
subFinal = null;
}
@@ -1179,12 +1185,12 @@
if (hasEscape)
{
CharBuffer buffer = CharBuffer.allocate(length);
- for (int i=firstPos+1; i < endPos; i++)
+ for (int i = firstPos + 1; i < endPos; i++)
{
if (filterString.charAt(i) == 0x5C)
{
char escapeValue = hexToEscapedChar(filterString, i + 1);
- i +=2; //Move to the next sequence.
+ i += 2; // Move to the next sequence.
buffer.put(escapeValue);
}
else
@@ -1200,9 +1206,12 @@
}
else
{
- subFinal = filterString.substring(firstPos+1, length + firstPos + 1);
+ subFinal =
+ filterString.substring(firstPos + 1, length + firstPos
+ + 1);
}
}
+
return new Assertion(subInitial, subAny, subFinal);
}
@@ -1212,17 +1221,20 @@
* {@inheritDoc}
*/
@Override
- public ByteString normalizeAssertionValue(ByteString value)
- throws DirectoryException {
+ public ByteString normalizeAssertionValue(ByteSequence value)
+ throws DirectoryException
+ {
Assertion assertion = parseAssertion(value);
String subInitial = assertion.getInitial();
+
// Normalize the Values in the following format:
- // initialLength, initial, numberofany, anyLength1, any1, anyLength2,
- // any2, ..., anyLengthn, anyn, finalLength, final
+ // initialLength, initial, numberofany, anyLength1, any1,
+ // anyLength2, any2, ..., anyLengthn, anyn, finalLength,
+ // final
CollationKey key = null;
List<Integer> normalizedList = new ArrayList<Integer>();
- if(subInitial == null)
+ if (subInitial == null)
{
normalizedList.add(0);
}
@@ -1230,33 +1242,37 @@
{
key = collator.getCollationKey(subInitial);
byte[] initialBytes = key.toByteArray();
- // Last 4 bytes are 0s with PRIMARY strenght.
- int length = initialBytes.length - 4 ;
+
+ // Last 4 bytes are 0s with PRIMARY strength.
+ int length = initialBytes.length - 4;
normalizedList.add(length);
- for(int i=0;i<length;i++)
+ for (int i = 0; i < length; i++)
{
- normalizedList.add((int)initialBytes[i]);
+ normalizedList.add((int) initialBytes[i]);
}
}
+
List<String> subAny = assertion.getAny();
- if (subAny.size() == 0) {
+ if (subAny.size() == 0)
+ {
normalizedList.add(0);
}
else
{
normalizedList.add(subAny.size());
- for(String any:subAny)
+ for (String any : subAny)
{
key = collator.getCollationKey(any);
byte[] anyBytes = key.toByteArray();
int length = anyBytes.length - 4;
normalizedList.add(length);
- for(int i=0;i<length;i++)
+ for (int i = 0; i < length; i++)
{
- normalizedList.add((int)anyBytes[i]);
+ normalizedList.add((int) anyBytes[i]);
}
}
}
+
String subFinal = assertion.getFinal();
if (subFinal == null)
{
@@ -1268,18 +1284,19 @@
byte[] subFinalBytes = key.toByteArray();
int length = subFinalBytes.length - 4;
normalizedList.add(length);
- for(int i=0;i<length;i++)
+ for (int i = 0; i < length; i++)
{
- normalizedList.add((int)subFinalBytes[i]);
+ normalizedList.add((int) subFinalBytes[i]);
}
}
byte[] normalizedBytes = new byte[normalizedList.size()];
- for(int i=0;i<normalizedList.size();i++)
+ for (int i = 0; i < normalizedList.size(); i++)
{
normalizedBytes[i] = normalizedList.get(i).byteValue();
}
- return new ASN1OctetString(normalizedBytes);
+
+ return ByteString.wrap(normalizedBytes);
}
@@ -1288,69 +1305,68 @@
* {@inheritDoc}
*/
@Override
- public ConditionResult valuesMatch(ByteString attributeValue,
- ByteString assertionValue)
+ public ConditionResult valuesMatch(ByteSequence attributeValue,
+ ByteSequence assertionValue)
{
- byte[] valueBytes = attributeValue.value();
- int valueLength = valueBytes.length - 4;
-
- byte[] assertionBytes = assertionValue.value();
-
+ int valueLength = attributeValue.length() - 4;
int valuePos = 0; // position in the value bytes array.
int assertPos = 0; // position in the assertion bytes array.
- int subInitialLength = 0xFF & assertionBytes[0];
- //First byte is the length of subInitial.
- if(subInitialLength!= 0)
+ // First byte is the length of subInitial.
+ int subInitialLength = 0xFF & assertionValue.byteAt(0);
+
+ if (subInitialLength != 0)
{
- if(subInitialLength > valueLength)
+ if (subInitialLength > valueLength)
{
return ConditionResult.FALSE;
}
- for(;valuePos < subInitialLength; valuePos++)
+ for (; valuePos < subInitialLength; valuePos++)
{
- if(valueBytes[valuePos]!=assertionBytes[valuePos+1])
+ if (attributeValue.byteAt(valuePos) != assertionValue
+ .byteAt(valuePos + 1))
{
return ConditionResult.FALSE;
}
}
}
+
assertPos = subInitialLength + 1;
- int anySize = 0xFF & assertionBytes[assertPos++];
- if(anySize!=0)
+ int anySize = 0xFF & assertionValue.byteAt(assertPos++);
+ if (anySize != 0)
{
- while(anySize-- > 0)
+ while (anySize-- > 0)
{
- int anyLength = 0xFF & assertionBytes[assertPos++];
+ int anyLength = 0xFF & assertionValue.byteAt(assertPos++);
int end = valueLength - anyLength;
boolean match = false;
- for(; valuePos <= end; valuePos++)
- {
- if(assertionBytes[assertPos] == valueBytes[valuePos])
+ for (; valuePos <= end; valuePos++)
+ {
+ if (assertionValue.byteAt(assertPos) == attributeValue
+ .byteAt(valuePos))
{
boolean subMatch = true;
- for(int i=1;i<anyLength;i++)
+ for (int i = 1; i < anyLength; i++)
{
-
- if(assertionBytes[assertPos+i] != valueBytes[valuePos+i])
+ if (assertionValue.byteAt(assertPos + i) != attributeValue
+ .byteAt(valuePos + i))
{
subMatch = false;
break;
}
}
- if(subMatch)
+ if (subMatch)
{
match = subMatch;
break;
}
-
}
}
- if(match)
+ if (match)
{
valuePos += anyLength;
}
@@ -1358,30 +1374,32 @@
{
return ConditionResult.FALSE;
}
+
assertPos = assertPos + anyLength;
}
}
- int finalLength = 0xFF & assertionBytes[assertPos++];
- if(finalLength!=0)
+ int finalLength = 0xFF & assertionValue.byteAt(assertPos++);
+ if (finalLength != 0)
{
- if((valueLength - finalLength) < valuePos)
+ if ((valueLength - finalLength) < valuePos)
{
return ConditionResult.FALSE;
}
valuePos = valueLength - finalLength;
- if(finalLength != assertionBytes.length - assertPos )
+ if (finalLength != assertionValue.length() - assertPos)
{
- //Some issue with the encoding.
+ // Some issue with the encoding.
return ConditionResult.FALSE;
}
valuePos = valueLength - finalLength;
- for (int i=0; i < finalLength; i++,valuePos++)
+ for (int i = 0; i < finalLength; i++, valuePos++)
{
- if (assertionBytes[assertPos+i] != valueBytes[valuePos])
+ if (assertionValue.byteAt(assertPos + i) != attributeValue
+ .byteAt(valuePos))
{
return ConditionResult.FALSE;
}
@@ -1397,37 +1415,41 @@
* {@inheritDoc}
*/
@Override
- public final Collection<ExtensibleIndexer> getIndexers(IndexConfig config)
+ public final Collection<ExtensibleIndexer> getIndexers(
+ IndexConfig config)
{
Collection<ExtensibleIndexer> indexers =
- new ArrayList<ExtensibleIndexer>();
- int substrLength = 6; //Default substring length;
- if(subIndexer == null)
+ new ArrayList<ExtensibleIndexer>();
+ int substrLength = 6; // Default substring length;
+ if (subIndexer == null)
{
- if(config != null)
+ if (config != null)
{
substrLength = config.getSubstringLength();
}
- subIndexer = new CollationSubstringExtensibleIndexer(this,
- substrLength);
+ subIndexer =
+ new CollationSubstringExtensibleIndexer(this, substrLength);
}
else
{
- if(config !=null)
+ if (config != null)
{
- if(config.getSubstringLength() !=subIndexer.gerSubstringLength())
+ if (config.getSubstringLength() != subIndexer
+ .gerSubstringLength())
{
subIndexer.setSubstringLength(substrLength);
}
}
}
- if(indexer == null)
+ if (indexer == null)
{
indexer = new CollationSharedExtensibleIndexer(this);
}
+
indexers.add(subIndexer);
indexers.add(indexer);
+
return indexers;
}
@@ -1436,13 +1458,14 @@
/**
* Decomposes an attribute value into a set of substring index keys.
*
- * @param attValue Tthe normalized attribute value
- * @param set A set into which the keys will be inserted.
+ * @param attValue
+ * The normalized attribute value
+ * @param set
+ * A set into which the keys will be inserted.
*/
- private void subtringKeys(ByteString attValue,
- Set<byte[]> keys)
+ private void subtringKeys(ByteString attValue, Set<byte[]> keys)
{
- String value = attValue.stringValue();
+ String value = attValue.toString();
int keyLength = subIndexer.gerSubstringLength();
for (int i = 0, remain = value.length(); remain > 0; i++, remain--)
{
@@ -1457,17 +1480,18 @@
/**
* Decomposes an attribute value into a set of substring index keys.
*
- * @param value The normalized attribute value
- * @param modifiedKeys The map into which the modified
- * keys will be inserted.
- * @param insert <code>true</code> if generated keys should
- * be inserted or <code>false</code> otherwise.
+ * @param value
+ * The normalized attribute value
+ * @param modifiedKeys
+ * The map into which the modified keys will be inserted.
+ * @param insert
+ * <code>true</code> if generated keys should be inserted
+ * or <code>false</code> otherwise.
*/
private void substringKeys(ByteString attValue,
- Map<byte[], Boolean> modifiedKeys,
- Boolean insert)
+ Map<byte[], Boolean> modifiedKeys, Boolean insert)
{
- String value = attValue.stringValue();
+ String value = attValue.toString();
int keyLength = subIndexer.gerSubstringLength();
for (int i = 0, remain = value.length(); remain > 0; i++, remain--)
{
@@ -1488,12 +1512,15 @@
/**
- * Makes a byte array representing a substring index key for
- * one substring of a value.
+ * Makes a byte array representing a substring index key for one
+ * substring of a value.
*
- * @param value The String containing the value.
- * @param pos The starting position of the substring.
- * @param len The length of the substring.
+ * @param value
+ * The String containing the value.
+ * @param pos
+ * The starting position of the substring.
+ * @param len
+ * The length of the substring.
* @return A byte array containing a substring key.
*/
private byte[] makeSubstringKey(String value, int pos, int len)
@@ -1509,13 +1536,15 @@
/**
- * Uses an equality index to retrieve the entry IDs that might contain a
- * given initial substring.
- * @param bytes A normalized initial substring of an attribute value.
+ * Uses an equality index to retrieve the entry IDs that might
+ * contain a given initial substring.
+ *
+ * @param bytes
+ * A normalized initial substring of an attribute value.
* @return The candidate entry IDs.
*/
private <T> T matchInitialSubstring(String value,
- IndexQueryFactory<T> factory)
+ IndexQueryFactory<T> factory)
{
byte[] lower = makeSubstringKey(value, 0, value.length());
byte[] upper = new byte[lower.length];
@@ -1535,26 +1564,27 @@
break;
}
}
- //Use the shared equality indexer.
- return factory.createRangeMatchQuery(
- indexer.getExtensibleIndexID(),
- lower,
- upper,
- true,
- false);
+ // Use the shared equality indexer.
+ return factory.createRangeMatchQuery(indexer
+ .getExtensibleIndexID(), ByteString.wrap(lower), ByteString
+ .wrap(upper), true, false);
}
/**
* Retrieves the Index Records that might contain a given substring.
- * @param value A String representing the attribute value.
- * @param factory An IndexQueryFactory which issues calls to the backend.
- * @param substrLength The length of the substring.
+ *
+ * @param value
+ * A String representing the attribute value.
+ * @param factory
+ * An IndexQueryFactory which issues calls to the backend.
+ * @param substrLength
+ * The length of the substring.
* @return The candidate entry IDs.
*/
private <T> T matchSubstring(String value,
- IndexQueryFactory<T> factory)
+ IndexQueryFactory<T> factory)
{
T intersectionQuery = null;
int substrLength = subIndexer.gerSubstringLength();
@@ -1567,9 +1597,11 @@
{
if (upper[i] == 0xFF)
{
- // We have to carry the overflow to the more significant byte.
+ // We have to carry the overflow to the more significant
+ // byte.
upper[i] = 0;
- } else
+ }
+ else
{
// No overflow, we can stop.
upper[i] = (byte) (upper[i] + 1);
@@ -1578,20 +1610,18 @@
}
// Read the range: lower <= keys < upper.
intersectionQuery =
- factory.createRangeMatchQuery(
- subIndexer.getExtensibleIndexID(),
- lower,
- upper,
- true,
- false);
+ factory.createRangeMatchQuery(subIndexer
+ .getExtensibleIndexID(), ByteString.wrap(lower),
+ ByteString.wrap(upper), true, false);
}
else
{
List<T> queryList = new ArrayList<T>();
Set<byte[]> set =
- new TreeSet<byte[]>(new AttributeIndex.KeyComparator());
+ new TreeSet<byte[]>(new AttributeIndex.KeyComparator());
for (int first = 0, last = substrLength;
- last <= value.length(); first++, last++)
+ last <= value.length();
+ first++, last++)
{
byte[] keyBytes;
keyBytes = makeSubstringKey(value, first, substrLength);
@@ -1600,13 +1630,12 @@
for (byte[] keyBytes : set)
{
- T single = factory.createExactMatchQuery(
- subIndexer.getExtensibleIndexID(),
- keyBytes);
+ T single =
+ factory.createExactMatchQuery(subIndexer
+ .getExtensibleIndexID(), ByteString.wrap(keyBytes));
queryList.add(single);
}
- intersectionQuery =
- factory.createIntersectionQuery(queryList);
+ intersectionQuery = factory.createIntersectionQuery(queryList);
}
return intersectionQuery;
}
@@ -1617,8 +1646,8 @@
* {@inheritDoc}
*/
@Override
- public <T> T createIndexQuery(ByteString assertionValue,
- IndexQueryFactory<T> factory) throws DirectoryException
+ public <T> T createIndexQuery(ByteSequence assertionValue,
+ IndexQueryFactory<T> factory) throws DirectoryException
{
Assertion assertion = parseAssertion(assertionValue);
String subInitial = assertion.getInitial();
@@ -1628,14 +1657,14 @@
if (subInitial == null && subAny.size() == 0 && subFinal == null)
{
- //Can happen with a filter like "cn:en.6:=*".
- //Just return an empty record.
+ // Can happen with a filter like "cn:en.6:=*".
+ // Just return an empty record.
return factory.createMatchAllQuery();
}
List<String> elements = new ArrayList<String>();
if (subInitial != null)
{
- //Always use the shared indexer for initial match.
+ // Always use the shared indexer for initial match.
T query = matchInitialSubstring(subInitial, factory);
queries.add(query);
}
@@ -1650,7 +1679,6 @@
elements.add(subFinal);
}
-
for (String element : elements)
{
queries.add(matchSubstring(element, factory));
@@ -1659,126 +1687,75 @@
}
}
-
-
/**
- *An abstract Collation rule for Ordering matching rule.
+ * An abstract Collation rule for Ordering matching rule.
*/
- private abstract class CollationOrderingMatchingRule
- extends CollationMatchingRule
+ private abstract class CollationOrderingMatchingRule extends
+ CollationMatchingRule
{
/**
* Constructs a new CollationOrderingMatchingRule.
*
- * @param nOID OID of the collation matching rule
- * @param names names of this matching rule
- * @param locale Locale of the collation matching rule
+ * @param nOID
+ * OID of the collation matching rule
+ * @param names
+ * names of this matching rule
+ * @param locale
+ * Locale of the collation matching rule
*/
private CollationOrderingMatchingRule(String nOID,
- Collection<String> names, Locale locale)
- {
- super(nOID,names,locale);
- }
-
-
-
- /**
- * {@inheritDoc}
- */
- @Override
- public ByteString normalizeValue(ByteString value)
- throws DirectoryException
- {
- CollationKey key = collator.getCollationKey(value.stringValue());
- return new ASN1OctetString(key.toByteArray());
- }
-
-
-
- /**
- * Compares the first value to the second and returns a value that
- * indicates their relative order.
- *
- * @param b1 The normalized form of the first value to
- * compare.
- * @param b2 The normalized form of the second value to
- * compare.
- *
- * @return A negative integer if {@code value1} should come before
- * {@code value2} in ascending order, a positive integer if
- * {@code value1} should come after {@code value2} in
- * ascending order, or zero if there is no difference
- * between the values with regard to ordering.
- */
- protected int compare(byte[] b1, byte[] b2) {
- //Compare values using byte arrays.
- int minLength = Math.min(b1.length, b2.length);
-
- for (int i=0; i < minLength; i++)
- {
- int firstByte = 0xFF & ((int)b1[i]);
- int secondByte = 0xFF & ((int)b2[i]);
-
- if (firstByte == secondByte)
- {
- continue;
- }
- else if (firstByte < secondByte)
- {
- return -1;
- }
- else if (firstByte > secondByte)
- {
- return 1;
- }
- }
-
- if (b1.length == b2.length)
- {
- return 0;
- }
- else if (b1.length < b2.length)
- {
- return -1;
- }
- else
- {
- return 1;
- }
- }
- }
-
- /**
- * Collation matching rule for Less-than matching rule.
- */
- private final class CollationLessThanMatchingRule
- extends CollationOrderingMatchingRule
- {
-
- /**
- * Constructs a new CollationLessThanMatchingRule.
- *
- * @param nOID OID of the collation matching rule
- * @param names names of this matching rule
- * @param locale Locale of the collation matching rule
- */
- private CollationLessThanMatchingRule(String nOID,
- Collection<String> names, Locale locale)
+ Collection<String> names, Locale locale)
{
super(nOID, names, locale);
}
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public ByteString normalizeValue(ByteSequence value)
+ throws DirectoryException
+ {
+ CollationKey key = collator.getCollationKey(value.toString());
+ return ByteString.wrap(key.toByteArray());
+ }
+ }
+
+ /**
+ * Collation matching rule for Less-than matching rule.
+ */
+ private final class CollationLessThanMatchingRule extends
+ CollationOrderingMatchingRule
+ {
+
+ /**
+ * Constructs a new CollationLessThanMatchingRule.
+ *
+ * @param nOID
+ * OID of the collation matching rule
+ * @param names
+ * names of this matching rule
+ * @param locale
+ * Locale of the collation matching rule
+ */
+ private CollationLessThanMatchingRule(String nOID,
+ Collection<String> names, Locale locale)
+ {
+ super(nOID, names, locale);
+ }
+
+
/**
* {@inheritDoc}
*/
@Override
- public ConditionResult valuesMatch(ByteString attributeValue,
- ByteString assertionValue)
+ public ConditionResult valuesMatch(ByteSequence attributeValue,
+ ByteSequence assertionValue)
{
- int ret = compare(attributeValue.value(), assertionValue.value());
+ int ret = attributeValue.compareTo(assertionValue);
if (ret < 0)
{
@@ -1792,58 +1769,52 @@
-
/**
* {@inheritDoc}
*/
@Override
- public <T> T createIndexQuery(ByteString assertionValue,
- IndexQueryFactory<T> factory) throws DirectoryException
+ public <T> T createIndexQuery(ByteSequence assertionValue,
+ IndexQueryFactory<T> factory) throws DirectoryException
{
- byte[] lower = new byte[0];
- byte[] upper = normalizeValue(assertionValue).value();
- return factory.createRangeMatchQuery(indexer.getExtensibleIndexID(),
- lower,
- upper,
- false,
- false);
+ return factory.createRangeMatchQuery(indexer
+ .getExtensibleIndexID(), ByteString.empty(),
+ normalizeValue(assertionValue), false, false);
}
}
-
-
/**
* Collation rule for less-than-equal-to matching rule.
*/
- private final class CollationLessThanOrEqualToMatchingRule
- extends CollationOrderingMatchingRule
+ private final class CollationLessThanOrEqualToMatchingRule extends
+ CollationOrderingMatchingRule
{
/**
* Constructs a new CollationLessThanOrEqualToMatchingRule.
*
- * @param nOID OID of the collation matching rule
- * @param names names of this matching rule
- * @param locale Locale of the collation matching rule
+ * @param nOID
+ * OID of the collation matching rule
+ * @param names
+ * names of this matching rule
+ * @param locale
+ * Locale of the collation matching rule
*/
private CollationLessThanOrEqualToMatchingRule(String nOID,
- Collection<String> names,
- Locale locale)
+ Collection<String> names, Locale locale)
{
super(nOID, names, locale);
}
-
/**
* {@inheritDoc}
*/
@Override
- public ConditionResult valuesMatch(ByteString attributeValue,
- ByteString assertionValue)
+ public ConditionResult valuesMatch(ByteSequence attributeValue,
+ ByteSequence assertionValue)
{
- int ret = compare(attributeValue.value(), assertionValue.value());
+ int ret = attributeValue.compareTo(assertionValue);
if (ret <= 0)
{
@@ -1857,44 +1828,39 @@
-
/**
* {@inheritDoc}
*/
@Override
- public <T> T createIndexQuery(ByteString assertionValue,
- IndexQueryFactory<T> factory)
- throws DirectoryException
+ public <T> T createIndexQuery(ByteSequence assertionValue,
+ IndexQueryFactory<T> factory) throws DirectoryException
{
- byte[] lower = new byte[0];
- byte[] upper = normalizeValue(assertionValue).value();
// Read the range: lower < keys <= upper.
- return factory.createRangeMatchQuery(indexer.getExtensibleIndexID(),
- lower,
- upper,
- false,
- true);
+ return factory.createRangeMatchQuery(indexer
+ .getExtensibleIndexID(), ByteString.empty(),
+ normalizeValue(assertionValue), false, true);
}
}
-
-
/**
* Collation rule for greater-than matching rule.
*/
- private final class CollationGreaterThanMatchingRule
- extends CollationOrderingMatchingRule
+ private final class CollationGreaterThanMatchingRule extends
+ CollationOrderingMatchingRule
{
/**
* Constructs a new CollationGreaterThanMatchingRule.
*
- * @param nOID OID of the collation matching rule
- * @param names names of this matching rule
- * @param locale Locale of the collation matching rule
+ * @param nOID
+ * OID of the collation matching rule
+ * @param names
+ * names of this matching rule
+ * @param locale
+ * Locale of the collation matching rule
*/
private CollationGreaterThanMatchingRule(String nOID,
- Collection<String> names, Locale locale)
+ Collection<String> names, Locale locale)
{
super(nOID, names, locale);
}
@@ -1905,71 +1871,69 @@
* {@inheritDoc}
*/
@Override
- public ConditionResult valuesMatch(ByteString attributeValue,
- ByteString assertionValue)
+ public ConditionResult valuesMatch(ByteSequence attributeValue,
+ ByteSequence assertionValue)
{
- int ret = compare(attributeValue.value(), assertionValue.value());
+ int ret = attributeValue.compareTo(assertionValue);
- if (ret > 0) {
+ if (ret > 0)
+ {
return ConditionResult.TRUE;
- } else {
+ }
+ else
+ {
return ConditionResult.FALSE;
}
}
-
/**
* {@inheritDoc}
*/
@Override
- public <T> T createIndexQuery(ByteString assertionValue,
- IndexQueryFactory<T> factory)
- throws DirectoryException
+ public <T> T createIndexQuery(ByteSequence assertionValue,
+ IndexQueryFactory<T> factory) throws DirectoryException
{
- byte[] lower = normalizeValue(assertionValue).value();
- byte[] upper = new byte[0];
- return factory.createRangeMatchQuery(indexer.getExtensibleIndexID(),
- lower,
- upper,
- false,
- false);
+ return factory.createRangeMatchQuery(indexer
+ .getExtensibleIndexID(), normalizeValue(assertionValue),
+ ByteString.empty(), false, false);
}
}
/**
* Collation rule for greater-than-equal-to matching rule.
*/
- private final class CollationGreaterThanOrEqualToMatchingRule
- extends CollationOrderingMatchingRule
+ private final class CollationGreaterThanOrEqualToMatchingRule extends
+ CollationOrderingMatchingRule
{
/**
* Constructs a new CollationGreaterThanOrEqualToMatchingRule.
*
- * @param nOID OID of the collation matching rule
- * @param names names of this matching rule
- * @param locale Locale of the collation matching rule
+ * @param nOID
+ * OID of the collation matching rule
+ * @param names
+ * names of this matching rule
+ * @param locale
+ * Locale of the collation matching rule
*/
private CollationGreaterThanOrEqualToMatchingRule(String nOID,
- Collection<String> names,
- Locale locale)
+ Collection<String> names, Locale locale)
{
super(nOID, names, locale);
}
-
/**
* {@inheritDoc}
*/
@Override
- public ConditionResult valuesMatch(ByteString attributeValue,
- ByteString assertionValue)
+ public ConditionResult valuesMatch(ByteSequence attributeValue,
+ ByteSequence assertionValue)
{
- int ret = compare(attributeValue.value(),assertionValue.value());
+ int ret = attributeValue.compareTo(assertionValue);
if (ret >= 0)
{
@@ -1987,29 +1951,23 @@
* {@inheritDoc}
*/
@Override
- public <T> T createIndexQuery(ByteString assertionValue,
- IndexQueryFactory<T> factory)
- throws DirectoryException
+ public <T> T createIndexQuery(ByteSequence assertionValue,
+ IndexQueryFactory<T> factory) throws DirectoryException
{
- byte[] lower = normalizeValue(assertionValue).value();
- byte[] upper = new byte[0];
// Read the range: lower <= keys < upper.
- return factory.createRangeMatchQuery(indexer.getExtensibleIndexID(),
- lower,
- upper,
- true,
- false);
+ return factory.createRangeMatchQuery(indexer
+ .getExtensibleIndexID(), normalizeValue(assertionValue),
+ ByteString.empty(), true, false);
}
}
-
/**
- * Extensible Indexer class for Collation Matching rules which share the
- * same index. This Indexer is shared by Equality and Ordering Collation
- * Matching Rules.
+ * Extensible Indexer class for Collation Matching rules which share
+ * the same index. This Indexer is shared by Equality and Ordering
+ * Collation Matching Rules.
*/
- private final class CollationSharedExtensibleIndexer
- extends ExtensibleIndexer
+ private final class CollationSharedExtensibleIndexer extends
+ ExtensibleIndexer
{
/**
@@ -2022,10 +1980,11 @@
/**
* Creates a new instance of CollationSharedExtensibleIndexer.
*
- * @param matchingRule The Collation Matching Rule.
+ * @param matchingRule
+ * The Collation Matching Rule.
*/
private CollationSharedExtensibleIndexer(
- CollationMatchingRule matchingRule)
+ CollationMatchingRule matchingRule)
{
this.matchingRule = matchingRule;
}
@@ -2047,14 +2006,13 @@
* {@inheritDoc}
*/
@Override
- public final void getKeys(AttributeValue value,
- Set<byte[]> keys)
+ public final void getKeys(AttributeValue value, Set<byte[]> keys)
{
ByteString key;
try
{
key = matchingRule.normalizeValue(value.getValue());
- keys.add(key.value());
+ keys.add(key.toByteArray());
}
catch (DirectoryException de)
{
@@ -2068,8 +2026,7 @@
*/
@Override
public final void getKeys(AttributeValue value,
- Map<byte[], Boolean> modifiedKeys,
- Boolean insert)
+ Map<byte[], Boolean> modifiedKeys, Boolean insert)
{
Set<byte[]> keys = new HashSet<byte[]>();
getKeys(value, keys);
@@ -2101,17 +2058,15 @@
/**
* Extensible Indexer class for Collation Substring Matching rules.
- * This Indexer is used by Substring Collation Matching Rules.
+ * This Indexer is used by Substring Collation Matching Rules.
*/
- private final class CollationSubstringExtensibleIndexer
- extends ExtensibleIndexer
+ private final class CollationSubstringExtensibleIndexer extends
+ ExtensibleIndexer
{
- //The CollationSubstringMatching Rule.
+ // The CollationSubstringMatching Rule.
private final CollationSubstringMatchingRule matchingRule;
-
-
- //The substring length.
+ // The substring length.
private int substringLen;
@@ -2119,12 +2074,13 @@
/**
* Creates a new instance of CollationSubstringExtensibleIndexer.
*
- * @param matchingRule The CollationSubstringMatching Rule.
- * @param substringLen The substring length.
+ * @param matchingRule
+ * The CollationSubstringMatching Rule.
+ * @param substringLen
+ * The substring length.
*/
private CollationSubstringExtensibleIndexer(
- CollationSubstringMatchingRule matchingRule,
- int substringLen)
+ CollationSubstringMatchingRule matchingRule, int substringLen)
{
this.matchingRule = matchingRule;
this.substringLen = substringLen;
@@ -2136,11 +2092,9 @@
* {@inheritDoc}
*/
@Override
- public void getKeys(AttributeValue value,
- Set<byte[]> keys)
+ public void getKeys(AttributeValue value, Set<byte[]> keys)
{
- matchingRule.subtringKeys(value.getValue(),
- keys);
+ matchingRule.subtringKeys(value.getValue(), keys);
}
@@ -2150,12 +2104,10 @@
*/
@Override
public void getKeys(AttributeValue attValue,
- Map<byte[], Boolean> modifiedKeys,
- Boolean insert)
+ Map<byte[], Boolean> modifiedKeys, Boolean insert)
{
- matchingRule.substringKeys(attValue.getValue(),
- modifiedKeys,
- insert);
+ matchingRule.substringKeys(attValue.getValue(), modifiedKeys,
+ insert);
}
@@ -2184,6 +2136,7 @@
/**
* Returns the substring length.
+ *
* @return The length of the substring.
*/
private int gerSubstringLength()
@@ -2195,7 +2148,9 @@
/**
* Sets the substring length.
- * @param substringLen The substring length.
+ *
+ * @param substringLen
+ * The substring length.
*/
private void setSubstringLength(int substringLen)
{
@@ -2203,33 +2158,33 @@
}
}
-
-
/**
* A utility class for extracting the OID and Language Tag from the
* configuration entry.
*/
private final class CollationMapper
{
- //OID of the collation rule.
- private String oid;
+ // OID of the collation rule.
+ private String oid;
- //Language Tag.
- private String lTag;
+ // Language Tag.
+ private String lTag;
+
/**
* Creates a new instance of CollationMapper.
*
- * @param collation The collation text in the LOCALE:OID format.
+ * @param collation
+ * The collation text in the LOCALE:OID format.
*/
private CollationMapper(String collation)
{
int index = collation.indexOf(":");
- if(index>0)
+ if (index > 0)
{
- oid = collation.substring(index+1,collation.length());
- lTag = collation.substring(0,index);
+ oid = collation.substring(index + 1, collation.length());
+ lTag = collation.substring(0, index);
}
}
@@ -2257,4 +2212,4 @@
return lTag;
}
}
-}
\ No newline at end of file
+}
--
Gitblit v1.10.0