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

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


The following commit(s) were added to refs/heads/master by this push:
     new c26e705362 Wicket 7138 support ur lfragment with page parameters 
(#1072)
c26e705362 is described below

commit c26e705362dc5786a587457ade683a822a0a9b47
Author: Andrea Del Bene <[email protected]>
AuthorDate: Tue Jan 14 12:49:33 2025 +0100

    Wicket 7138 support ur lfragment with page parameters (#1072)
---
 .../core/request/mapper/MountedMapperTest.java     |  3 +-
 .../wicket/request/mapper/AbstractMapper.java      | 33 +++++++-----
 .../request/mapper/parameter/PageParameters.java   | 61 ++++++++++++++++------
 .../mapper/parameter/PageParametersEncoder.java    |  4 ++
 .../parameter/PageParametersEncoderTest.java       |  3 +-
 5 files changed, 72 insertions(+), 32 deletions(-)

diff --git 
a/wicket-core-tests/src/test/java/org/apache/wicket/core/request/mapper/MountedMapperTest.java
 
b/wicket-core-tests/src/test/java/org/apache/wicket/core/request/mapper/MountedMapperTest.java
index 3cfd257c04..c81a1d13ba 100644
--- 
a/wicket-core-tests/src/test/java/org/apache/wicket/core/request/mapper/MountedMapperTest.java
+++ 
b/wicket-core-tests/src/test/java/org/apache/wicket/core/request/mapper/MountedMapperTest.java
@@ -370,11 +370,12 @@ class MountedMapperTest extends AbstractMapperTest
                parameters.set(1, "i2");
                parameters.set("a", "b", INamedParameters.Type.QUERY_STRING);
                parameters.set("b", "c", INamedParameters.Type.QUERY_STRING);
+               parameters.setFragment("fragment");
                PageProvider provider = new PageProvider(MockPage.class, 
parameters);
                provider.setPageSource(context);
                IRequestHandler handler = new 
BookmarkablePageRequestHandler(provider);
                Url url = encoder.mapHandler(handler);
-               assertEquals("some/mount/path/i1/i2?a=b&b=c", url.toString());
+               assertEquals("some/mount/path/i1/i2?a=b&b=c#fragment", 
url.toString());
        }
 
        /**
diff --git 
a/wicket-request/src/main/java/org/apache/wicket/request/mapper/AbstractMapper.java
 
b/wicket-request/src/main/java/org/apache/wicket/request/mapper/AbstractMapper.java
index 14408c0f5e..ff1a851923 100644
--- 
a/wicket-request/src/main/java/org/apache/wicket/request/mapper/AbstractMapper.java
+++ 
b/wicket-request/src/main/java/org/apache/wicket/request/mapper/AbstractMapper.java
@@ -216,22 +216,27 @@ public abstract class AbstractMapper implements 
IRequestMapper
                }
 
                Url parametersUrl = 
encoder.encodePageParameters(pageParameters);
-               if (parametersUrl != null)
-               {
-                       // copy the url
-                       url = new Url(url);
-
-                       for (String s : parametersUrl.getSegments())
-                       {
-                               url.getSegments().add(s);
-                       }
-                       for (QueryParameter p : 
parametersUrl.getQueryParameters())
-                       {
-                               url.getQueryParameters().add(p);
-                       }
+               
+               if (parametersUrl == null) {
+                       //nothing to do
+                       return url;
                }
+               
+               // copy the url
+               Url urlCopy = new Url(url);
 
-               return url;
+               for (String s : parametersUrl.getSegments())
+               {
+                       urlCopy.getSegments().add(s);
+               }
+               for (QueryParameter p : parametersUrl.getQueryParameters())
+               {
+                       urlCopy.getQueryParameters().add(p);
+               }
+               
+               urlCopy.setFragment(parametersUrl.getFragment());
+               
+               return urlCopy;
        }
 
        /**
diff --git 
a/wicket-request/src/main/java/org/apache/wicket/request/mapper/parameter/PageParameters.java
 
b/wicket-request/src/main/java/org/apache/wicket/request/mapper/parameter/PageParameters.java
index 579cf8d180..59e05a6156 100644
--- 
a/wicket-request/src/main/java/org/apache/wicket/request/mapper/parameter/PageParameters.java
+++ 
b/wicket-request/src/main/java/org/apache/wicket/request/mapper/parameter/PageParameters.java
@@ -44,7 +44,7 @@ import org.apache.wicket.util.string.Strings;
  * </p>
  * <p>
  * How those parameters are populated depends on the {@link IRequestMapper}s
- * 
+ *
  * @author Matej Knopp
  */
 public class PageParameters implements IClusterable, IIndexedParameters, 
INamedParameters
@@ -55,6 +55,8 @@ public class PageParameters implements IClusterable, 
IIndexedParameters, INamedP
 
        private List<NamedPair> namedParameters;
 
+       private String fragment;
+
        private Locale locale = Locale.getDefault(Locale.Category.DISPLAY);
 
        /**
@@ -66,7 +68,7 @@ public class PageParameters implements IClusterable, 
IIndexedParameters, INamedP
 
        /**
         * Copy constructor.
-        * 
+        *
         * @param copy
         *          The parameters to copy from
         */
@@ -158,7 +160,7 @@ public class PageParameters implements IClusterable, 
IIndexedParameters, INamedP
 
        /**
         * Checks if the parameter with the given name exists
-        * 
+        *
         * @param name the parameter name
         * @return {@code true} if the parameter exists, {@code false} otherwise
         */
@@ -298,7 +300,7 @@ public class PageParameters implements IClusterable, 
IIndexedParameters, INamedP
 
        /**
         * Adds a page parameter to these with {@code name} and {@code value}
-        * 
+        *
         * @param name
         * @param value
         * @return these
@@ -332,7 +334,7 @@ public class PageParameters implements IClusterable, 
IIndexedParameters, INamedP
                return this;
        }
 
-       private void addNamed(String name, String[] values, int index, Type 
type) 
+       private void addNamed(String name, String[] values, int index, Type 
type)
        {
                if (namedParameters == null && values.length > 0)
                {
@@ -345,7 +347,7 @@ public class PageParameters implements IClusterable, 
IIndexedParameters, INamedP
                }
        }
 
-       private void addNamed(String name, String value, int index, Type type) 
+       private void addNamed(String name, String value, int index, Type type)
        {
                if (namedParameters == null)
                {
@@ -366,7 +368,7 @@ public class PageParameters implements IClusterable, 
IIndexedParameters, INamedP
 
        /**
         * Sets the page parameter with {@code name} and {@code value} at the 
given {@code index}
-        * 
+        *
         * @param name
         * @param value
         * @param index
@@ -391,7 +393,7 @@ public class PageParameters implements IClusterable, 
IIndexedParameters, INamedP
 
        /**
         * Sets the page parameter with {@code name} and {@code value}
-        * 
+        *
         * @param name
         * @param value
         * @return this
@@ -425,7 +427,7 @@ public class PageParameters implements IClusterable, 
IIndexedParameters, INamedP
 
        /**
         * Copy the page parameters
-        * 
+        *
         * @param other
         *          The new parameters
         * @return this instance, for chaining
@@ -437,13 +439,14 @@ public class PageParameters implements IClusterable, 
IIndexedParameters, INamedP
                        indexedParameters = other.indexedParameters;
                        namedParameters = other.namedParameters;
                        locale = other.locale;
+                       fragment = other.fragment;
                }
                return this;
        }
 
        /**
         * Merges the page parameters into this, overwriting existing values
-        * 
+        *
         * @param other
         *          The parameters to merge
         * @return this instance, for chaining
@@ -454,6 +457,8 @@ public class PageParameters implements IClusterable, 
IIndexedParameters, INamedP
                {
                        mergeIndexed(other);
                        mergeNamed(other);
+
+                       fragment = Objects.defaultIfNull(other.fragment, 
fragment);
                }
                return this;
        }
@@ -471,7 +476,7 @@ public class PageParameters implements IClusterable, 
IIndexedParameters, INamedP
                }
        }
 
-       private void mergeNamed(PageParameters other) 
+       private void mergeNamed(PageParameters other)
        {
                final List<NamedPair> otherNamed = other.namedParameters;
                if (otherNamed == null || otherNamed.isEmpty())
@@ -495,6 +500,16 @@ public class PageParameters implements IClusterable, 
IIndexedParameters, INamedP
                }
        }
 
+       public String getFragment()
+       {
+               return fragment;
+       }
+
+       public void setFragment(String fragment)
+       {
+               this.fragment = fragment;
+       }
+
        @Override
        public int hashCode()
        {
@@ -502,6 +517,7 @@ public class PageParameters implements IClusterable, 
IIndexedParameters, INamedP
                int result = 1;
                result = prime * result + ((indexedParameters == null) ? 0 : 
indexedParameters.hashCode());
                result = prime * result + ((namedParameters == null) ? 0 : 
namedParameters.hashCode());
+               result = prime * result + ((fragment == null) ? 0 : 
fragment.hashCode());
                return result;
        }
 
@@ -531,12 +547,14 @@ public class PageParameters implements IClusterable, 
IIndexedParameters, INamedP
                        return false;
                else if (!CollectionUtils.isEqualCollection(namedParameters, 
other.namedParameters))
                        return false;
+               if(!Strings.isEqual(other.fragment, fragment))
+                       return false;
                return true;
        }
 
        /**
         * Compares two {@link PageParameters} objects.
-        * 
+        *
         * @param p1
         *          The first parameters
         * @param p2
@@ -549,11 +567,11 @@ public class PageParameters implements IClusterable, 
IIndexedParameters, INamedP
                {
                        return true;
                }
-               if ((p1 == null) && (p2.getIndexedCount() == 0) && 
p2.getNamedCount() == 0)
+               if ((p1 == null) && (p2.getIndexedCount() == 0) && 
p2.getNamedCount() == 0 && p2.fragment == null)
                {
                        return true;
                }
-               if ((p2 == null) && (p1.getIndexedCount() == 0) && 
p1.getNamedCount() == 0)
+               if ((p2 == null) && (p1.getIndexedCount() == 0) && 
p1.getNamedCount() == 0 && p1.fragment == null)
                {
                        return true;
                }
@@ -561,11 +579,11 @@ public class PageParameters implements IClusterable, 
IIndexedParameters, INamedP
        }
 
        /**
-        * @return <code>true</code> if the parameters are empty, 
<code>false</code> otherwise.
+        * @return <code>true</code> if the parameters are empty and fragment 
is null, <code>false</code> otherwise.
         */
        public boolean isEmpty()
        {
-               return getIndexedCount() == 0 && getNamedCount() == 0;
+               return getIndexedCount() == 0 && getNamedCount() == 0 && 
fragment == null;
        }
 
        public PageParameters setLocale(Locale locale)
@@ -615,6 +633,17 @@ public class PageParameters implements IClusterable, 
IIndexedParameters, INamedP
                                
str.append('[').append(entry.getValue()).append(']');
                        }
                }
