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


Reply via email to