Author: asanso
Date: Tue Jul  1 06:50:04 2014
New Revision: 1606994

URL: http://svn.apache.org/r1606994
Log:
SLING-3719 - MapEntries->updateTargetPaths  holds incorrect information in case 
of exception while creating a MapEntry

Modified:
    
sling/trunk/bundles/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/mapping/MapEntries.java
    
sling/trunk/bundles/resourceresolver/src/test/java/org/apache/sling/resourceresolver/impl/mapping/MapEntriesTest.java

Modified: 
sling/trunk/bundles/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/mapping/MapEntries.java
URL: 
http://svn.apache.org/viewvc/sling/trunk/bundles/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/mapping/MapEntries.java?rev=1606994&r1=1606993&r2=1606994&view=diff
==============================================================================
--- 
sling/trunk/bundles/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/mapping/MapEntries.java
 (original)
+++ 
sling/trunk/bundles/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/mapping/MapEntries.java
 Tue Jul  1 06:50:04 2014
@@ -650,9 +650,9 @@ public class MapEntries implements Event
     /**
      * Add an entry to the resolve map.
      */
-    private void addEntry(final Map<String, List<MapEntry>> entryMap, final 
String key, final MapEntry entry) {
+    private boolean addEntry(final Map<String, List<MapEntry>> entryMap, final 
String key, final MapEntry entry) {
         if (entry==null){
-            return;
+            return false;
         }
         List<MapEntry> entries = entryMap.get(key);
         if (entries == null) {
@@ -662,6 +662,7 @@ public class MapEntries implements Event
         entries.add(entry);
         // and finally sort list
         Collections.sort(entries);
+        return true;
     }
 
     /**
@@ -825,6 +826,7 @@ public class MapEntries implements Event
 
                 final String checkPath = result[1];
 
+                boolean addedEntry;
                 if (redirectName.indexOf('.') > -1) {
                     // 1. entry with exact match
                     this.addEntry(entryMap, checkPath, getMapEntry(url + "$", 
status, false, vanityOrder, redirect));
@@ -833,22 +835,24 @@ public class MapEntries implements Event
                     final String extension = redirectName.substring(idx + 1);
 
                     // 2. entry with extension
-                    this.addEntry(entryMap, checkPath, getMapEntry(url + "\\." 
+ extension, status, false, vanityOrder, redirect));
+                    addedEntry = this.addEntry(entryMap, checkPath, 
getMapEntry(url + "\\." + extension, status, false, vanityOrder, redirect));
                 } else {
                     // 1. entry with exact match
                     this.addEntry(entryMap, checkPath, getMapEntry(url + "$", 
status, false, vanityOrder, redirect + ".html"));
 
                     // 2. entry with match supporting selectors and extension
-                    this.addEntry(entryMap, checkPath, getMapEntry(url + 
"(\\..*)", status, false, vanityOrder, redirect + "$1"));
+                    addedEntry = this.addEntry(entryMap, checkPath, 
getMapEntry(url + "(\\..*)", status, false, vanityOrder, redirect + "$1"));
+                }
+                if (addedEntry) {
+                    // 3. keep the path to return
+                    this.updateTargetPaths(targetPaths, redirect, checkPath);
                 }
-                // 3. keep the path to return
-                this.updateTargetPaths(targetPaths, redirect, checkPath);
             }
         }
     }
     
     private void updateTargetPaths(final Map<String, List<String>> 
targetPaths, final String key, final String entry) {
-        if (entry==null){
+        if (entry == null) {
             return;
         }
         List<String> entries = targetPaths.get(key);
@@ -856,7 +860,7 @@ public class MapEntries implements Event
             entries = new ArrayList<String>();
             targetPaths.put(key, entries);
         }
-        entries.add(entry); 
+        entries.add(entry);
     }
     
     /**

Modified: 
sling/trunk/bundles/resourceresolver/src/test/java/org/apache/sling/resourceresolver/impl/mapping/MapEntriesTest.java
URL: 
http://svn.apache.org/viewvc/sling/trunk/bundles/resourceresolver/src/test/java/org/apache/sling/resourceresolver/impl/mapping/MapEntriesTest.java?rev=1606994&r1=1606993&r2=1606994&view=diff
==============================================================================
--- 
sling/trunk/bundles/resourceresolver/src/test/java/org/apache/sling/resourceresolver/impl/mapping/MapEntriesTest.java
 (original)
+++ 
sling/trunk/bundles/resourceresolver/src/test/java/org/apache/sling/resourceresolver/impl/mapping/MapEntriesTest.java
 Tue Jul  1 06:50:04 2014
@@ -25,6 +25,7 @@ import static org.mockito.Matchers.eq;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
 
+import java.lang.reflect.Field;
 import java.lang.reflect.Method;
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -161,7 +162,7 @@ public class MapEntriesTest {
     }
 
     @Test
-    public void test_vanity_path_registration() {
+    public void test_vanity_path_registration() throws Exception {
         // specifically making this a weird value because we want to verify 
that
         // the configuration value is being used
         int DEFAULT_VANITY_STATUS = 333333;
@@ -236,6 +237,12 @@ public class MapEntriesTest {
                 }
             }
         }
+        
+        Field field = MapEntries.class.getDeclaredField("vanityTargets");
+        field.setAccessible(true);
+        Map<String, List<String>> vanityTargets = (Map<String, List<String>>) 
field.get(mapEntries);
+        assertEquals(4, vanityTargets.size());        
+        
     }
 
     private ValueMap buildValueMap(Object... string) {


Reply via email to