+
+               if (fragment != null)
+               {
+                       if (str.length() > 0)
+                       { 
+                               str.append(", ");
+                       }
+                       
+                       
str.append("fragment=").append('\'').append(fragment).append('\'');
+               }
+
                return str.toString();
        }
 }
diff --git 
a/wicket-request/src/main/java/org/apache/wicket/request/mapper/parameter/PageParametersEncoder.java
 
b/wicket-request/src/main/java/org/apache/wicket/request/mapper/parameter/PageParametersEncoder.java
index aa095deea2..0ad463eb58 100644
--- 
a/wicket-request/src/main/java/org/apache/wicket/request/mapper/parameter/PageParametersEncoder.java
+++ 
b/wicket-request/src/main/java/org/apache/wicket/request/mapper/parameter/PageParametersEncoder.java
@@ -54,6 +54,8 @@ public class PageParametersEncoder implements 
IPageParametersEncoder
                                parameters.add(parameterName, p.getValue(), 
INamedParameters.Type.QUERY_STRING);
                        }
                }
+               
+               parameters.setFragment(url.getFragment());
 
                return parameters.isEmpty() ? null : parameters;
        }
@@ -75,6 +77,8 @@ public class PageParametersEncoder implements 
IPageParametersEncoder
                                QueryParameter param = new 
