Author: mthl
Date: Fri Jul 19 14:27:23 2019
New Revision: 1863400
URL: http://svn.apache.org/viewvc?rev=1863400&view=rev
Log:
Improved: Use a predicate in ‘UtilHttp#getPathInfoOnlyParameterMap’
(OFBIZ-11138)
Modified:
ofbiz/ofbiz-framework/trunk/framework/base/src/main/java/org/apache/ofbiz/base/util/UtilHttp.java
ofbiz/ofbiz-framework/trunk/framework/base/src/test/java/org/apache/ofbiz/base/util/UtilHttpTest.java
Modified:
ofbiz/ofbiz-framework/trunk/framework/base/src/main/java/org/apache/ofbiz/base/util/UtilHttp.java
URL:
http://svn.apache.org/viewvc/ofbiz/ofbiz-framework/trunk/framework/base/src/main/java/org/apache/ofbiz/base/util/UtilHttp.java?rev=1863400&r1=1863399&r2=1863400&view=diff
==============================================================================
---
ofbiz/ofbiz-framework/trunk/framework/base/src/main/java/org/apache/ofbiz/base/util/UtilHttp.java
(original)
+++
ofbiz/ofbiz-framework/trunk/framework/base/src/main/java/org/apache/ofbiz/base/util/UtilHttp.java
Fri Jul 19 14:27:23 2019
@@ -53,6 +53,7 @@ import java.util.Set;
import java.util.StringTokenizer;
import java.util.TimeZone;
import java.util.function.Function;
+import java.util.function.Predicate;
import javax.net.ssl.SSLContext;
import javax.servlet.http.HttpServletRequest;
@@ -155,7 +156,8 @@ public final class UtilHttp {
.collect(toMap(Map.Entry::getKey, pair ->
transformParamValue(pair.getValue())));
// Pseudo-parameters passed in the URI path overrides the ones from
the regular URI parameters
- params.putAll(getPathInfoOnlyParameterMap(req.getPathInfo(), nameSet,
includeOrSkip));
+ params.putAll(getPathInfoOnlyParameterMap(req.getPathInfo(),
+ name -> nameSet == null || !(includeOrSkip ^
nameSet.contains(name))));
// If nothing is found in the parameters, try to find something in the
multi-part map.
Map<String, Object> multiPartMap = params.isEmpty() ?
getMultiPartParameterMap(req) : Collections.emptyMap();
@@ -317,12 +319,10 @@ public final class UtilHttp {
* This is an obsolete syntax for passing parameters to request handlers.
*
* @param path the URI path part which can be {@code null}
- * @param nameSet the set of parameters keys to include or skip
- * @param includeOrSkip toggle where {@code true} means including and
{@code false} means skipping
+ * @param pred the predicate filtering parameter names
* @return a canonicalized parameter map.
*/
- static Map<String, Object> getPathInfoOnlyParameterMap(String path, Set<?
extends String> nameSet,
- boolean includeOrSkip) {
+ static Map<String, Object> getPathInfoOnlyParameterMap(String path,
Predicate<String> pred) {
String path$ = Optional.ofNullable(path).orElse("");
Map<String, List<String>> allParams = Arrays.stream(path$.split("/"))
.filter(segment -> segment.startsWith("~") &&
segment.contains("="))
@@ -332,7 +332,7 @@ public final class UtilHttp {
// Filter and canonicalize the parameter map.
Function<List<String>, Object> canonicalize = val -> (val.size() == 1)
? val.get(0) : val;
return allParams.entrySet().stream()
- .filter(e -> nameSet == null || !(includeOrSkip ^
nameSet.contains(e.getKey())))
+ .filter(pair -> pred.test(pair.getKey()))
.collect(collectingAndThen(toMap(Map.Entry::getKey,
canonicalize.compose(Map.Entry::getValue)),
UtilHttp::canonicalizeParameterMap));
}
@@ -340,7 +340,7 @@ public final class UtilHttp {
public static Map<String, Object>
getUrlOnlyParameterMap(HttpServletRequest request) {
// NOTE: these have already been through canonicalizeParameterMap, so
not doing it again here
Map<String, Object> paramMap =
getQueryStringOnlyParameterMap(request.getQueryString());
- paramMap.putAll(getPathInfoOnlyParameterMap(request.getPathInfo(),
null, true));
+ paramMap.putAll(getPathInfoOnlyParameterMap(request.getPathInfo(), x
-> true));
return paramMap;
}
Modified:
ofbiz/ofbiz-framework/trunk/framework/base/src/test/java/org/apache/ofbiz/base/util/UtilHttpTest.java
URL:
http://svn.apache.org/viewvc/ofbiz/ofbiz-framework/trunk/framework/base/src/test/java/org/apache/ofbiz/base/util/UtilHttpTest.java?rev=1863400&r1=1863399&r2=1863400&view=diff
==============================================================================
---
ofbiz/ofbiz-framework/trunk/framework/base/src/test/java/org/apache/ofbiz/base/util/UtilHttpTest.java
(original)
+++
ofbiz/ofbiz-framework/trunk/framework/base/src/test/java/org/apache/ofbiz/base/util/UtilHttpTest.java
Fri Jul 19 14:27:23 2019
@@ -46,16 +46,16 @@ public class UtilHttpTest {
@Test
public void basicGetPathInfoOnlyParameterMap() {
- assertThat(getPathInfoOnlyParameterMap("/~foo=1/~bar=2", null, false),
+ assertThat(getPathInfoOnlyParameterMap("/~foo=1/~bar=2", x -> true),
allOf(hasEntry("foo", "1"), hasEntry("bar", "2")));
- assertThat(getPathInfoOnlyParameterMap("/~foo=1/~foo=2", null, false),
+ assertThat(getPathInfoOnlyParameterMap("/~foo=1/~foo=2", x -> true),
hasEntry("foo", Arrays.asList("1", "2")));
- assertThat(getPathInfoOnlyParameterMap("/~foo=1/~foo=2/~foo=3/", null,
false),
+ assertThat(getPathInfoOnlyParameterMap("/~foo=1/~foo=2/~foo=3/", x ->
true),
hasEntry("foo", Arrays.asList("1", "2", "3")));
- assertThat(getPathInfoOnlyParameterMap("/~foo=1/~bar=2/~foo=3/", null,
false),
+ assertThat(getPathInfoOnlyParameterMap("/~foo=1/~bar=2/~foo=3/", x ->
true),
Matchers.<Map<String,Object>>allOf(
hasEntry("foo", Arrays.asList("1", "3")),
hasEntry("bar", "2")));
@@ -63,15 +63,15 @@ public class UtilHttpTest {
@Test
public void emptyGetPathInfoOnlyParameterMap() {
- assertThat(getPathInfoOnlyParameterMap(null, null, false),
is(anEmptyMap()));
+ assertThat(getPathInfoOnlyParameterMap(null, x -> true),
is(anEmptyMap()));
}
@Test
public void filteredGetPathInfoOnlyParameterMap() {
- assertThat(getPathInfoOnlyParameterMap("/~foo=1/~bar=2",
UtilMisc.toSet("foo"), false),
+ assertThat(getPathInfoOnlyParameterMap("/~foo=1/~bar=2", name ->
!"foo".equals(name)),
allOf(not(hasEntry("foo", "1")), hasEntry("bar", "2")));
- assertThat(getPathInfoOnlyParameterMap("/~foo=1/~bar=2",
UtilMisc.toSet("foo"), true),
+ assertThat(getPathInfoOnlyParameterMap("/~foo=1/~bar=2",
"foo"::equals),
allOf(hasEntry("foo", "1"), not(hasEntry("bar", "2"))));
}