This is an automated email from the ASF dual-hosted git repository.

ahuber pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/causeway.git


The following commit(s) were added to refs/heads/master by this push:
     new 15158b010d CAUSEWAY-3586: deduplicate code
15158b010d is described below

commit 15158b010dab2f4972c6390fbd328e1c19520380
Author: Andi Huber <[email protected]>
AuthorDate: Thu Sep 28 11:35:36 2023 +0200

    CAUSEWAY-3586: deduplicate code
---
 .../applib/services/bookmark/Bookmark.java         |  6 +--
 .../commons/internal/codec/_UrlDecoderUtil.java    | 55 ----------------------
 .../resources/DomainObjectResourceServerside.java  |  6 +--
 .../resources/DomainServiceResourceServerside.java |  6 +--
 .../viewer/resources/ResourceAbstract.java         |  4 +-
 .../context/ResourceContext_getArg_Test.java       |  6 +--
 6 files changed, 14 insertions(+), 69 deletions(-)

diff --git 
a/api/applib/src/main/java/org/apache/causeway/applib/services/bookmark/Bookmark.java
 
b/api/applib/src/main/java/org/apache/causeway/applib/services/bookmark/Bookmark.java
index 296c41931a..2447e6c0a7 100644
--- 
a/api/applib/src/main/java/org/apache/causeway/applib/services/bookmark/Bookmark.java
+++ 
b/api/applib/src/main/java/org/apache/causeway/applib/services/bookmark/Bookmark.java
@@ -31,8 +31,8 @@ import org.springframework.lang.Nullable;
 import org.apache.causeway.applib.CausewayModuleApplib;
 import org.apache.causeway.applib.id.LogicalType;
 import org.apache.causeway.commons.internal.base._Strings;
-import org.apache.causeway.commons.internal.codec._UrlDecoderUtil;
 import org.apache.causeway.commons.internal.exceptions._Exceptions;
+import org.apache.causeway.commons.io.UrlUtils;
 import org.apache.causeway.schema.common.v2.OidDto;
 
 import lombok.AccessLevel;
