Skip to content

Commit

Permalink
Wicket 7138 support ur lfragment with page parameters (#1072)
Browse files Browse the repository at this point in the history
  • Loading branch information
bitstorm authored Jan 14, 2025
1 parent 2cc74a4 commit c26e705
Show file tree
Hide file tree
Showing 5 changed files with 72 additions and 32 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -370,11 +370,12 @@ void encode2()
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());
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -216,22 +216,27 @@ protected Url encodePageParameters(Url url, PageParameters pageParameters,
}

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;
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@
* </p>
* <p>
* How those parameters are populated depends on the {@link IRequestMapper}s
*
*
* @author Matej Knopp
*/
public class PageParameters implements IClusterable, IIndexedParameters, INamedParameters
Expand All @@ -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);

/**
Expand All @@ -66,7 +68,7 @@ public PageParameters()

/**
* Copy constructor.
*
*
* @param copy
* The parameters to copy from
*/
Expand Down Expand Up @@ -158,7 +160,7 @@ public Set<String> getNamedKeys()

/**
* Checks if the parameter with the given name exists
*
*
* @param name the parameter name
* @return {@code true} if the parameter exists, {@code false} otherwise
*/
Expand Down Expand Up @@ -298,7 +300,7 @@ public PageParameters remove(final String name, final String... values)

/**
* Adds a page parameter to these with {@code name} and {@code value}
*
*
* @param name
* @param value
* @return these
Expand Down Expand Up @@ -332,7 +334,7 @@ public PageParameters add(final String name, final Object value, final int index
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)
{
Expand All @@ -345,7 +347,7 @@ private void addNamed(String name, String[] values, int index, Type type)
}
}

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)
{
Expand All @@ -366,7 +368,7 @@ private void addNamed(String name, String value, int index, Type type)

/**
* Sets the page parameter with {@code name} and {@code value} at the given {@code index}
*
*
* @param name
* @param value
* @param index
Expand All @@ -391,7 +393,7 @@ public PageParameters set(final String name, final Object value, final int index

/**
* Sets the page parameter with {@code name} and {@code value}
*
*
* @param name
* @param value
* @return this
Expand Down Expand Up @@ -425,7 +427,7 @@ public PageParameters clearNamed()

/**
* Copy the page parameters
*
*
* @param other
* The new parameters
* @return this instance, for chaining
Expand All @@ -437,13 +439,14 @@ public PageParameters overwriteWith(final PageParameters other)
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
Expand All @@ -454,6 +457,8 @@ public PageParameters mergeWith(final PageParameters other)
{
mergeIndexed(other);
mergeNamed(other);

fragment = Objects.defaultIfNull(other.fragment, fragment);
}
return this;
}
Expand All @@ -471,7 +476,7 @@ private void mergeIndexed(PageParameters other)
}
}

private void mergeNamed(PageParameters other)
private void mergeNamed(PageParameters other)
{
final List<NamedPair> otherNamed = other.namedParameters;
if (otherNamed == null || otherNamed.isEmpty())
Expand All @@ -495,13 +500,24 @@ private void mergeNamed(PageParameters other)
}
}

public String getFragment()
{
return fragment;
}

public void setFragment(String fragment)
{
this.fragment = fragment;
}

@Override
public int hashCode()
{
final int prime = 31;
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;
}

Expand Down Expand Up @@ -531,12 +547,14 @@ else if (other.namedParameters == null)
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
Expand All @@ -549,23 +567,23 @@ public static boolean equals(final PageParameters p1, final PageParameters p2)
{
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;
}
return false;
}

/**
* @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)
Expand Down Expand Up @@ -615,6 +633,17 @@ public String toString()
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();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,8 @@ public PageParameters decodePageParameters(final Url url)
parameters.add(parameterName, p.getValue(), INamedParameters.Type.QUERY_STRING);
}
}

parameters.setFragment(url.getFragment());

return parameters.isEmpty() ? null : parameters;
}
Expand All @@ -75,6 +77,8 @@ public Url encodePageParameters(final PageParameters pageParameters)
QueryParameter param = new QueryParameter(pair.getKey(), pair.getValue());
url.getQueryParameters().add(param);
}

url.setFragment(pageParameters.getFragment());
}

return url;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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());
Expand All @@ -43,5 +43,6 @@ void decodeParameters() {
assertEquals("idx2", pageParameters.get(1).toOptionalString());
assertEquals("value1", pageParameters.get("named1").toOptionalString());
assertEquals("value2", pageParameters.get("named2").toOptionalString());
assertEquals("fragment", pageParameters.getFragment());
}
}

0 comments on commit c26e705

Please sign in to comment.