From 4cbddead33232b82a6d35ebfa333e46c74c9bcf8 Mon Sep 17 00:00:00 2001 From: Hybris95 <hybris_95@hotmail.com> Date: Thu, 01 May 2014 16:14:15 -0400 Subject: [PATCH] Added the "you are responsible of" filter in "my tickets" page. --- src/main/java/com/gitblit/wicket/GitblitParamUrlCodingStrategy.java | 92 ++++++++++++++++++++++++++++++++++++++++++--- 1 files changed, 85 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/gitblit/wicket/GitblitParamUrlCodingStrategy.java b/src/main/java/com/gitblit/wicket/GitblitParamUrlCodingStrategy.java index 2d65d37..c658394 100644 --- a/src/main/java/com/gitblit/wicket/GitblitParamUrlCodingStrategy.java +++ b/src/main/java/com/gitblit/wicket/GitblitParamUrlCodingStrategy.java @@ -16,16 +16,19 @@ package com.gitblit.wicket; import java.text.MessageFormat; +import java.util.HashSet; +import java.util.Map; +import java.util.Set; import org.apache.wicket.IRequestTarget; import org.apache.wicket.Page; -import org.apache.wicket.PageParameters; import org.apache.wicket.request.RequestParameters; import org.apache.wicket.request.target.coding.MixedParamUrlCodingStrategy; +import org.apache.wicket.util.string.AppendingStringBuffer; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import com.gitblit.GitBlit; +import com.gitblit.IStoredSettings; import com.gitblit.Keys; /** @@ -40,7 +43,11 @@ */ public class GitblitParamUrlCodingStrategy extends MixedParamUrlCodingStrategy { + private final String[] parameterNames; + private Logger logger = LoggerFactory.getLogger(GitblitParamUrlCodingStrategy.class); + + private IStoredSettings settings; /** * Construct. @@ -53,9 +60,14 @@ * @param parameterNames * the parameter names (not null) */ - public <C extends Page> GitblitParamUrlCodingStrategy(String mountPath, + public <C extends Page> GitblitParamUrlCodingStrategy( + IStoredSettings settings, + String mountPath, Class<C> bookmarkablePageClass, String[] parameterNames) { + super(mountPath, bookmarkablePageClass, parameterNames); + this.parameterNames = parameterNames; + this.settings = settings; } /** @@ -67,7 +79,7 @@ */ @Override protected String urlEncodePathComponent(String string) { - char altChar = GitBlit.getChar(Keys.web.forwardSlashCharacter, '/'); + char altChar = settings.getChar(Keys.web.forwardSlashCharacter, '/'); if (altChar != '/') { string = string.replace('/', altChar); } @@ -83,7 +95,7 @@ */ @Override protected String urlDecodePathComponent(String value) { - char altChar = GitBlit.getChar(Keys.web.forwardSlashCharacter, '/'); + char altChar = settings.getChar(Keys.web.forwardSlashCharacter, '/'); if (altChar != '/') { value = value.replace(altChar, '/'); } @@ -104,8 +116,74 @@ logger.debug(MessageFormat .format("REQ: {0} PARAMS {1}", getMountPath(), parametersFragment)); - final PageParameters parameters = new PageParameters(decodeParameters(parametersFragment, - requestParameters.getParameters())); return super.decode(requestParameters); } + + /** + * @see org.apache.wicket.request.target.coding.AbstractRequestTargetUrlCodingStrategy#appendParameters(org.apache.wicket.util.string.AppendingStringBuffer, + * java.util.Map) + */ + @Override + protected void appendParameters(AppendingStringBuffer url, Map<String, ?> parameters) + { + if (!url.endsWith("/")) + { + url.append("/"); + } + + Set<String> parameterNamesToAdd = new HashSet<String>(parameters.keySet()); + + // Find index of last specified parameter + boolean foundParameter = false; + int lastSpecifiedParameter = parameterNames.length; + while (lastSpecifiedParameter != 0 && !foundParameter) + { + foundParameter = parameters.containsKey(parameterNames[--lastSpecifiedParameter]); + } + + if (foundParameter) + { + for (int i = 0; i <= lastSpecifiedParameter; i++) + { + String parameterName = parameterNames[i]; + final Object param = parameters.get(parameterName); + String value = param instanceof String[] ? ((String[])param)[0] : ((param == null) + ? null : param.toString()); + if (value == null) + { + value = ""; + } + if (!url.endsWith("/")) + { + url.append("/"); + } + url.append(urlEncodePathComponent(value)); + parameterNamesToAdd.remove(parameterName); + } + } + + if (!parameterNamesToAdd.isEmpty()) + { + boolean first = true; + for (String parameterName : parameterNamesToAdd) + { + final Object param = parameters.get(parameterName); + if (param instanceof String[]) { + String [] values = (String[]) param; + for (String value : values) { + url.append(first ? '?' : '&'); + url.append(urlEncodeQueryComponent(parameterName)).append("=").append( + urlEncodeQueryComponent(value)); + first = false; + } + } else { + url.append(first ? '?' : '&'); + String value = String.valueOf(param); + url.append(urlEncodeQueryComponent(parameterName)).append("=").append( + urlEncodeQueryComponent(value)); + } + first = false; + } + } + } } \ No newline at end of file -- Gitblit v1.9.1