From bdfdc9c65c5eb2786b7dd8e33ba8a12a3bafe86d Mon Sep 17 00:00:00 2001 From: James Moger <james.moger@gitblit.com> Date: Fri, 29 Nov 2013 11:05:51 -0500 Subject: [PATCH] Extract NotificationManager from GitBlit singleton --- src/main/java/com/gitblit/wicket/pages/BasePage.java | 97 ++++++++++++++++++++++++++++-------------------- 1 files changed, 57 insertions(+), 40 deletions(-) diff --git a/src/main/java/com/gitblit/wicket/pages/BasePage.java b/src/main/java/com/gitblit/wicket/pages/BasePage.java index c9e11b0..647a938 100644 --- a/src/main/java/com/gitblit/wicket/pages/BasePage.java +++ b/src/main/java/com/gitblit/wicket/pages/BasePage.java @@ -52,7 +52,6 @@ import com.gitblit.Constants.AccessRestrictionType; import com.gitblit.Constants.AuthorizationControl; import com.gitblit.Constants.FederationStrategy; -import com.gitblit.GitBlit; import com.gitblit.Keys; import com.gitblit.models.ProjectModel; import com.gitblit.models.TeamModel; @@ -67,7 +66,7 @@ public abstract class BasePage extends SessionPage { private final Logger logger; - + private transient TimeUtils timeUtils; public BasePage() { @@ -81,24 +80,34 @@ logger = LoggerFactory.getLogger(getClass()); customizeHeader(); } - + private void customizeHeader() { - if (GitBlit.getBoolean(Keys.web.useResponsiveLayout, true)) { + if (app().settings().getBoolean(Keys.web.useResponsiveLayout, true)) { add(CSSPackageResource.getHeaderContribution("bootstrap/css/bootstrap-responsive.css")); } } - + + protected String getCanonicalUrl() { + return getCanonicalUrl(getClass(), getPageParameters()); + } + + protected String getCanonicalUrl(Class<? extends BasePage> clazz, PageParameters params) { + String relativeUrl = urlFor(clazz, params).toString(); + String canonicalUrl = RequestUtils.toAbsolutePath(relativeUrl); + return canonicalUrl; + } + protected String getLanguageCode() { return GitBlitWebSession.get().getLocale().getLanguage(); } - + protected String getCountryCode() { return GitBlitWebSession.get().getLocale().getCountry().toLowerCase(); } - + protected TimeUtils getTimeUtils() { if (timeUtils == null) { - ResourceBundle bundle; + ResourceBundle bundle; try { bundle = ResourceBundle.getBundle("com.gitblit.wicket.GitBlitWebApp", GitBlitWebSession.get().getLocale()); } catch (Throwable t) { @@ -108,10 +117,10 @@ } return timeUtils; } - + @Override protected void onBeforeRender() { - if (GitBlit.isDebugMode()) { + if (app().isDebugMode()) { // strip Wicket tags in debug mode for jQuery DOM traversal Application.get().getMarkupSettings().setStripWicketTags(true); } @@ -120,16 +129,19 @@ @Override protected void onAfterRender() { - if (GitBlit.isDebugMode()) { + if (app().isDebugMode()) { // restore Wicket debug tags Application.get().getMarkupSettings().setStripWicketTags(false); } super.onAfterRender(); } - + @Override protected void setHeaders(WebResponse response) { - int expires = GitBlit.getInteger(Keys.web.pageCacheExpires, 0); + // set canonical link as http header for SEO (issue-304) + // https://support.google.com/webmasters/answer/139394?hl=en + response.setHeader("Link", MessageFormat.format("<{0}>; rel=\"canonical\"", getCanonicalUrl())); + int expires = app().settings().getInteger(Keys.web.pageCacheExpires, 0); if (expires > 0) { // pages are personalized for the authenticated user so they must be // marked private to prohibit proxy servers from caching them @@ -140,21 +152,21 @@ super.setHeaders(response); } } - + /** * Sets the last-modified header date, if appropriate, for this page. The * date used is determined by the CacheControl annotation. - * + * */ protected void setLastModified() { if (getClass().isAnnotationPresent(CacheControl.class)) { CacheControl cacheControl = getClass().getAnnotation(CacheControl.class); switch (cacheControl.value()) { case ACTIVITY: - setLastModified(GitBlit.getLastActivityDate()); + setLastModified(app().getLastActivityDate()); break; case BOOT: - setLastModified(GitBlit.getBootDate()); + setLastModified(app().getBootDate()); break; case NONE: break; @@ -164,32 +176,32 @@ } } } - + /** * Sets the last-modified header field and the expires field. - * + * * @param when */ protected final void setLastModified(Date when) { if (when == null) { return; } - - if (when.before(GitBlit.getBootDate())) { + + if (when.before(app().getBootDate())) { // last-modified can not be before the Gitblit boot date // this helps ensure that pages are properly refreshed after a // server config change - when = GitBlit.getBootDate(); + when = app().getBootDate(); } - - int expires = GitBlit.getInteger(Keys.web.pageCacheExpires, 0); + + int expires = app().settings().getInteger(Keys.web.pageCacheExpires, 0); WebResponse response = (WebResponse) getResponse(); response.setLastModifiedTime(Time.valueOf(when)); response.setDateHeader("Expires", System.currentTimeMillis() + Duration.minutes(expires).getMilliseconds()); } protected void setupPage(String repositoryName, String pageName) { - String siteName = GitBlit.getString(Keys.web.siteName, Constants.NAME); + String siteName = app().settings().getString(Keys.web.siteName, Constants.NAME); if (StringUtils.isEmpty(siteName)) { siteName = Constants.NAME; } @@ -199,15 +211,16 @@ add(new Label("title", siteName)); } - ExternalLink rootLink = new ExternalLink("rootLink", urlFor(GitBlitWebApp.HOME_PAGE_CLASS, null).toString()); - WicketUtils.setHtmlTooltip(rootLink, GitBlit.getString(Keys.web.siteName, Constants.NAME)); + String rootLinkUrl = app().settings().getString(Keys.web.rootLink, urlFor(GitBlitWebApp.get().getHomePage(), null).toString()); + ExternalLink rootLink = new ExternalLink("rootLink", rootLinkUrl); + WicketUtils.setHtmlTooltip(rootLink, app().settings().getString(Keys.web.siteName, Constants.NAME)); add(rootLink); // Feedback panel for info, warning, and non-fatal error messages add(new FeedbackPanel("feedback")); add(new Label("gbVersion", "v" + Constants.getVersion())); - if (GitBlit.getBoolean(Keys.web.aggressiveHeapManagement, false)) { + if (app().settings().getBoolean(Keys.web.aggressiveHeapManagement, false)) { System.gc(); } } @@ -232,7 +245,7 @@ } return map; } - + protected Map<AccessPermission, String> getAccessPermissions() { Map<AccessPermission, String> map = new LinkedHashMap<AccessPermission, String>(); for (AccessPermission type : AccessPermission.values()) { @@ -265,7 +278,7 @@ } return map; } - + protected Map<FederationStrategy, String> getFederationTypes() { Map<FederationStrategy, String> map = new LinkedHashMap<FederationStrategy, String>(); for (FederationStrategy type : FederationStrategy.values()) { @@ -283,7 +296,7 @@ } return map; } - + protected Map<AuthorizationControl, String> getAuthorizationControls() { Map<AuthorizationControl, String> map = new LinkedHashMap<AuthorizationControl, String>(); for (AuthorizationControl type : AuthorizationControl.values()) { @@ -300,8 +313,8 @@ } protected TimeZone getTimeZone() { - return GitBlit.getBoolean(Keys.web.useClientTimezone, false) ? GitBlitWebSession.get() - .getTimezone() : GitBlit.getTimezone(); + return app().settings().getBoolean(Keys.web.useClientTimezone, false) ? GitBlitWebSession.get() + .getTimezone() : app().getTimezone(); } protected String getServerName() { @@ -309,13 +322,13 @@ HttpServletRequest req = servletWebRequest.getHttpServletRequest(); return req.getServerName(); } - + protected List<ProjectModel> getProjectModels() { final UserModel user = GitBlitWebSession.get().getUser(); - List<ProjectModel> projects = GitBlit.self().getProjectModels(user, true); + List<ProjectModel> projects = app().projects().getProjectModels(user, true); return projects; } - + protected List<ProjectModel> getProjects(PageParameters params) { if (params == null) { return getProjectModels(); @@ -325,6 +338,7 @@ String regex = WicketUtils.getRegEx(params); String team = WicketUtils.getTeam(params); int daysBack = params.getInt("db", 0); + int maxDaysBack = app().settings().getInteger(Keys.web.activityDurationMaximum, 30); List<ProjectModel> availableModels = getProjectModels(); Set<ProjectModel> models = new HashSet<ProjectModel>(); @@ -348,7 +362,7 @@ // need TeamModels first List<TeamModel> teamModels = new ArrayList<TeamModel>(); for (String name : teams) { - TeamModel teamModel = GitBlit.self().getTeamModel(name); + TeamModel teamModel = app().users().getTeamModel(name); if (teamModel != null) { teamModels.add(teamModel); } @@ -372,6 +386,9 @@ // time-filter the list if (daysBack > 0) { + if (maxDaysBack > 0 && daysBack > maxDaysBack) { + daysBack = maxDaysBack; + } Calendar cal = Calendar.getInstance(); cal.set(Calendar.HOUR_OF_DAY, 0); cal.set(Calendar.MINUTE, 0); @@ -396,7 +413,7 @@ public void warn(String message, Throwable t) { logger.warn(message, t); } - + public void error(String message, boolean redirect) { error(message, null, redirect ? getApplication().getHomePage() : null); } @@ -404,11 +421,11 @@ public void error(String message, Throwable t, boolean redirect) { error(message, t, getApplication().getHomePage()); } - + public void error(String message, Throwable t, Class<? extends Page> toPage) { error(message, t, toPage, null); } - + public void error(String message, Throwable t, Class<? extends Page> toPage, PageParameters params) { if (t == null) { logger.error(message + " for " + GitBlitWebSession.get().getUsername()); -- Gitblit v1.9.1