Author: chetanm
Date: Mon Mar 2 11:54:43 2015
New Revision: 1663275
URL: http://svn.apache.org/r1663275
Log:
OAK-2559 - Lucene index rules should be case insensitive
Changed the 'propConfigs' map to store key in lower case and perform lookup
with lower cased keys
Modified:
jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexDefinition.java
jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexDefinitionTest.java
Modified:
jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexDefinition.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexDefinition.java?rev=1663275&r1=1663274&r2=1663275&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexDefinition.java
(original)
+++
jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexDefinition.java
Mon Mar 2 11:54:43 2015
@@ -23,6 +23,7 @@ import java.io.InputStream;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
+import java.util.Locale;
import java.util.Map;
import java.util.Set;
import java.util.regex.Pattern;
@@ -559,6 +560,9 @@ class IndexDefinition implements Aggrega
public class IndexingRule {
private final String baseNodeType;
private final String nodeTypeName;
+ /**
+ * Case insensitive map of lower cased propertyName to propertyConfigs
+ */
private final Map<String, PropertyDefinition> propConfigs;
private final List<NamePattern> namePatterns;
private final List<PropertyDefinition> nullCheckEnabledProperties;
@@ -697,7 +701,7 @@ class IndexDefinition implements Aggrega
*/
@CheckForNull
public PropertyDefinition getConfig(String propertyName) {
- PropertyDefinition config = propConfigs.get(propertyName);
+ PropertyDefinition config =
propConfigs.get(propertyName.toLowerCase(Locale.ENGLISH));
if (config != null) {
return config;
} else if (namePatterns.size() > 0) {
@@ -761,7 +765,7 @@ class IndexDefinition implements Aggrega
if(pd.isRegexp){
patterns.add(new NamePattern(pd.name, pd));
} else {
- propDefns.put(pd.name, pd);
+ propDefns.put(pd.name.toLowerCase(Locale.ENGLISH), pd);
}
if (pd.relative){
Modified:
jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexDefinitionTest.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexDefinitionTest.java?rev=1663275&r1=1663274&r2=1663275&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexDefinitionTest.java
(original)
+++
jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexDefinitionTest.java
Mon Mar 2 11:54:43 2015
@@ -327,6 +327,29 @@ public class IndexDefinitionTest {
}
@Test
+ public void propertyConfigCaseInsensitive() throws Exception{
+ NodeBuilder rules = builder.child(INDEX_RULES);
+ rules.child("nt:folder");
+ TestUtil.child(rules, "nt:folder/properties/foo")
+ .setProperty(LuceneIndexConstants.PROP_NAME, "Foo")
+ .setProperty(LuceneIndexConstants.PROP_PROPERTY_INDEX, true);
+ TestUtil.child(rules, "nt:folder/properties/bar")
+ .setProperty(LuceneIndexConstants.PROP_NAME, "BAR")
+ .setProperty(LuceneIndexConstants.PROP_PROPERTY_INDEX, true);
+
+ IndexDefinition defn = new IndexDefinition(root,
builder.getNodeState());
+
+ IndexingRule rule1 =
defn.getApplicableIndexingRule(newTree(newNode("nt:folder")));
+ assertNotNull(rule1);
+
+ assertTrue(rule1.isIndexed("Foo"));
+ assertTrue(rule1.isIndexed("foo"));
+ assertTrue(rule1.isIndexed("fOO"));
+ assertTrue(rule1.isIndexed("bar"));
+ assertFalse(rule1.isIndexed("baz"));
+ }
+
+ @Test
public void skipTokenization() throws Exception{
NodeBuilder rules = builder.child(INDEX_RULES);
rules.child("nt:folder");
@@ -398,7 +421,7 @@ public class IndexDefinitionTest {
@Test
public void formatUpdate() throws Exception{
NodeBuilder defnb =
newLuceneIndexDefinition(builder.child(INDEX_DEFINITIONS_NAME),
- "lucene", of(TYPENAME_STRING), of("foo"), "async");
+ "lucene", of(TYPENAME_STRING), of("foo", "Bar"), "async");
IndexDefinition defn = new IndexDefinition(root, defnb.getNodeState());
assertTrue(defn.isOfOldFormat());
@@ -409,6 +432,7 @@ public class IndexDefinitionTest {
IndexingRule rule =
defn2.getApplicableIndexingRule(newTree(newNode("nt:base")));
assertNotNull(rule);
assertFalse(rule.getConfig("foo").index);
+ assertFalse(rule.getConfig("Bar").index);
}
@Test