@@ -151,7 +151,7 @@ public final class Bookmark implements Oid {
 
     public static Bookmark parseElseFail(final @Nullable String input) {
         return parse(input)
-                .orElseThrow(()->_Exceptions.illegalArgument("cannot parse 
Bookmark %s", input));
+                .orElseThrow(()->_Exceptions.illegalArgument("cannot parse 
Bookmark '%s'", input));
     }
 
     /**
@@ -160,7 +160,7 @@ public final class Bookmark implements Oid {
     public static Optional<Bookmark> parseUrlEncoded(@Nullable final String 
urlEncodedStr) {
         return _Strings.isEmpty(urlEncodedStr)
                 ? Optional.empty()
-                : parse(_UrlDecoderUtil.urlDecode(urlEncodedStr));
+                : parse(UrlUtils.urlDecodeUtf8(urlEncodedStr));
     }
 
     // -- TO DTO
diff --git 
a/commons/src/main/java/org/apache/causeway/commons/internal/codec/_UrlDecoderUtil.java
 
b/commons/src/main/java/org/apache/causeway/commons/internal/codec/_UrlDecoderUtil.java
deleted file mode 100644
index dfa5281031..0000000000
--- 
a/commons/src/main/java/org/apache/causeway/commons/internal/codec/_UrlDecoderUtil.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package org.apache.causeway.commons.internal.codec;
-
-import java.io.UnsupportedEncodingException;
-import java.net.URLDecoder;
-
-import lombok.experimental.UtilityClass;
-
-/**
- * <h1>- internal use only -</h1>
- *
- * <p>
- * <b>WARNING</b>: Do <b>NOT</b> use any of the classes provided by this 
package! <br/>
- * These may be changed or removed without notice!
- * </p>
- *
- * @since 2.0
- */
-@UtilityClass
-public final class _UrlDecoderUtil {
-
-    public static String urlDecode(final String input) {
-        try {
-            return URLDecoder.decode(input, "UTF-8");
-        } catch (final UnsupportedEncodingException e) {
-            return "";
-        }
-    }
-
-    public static String urlDecodeNullSafe(final String input) {
-        if (input == null) {
-            return null;
-        }
-
-        return urlDecode(input);
-    }
-
-}
diff --git 
a/viewers/restfulobjects/viewer/src/main/java/org/apache/causeway/viewer/restfulobjects/viewer/resources/DomainObjectResourceServerside.java
 
b/viewers/restfulobjects/viewer/src/main/java/org/apache/causeway/viewer/restfulobjects/viewer/resources/DomainObjectResourceServerside.java
index caf2e7c918..44b62f1a0a 100644
--- 
a/viewers/restfulobjects/viewer/src/main/java/org/apache/causeway/viewer/restfulobjects/viewer/resources/DomainObjectResourceServerside.java
+++ 
b/viewers/restfulobjects/viewer/src/main/java/org/apache/causeway/viewer/restfulobjects/viewer/resources/DomainObjectResourceServerside.java
@@ -43,7 +43,7 @@ import 
org.apache.causeway.applib.layout.component.DomainObjectLayoutData;
 import org.apache.causeway.applib.layout.component.PropertyLayoutData;
 import org.apache.causeway.applib.layout.grid.Grid;
 import org.apache.causeway.applib.layout.links.Link;
-import org.apache.causeway.commons.internal.codec._UrlDecoderUtil;
+import org.apache.causeway.commons.io.UrlUtils;
 import org.apache.causeway.core.metamodel.consent.Consent;
 import org.apache.causeway.core.metamodel.consent.InteractionInitiatedBy;
 import org.apache.causeway.core.metamodel.facets.object.icon.ObjectIcon;
@@ -689,8 +689,8 @@ implements DomainObjectResource {
             final @PathParam("actionId") String actionId,
             final @QueryParam("x-causeway-querystring") String 
xCausewayUrlEncodedQueryString) {
 
-        final String urlUnencodedQueryString = _UrlDecoderUtil
-                .urlDecodeNullSafe(xCausewayUrlEncodedQueryString != null
+        final String urlUnencodedQueryString = UrlUtils.urlDecodeUtf8(
+                xCausewayUrlEncodedQueryString != null
                     ? xCausewayUrlEncodedQueryString
                     : httpServletRequest.getQueryString());
         val resourceContext = createResourceContext(
diff --git 
a/viewers/restfulobjects/viewer/src/main/java/org/apache/causeway/viewer/restfulobjects/viewer/resources/DomainServiceResourceServerside.java
 
b/viewers/restfulobjects/viewer/src/main/java/org/apache/causeway/viewer/restfulobjects/viewer/resources/DomainServiceResourceServerside.java
index 447648e132..94db187a80 100644
--- 
a/viewers/restfulobjects/viewer/src/main/java/org/apache/causeway/viewer/restfulobjects/viewer/resources/DomainServiceResourceServerside.java
+++ 
b/viewers/restfulobjects/viewer/src/main/java/org/apache/causeway/viewer/restfulobjects/viewer/resources/DomainServiceResourceServerside.java
@@ -37,7 +37,7 @@ import javax.ws.rs.core.Response;
 import org.springframework.stereotype.Component;
 
 import org.apache.causeway.applib.annotation.Where;
-import org.apache.causeway.commons.internal.codec._UrlDecoderUtil;
+import org.apache.causeway.commons.io.UrlUtils;
 import 
org.apache.causeway.core.metamodel.facets.object.domainservice.DomainServiceFacet;
 import org.apache.causeway.core.metamodel.object.ManagedObject;
 import org.apache.causeway.viewer.restfulobjects.applib.JsonRepresentation;
@@ -268,8 +268,8 @@ implements DomainServiceResource {
             final @PathParam("actionId") String actionId,
             final @QueryParam("x-causeway-querystring") String 
xCausewayUrlEncodedQueryString) {
 
-        final String urlUnencodedQueryString = _UrlDecoderUtil
-                .urlDecodeNullSafe(xCausewayUrlEncodedQueryString != null
+        final String urlUnencodedQueryString = UrlUtils.urlDecodeUtf8(
+                xCausewayUrlEncodedQueryString != null
                     ? xCausewayUrlEncodedQueryString
                     : httpServletRequest.getQueryString());
         val resourceContext = createResourceContext(
diff --git 
a/viewers/restfulobjects/viewer/src/main/java/org/apache/causeway/viewer/restfulobjects/viewer/resources/ResourceAbstract.java
 
b/viewers/restfulobjects/viewer/src/main/java/org/apache/causeway/viewer/restfulobjects/viewer/resources/ResourceAbstract.java
index 3ff3c21bdd..07fe8e8fd6 100644
--- 
a/viewers/restfulobjects/viewer/src/main/java/org/apache/causeway/viewer/restfulobjects/viewer/resources/ResourceAbstract.java
+++ 
b/viewers/restfulobjects/viewer/src/main/java/org/apache/causeway/viewer/restfulobjects/viewer/resources/ResourceAbstract.java
@@ -36,8 +36,8 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.apache.causeway.applib.annotation.Where;
 import org.apache.causeway.applib.services.bookmark.Bookmark;
 import org.apache.causeway.commons.internal.base._Strings;
-import org.apache.causeway.commons.internal.codec._UrlDecoderUtil;
 import org.apache.causeway.commons.io.TextUtils;
+import org.apache.causeway.commons.io.UrlUtils;
 import org.apache.causeway.core.config.viewer.web.WebAppContextPath;
 import org.apache.causeway.core.metamodel.consent.InteractionInitiatedBy;
 import org.apache.causeway.core.metamodel.context.HasMetaModelContext;
@@ -160,7 +160,7 @@ implements HasMetaModelContext {
 
     private String getUrlDecodedQueryStringIfAny() {
         final String queryStringIfAny = httpServletRequest.getQueryString();
-        return _UrlDecoderUtil.urlDecodeNullSafe(queryStringIfAny);
+        return UrlUtils.urlDecodeUtf8(queryStringIfAny);
     }
 
     private ResourceContext resourceContext(
diff --git 
a/viewers/restfulobjects/viewer/src/test/java/org/apache/causeway/viewer/restfulobjects/viewer/context/ResourceContext_getArg_Test.java
 
b/viewers/restfulobjects/viewer/src/test/java/org/apache/causeway/viewer/restfulobjects/viewer/context/ResourceContext_getArg_Test.java
index 8513b283f8..ae4be649f2 100644
--- 
a/viewers/restfulobjects/viewer/src/test/java/org/apache/causeway/viewer/restfulobjects/viewer/context/ResourceContext_getArg_Test.java
+++ 
b/viewers/restfulobjects/viewer/src/test/java/org/apache/causeway/viewer/restfulobjects/viewer/context/ResourceContext_getArg_Test.java
@@ -31,7 +31,7 @@ import static org.hamcrest.MatcherAssert.assertThat;
 
 import org.apache.causeway.applib.services.iactnlayer.InteractionLayerTracker;
 import org.apache.causeway.applib.services.iactnlayer.InteractionService;
-import org.apache.causeway.commons.internal.codec._UrlDecoderUtil;
+import org.apache.causeway.commons.io.UrlUtils;
 import org.apache.causeway.core.metamodel._testing.MetaModelContext_forTesting;
 import org.apache.causeway.core.metamodel.context.MetaModelContext;
 import org.apache.causeway.core.metamodel.specloader.SpecificationLoader;
@@ -97,7 +97,7 @@ class ResourceContext_getArg_Test {
         final String queryString = 
UrlEncodingUtils.urlEncode(JsonRepresentation.newMap("x-ro-page", 
"123").asJsonNode());
 
         resourceContext = new ResourceContext(ResourceDescriptor.empty(), 
null, null, null, null, null,
-                
RequestParams.ofQueryString(_UrlDecoderUtil.urlDecodeNullSafe(queryString)),
+                
RequestParams.ofQueryString(UrlUtils.urlDecodeUtf8(queryString)),
                 mockHttpServletRequest, null, null,
                 metaModelContext, null, null) {
             @Override
@@ -114,7 +114,7 @@ class ResourceContext_getArg_Test {
         final String queryString = 
UrlEncodingUtils.urlEncode(JsonRepresentation.newMap("xxx", 
"123").asJsonNode());
 
         resourceContext = new ResourceContext(ResourceDescriptor.empty(), 
null, null, null, null, null,
-                
RequestParams.ofQueryString(_UrlDecoderUtil.urlDecodeNullSafe(queryString)),
+                
RequestParams.ofQueryString(UrlUtils.urlDecodeUtf8(queryString)),
                 mockHttpServletRequest, null, null,
                 metaModelContext, null, null) {
             @Override

Reply via email to