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) {