package com.gitblit.wicket;\r
\r
import java.text.MessageFormat;\r
+import java.util.HashSet;\r
+import java.util.Map;\r
+import java.util.Set;\r
\r
import org.apache.wicket.IRequestTarget;\r
import org.apache.wicket.Page;\r
import org.apache.wicket.PageParameters;\r
import org.apache.wicket.request.RequestParameters;\r
import org.apache.wicket.request.target.coding.MixedParamUrlCodingStrategy;\r
+import org.apache.wicket.util.string.AppendingStringBuffer;\r
import org.slf4j.Logger;\r
import org.slf4j.LoggerFactory;\r
\r
*/\r
public class GitblitParamUrlCodingStrategy extends MixedParamUrlCodingStrategy {\r
\r
+ private final String[] parameterNames;\r
+\r
private Logger logger = LoggerFactory.getLogger(GitblitParamUrlCodingStrategy.class);\r
\r
private IStoredSettings settings;\r
Class<C> bookmarkablePageClass, String[] parameterNames) {\r
\r
super(mountPath, bookmarkablePageClass, parameterNames);\r
+ this.parameterNames = parameterNames;\r
this.settings = settings;\r
}\r
\r
requestParameters.getParameters()));\r
return super.decode(requestParameters);\r
}\r
+\r
+ /**\r
+ * @see org.apache.wicket.request.target.coding.AbstractRequestTargetUrlCodingStrategy#appendParameters(org.apache.wicket.util.string.AppendingStringBuffer,\r
+ * java.util.Map)\r
+ */\r
+ @Override\r
+ protected void appendParameters(AppendingStringBuffer url, Map<String, ?> parameters)\r
+ {\r
+ if (!url.endsWith("/"))\r
+ {\r
+ url.append("/");\r
+ }\r
+\r
+ Set<String> parameterNamesToAdd = new HashSet<String>(parameters.keySet());\r
+\r
+ // Find index of last specified parameter\r
+ boolean foundParameter = false;\r
+ int lastSpecifiedParameter = parameterNames.length;\r
+ while (lastSpecifiedParameter != 0 && !foundParameter)\r
+ {\r
+ foundParameter = parameters.containsKey(parameterNames[--lastSpecifiedParameter]);\r
+ }\r
+\r
+ if (foundParameter)\r
+ {\r
+ for (int i = 0; i <= lastSpecifiedParameter; i++)\r
+ {\r
+ String parameterName = parameterNames[i];\r
+ final Object param = parameters.get(parameterName);\r
+ String value = param instanceof String[] ? ((String[])param)[0] : ((param == null)\r
+ ? null : param.toString());\r
+ if (value == null)\r
+ {\r
+ value = "";\r
+ }\r
+ if (!url.endsWith("/"))\r
+ {\r
+ url.append("/");\r
+ }\r
+ url.append(urlEncodePathComponent(value));\r
+ parameterNamesToAdd.remove(parameterName);\r
+ }\r
+ }\r
+\r
+ if (!parameterNamesToAdd.isEmpty())\r
+ {\r
+ boolean first = true;\r
+ for (String parameterName : parameterNamesToAdd)\r
+ {\r
+ final Object param = parameters.get(parameterName);\r
+ if (param instanceof String[]) {\r
+ String [] values = (String[]) param;\r
+ for (String value : values) {\r
+ url.append(first ? '?' : '&');\r
+ url.append(urlEncodeQueryComponent(parameterName)).append("=").append(\r
+ urlEncodeQueryComponent(value));\r
+ first = false;\r
+ }\r
+ } else {\r
+ url.append(first ? '?' : '&');\r
+ String value = String.valueOf(param);\r
+ url.append(urlEncodeQueryComponent(parameterName)).append("=").append(\r
+ urlEncodeQueryComponent(value));\r
+ }\r
+ first = false;\r
+ }\r
+ }\r
+ }\r
}
\ No newline at end of file