diff --git a/.classpath b/.classpath
index ccf6a4e03..d531303bd 100644
--- a/.classpath
+++ b/.classpath
@@ -1,102 +1,131 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/.gitignore b/.gitignore
index e268ccbc1..c7244b85d 100644
--- a/.gitignore
+++ b/.gitignore
@@ -30,3 +30,4 @@ tags
/**/init.lua
/**/session
/nbproject/private
+/target/
diff --git a/.project b/.project
index 90c747bcb..f2e777550 100644
--- a/.project
+++ b/.project
@@ -15,8 +15,14 @@
+
+ org.eclipse.m2e.core.maven2Builder
+
+
+
+ org.eclipse.m2e.core.maven2Nature
org.eclipse.jdt.core.javanature
net.sf.eclipsecs.core.CheckstyleNature
diff --git a/build.moxie b/build.moxie
index e84ab4010..65ad9535e 100644
--- a/build.moxie
+++ b/build.moxie
@@ -68,14 +68,14 @@ resourceDirectories:
- compile 'src/main/resources'
- site 'src/site/resources'
-# compile for Java 7 class format
+# compile for Java 8 class format
tasks: {
'mx:javac' : {
- source: 1.7
- target: 1.7
- compiler: javac1.7
+ source: 1.8
+ target: 1.8
+ compiler: javac1.8
encoding: UTF-8
- # stop complaints about bootstrap classpath when compiling with Java 7
+ # stop complaints about bootstrap classpath when compiling with Java 8
compilerArgs: '-Xlint:-options'
}
}
@@ -104,7 +104,7 @@ repositories: central, eclipse-snapshots, eclipse, gitblit
properties: {
jetty.version : 9.2.13.v20150730
slf4j.version : 1.7.12
- wicket.version : 1.4.22
+ wicket.version : 8.0.0-M2
lucene.version : 4.10.4
jgit.version : 4.1.1.201511131810-r
groovy.version : 2.4.4
@@ -140,7 +140,7 @@ dependencies:
- compile 'com.sun.mail:javax.mail:1.5.1' :war
- compile 'javax.servlet:javax.servlet-api:3.1.0' :fedclient
- compile 'org.eclipse.jetty.aggregate:jetty-all:${jetty.version}' @jar
-- compile 'org.apache.wicket:wicket:${wicket.version}' :war !org.mockito
+- compile 'org.apache.wicket:wicket-core:${wicket.version}' :war !org.mockito
- compile 'org.apache.wicket:wicket-auth-roles:${wicket.version}' :war !org.mockito
- compile 'org.apache.wicket:wicket-extensions:${wicket.version}' :war !org.mockito
- compile 'org.apache.lucene:lucene-core:${lucene.version}' :war :fedclient
diff --git a/gitblit.iml b/gitblit.iml
index 93331b20b..ec6dc5e16 100644
--- a/gitblit.iml
+++ b/gitblit.iml
@@ -146,35 +146,123 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -490,7 +578,9 @@
-
+
+
+
@@ -656,17 +746,6 @@
-
-
-
-
-
-
-
-
-
-
-
@@ -832,17 +911,6 @@
-
-
-
-
-
-
-
-
-
-
-
diff --git a/src/main/java/com/gitblit/Constants.java b/src/main/java/com/gitblit/Constants.java
index 321f84f96..1af79f094 100644
--- a/src/main/java/com/gitblit/Constants.java
+++ b/src/main/java/com/gitblit/Constants.java
@@ -19,6 +19,7 @@
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.net.URL;
+import java.nio.charset.StandardCharsets;
import java.util.Arrays;
import java.util.List;
import java.util.jar.Attributes;
@@ -89,7 +90,7 @@ public class Constants {
public static final String PROPOSAL_EXT = ".json";
- public static final String ENCODING = "UTF-8";
+ public static final String ENCODING = StandardCharsets.UTF_8.name();
public static final int LEN_SHORTLOG = 78;
diff --git a/src/main/java/com/gitblit/models/Menu.java b/src/main/java/com/gitblit/models/Menu.java
index 7c949b3fd..7fb46ddc7 100644
--- a/src/main/java/com/gitblit/models/Menu.java
+++ b/src/main/java/com/gitblit/models/Menu.java
@@ -2,7 +2,7 @@
import java.io.Serializable;
-import org.apache.wicket.PageParameters;
+import org.apache.wicket.request.mapper.parameter.PageParameters;
import org.apache.wicket.markup.html.WebPage;
import com.gitblit.utils.StringUtils;
@@ -108,8 +108,9 @@ public ParameterMenuItem(String displayText, String parameter, String value,
isSelected = false;
} else {
parameters = new PageParameters(params);
- if (parameters.containsKey(parameter)) {
- isSelected = params.getString(parameter).equals(value);
+// if (parameters.containsKey(parameter)) {
+ if (!parameters.get(parameter).isEmpty()) {
+ isSelected = params.get(parameter).toString().equals(value);
// set the new selection value
setParameter(parameter, value);
} else {
@@ -125,7 +126,7 @@ protected void setParameter(String parameter, String value) {
if (StringUtils.isEmpty(value)) {
this.parameters.remove(parameter);
} else {
- this.parameters.put(parameter, value);
+ this.parameters.add(parameter, value);
}
}
}
diff --git a/src/main/java/com/gitblit/models/NavLink.java b/src/main/java/com/gitblit/models/NavLink.java
index 993d69545..a12a37d8d 100644
--- a/src/main/java/com/gitblit/models/NavLink.java
+++ b/src/main/java/com/gitblit/models/NavLink.java
@@ -19,7 +19,7 @@
import java.util.ArrayList;
import java.util.List;
-import org.apache.wicket.PageParameters;
+import org.apache.wicket.request.mapper.parameter.PageParameters;
import org.apache.wicket.markup.html.WebPage;
import com.gitblit.models.Menu.MenuItem;
diff --git a/src/main/java/com/gitblit/utils/GitBlitRequestUtils.java b/src/main/java/com/gitblit/utils/GitBlitRequestUtils.java
new file mode 100644
index 000000000..74b3854b0
--- /dev/null
+++ b/src/main/java/com/gitblit/utils/GitBlitRequestUtils.java
@@ -0,0 +1,47 @@
+package com.gitblit.utils;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.wicket.Page;
+import org.apache.wicket.protocol.http.servlet.ServletWebRequest;
+import org.apache.wicket.request.Request;
+import org.apache.wicket.request.Url;
+import org.apache.wicket.request.cycle.RequestCycle;
+import org.apache.wicket.request.mapper.parameter.PageParameters;
+
+public class GitBlitRequestUtils {
+ public static HttpServletRequest getServletRequest() {
+ return (HttpServletRequest) RequestCycle.get().getRequest().getContainerRequest();
+ }
+
+ public static HttpServletResponse getServletResponse() {
+ return (HttpServletResponse) RequestCycle.get().getResponse().getContainerResponse();
+ }
+
+ public static String toAbsoluteUrl(Class extends Page> pageClass, PageParameters params) {
+ String relativeUrl = RequestCycle.get().urlFor(pageClass, params).toString();
+ return RequestCycle.get().getUrlRenderer().renderFullUrl(Url.parse(relativeUrl));
+ }
+
+ /**
+ * COPIED FROM WICKET 1.3 Docs:
+ *
+ * Gets a prefix to make this relative to the context root.
+ *
+ * For example, if your context root is http://server.com/myApp/ and the
+ * request is for /myApp/mountedPage/, then the prefix returned might be
+ * "../../".
+ *
+ * For a particular technology, this might return either an absolute prefix
+ * or a relative one.
+ */
+ public static String getRelativePathPrefixToContextRoot() {
+ // String contextUrl =
+ // RequestCycle.get().getRequest().getRelativePathPrefixToContextRoot();
+ // TODO: test it! i thing deeper mounted pages will not work yet
+ Request r = RequestCycle.get().getRequest();
+ String p = r.getPrefixToContextPath();
+ return p;
+ }
+}
diff --git a/src/main/java/com/gitblit/wicket/GitBlitWebApp.java b/src/main/java/com/gitblit/wicket/GitBlitWebApp.java
index c10d88732..0a2c90c2f 100644
--- a/src/main/java/com/gitblit/wicket/GitBlitWebApp.java
+++ b/src/main/java/com/gitblit/wicket/GitBlitWebApp.java
@@ -15,23 +15,26 @@
*/
package com.gitblit.wicket;
+import java.time.Instant;
import java.util.Date;
import java.util.HashMap;
import java.util.Locale;
import java.util.Map;
import java.util.TimeZone;
-import org.apache.wicket.Application;
-import org.apache.wicket.Request;
-import org.apache.wicket.Response;
+import org.apache.wicket.RuntimeConfigurationType;
import org.apache.wicket.Session;
import org.apache.wicket.application.IClassResolver;
import org.apache.wicket.markup.html.WebPage;
import org.apache.wicket.protocol.http.WebApplication;
+import org.apache.wicket.request.Request;
+import org.apache.wicket.request.Response;
+import org.apache.wicket.util.time.Duration;
import ro.fortsoft.pf4j.PluginState;
import ro.fortsoft.pf4j.PluginWrapper;
+import com.gitblit.Constants;
import com.gitblit.IStoredSettings;
import com.gitblit.Keys;
import com.gitblit.extensions.GitblitWicketPlugin;
@@ -94,6 +97,10 @@
import com.gitblit.wicket.pages.TreePage;
import com.gitblit.wicket.pages.UserPage;
import com.gitblit.wicket.pages.UsersPage;
+import com.gitblit.wicket.resources.StaticResources;
+import com.gitblit.wicket.resources.bootstrap.Bootstrap;
+import com.gitblit.wicket.resources.fontawesome.FontAwesome;
+import com.gitblit.wicket.resources.octicons.Octicons;
import com.google.inject.Inject;
import com.google.inject.Provider;
import com.google.inject.Singleton;
@@ -134,24 +141,18 @@ public class GitBlitWebApp extends WebApplication implements GitblitWicketApp {
private final IGitblit gitblit;
private final IServicesManager services;
-
+
private final IFilestoreManager filestoreManager;
+ private static final Instant APPLICATION_STARTUP_TIME = Instant.now();
+
@Inject
- public GitBlitWebApp(
- Provider publicKeyManagerProvider,
- Provider ticketServiceProvider,
- IRuntimeManager runtimeManager,
- IPluginManager pluginManager,
- INotificationManager notificationManager,
- IUserManager userManager,
- IAuthenticationManager authenticationManager,
- IRepositoryManager repositoryManager,
- IProjectManager projectManager,
- IFederationManager federationManager,
- IGitblit gitblit,
- IServicesManager services,
- IFilestoreManager filestoreManager) {
+ public GitBlitWebApp(Provider publicKeyManagerProvider,
+ Provider ticketServiceProvider, IRuntimeManager runtimeManager,
+ IPluginManager pluginManager, INotificationManager notificationManager, IUserManager userManager,
+ IAuthenticationManager authenticationManager, IRepositoryManager repositoryManager,
+ IProjectManager projectManager, IFederationManager federationManager, IGitblit gitblit,
+ IServicesManager services, IFilestoreManager filestoreManager) {
super();
this.publicKeyManagerProvider = publicKeyManagerProvider;
@@ -191,7 +192,7 @@ public void init() {
// configure the resource cache duration to 90 days for deployment
if (!isDebugMode()) {
- getResourceSettings().setDefaultCacheDuration(90 * 86400);
+ getResourceSettings().setDefaultCacheDuration(Duration.days(90));
}
// setup the standard gitweb-ish urls
@@ -246,10 +247,14 @@ public void init() {
mount("/user", UserPage.class, "user");
mount("/forks", ForksPage.class, "r");
mount("/fork", ForkPage.class, "r");
-
+
// filestore URL
mount("/filestore", FilestorePage.class);
-
+ Bootstrap.install(this);
+ FontAwesome.install(this);
+ Octicons.install(this);
+ StaticResources.install(this);
+
// allow started Wicket plugins to initialize
for (PluginWrapper pluginWrapper : pluginManager.getPlugins()) {
if (PluginState.STARTED != pluginWrapper.getPluginState()) {
@@ -261,16 +266,19 @@ public void init() {
}
}
- // customize the Wicket class resolver to load from plugins
+ // customize the Wicket class resolver to load from plugins
IClassResolver coreResolver = getApplicationSettings().getClassResolver();
- PluginClassResolver classResolver = new PluginClassResolver(coreResolver, pluginManager);
- getApplicationSettings().setClassResolver(classResolver);
+ PluginClassResolver classResolver = new PluginClassResolver(coreResolver, pluginManager);
+ getApplicationSettings().setClassResolver(classResolver);
- getMarkupSettings().setDefaultMarkupEncoding("UTF-8");
+ getMarkupSettings().setDefaultMarkupEncoding(Constants.ENCODING);
}
- /* (non-Javadoc)
- * @see com.gitblit.wicket.Webapp#mount(java.lang.String, java.lang.Class, java.lang.String)
+ /*
+ * (non-Javadoc)
+ *
+ * @see com.gitblit.wicket.Webapp#mount(java.lang.String, java.lang.Class,
+ * java.lang.String)
*/
@Override
public void mount(String location, Class extends WebPage> clazz, String... parameters) {
@@ -280,7 +288,10 @@ public void mount(String location, Class extends WebPage> clazz, String... par
if (!settings.getBoolean(Keys.web.mountParameters, true)) {
parameters = new String[] {};
}
- mount(new GitblitParamUrlCodingStrategy(settings, xssFilter, location, clazz, parameters));
+ // TODO: check if needed with wichet-7
+ // mount(new GitblitParamUrlCodingStrategy(settings, xssFilter,
+ // location, clazz, parameters));
+ mountPage(location, clazz);
// map the mount point to the cache control definition
if (clazz.isAnnotationPresent(CacheControl.class)) {
@@ -289,7 +300,9 @@ public void mount(String location, Class extends WebPage> clazz, String... par
}
}
- /* (non-Javadoc)
+ /*
+ * (non-Javadoc)
+ *
* @see com.gitblit.wicket.Webapp#getHomePage()
*/
@Override
@@ -301,7 +314,9 @@ public Class extends WebPage> getNewRepositoryPage() {
return newRepositoryPageClass;
}
- /* (non-Javadoc)
+ /*
+ * (non-Javadoc)
+ *
* @see com.gitblit.wicket.Webapp#isCacheablePage(java.lang.String)
*/
@Override
@@ -309,7 +324,9 @@ public boolean isCacheablePage(String mountPoint) {
return cacheablePages.containsKey(mountPoint);
}
- /* (non-Javadoc)
+ /*
+ * (non-Javadoc)
+ *
* @see com.gitblit.wicket.Webapp#getCacheControl(java.lang.String)
*/
@Override
@@ -328,7 +345,9 @@ public final Session newSession(Request request, Response response) {
return gitBlitWebSession;
}
- /* (non-Javadoc)
+ /*
+ * (non-Javadoc)
+ *
* @see com.gitblit.wicket.Webapp#settings()
*/
@Override
@@ -336,7 +355,9 @@ public IStoredSettings settings() {
return settings;
}
- /* (non-Javadoc)
+ /*
+ * (non-Javadoc)
+ *
* @see com.gitblit.wicket.Webapp#xssFilter()
*/
@Override
@@ -344,7 +365,9 @@ public XssFilter xssFilter() {
return xssFilter;
}
- /* (non-Javadoc)
+ /*
+ * (non-Javadoc)
+ *
* @see com.gitblit.wicket.Webapp#isDebugMode()
*/
@Override
@@ -353,10 +376,12 @@ public boolean isDebugMode() {
}
/*
- * These methods look strange... and they are... but they are the first
- * step towards modularization across multiple commits.
+ * These methods look strange... and they are... but they are the first step
+ * towards modularization across multiple commits.
*/
- /* (non-Javadoc)
+ /*
+ * (non-Javadoc)
+ *
* @see com.gitblit.wicket.Webapp#getBootDate()
*/
@Override
@@ -364,7 +389,9 @@ public Date getBootDate() {
return runtimeManager.getBootDate();
}
- /* (non-Javadoc)
+ /*
+ * (non-Javadoc)
+ *
* @see com.gitblit.wicket.Webapp#getLastActivityDate()
*/
@Override
@@ -372,7 +399,9 @@ public Date getLastActivityDate() {
return repositoryManager.getLastActivityDate();
}
- /* (non-Javadoc)
+ /*
+ * (non-Javadoc)
+ *
* @see com.gitblit.wicket.Webapp#runtime()
*/
@Override
@@ -380,7 +409,9 @@ public IRuntimeManager runtime() {
return runtimeManager;
}
- /* (non-Javadoc)
+ /*
+ * (non-Javadoc)
+ *
* @see com.gitblit.wicket.Webapp#plugins()
*/
@Override
@@ -388,7 +419,9 @@ public IPluginManager plugins() {
return pluginManager;
}
- /* (non-Javadoc)
+ /*
+ * (non-Javadoc)
+ *
* @see com.gitblit.wicket.Webapp#notifier()
*/
@Override
@@ -396,7 +429,9 @@ public INotificationManager notifier() {
return notificationManager;
}
- /* (non-Javadoc)
+ /*
+ * (non-Javadoc)
+ *
* @see com.gitblit.wicket.Webapp#users()
*/
@Override
@@ -404,7 +439,9 @@ public IUserManager users() {
return userManager;
}
- /* (non-Javadoc)
+ /*
+ * (non-Javadoc)
+ *
* @see com.gitblit.wicket.Webapp#authentication()
*/
@Override
@@ -412,7 +449,9 @@ public IAuthenticationManager authentication() {
return authenticationManager;
}
- /* (non-Javadoc)
+ /*
+ * (non-Javadoc)
+ *
* @see com.gitblit.wicket.Webapp#keys()
*/
@Override
@@ -420,7 +459,9 @@ public IPublicKeyManager keys() {
return publicKeyManagerProvider.get();
}
- /* (non-Javadoc)
+ /*
+ * (non-Javadoc)
+ *
* @see com.gitblit.wicket.Webapp#repositories()
*/
@Override
@@ -428,7 +469,9 @@ public IRepositoryManager repositories() {
return repositoryManager;
}
- /* (non-Javadoc)
+ /*
+ * (non-Javadoc)
+ *
* @see com.gitblit.wicket.Webapp#projects()
*/
@Override
@@ -436,7 +479,9 @@ public IProjectManager projects() {
return projectManager;
}
- /* (non-Javadoc)
+ /*
+ * (non-Javadoc)
+ *
* @see com.gitblit.wicket.Webapp#federation()
*/
@Override
@@ -444,7 +489,9 @@ public IFederationManager federation() {
return federationManager;
}
- /* (non-Javadoc)
+ /*
+ * (non-Javadoc)
+ *
* @see com.gitblit.wicket.Webapp#gitblit()
*/
@Override
@@ -452,7 +499,9 @@ public IGitblit gitblit() {
return gitblit;
}
- /* (non-Javadoc)
+ /*
+ * (non-Javadoc)
+ *
* @see com.gitblit.wicket.Webapp#services()
*/
@Override
@@ -460,7 +509,9 @@ public IServicesManager services() {
return services;
}
- /* (non-Javadoc)
+ /*
+ * (non-Javadoc)
+ *
* @see com.gitblit.wicket.Webapp#tickets()
*/
@Override
@@ -468,7 +519,9 @@ public ITicketService tickets() {
return ticketServiceProvider.get();
}
- /* (non-Javadoc)
+ /*
+ * (non-Javadoc)
+ *
* @see com.gitblit.wicket.Webapp#getTimezone()
*/
@Override
@@ -476,12 +529,16 @@ public TimeZone getTimezone() {
return runtimeManager.getTimezone();
}
+ public Instant getApplicationStartupTime() {
+ return APPLICATION_STARTUP_TIME;
+ }
+
@Override
- public final String getConfigurationType() {
+ public final RuntimeConfigurationType getConfigurationType() {
if (runtimeManager.isDebugMode()) {
- return Application.DEVELOPMENT;
+ return RuntimeConfigurationType.DEVELOPMENT;
}
- return Application.DEPLOYMENT;
+ return RuntimeConfigurationType.DEPLOYMENT;
}
public static GitBlitWebApp get() {
diff --git a/src/main/java/com/gitblit/wicket/GitBlitWebSession.java b/src/main/java/com/gitblit/wicket/GitBlitWebSession.java
index 31ccf1f5a..0e53f3156 100644
--- a/src/main/java/com/gitblit/wicket/GitBlitWebSession.java
+++ b/src/main/java/com/gitblit/wicket/GitBlitWebSession.java
@@ -21,16 +21,20 @@
import java.util.concurrent.atomic.AtomicBoolean;
import org.apache.wicket.Page;
-import org.apache.wicket.PageParameters;
-import org.apache.wicket.RedirectToUrlException;
-import org.apache.wicket.Request;
+import org.apache.wicket.request.IRequestParameters;
+import org.apache.wicket.request.Request;
+import org.apache.wicket.request.Url;
+import org.apache.wicket.request.cycle.RequestCycle;
+import org.apache.wicket.request.flow.RedirectToUrlException;
+import org.apache.wicket.request.mapper.parameter.PageParameters;
import org.apache.wicket.Session;
import org.apache.wicket.protocol.http.RequestUtils;
-import org.apache.wicket.protocol.http.WebRequestCycle;
import org.apache.wicket.protocol.http.WebSession;
import org.apache.wicket.protocol.http.request.WebClientInfo;
+import com.gitblit.GitBlitServer.Params;
import com.gitblit.models.UserModel;
+import com.gitblit.utils.GitBlitRequestUtils;
public final class GitBlitWebSession extends WebSession {
@@ -64,11 +68,15 @@ public void invalidate() {
*/
public void cacheRequest(Class extends Page> pageClass) {
// build absolute url with correctly encoded parameters?!
- Request req = WebRequestCycle.get().getRequest();
- Map params = req.getRequestParameters().getParameters();
- PageParameters pageParams = new PageParameters(params);
- String relativeUrl = WebRequestCycle.get().urlFor(pageClass, pageParams).toString();
- requestUrl = RequestUtils.toAbsolutePath(relativeUrl);
+ Request req = RequestCycle.get().getRequest();
+ IRequestParameters params = req.getRequestParameters();
+ PageParameters pageParams = new PageParameters();
+ params.getParameterNames().forEach(name->{
+ pageParams.add(name, params.getParameterValue(name));
+ });
+ requestUrl = GitBlitRequestUtils.toAbsoluteUrl(pageClass, pageParams);
+
+
if (isTemporary())
{
// we must bind the temporary session into the session store
diff --git a/src/main/java/com/gitblit/wicket/GitblitParamUrlCodingStrategy.java b/src/main/java/com/gitblit/wicket/GitblitParamUrlCodingStrategy.java
index 536f88f4b..b87a2913d 100644
--- a/src/main/java/com/gitblit/wicket/GitblitParamUrlCodingStrategy.java
+++ b/src/main/java/com/gitblit/wicket/GitblitParamUrlCodingStrategy.java
@@ -1,221 +1,221 @@
-/*
- * Copyright 2011 gitblit.com.
- *
- * Licensed 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 com.gitblit.wicket;
-
-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.protocol.http.request.WebRequestCodingStrategy;
-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.IStoredSettings;
-import com.gitblit.Keys;
-import com.gitblit.utils.XssFilter;
-
-/**
- * Simple subclass of mixed parameter url coding strategy that works around the
- * encoded forward-slash issue that is present in some servlet containers.
- *
- * https://issues.apache.org/jira/browse/WICKET-1303
- * http://tomcat.apache.org/security-6.html
- *
- * @author James Moger
- *
- */
-public class GitblitParamUrlCodingStrategy extends MixedParamUrlCodingStrategy {
-
- private final String[] parameterNames;
-
- private Logger logger = LoggerFactory.getLogger(GitblitParamUrlCodingStrategy.class);
-
- private IStoredSettings settings;
-
- private XssFilter xssFilter;
-
- /**
- * Construct.
- *
- * @param
- * @param mountPath
- * mount path (not empty)
- * @param bookmarkablePageClass
- * class of mounted page (not null)
- * @param parameterNames
- * the parameter names (not null)
- */
- public GitblitParamUrlCodingStrategy(
- IStoredSettings settings,
- XssFilter xssFilter,
- String mountPath,
- Class bookmarkablePageClass, String[] parameterNames) {
-
- super(mountPath, bookmarkablePageClass, parameterNames);
- this.parameterNames = parameterNames;
- this.settings = settings;
- this.xssFilter = xssFilter;
- }
-
- /**
- * Url encodes a string that is mean for a URL path (e.g., between slashes)
- *
- * @param string
- * string to be encoded
- * @return encoded string
- */
- @Override
- protected String urlEncodePathComponent(String string) {
- char altChar = settings.getChar(Keys.web.forwardSlashCharacter, '/');
- if (altChar != '/') {
- string = string.replace('/', altChar);
- }
- return super.urlEncodePathComponent(string);
- }
-
- /**
- * Returns a decoded value of the given value (taken from a URL path
- * section)
- *
- * @param value
- * @return Decodes the value
- */
- @Override
- protected String urlDecodePathComponent(String value) {
- char altChar = settings.getChar(Keys.web.forwardSlashCharacter, '/');
- if (altChar != '/') {
- value = value.replace(altChar, '/');
- }
- return super.urlDecodePathComponent(value);
- }
-
- /**
- * Gets the decoded request target.
- *
- * @param requestParameters
- * the request parameters
- * @return the decoded request target
- */
- @Override
- public IRequestTarget decode(RequestParameters requestParameters) {
- Map parameterMap = (Map) requestParameters.getParameters();
- for (Map.Entry entry : parameterMap.entrySet()) {
- String parameter = entry.getKey();
- if (parameter.startsWith(WebRequestCodingStrategy.NAME_SPACE)) {
- // ignore Wicket parameters
- continue;
- }
-
- // sanitize Gitblit request parameters
- Object o = entry.getValue();
- if (o instanceof String) {
- String value = o.toString();
- String safeValue = xssFilter.none(value);
- if (!value.equals(safeValue)) {
- logger.warn("XSS filter triggered on {} URL parameter: {}={}",
- getMountPath(), parameter, value);
- parameterMap.put(parameter, safeValue);
- }
- } else if (o instanceof String[]) {
- String[] values = (String[]) o;
- for (int i = 0; i < values.length; i++) {
- String value = values[i].toString();
- String safeValue = xssFilter.none(value);
- if (!value.equals(safeValue)) {
- logger.warn("XSS filter triggered on {} URL parameter: {}={}",
- getMountPath(), parameter, value);
- values[i] = safeValue;
- }
- }
- }
- }
-
- 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 parameters)
- {
- if (!url.endsWith("/"))
- {
- url.append("/");
- }
-
- Set parameterNamesToAdd = new HashSet(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
+///*
+// * Copyright 2011 gitblit.com.
+// *
+// * Licensed 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 com.gitblit.wicket;
+//
+//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.protocol.http.request.WebRequestCodingStrategy;
+//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.IStoredSettings;
+//import com.gitblit.Keys;
+//import com.gitblit.utils.XssFilter;
+//
+///**
+// * Simple subclass of mixed parameter url coding strategy that works around the
+// * encoded forward-slash issue that is present in some servlet containers.
+// *
+// * https://issues.apache.org/jira/browse/WICKET-1303
+// * http://tomcat.apache.org/security-6.html
+// *
+// * @author James Moger
+// *
+// */
+//public class GitblitParamUrlCodingStrategy extends MixedParamUrlCodingStrategy {
+//
+// private final String[] parameterNames;
+//
+// private Logger logger = LoggerFactory.getLogger(GitblitParamUrlCodingStrategy.class);
+//
+// private IStoredSettings settings;
+//
+// private XssFilter xssFilter;
+//
+// /**
+// * Construct.
+// *
+// * @param
+// * @param mountPath
+// * mount path (not empty)
+// * @param bookmarkablePageClass
+// * class of mounted page (not null)
+// * @param parameterNames
+// * the parameter names (not null)
+// */
+// public GitblitParamUrlCodingStrategy(
+// IStoredSettings settings,
+// XssFilter xssFilter,
+// String mountPath,
+// Class bookmarkablePageClass, String[] parameterNames) {
+//
+// super(mountPath, bookmarkablePageClass, parameterNames);
+// this.parameterNames = parameterNames;
+// this.settings = settings;
+// this.xssFilter = xssFilter;
+// }
+//
+// /**
+// * Url encodes a string that is mean for a URL path (e.g., between slashes)
+// *
+// * @param string
+// * string to be encoded
+// * @return encoded string
+// */
+// @Override
+// protected String urlEncodePathComponent(String string) {
+// char altChar = settings.getChar(Keys.web.forwardSlashCharacter, '/');
+// if (altChar != '/') {
+// string = string.replace('/', altChar);
+// }
+// return super.urlEncodePathComponent(string);
+// }
+//
+// /**
+// * Returns a decoded value of the given value (taken from a URL path
+// * section)
+// *
+// * @param value
+// * @return Decodes the value
+// */
+// @Override
+// protected String urlDecodePathComponent(String value) {
+// char altChar = settings.getChar(Keys.web.forwardSlashCharacter, '/');
+// if (altChar != '/') {
+// value = value.replace(altChar, '/');
+// }
+// return super.urlDecodePathComponent(value);
+// }
+//
+// /**
+// * Gets the decoded request target.
+// *
+// * @param requestParameters
+// * the request parameters
+// * @return the decoded request target
+// */
+// @Override
+// public IRequestTarget decode(RequestParameters requestParameters) {
+// Map parameterMap = (Map) requestParameters.getParameters();
+// for (Map.Entry entry : parameterMap.entrySet()) {
+// String parameter = entry.getKey();
+// if (parameter.startsWith(WebRequestCodingStrategy.NAME_SPACE)) {
+// // ignore Wicket parameters
+// continue;
+// }
+//
+// // sanitize Gitblit request parameters
+// Object o = entry.getValue();
+// if (o instanceof String) {
+// String value = o.toString();
+// String safeValue = xssFilter.none(value);
+// if (!value.equals(safeValue)) {
+// logger.warn("XSS filter triggered on {} URL parameter: {}={}",
+// getMountPath(), parameter, value);
+// parameterMap.put(parameter, safeValue);
+// }
+// } else if (o instanceof String[]) {
+// String[] values = (String[]) o;
+// for (int i = 0; i < values.length; i++) {
+// String value = values[i].toString();
+// String safeValue = xssFilter.none(value);
+// if (!value.equals(safeValue)) {
+// logger.warn("XSS filter triggered on {} URL parameter: {}={}",
+// getMountPath(), parameter, value);
+// values[i] = safeValue;
+// }
+// }
+// }
+// }
+//
+// 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 parameters)
+// {
+// if (!url.endsWith("/"))
+// {
+// url.append("/");
+// }
+//
+// Set parameterNamesToAdd = new HashSet(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
diff --git a/src/main/java/com/gitblit/wicket/GitblitRedirectException.java b/src/main/java/com/gitblit/wicket/GitblitRedirectException.java
index 4721f0ad7..13e246a34 100644
--- a/src/main/java/com/gitblit/wicket/GitblitRedirectException.java
+++ b/src/main/java/com/gitblit/wicket/GitblitRedirectException.java
@@ -15,12 +15,13 @@
*/
package com.gitblit.wicket;
-import org.apache.wicket.AbstractRestartResponseException;
import org.apache.wicket.Page;
-import org.apache.wicket.PageParameters;
-import org.apache.wicket.RequestCycle;
-import org.apache.wicket.protocol.http.RequestUtils;
-import org.apache.wicket.request.target.basic.RedirectRequestTarget;
+import org.apache.wicket.RestartResponseException;
+import org.apache.wicket.request.cycle.RequestCycle;
+import org.apache.wicket.request.http.handler.RedirectRequestHandler;
+import org.apache.wicket.request.mapper.parameter.PageParameters;
+
+import com.gitblit.utils.GitBlitRequestUtils;
/**
* This exception bypasses the servlet container rewriting relative redirect
@@ -31,7 +32,7 @@
*
* @author James Moger
*/
-public class GitblitRedirectException extends AbstractRestartResponseException {
+public class GitblitRedirectException extends RestartResponseException {
private static final long serialVersionUID = 1L;
@@ -40,10 +41,9 @@ public GitblitRedirectException(Class pageClass) {
}
public GitblitRedirectException(Class pageClass, PageParameters params) {
+ super(pageClass, params);
RequestCycle cycle = RequestCycle.get();
- String relativeUrl = cycle.urlFor(pageClass, params).toString();
- String absoluteUrl = RequestUtils.toAbsolutePath(relativeUrl);
- cycle.setRequestTarget(new RedirectRequestTarget(absoluteUrl));
- cycle.setRedirect(true);
+ String absoluteUrl = GitBlitRequestUtils.toAbsoluteUrl(pageClass,params);
+ cycle.scheduleRequestHandlerAfterCurrent(new RedirectRequestHandler(absoluteUrl));
}
}
diff --git a/src/main/java/com/gitblit/wicket/GitblitWicketFilter.java b/src/main/java/com/gitblit/wicket/GitblitWicketFilter.java
index 68ad84a51..2214cbc37 100644
--- a/src/main/java/com/gitblit/wicket/GitblitWicketFilter.java
+++ b/src/main/java/com/gitblit/wicket/GitblitWicketFilter.java
@@ -81,110 +81,118 @@ protected IWebApplicationFactory getApplicationFactory() {
public WebApplication createApplication(WicketFilter filter) {
return webapp;
}
+
+ @Override
+ public void destroy(WicketFilter filter) {
+ // TODO Auto-generated method stub
+
+ }
};
}
-
+
/**
* Determines the last-modified date of the requested resource.
+ *
+ * TODO: check where to reimplement
*
* @param servletRequest
* @return The last modified time stamp
*/
- @Override
- protected long getLastModified(final HttpServletRequest servletRequest) {
- final String pathInfo = getRelativePath(servletRequest);
- if (Strings.isEmpty(pathInfo)) {
- return -1;
- }
- long lastModified = super.getLastModified(servletRequest);
- if (lastModified > -1) {
- return lastModified;
- }
-
- // try to match request against registered CacheControl pages
- String [] paths = pathInfo.split("/");
-
- String page = paths[0];
- String repo = "";
- String commitId = "";
- if (paths.length >= 2) {
- repo = paths[1];
- }
- if (paths.length >= 3) {
- commitId = paths[2];
- }
-
- if (!StringUtils.isEmpty(servletRequest.getParameter("r"))) {
- repo = servletRequest.getParameter("r");
- }
- if (!StringUtils.isEmpty(servletRequest.getParameter("h"))) {
- commitId = servletRequest.getParameter("h");
- }
-
- repo = repo.replace("%2f", "/").replace("%2F", "/").replace(settings.getChar(Keys.web.forwardSlashCharacter, '/'), '/');
-
- GitBlitWebApp app = (GitBlitWebApp) getWebApplication();
- int expires = settings.getInteger(Keys.web.pageCacheExpires, 0);
- if (!StringUtils.isEmpty(page) && app.isCacheablePage(page) && expires > 0) {
- // page can be cached by the browser
- CacheControl cacheControl = app.getCacheControl(page);
- Date bootDate = runtimeManager.getBootDate();
- switch (cacheControl.value()) {
- case ACTIVITY:
- // returns the last activity date of the server
- Date activityDate = repositoryManager.getLastActivityDate();
- if (activityDate != null) {
- return activityDate.after(bootDate) ? activityDate.getTime() : bootDate.getTime();
- }
- return bootDate.getTime();
- case BOOT:
- // return the boot date of the server
- return bootDate.getTime();
- case PROJECT:
- // return the latest change date for the project OR the boot date
- ProjectModel project = projectManager.getProjectModel(StringUtils.getRootPath(repo));
- if (project != null) {
- return project.lastChange.after(bootDate) ? project.lastChange.getTime() : bootDate.getTime();
- }
- break;
- case REPOSITORY:
- // return the lastest change date for the repository OR the boot
- // date, whichever is latest
- RepositoryModel repository = repositoryManager.getRepositoryModel(repo);
- if (repository != null && repository.lastChange != null) {
- return repository.lastChange.after(bootDate) ? repository.lastChange.getTime() : bootDate.getTime();
- }
- break;
- case COMMIT:
- // get the date of the specified commit
- if (StringUtils.isEmpty(commitId)) {
- // no commit id, use boot date
- return bootDate.getTime();
- } else {
- // last modified date is the commit date
- Repository r = null;
- try {
- // return the timestamp of the associated commit
- r = repositoryManager.getRepository(repo);
- if (r != null) {
- RevCommit commit = JGitUtils.getCommit(r, commitId);
- if (commit != null) {
- Date date = JGitUtils.getCommitDate(commit);
- return date.after(bootDate) ? date.getTime() : bootDate.getTime();
- }
- }
- } finally {
- if (r != null) {
- r.close();
- }
- }
- }
- break;
- default:
- break;
- }
- }
-
- return -1;
- }
+// @Override
+// protected long getLastModified(final HttpServletRequest servletRequest) {
+// final String pathInfo = getRelativePath(servletRequest);
+// if (Strings.isEmpty(pathInfo)) {
+// return -1;
+// }
+// long lastModified = super.getLastModified(servletRequest);
+// if (lastModified > -1) {
+// return lastModified;
+// }
+//
+// // try to match request against registered CacheControl pages
+// String [] paths = pathInfo.split("/");
+//
+// String page = paths[0];
+// String repo = "";
+// String commitId = "";
+// if (paths.length >= 2) {
+// repo = paths[1];
+// }
+// if (paths.length >= 3) {
+// commitId = paths[2];
+// }
+//
+// if (!StringUtils.isEmpty(servletRequest.getParameter("r"))) {
+// repo = servletRequest.getParameter("r");
+// }
+// if (!StringUtils.isEmpty(servletRequest.getParameter("h"))) {
+// commitId = servletRequest.getParameter("h");
+// }
+//
+// repo = repo.replace("%2f", "/").replace("%2F", "/").replace(settings.getChar(Keys.web.forwardSlashCharacter, '/'), '/');
+//
+// GitBlitWebApp app = (GitBlitWebApp) getApplication();
+// int expires = settings.getInteger(Keys.web.pageCacheExpires, 0);
+// if (!StringUtils.isEmpty(page) && app.isCacheablePage(page) && expires > 0) {
+// // page can be cached by the browser
+// CacheControl cacheControl = app.getCacheControl(page);
+// Date bootDate = runtimeManager.getBootDate();
+// switch (cacheControl.value()) {
+// case ACTIVITY:
+// // returns the last activity date of the server
+// Date activityDate = repositoryManager.getLastActivityDate();
+// if (activityDate != null) {
+// return activityDate.after(bootDate) ? activityDate.getTime() : bootDate.getTime();
+// }
+// return bootDate.getTime();
+// case BOOT:
+// // return the boot date of the server
+// return bootDate.getTime();
+// case PROJECT:
+// // return the latest change date for the project OR the boot date
+// ProjectModel project = projectManager.getProjectModel(StringUtils.getRootPath(repo));
+// if (project != null) {
+// return project.lastChange.after(bootDate) ? project.lastChange.getTime() : bootDate.getTime();
+// }
+// break;
+// case REPOSITORY:
+// // return the lastest change date for the repository OR the boot
+// // date, whichever is latest
+// RepositoryModel repository = repositoryManager.getRepositoryModel(repo);
+// if (repository != null && repository.lastChange != null) {
+// return repository.lastChange.after(bootDate) ? repository.lastChange.getTime() : bootDate.getTime();
+// }
+// break;
+// case COMMIT:
+// // get the date of the specified commit
+// if (StringUtils.isEmpty(commitId)) {
+// // no commit id, use boot date
+// return bootDate.getTime();
+// } else {
+// // last modified date is the commit date
+// Repository r = null;
+// try {
+// // return the timestamp of the associated commit
+// r = repositoryManager.getRepository(repo);
+// if (r != null) {
+// RevCommit commit = JGitUtils.getCommit(r, commitId);
+// if (commit != null) {
+// Date date = JGitUtils.getCommitDate(commit);
+// return date.after(bootDate) ? date.getTime() : bootDate.getTime();
+// }
+// }
+// } finally {
+// if (r != null) {
+// r.close();
+// }
+// }
+// }
+// break;
+// default:
+// break;
+// }
+// }
+//
+// return -1;
+// }
}
diff --git a/src/main/java/com/gitblit/wicket/Html5DateField.java b/src/main/java/com/gitblit/wicket/Html5DateField.java
index 927ee46ee..e606272ad 100644
--- a/src/main/java/com/gitblit/wicket/Html5DateField.java
+++ b/src/main/java/com/gitblit/wicket/Html5DateField.java
@@ -10,7 +10,7 @@
import org.apache.wicket.markup.html.form.AbstractTextComponent.ITextFormatProvider;
import org.apache.wicket.model.IModel;
import org.apache.wicket.util.convert.IConverter;
-import org.apache.wicket.util.convert.converters.DateConverter;
+import org.apache.wicket.util.convert.converter.DateConverter;
public class Html5DateField extends TextField implements ITextFormatProvider {
@@ -105,8 +105,8 @@ public DateFormat getDateFormat(Locale locale)
* @return A pattern-specific converter
*/
@Override
- public IConverter getConverter(Class> type)
- {
+ public IConverter getConverter(Class type) {
+
if (converter == null)
{
return super.getConverter(type);
@@ -148,9 +148,8 @@ private static String defaultDatePattern()
}
@Override
- protected String getInputType()
- {
- return "date";
+ protected String[] getInputTypes() {
+ return new String[]{"date"};
}
}
\ No newline at end of file
diff --git a/src/main/java/com/gitblit/wicket/MarkupProcessor.java b/src/main/java/com/gitblit/wicket/MarkupProcessor.java
index b20320499..40cf95604 100644
--- a/src/main/java/com/gitblit/wicket/MarkupProcessor.java
+++ b/src/main/java/com/gitblit/wicket/MarkupProcessor.java
@@ -30,7 +30,7 @@
import java.util.Map;
import org.apache.wicket.Page;
-import org.apache.wicket.RequestCycle;
+import org.apache.wicket.request.cycle.RequestCycle;
import org.eclipse.jgit.lib.Repository;
import org.eclipse.jgit.revwalk.RevCommit;
import org.eclipse.mylyn.wikitext.confluence.core.ConfluenceLanguage;
@@ -53,10 +53,12 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import com.gitblit.Constants;
import com.gitblit.IStoredSettings;
import com.gitblit.Keys;
import com.gitblit.models.PathModel;
import com.gitblit.servlet.RawServlet;
+import com.gitblit.utils.GitBlitRequestUtils;
import com.gitblit.utils.JGitUtils;
import com.gitblit.utils.MarkdownUtils;
import com.gitblit.utils.StringUtils;
@@ -268,7 +270,7 @@ public void image(Attributes attributes, String imagePath) {
if (imagePath.indexOf("://") == -1) {
// relative image
String path = doc.getRelativePath(imagePath);
- String contextUrl = RequestCycle.get().getRequest().getRelativePathPrefixToContextRoot();
+ String contextUrl = GitBlitRequestUtils.getRelativePathPrefixToContextRoot();
url = RawServlet.asLink(contextUrl, repositoryName, commitId, path);
} else {
// absolute image
@@ -325,7 +327,7 @@ public Rendering render(ExpImageNode node, String text) {
if (node.url.indexOf("://") == -1) {
// repository-relative image link
String path = doc.getRelativePath(node.url);
- String contextUrl = RequestCycle.get().getRequest().getRelativePathPrefixToContextRoot();
+ String contextUrl = GitBlitRequestUtils.getRelativePathPrefixToContextRoot();
String url = RawServlet.asLink(contextUrl, repositoryName, commitId, path);
return new Rendering(url, text);
}
@@ -339,7 +341,7 @@ public Rendering render(RefImageNode node, String url, String title, String alt)
if (url.indexOf("://") == -1) {
// repository-relative image link
String path = doc.getRelativePath(url);
- String contextUrl = RequestCycle.get().getRequest().getRelativePathPrefixToContextRoot();
+ String contextUrl = GitBlitRequestUtils.getRelativePathPrefixToContextRoot();
String wurl = RawServlet.asLink(contextUrl, repositoryName, commitId, path);
rendering = new Rendering(wurl, alt);
} else {
@@ -368,7 +370,7 @@ private String getWicketUrl(Class extends Page> pageClass, final String reposi
String fsc = settings.getString(Keys.web.forwardSlashCharacter, "/");
String encodedPath = document.replace(' ', '-');
try {
- encodedPath = URLEncoder.encode(encodedPath, "UTF-8");
+ encodedPath = URLEncoder.encode(encodedPath, Constants.ENCODING);
} catch (UnsupportedEncodingException e) {
logger.error(null, e);
}
diff --git a/src/main/java/com/gitblit/wicket/PluginClassResolver.java b/src/main/java/com/gitblit/wicket/PluginClassResolver.java
index 476f96118..0693891c6 100644
--- a/src/main/java/com/gitblit/wicket/PluginClassResolver.java
+++ b/src/main/java/com/gitblit/wicket/PluginClassResolver.java
@@ -117,4 +117,8 @@ private void loadResources(Enumeration resources, Set loadedFiles) {
}
}
}
+
+ @Override
+ public ClassLoader getClassLoader() {
+ return getClass().getClassLoader(); }
}
\ No newline at end of file
diff --git a/src/main/java/com/gitblit/wicket/SessionlessForm.java b/src/main/java/com/gitblit/wicket/SessionlessForm.java
index 6f7907174..d3a9c9c3a 100644
--- a/src/main/java/com/gitblit/wicket/SessionlessForm.java
+++ b/src/main/java/com/gitblit/wicket/SessionlessForm.java
@@ -15,21 +15,22 @@
*/
package com.gitblit.wicket;
+import java.nio.charset.StandardCharsets;
import java.text.MessageFormat;
import org.apache.wicket.Component;
-import org.apache.wicket.PageParameters;
+import org.apache.wicket.request.mapper.parameter.PageParameters;
import org.apache.wicket.markup.ComponentTag;
import org.apache.wicket.markup.MarkupStream;
import org.apache.wicket.markup.html.form.StatelessForm;
-import org.apache.wicket.protocol.http.RequestUtils;
-import org.apache.wicket.protocol.http.WicketURLDecoder;
-import org.apache.wicket.protocol.http.request.WebRequestCodingStrategy;
+import org.apache.wicket.util.encoding.UrlDecoder;
import org.apache.wicket.util.string.AppendingStringBuffer;
import org.apache.wicket.util.string.Strings;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import com.gitblit.Constants;
+import com.gitblit.utils.GitBlitRequestUtils;
import com.gitblit.wicket.pages.BasePage;
/**
@@ -100,12 +101,12 @@ public SessionlessForm(String id, Class extends BasePage> bookmarkablePageClas
* The open tag for the body
*/
@Override
- protected void onComponentTagBody(final MarkupStream markupStream, final ComponentTag openTag)
+ public void onComponentTagBody(final MarkupStream markupStream, final ComponentTag openTag)
{
// render the hidden bookmarkable page field
AppendingStringBuffer buffer = new AppendingStringBuffer(HIDDEN_DIV_START);
buffer.append("");
@@ -113,7 +114,7 @@ protected void onComponentTagBody(final MarkupStream markupStream, final Compone
// insert the page parameters, if any, as hidden fields as long as they
// do not collide with any child wicket:id of the form.
if (pageParameters != null) {
- for (String key : pageParameters.keySet()) {
+ for (String key : pageParameters.getNamedKeys()) {
Component c = get(key);
if (c != null) {
// this form has a field id which matches the
@@ -121,7 +122,7 @@ protected void onComponentTagBody(final MarkupStream markupStream, final Compone
log.warn(MessageFormat.format("Skipping page parameter \"{0}\" from sessionless form hidden fields because it collides with a form child wicket:id", key));
continue;
}
- String value = pageParameters.getString(key);
+ String value = pageParameters.get(key).toString();
buffer.append(" pageClass, PageParameters pageParameters) {
- String relativeUrl = urlFor(pageClass, pageParameters).toString();
- String absoluteUrl = RequestUtils.toAbsolutePath(relativeUrl);
- return absoluteUrl;
+ return GitBlitRequestUtils.toAbsoluteUrl(pageClass, pageParameters);
}
}
diff --git a/src/main/java/com/gitblit/wicket/WicketUtils.java b/src/main/java/com/gitblit/wicket/WicketUtils.java
index 99c1e08f0..356b35b69 100644
--- a/src/main/java/com/gitblit/wicket/WicketUtils.java
+++ b/src/main/java/com/gitblit/wicket/WicketUtils.java
@@ -26,19 +26,19 @@
import javax.servlet.http.HttpServletRequest;
+import org.apache.wicket.AttributeModifier;
import org.apache.wicket.Component;
-import org.apache.wicket.PageParameters;
-import org.apache.wicket.Request;
+import org.apache.wicket.request.Request;
+import org.apache.wicket.request.http.WebRequest;
+import org.apache.wicket.request.mapper.parameter.PageParameters;
+import org.apache.wicket.request.resource.ContextRelativeResource;
import org.apache.wicket.behavior.AttributeAppender;
-import org.apache.wicket.behavior.HeaderContributor;
-import org.apache.wicket.behavior.SimpleAttributeModifier;
-import org.apache.wicket.markup.html.IHeaderContributor;
-import org.apache.wicket.markup.html.IHeaderResponse;
+import org.apache.wicket.behavior.Behavior;
+import org.apache.wicket.markup.head.IHeaderResponse;
+import org.apache.wicket.markup.head.StringHeaderItem;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.image.ContextImage;
import org.apache.wicket.model.Model;
-import org.apache.wicket.protocol.http.WebRequest;
-import org.apache.wicket.resource.ContextRelativeResource;
import org.eclipse.jgit.diff.DiffEntry.ChangeType;
import com.gitblit.Constants;
@@ -49,6 +49,7 @@
import com.gitblit.models.FederationModel;
import com.gitblit.models.Metric;
import com.gitblit.utils.DiffUtils.DiffComparator;
+import com.gitblit.utils.GitBlitRequestUtils;
import com.gitblit.utils.HttpUtils;
import com.gitblit.utils.StringUtils;
import com.gitblit.utils.TimeUtils;
@@ -56,7 +57,7 @@
public class WicketUtils {
public static void setCssClass(Component container, String value) {
- container.add(new SimpleAttributeModifier("class", value));
+ container.add(new AttributeModifier("class", value));
}
public static void addCssClass(Component container, String value) {
@@ -64,21 +65,20 @@ public static void addCssClass(Component container, String value) {
}
public static void setCssStyle(Component container, String value) {
- container.add(new SimpleAttributeModifier("style", value));
+ container.add(new AttributeModifier("style", value));
}
public static void setCssBackground(Component container, String value) {
- String background = MessageFormat.format("background-color:{0};",
- StringUtils.getColor(value));
- container.add(new SimpleAttributeModifier("style", background));
+ String background = MessageFormat.format("background-color:{0};", StringUtils.getColor(value));
+ container.add(new AttributeModifier("style", background));
}
public static Component setHtmlTooltip(Component container, String value) {
- return container.add(new SimpleAttributeModifier("title", value));
+ return container.add(new AttributeModifier("title", value));
}
public static void setInputPlaceholder(Component container, String value) {
- container.add(new SimpleAttributeModifier("placeholder", value));
+ container.add(new AttributeModifier("placeholder", value));
}
public static void setChangeTypeCssClass(Component container, ChangeType type) {
@@ -175,8 +175,7 @@ public static ContextImage getFileImage(String wicketId, String filename) {
return newImage(wicketId, "file_h_16x16.png");
} else if (filename.endsWith(".sln")) {
return newImage(wicketId, "file_vs_16x16.png");
- } else if (filename.endsWith(".csv") || filename.endsWith(".xls")
- || filename.endsWith(".xlsx")) {
+ } else if (filename.endsWith(".csv") || filename.endsWith(".xls") || filename.endsWith(".xlsx")) {
return newImage(wicketId, "file_excel_16x16.png");
} else if (filename.endsWith(".doc") || filename.endsWith(".docx")) {
return newImage(wicketId, "file_doc_16x16.png");
@@ -202,14 +201,11 @@ public static ContextImage getFileImage(String wicketId, String filename) {
return newImage(wicketId, "file_16x16.png");
}
- public static ContextImage getRegistrationImage(String wicketId, FederationModel registration,
- Component c) {
+ public static ContextImage getRegistrationImage(String wicketId, FederationModel registration, Component c) {
if (registration.isResultData()) {
- return WicketUtils.newImage(wicketId, "information_16x16.png",
- c.getString("gb.federationResults"));
+ return WicketUtils.newImage(wicketId, "information_16x16.png", c.getString("gb.federationResults"));
} else {
- return WicketUtils.newImage(wicketId, "arrow_left.png",
- c.getString("gb.federationRegistration"));
+ return WicketUtils.newImage(wicketId, "arrow_left.png", c.getString("gb.federationRegistration"));
}
}
@@ -251,17 +247,16 @@ public static ContextRelativeResource getResource(String file) {
}
public static String getGitblitURL(Request request) {
- HttpServletRequest req = ((WebRequest) request).getHttpServletRequest();
+ HttpServletRequest req = GitBlitRequestUtils.getServletRequest();
return HttpUtils.getGitblitURL(req);
}
- public static HeaderContributor syndicationDiscoveryLink(final String feedTitle,
- final String url) {
- return new HeaderContributor(new IHeaderContributor() {
+ public static Behavior syndicationDiscoveryLink(final String feedTitle, final String url) {
+ return new Behavior() {
private static final long serialVersionUID = 1L;
@Override
- public void renderHead(IHeaderResponse response) {
+ public void renderHead(Component c, IHeaderResponse response) {
String contentType = "application/rss+xml";
StringBuilder buffer = new StringBuilder();
@@ -269,226 +264,154 @@ public void renderHead(IHeaderResponse response) {
buffer.append("type=\"").append(contentType).append("\" ");
buffer.append("title=\"").append(feedTitle).append("\" ");
buffer.append("href=\"").append(url).append("\" />");
- response.renderString(buffer.toString());
+ response.render(StringHeaderItem.forString(buffer.toString()));
}
- });
+ };
}
public static PageParameters newTokenParameter(String token) {
- Map parameterMap = new HashMap();
- parameterMap.put("t", token);
- return new PageParameters(parameterMap);
+ return new PageParameters().add("t", token);
}
- public static PageParameters newRegistrationParameter(String url,
- String name) {
- Map parameterMap = new HashMap();
- parameterMap.put("u", url);
- parameterMap.put("n", name);
- return new PageParameters(parameterMap);
+ public static PageParameters newRegistrationParameter(String url, String name) {
+ return new PageParameters().add("u", url).add("n", name);
}
public static PageParameters newUsernameParameter(String username) {
- Map parameterMap = new HashMap();
- parameterMap.put("user", username);
- return new PageParameters(parameterMap);
+ return new PageParameters().add("user", username);
}
public static PageParameters newTeamnameParameter(String teamname) {
- Map parameterMap = new HashMap();
- parameterMap.put("team", teamname);
- return new PageParameters(parameterMap);
+ return new PageParameters().add("team", teamname);
}
public static PageParameters newProjectParameter(String projectName) {
- Map parameterMap = new HashMap();
- parameterMap.put("p", projectName);
- return new PageParameters(parameterMap);
+ return new PageParameters().add("p", projectName);
}
public static PageParameters newRepositoryParameter(String repositoryName) {
- Map parameterMap = new HashMap();
- if (!StringUtils.isEmpty(repositoryName)) {
- parameterMap.put("r", repositoryName);
- }
- return new PageParameters(parameterMap);
+ return new PageParameters().add("r", repositoryName);
}
public static PageParameters newObjectParameter(String objectId) {
- Map parameterMap = new HashMap();
- parameterMap.put("h", objectId);
- return new PageParameters(parameterMap);
+ return new PageParameters().add("h", objectId);
}
- public static PageParameters newObjectParameter(String repositoryName,
- String objectId) {
- Map parameterMap = new HashMap();
+ public static PageParameters newObjectParameter(String repositoryName, String objectId) {
if (StringUtils.isEmpty(objectId)) {
return newRepositoryParameter(repositoryName);
}
- parameterMap.put("r", repositoryName);
- parameterMap.put("h", objectId);
- return new PageParameters(parameterMap);
+ return new PageParameters().add("r", repositoryName).add("h", objectId);
}
- public static PageParameters newDiffParameter(String repositoryName,
- String objectId, DiffComparator diffComparator) {
- Map parameterMap = new HashMap();
+ public static PageParameters newDiffParameter(String repositoryName, String objectId,
+ DiffComparator diffComparator) {
if (StringUtils.isEmpty(objectId)) {
return newRepositoryParameter(repositoryName);
}
- parameterMap.put("r", repositoryName);
- parameterMap.put("h", objectId);
- parameterMap.put("w", "" + diffComparator.ordinal());
- return new PageParameters(parameterMap);
+ return new PageParameters().add("r", repositoryName).add("h", objectId).add("w", "" + diffComparator.ordinal());
}
- public static PageParameters newDiffParameter(String repositoryName,
- String objectId, DiffComparator diffComparator, String blobPath) {
- Map parameterMap = new HashMap();
+ public static PageParameters newDiffParameter(String repositoryName, String objectId, DiffComparator diffComparator,
+ String blobPath) {
if (StringUtils.isEmpty(objectId)) {
return newRepositoryParameter(repositoryName);
}
- parameterMap.put("r", repositoryName);
- parameterMap.put("h", objectId);
- parameterMap.put("w", "" + diffComparator.ordinal());
- parameterMap.put("f", blobPath);
- return new PageParameters(parameterMap);
+ return newDiffParameter(repositoryName, objectId, diffComparator).add("f", blobPath);
}
- public static PageParameters newRangeParameter(String repositoryName,
- String startRange, String endRange) {
- Map parameterMap = new HashMap();
- parameterMap.put("r", repositoryName);
- parameterMap.put("h", startRange + ".." + endRange);
- return new PageParameters(parameterMap);
+ public static PageParameters newRangeParameter(String repositoryName, String startRange, String endRange) {
+ return new PageParameters().add("r", repositoryName).add("h", startRange + ".." + endRange);
}
- public static PageParameters newPathParameter(String repositoryName,
- String objectId, String path) {
- Map parameterMap = new HashMap();
+ public static PageParameters newPathParameter(String repositoryName, String objectId, String path) {
if (StringUtils.isEmpty(path)) {
return newObjectParameter(repositoryName, objectId);
}
if (StringUtils.isEmpty(objectId)) {
- parameterMap.put("r", repositoryName);
- parameterMap.put("f", path);
- return new PageParameters(parameterMap);
+ return new PageParameters().add("r", repositoryName).add("f", path);
}
- parameterMap.put("r", repositoryName);
- parameterMap.put("h", objectId);
- parameterMap.put("f", path);
- return new PageParameters(parameterMap);
+ return new PageParameters().add("r", repositoryName).add("h", objectId).add("f", path);
}
- public static PageParameters newLogPageParameter(String repositoryName,
- String objectId, int pageNumber) {
- Map parameterMap = new HashMap();
+ public static PageParameters newLogPageParameter(String repositoryName, String objectId, int pageNumber) {
if (pageNumber <= 1) {
return newObjectParameter(repositoryName, objectId);
}
if (StringUtils.isEmpty(objectId)) {
- parameterMap.put("r", repositoryName);
- parameterMap.put("pg", String.valueOf(pageNumber));
- return new PageParameters(parameterMap);
+ return new PageParameters().add("r", repositoryName).add("pg", String.valueOf(pageNumber));
}
- parameterMap.put("r", repositoryName);
- parameterMap.put("h", objectId);
- parameterMap.put("pg", String.valueOf(pageNumber));
- return new PageParameters(parameterMap);
+ return new PageParameters().add("r", repositoryName).add("h", objectId).add("pg", String.valueOf(pageNumber));
}
- public static PageParameters newHistoryPageParameter(String repositoryName,
- String objectId, String path, int pageNumber) {
- Map parameterMap = new HashMap();
+ public static PageParameters newHistoryPageParameter(String repositoryName, String objectId, String path, int pageNumber) {
if (pageNumber <= 1) {
return newObjectParameter(repositoryName, objectId);
}
- if (StringUtils.isEmpty(objectId)) {
- parameterMap.put("r", repositoryName);
- parameterMap.put("f", path);
- parameterMap.put("pg", String.valueOf(pageNumber));
- return new PageParameters(parameterMap);
+
+ PageParameters pp = new PageParameters();
+ pp.add("r", repositoryName);
+ pp.add("f", path);
+ pp.add("pg", String.valueOf(pageNumber));
+ if (!StringUtils.isEmpty(objectId)) {
+ pp.add("h", objectId);
}
- parameterMap.put("r", repositoryName);
- parameterMap.put("h", objectId);
- parameterMap.put("f", path);
- parameterMap.put("pg", String.valueOf(pageNumber));
- return new PageParameters(parameterMap);
+ return pp;
}
public static PageParameters newFilestorePageParameter(int pageNumber, String filter) {
- Map parameterMap = new HashMap();
-
+ PageParameters pp = new PageParameters();
if (pageNumber > 1) {
- parameterMap.put("pg", String.valueOf(pageNumber));
+ pp.add("pg", String.valueOf(pageNumber));
}
if (filter != null) {
- parameterMap.put("s", String.valueOf(filter));
+ pp.add("s", String.valueOf(filter));
}
-
- return new PageParameters(parameterMap);
- }
-
- public static PageParameters newBlobDiffParameter(String repositoryName,
- String baseCommitId, String commitId, String path) {
- Map parameterMap = new HashMap();
- if (StringUtils.isEmpty(commitId)) {
- parameterMap.put("r", repositoryName);
- parameterMap.put("f", path);
- parameterMap.put("hb", baseCommitId);
- return new PageParameters(parameterMap);
- }
- parameterMap.put("r", repositoryName);
- parameterMap.put("h", commitId);
- parameterMap.put("f", path);
- parameterMap.put("hb", baseCommitId);
- return new PageParameters(parameterMap);
- }
-
- public static PageParameters newSearchParameter(String repositoryName,
- String commitId, String search, Constants.SearchType type) {
- Map parameterMap = new HashMap();
- if (StringUtils.isEmpty(commitId)) {
- parameterMap.put("r", repositoryName);
- parameterMap.put("s", search);
- parameterMap.put("st", type.name());
- return new PageParameters(parameterMap);
- }
- parameterMap.put("r", repositoryName);
- parameterMap.put("h", commitId);
- parameterMap.put("s", search);
- parameterMap.put("st", type.name());
- return new PageParameters(parameterMap);
- }
-
- public static PageParameters newSearchParameter(String repositoryName,
- String commitId, String search, Constants.SearchType type,
- int pageNumber) {
- Map parameterMap = new HashMap();
- if (StringUtils.isEmpty(commitId)) {
- parameterMap.put("r", repositoryName);
- parameterMap.put("s", search);
- parameterMap.put("st", type.name());
- parameterMap.put("pg", String.valueOf(pageNumber));
- return new PageParameters(parameterMap);
- }
- parameterMap.put("r", repositoryName);
- parameterMap.put("h", commitId);
- parameterMap.put("s", search);
- parameterMap.put("st", type.name());
- parameterMap.put("pg", String.valueOf(pageNumber));
- return new PageParameters(parameterMap);
- }
-
- public static PageParameters newBlameTypeParameter(String repositoryName,
- String commitId, String path, String blameType) {
- Map parameterMap = new HashMap();
- parameterMap.put("r", repositoryName);
- parameterMap.put("h", commitId);
- parameterMap.put("f", path);
- parameterMap.put("blametype", blameType);
- return new PageParameters(parameterMap);
+
+ return pp;
+ }
+
+ public static PageParameters newBlobDiffParameter(String repositoryName, String baseCommitId, String commitId,
+ String path) {
+ PageParameters pp = new PageParameters();
+ pp.add("r", repositoryName);
+ pp.add("f", path);
+ pp.add("hb", baseCommitId);
+ if (!StringUtils.isEmpty(commitId)) {
+ pp.add("h", commitId);
+ }
+ return pp;
+ }
+
+ public static PageParameters newSearchParameter(String repositoryName, String commitId, String search,
+ Constants.SearchType type) {
+ PageParameters pp = new PageParameters();
+ pp.add("r", repositoryName);
+ pp.add("s", search);
+ pp.add("st", type.name());
+ if (!StringUtils.isEmpty(commitId)) {
+ pp.add("h", commitId);
+ }
+ return pp;
+ }
+
+ public static PageParameters newSearchParameter(String repositoryName, String commitId, String search,
+ Constants.SearchType type, int pageNumber) {
+ PageParameters pp = new PageParameters();
+ pp.add("r", repositoryName);
+ pp.add("s", search);
+ pp.add("st", type.name());
+ pp.add("pg", String.valueOf(pageNumber));
+ if (!StringUtils.isEmpty(commitId)) {
+ pp.add("h", commitId);
+ }
+ return pp;
+ }
+
+ public static PageParameters newBlameTypeParameter(String repositoryName, String commitId, String path,
+ String blameType) {
+ return new PageParameters().add("r", repositoryName).add("h", commitId).add("f", path).add("blametype",
+ blameType);
}
public static PageParameters newTicketsParameters(String repositoryName, String... states) {
@@ -506,84 +429,85 @@ public static PageParameters newOpenTicketsParameter(String repositoryName) {
}
public static String getProjectName(PageParameters params) {
- return params.getString("p", "");
+ return params.get("p").toString("");
}
public static String getRepositoryName(PageParameters params) {
- return params.getString("r", "");
+ return params.get("r").toString("");
}
public static String getObject(PageParameters params) {
- return params.getString("h", null);
+ return params.get("h").toString(null);
}
public static String getPath(PageParameters params) {
- return params.getString("f", null);
+ return params.get("f").toString(null);
}
public static String getBaseObjectId(PageParameters params) {
- return params.getString("hb", null);
+ return params.get("hb").toString(null);
}
public static String getSearchString(PageParameters params) {
- return params.getString("s", null);
+ return params.get("s").toString(null);
}
public static String getSearchType(PageParameters params) {
- return params.getString("st", null);
+ return params.get("st").toString(null);
}
public static DiffComparator getDiffComparator(PageParameters params) {
- int ordinal = params.getInt("w", 0);
+ int ordinal = params.get("w").toInt(0);
return DiffComparator.values()[ordinal];
}
public static int getPage(PageParameters params) {
// index from 1
- return params.getInt("pg", 1);
+ return params.get("pg").toInt(1);
}
public static String getRegEx(PageParameters params) {
- return params.getString("x", "");
+ return params.get("x").toString("");
}
public static String getSet(PageParameters params) {
- return params.getString("set", "");
+ return params.get("set").toString("");
}
public static String getTeam(PageParameters params) {
- return params.getString("team", "");
+ return params.get("team").toString("");
}
public static int getDaysBack(PageParameters params) {
- return params.getInt("db", 0);
+ return params.get("db").toInt(0);
}
public static String getUsername(PageParameters params) {
- return params.getString("user", "");
+ return params.get("user").toString("");
}
public static String getTeamname(PageParameters params) {
- return params.getString("team", "");
+ return params.get("team").toString("");
}
public static String getToken(PageParameters params) {
- return params.getString("t", "");
+ return params.get("t").toString("");
}
public static String getUrlParameter(PageParameters params) {
- return params.getString("u", "");
+ return params.get("u").toString("");
}
public static String getNameParameter(PageParameters params) {
- return params.getString("n", "");
+ return params.get("n").toString("");
}
public static Label createDateLabel(String wicketId, Date date, TimeZone timeZone, TimeUtils timeUtils) {
return createDateLabel(wicketId, date, timeZone, timeUtils, true);
}
- public static Label createDateLabel(String wicketId, Date date, TimeZone timeZone, TimeUtils timeUtils, boolean setCss) {
+ public static Label createDateLabel(String wicketId, Date date, TimeZone timeZone, TimeUtils timeUtils,
+ boolean setCss) {
String format = GitBlitWebApp.get().settings().getString(Keys.web.datestampShortFormat, "MM/dd/yy");
DateFormat df = new SimpleDateFormat(format);
if (timeZone == null) {
diff --git a/src/main/java/com/gitblit/wicket/charting/Charts.java b/src/main/java/com/gitblit/wicket/charting/Charts.java
index 54a7689ba..fa765bbd1 100644
--- a/src/main/java/com/gitblit/wicket/charting/Charts.java
+++ b/src/main/java/com/gitblit/wicket/charting/Charts.java
@@ -18,6 +18,7 @@
import java.util.ArrayList;
import java.util.List;
+import org.apache.wicket.behavior.Behavior;
import org.apache.wicket.markup.html.IHeaderContributor;
/**
@@ -26,7 +27,7 @@
* @author Tim Ryan
*
*/
-public abstract class Charts implements IHeaderContributor {
+public abstract class Charts extends Behavior {
private static final long serialVersionUID = 1L;
diff --git a/src/main/java/com/gitblit/wicket/charting/Flotr2Charts.java b/src/main/java/com/gitblit/wicket/charting/Flotr2Charts.java
index 7a8adcf21..ba31831cd 100644
--- a/src/main/java/com/gitblit/wicket/charting/Flotr2Charts.java
+++ b/src/main/java/com/gitblit/wicket/charting/Flotr2Charts.java
@@ -17,8 +17,12 @@
import javax.servlet.ServletContext;
-import org.apache.wicket.markup.html.IHeaderResponse;
-import org.apache.wicket.protocol.http.WebApplication;
+import org.apache.wicket.Component;
+import org.apache.wicket.markup.head.CssHeaderItem;
+import org.apache.wicket.markup.head.IHeaderResponse;
+import org.apache.wicket.markup.head.JavaScriptHeaderItem;
+import org.apache.wicket.markup.head.OnDomReadyHeaderItem;
+import org.apache.wicket.request.resource.PackageResourceReference;
/**
* Concrete class for Flotr2 charts
@@ -31,20 +35,15 @@ public class Flotr2Charts extends Charts {
private static final long serialVersionUID = 1L;
@Override
- public void renderHead(IHeaderResponse response) {
+ public void renderHead(Component component, IHeaderResponse response) {
// add Google Chart JS API reference
- ServletContext servletContext = WebApplication.get().getServletContext();
- String contextPath = servletContext.getContextPath();
-
- response.renderJavascriptReference(contextPath + "/bootstrap/js/jquery.js");
- response.renderJavascriptReference(contextPath + "/flotr2/flotr2.min.js");
- response.renderCSSReference(contextPath + "/flotr2/flotr2.custom.css");
+ response.render(JavaScriptHeaderItem.forReference(new PackageResourceReference(Flotr2Charts.class, "flotr2.min.js")));
+ response.render(CssHeaderItem.forReference(new PackageResourceReference(Flotr2Charts.class, "flotr2.custom.css")));
// prepare draw chart function
StringBuilder sb = new StringBuilder();
- line(sb, "$( document ).ready(function() {");
line(sb, "try {");
// add charts to header
for (Chart chart : charts) {
@@ -57,8 +56,7 @@ public void renderHead(IHeaderResponse response) {
line(sb, " }");
line(sb, "}");
// end draw chart function
- line(sb, "});");
- response.renderJavascript(sb.toString(), null);
+ response.render(OnDomReadyHeaderItem.forScript(sb.toString()));
}
@Override
diff --git a/src/main/resources/flotr2/flotr2.custom.css b/src/main/java/com/gitblit/wicket/charting/flotr2.custom.css
similarity index 100%
rename from src/main/resources/flotr2/flotr2.custom.css
rename to src/main/java/com/gitblit/wicket/charting/flotr2.custom.css
diff --git a/src/main/resources/flotr2/flotr2.min.js b/src/main/java/com/gitblit/wicket/charting/flotr2.min.js
similarity index 100%
rename from src/main/resources/flotr2/flotr2.min.js
rename to src/main/java/com/gitblit/wicket/charting/flotr2.min.js
diff --git a/src/main/java/com/gitblit/wicket/freemarker/FreemarkerPanel.java b/src/main/java/com/gitblit/wicket/freemarker/FreemarkerPanel.java
index aaf1a1351..f5d1726d7 100644
--- a/src/main/java/com/gitblit/wicket/freemarker/FreemarkerPanel.java
+++ b/src/main/java/com/gitblit/wicket/freemarker/FreemarkerPanel.java
@@ -120,7 +120,7 @@ private Template getTemplate()
* MarkupStream, org.apache.wicket.markup.ComponentTag)
*/
@Override
- protected void onComponentTagBody(MarkupStream markupStream, ComponentTag openTag)
+ public void onComponentTagBody(MarkupStream markupStream, ComponentTag openTag)
{
if (!Strings.isEmpty(stackTraceAsString))
{
diff --git a/src/main/java/com/gitblit/wicket/ng/NgController.java b/src/main/java/com/gitblit/wicket/ng/NgController.java
index 19e419a02..65ba78cd3 100644
--- a/src/main/java/com/gitblit/wicket/ng/NgController.java
+++ b/src/main/java/com/gitblit/wicket/ng/NgController.java
@@ -17,11 +17,16 @@
import java.text.MessageFormat;
import java.util.HashMap;
+import java.util.List;
import java.util.Map;
-import org.apache.wicket.ResourceReference;
-import org.apache.wicket.markup.html.IHeaderContributor;
-import org.apache.wicket.markup.html.IHeaderResponse;
+import org.apache.wicket.Component;
+import org.apache.wicket.behavior.Behavior;
+import org.apache.wicket.markup.head.HeaderItem;
+import org.apache.wicket.markup.head.IHeaderResponse;
+import org.apache.wicket.markup.head.JavaScriptHeaderItem;
+import org.apache.wicket.request.resource.PackageResourceReference;
+import org.apache.wicket.resource.JQueryResourceReference;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
@@ -34,7 +39,7 @@
* @author James Moger
*
*/
-public class NgController implements IHeaderContributor {
+public class NgController extends Behavior {
private static final long serialVersionUID = 1L;
@@ -52,9 +57,18 @@ public void addVariable(String name, Object o) {
}
@Override
- public void renderHead(IHeaderResponse response) {
+ public void renderHead(Component component, IHeaderResponse response) {
// add Google AngularJS reference
- response.renderJavascriptReference(new ResourceReference(NgController.class, "angular.js"));
+ response.render(JavaScriptHeaderItem.forReference(new PackageResourceReference(NgController.class, "angular.js"){
+ private static final long serialVersionUID = 1L;
+
+ @Override
+ public List getDependencies() {
+ List deps = super.getDependencies();
+ deps.add(JavaScriptHeaderItem.forReference(JQueryResourceReference.get()));
+ return deps;
+ }
+ }));
Gson gson = new GsonBuilder().create();
@@ -69,7 +83,7 @@ public void renderHead(IHeaderResponse response) {
}
line(sb, "}");
- response.renderJavascript(sb.toString(), null);
+ response.render(JavaScriptHeaderItem.forScript(sb.toString(), "angularController-"+name));
}
private void line(StringBuilder sb, String line) {
diff --git a/src/main/java/com/gitblit/wicket/pages/ActivityPage.java b/src/main/java/com/gitblit/wicket/pages/ActivityPage.java
index c505a6664..82e64c150 100644
--- a/src/main/java/com/gitblit/wicket/pages/ActivityPage.java
+++ b/src/main/java/com/gitblit/wicket/pages/ActivityPage.java
@@ -24,8 +24,7 @@
import java.util.Map;
import java.util.Set;
-import org.apache.wicket.PageParameters;
-import org.apache.wicket.behavior.HeaderContributor;
+import org.apache.wicket.request.mapper.parameter.PageParameters;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.panel.Fragment;
@@ -118,8 +117,8 @@ public ActivityPage(PageParameters params) {
// create the activity charts
if (app().settings().getBoolean(Keys.web.generateActivityGraph, true)) {
Charts charts = createCharts(recentActivity);
- add(new HeaderContributor(charts));
- add(new Fragment("chartsPanel", "chartsFragment", this));
+ add(charts);
+ add(new Fragment("chartsPanel", "chartsFragment", ActivityPage.this));
} else {
add(new Label("chartsPanel").setVisible(false));
}
@@ -141,8 +140,8 @@ protected void addDropDownMenus(List navLinks) {
PageParameters currentParameters = getPageParameters();
int daysBack = app().settings().getInteger(Keys.web.activityDuration, 7);
- if (currentParameters != null && !currentParameters.containsKey("db")) {
- currentParameters.put("db", daysBack);
+ if (currentParameters != null && currentParameters.get("db").isEmpty()) {
+ currentParameters.add("db", daysBack);
}
// preserve time filter options on repository choices
diff --git a/src/main/java/com/gitblit/wicket/pages/BasePage.html b/src/main/java/com/gitblit/wicket/pages/BasePage.html
index 4dbc2e574..0335bfe76 100644
--- a/src/main/java/com/gitblit/wicket/pages/BasePage.html
+++ b/src/main/java/com/gitblit/wicket/pages/BasePage.html
@@ -7,11 +7,11 @@
-
+
[page title]
+
-
@@ -50,7 +50,6 @@
-