QueryParameter(pair.getKey(), pair.getValue());
                                url.getQueryParameters().add(param);
                        }
+                       
+                       url.setFragment(pageParameters.getFragment());
                }
 
                return url;
diff --git 
a/wicket-request/src/test/java/org/apache/wicket/request/mapper/parameter/PageParametersEncoderTest.java
 
b/wicket-request/src/test/java/org/apache/wicket/request/mapper/parameter/PageParametersEncoderTest.java
index 27fde72729..715428f7e4 100644
--- 
a/wicket-request/src/test/java/org/apache/wicket/request/mapper/parameter/PageParametersEncoderTest.java
+++ 
b/wicket-request/src/test/java/org/apache/wicket/request/mapper/parameter/PageParametersEncoderTest.java
@@ -34,7 +34,7 @@ class PageParametersEncoderTest
        void decodeParameters() {
                PageParametersEncoder encoder = new PageParametersEncoder();
 
-               Url url = Url.parse("idx1/idx2?named1=value1&=&named2=value2");
+               Url url = 
Url.parse("idx1/idx2?named1=value1&=&named2=value2#fragment");
 
                PageParameters pageParameters = 
encoder.decodePageParameters(url);
                assertEquals(2, pageParameters.getIndexedCount());
@@ -43,5 +43,6 @@ class PageParametersEncoderTest
                assertEquals("idx2", pageParameters.get(1).toOptionalString());
                assertEquals("value1", 
pageParameters.get("named1").toOptionalString());
                assertEquals("value2", 
pageParameters.get("named2").toOptionalString());
+               assertEquals("fragment", pageParameters.getFragment());
        }
 }

Reply via email to