From a502d96a860456ec5e8c96761db70f7cabb74751 Mon Sep 17 00:00:00 2001 From: Paul Martin <paul@paulsputer.com> Date: Sat, 30 Apr 2016 04:19:14 -0400 Subject: [PATCH] Merge pull request #1073 from gitblit/1062-DocEditorUpdates --- src/main/java/com/gitblit/wicket/GitblitWicketFilter.java | 83 ++++++++++++++++++++++++++++++++--------- 1 files changed, 64 insertions(+), 19 deletions(-) diff --git a/src/main/java/com/gitblit/wicket/GitblitWicketFilter.java b/src/main/java/com/gitblit/wicket/GitblitWicketFilter.java index f46c51e..68ad84a 100644 --- a/src/main/java/com/gitblit/wicket/GitblitWicketFilter.java +++ b/src/main/java/com/gitblit/wicket/GitblitWicketFilter.java @@ -17,48 +17,93 @@ import java.util.Date; +import com.google.inject.Inject; +import com.google.inject.Singleton; import javax.servlet.http.HttpServletRequest; +import org.apache.wicket.protocol.http.IWebApplicationFactory; +import org.apache.wicket.protocol.http.WebApplication; import org.apache.wicket.protocol.http.WicketFilter; import org.apache.wicket.util.string.Strings; import org.eclipse.jgit.lib.Repository; import org.eclipse.jgit.revwalk.RevCommit; -import com.gitblit.GitBlit; +import com.gitblit.IStoredSettings; import com.gitblit.Keys; +import com.gitblit.manager.IProjectManager; +import com.gitblit.manager.IRepositoryManager; +import com.gitblit.manager.IRuntimeManager; import com.gitblit.models.ProjectModel; import com.gitblit.models.RepositoryModel; import com.gitblit.utils.JGitUtils; import com.gitblit.utils.StringUtils; /** - * + * * Customization of the WicketFilter to allow smart browser-side caching of * some pages. - * + * * @author James Moger * */ +@Singleton public class GitblitWicketFilter extends WicketFilter { - + + private IStoredSettings settings; + + private IRuntimeManager runtimeManager; + + private IRepositoryManager repositoryManager; + + private IProjectManager projectManager; + + private GitBlitWebApp webapp; + + @Inject + public GitblitWicketFilter( + IStoredSettings settings, + IRuntimeManager runtimeManager, + IRepositoryManager repositoryManager, + IProjectManager projectManager, + GitBlitWebApp webapp) { + + this.settings = settings; + this.runtimeManager = runtimeManager; + this.repositoryManager = repositoryManager; + this.projectManager = projectManager; + this.webapp = webapp; + } + + @Override + protected IWebApplicationFactory getApplicationFactory() { + return new IWebApplicationFactory() { + @Override + public WebApplication createApplication(WicketFilter filter) { + return webapp; + } + }; + } + /** * Determines the last-modified date of the requested resource. - * + * * @param servletRequest * @return The last modified time stamp */ + @Override protected long getLastModified(final HttpServletRequest servletRequest) { final String pathInfo = getRelativePath(servletRequest); - if (Strings.isEmpty(pathInfo)) + 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 = ""; @@ -68,26 +113,26 @@ 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(GitBlit.getChar(Keys.web.forwardSlashCharacter, '/'), '/'); + + repo = repo.replace("%2f", "/").replace("%2F", "/").replace(settings.getChar(Keys.web.forwardSlashCharacter, '/'), '/'); GitBlitWebApp app = (GitBlitWebApp) getWebApplication(); - int expires = GitBlit.getInteger(Keys.web.pageCacheExpires, 0); + 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 = GitBlit.getBootDate(); + Date bootDate = runtimeManager.getBootDate(); switch (cacheControl.value()) { case ACTIVITY: // returns the last activity date of the server - Date activityDate = GitBlit.getLastActivityDate(); + Date activityDate = repositoryManager.getLastActivityDate(); if (activityDate != null) { return activityDate.after(bootDate) ? activityDate.getTime() : bootDate.getTime(); } @@ -97,7 +142,7 @@ return bootDate.getTime(); case PROJECT: // return the latest change date for the project OR the boot date - ProjectModel project = GitBlit.self().getProjectModel(StringUtils.getRootPath(repo)); + ProjectModel project = projectManager.getProjectModel(StringUtils.getRootPath(repo)); if (project != null) { return project.lastChange.after(bootDate) ? project.lastChange.getTime() : bootDate.getTime(); } @@ -105,7 +150,7 @@ case REPOSITORY: // return the lastest change date for the repository OR the boot // date, whichever is latest - RepositoryModel repository = GitBlit.self().getRepositoryModel(repo); + RepositoryModel repository = repositoryManager.getRepositoryModel(repo); if (repository != null && repository.lastChange != null) { return repository.lastChange.after(bootDate) ? repository.lastChange.getTime() : bootDate.getTime(); } @@ -116,11 +161,11 @@ // no commit id, use boot date return bootDate.getTime(); } else { - // last modified date is the commit date + // last modified date is the commit date Repository r = null; try { // return the timestamp of the associated commit - r = GitBlit.self().getRepository(repo); + r = repositoryManager.getRepository(repo); if (r != null) { RevCommit commit = JGitUtils.getCommit(r, commitId); if (commit != null) { @@ -138,7 +183,7 @@ default: break; } - } + } return -1; } -- Gitblit v1.9.1