From 31bcbea4c35e29d3b5147d33a41544cb125cf694 Mon Sep 17 00:00:00 2001 From: James Moger <james.moger@gitblit.com> Date: Fri, 23 Dec 2011 16:55:43 -0500 Subject: [PATCH] Filters menu for Repositories page and Activity page (issue 27) --- src/com/gitblit/wicket/pages/RootPage.java | 74 +++++++++++++++++++++++++++++++++---- 1 files changed, 66 insertions(+), 8 deletions(-) diff --git a/src/com/gitblit/wicket/pages/RootPage.java b/src/com/gitblit/wicket/pages/RootPage.java index a907c73..0278470 100644 --- a/src/com/gitblit/wicket/pages/RootPage.java +++ b/src/com/gitblit/wicket/pages/RootPage.java @@ -17,7 +17,9 @@ import java.text.MessageFormat; import java.util.ArrayList; +import java.util.LinkedHashSet; import java.util.List; +import java.util.Set; import java.util.regex.Pattern; import org.apache.wicket.PageParameters; @@ -37,6 +39,7 @@ import com.gitblit.utils.StringUtils; import com.gitblit.wicket.GitBlitWebSession; import com.gitblit.wicket.PageRegistration; +import com.gitblit.wicket.PageRegistration.DropDownMenuItem; import com.gitblit.wicket.WicketUtils; import com.gitblit.wicket.panels.NavigationPanel; @@ -64,14 +67,17 @@ @Override protected void setupPage(String repositoryName, String pageName) { - if (GitBlit.getBoolean(Keys.web.authenticateAdminPages, true)) { - boolean allowAdmin = GitBlit.getBoolean(Keys.web.allowAdministration, false); + boolean authenticateView = GitBlit.getBoolean(Keys.web.authenticateViewPages, false); + boolean authenticateAdmin = GitBlit.getBoolean(Keys.web.authenticateAdminPages, true); + boolean allowAdmin = GitBlit.getBoolean(Keys.web.allowAdministration, true); + + if (authenticateAdmin) { showAdmin = allowAdmin && GitBlitWebSession.get().canAdmin(); // authentication requires state and session setStatelessHint(false); } else { - showAdmin = GitBlit.getBoolean(Keys.web.allowAdministration, false); - if (GitBlit.getBoolean(Keys.web.authenticateViewPages, false)) { + showAdmin = allowAdmin; + if (authenticateView) { // authentication requires state and session setStatelessHint(false); } else { @@ -92,6 +98,11 @@ if (showAdmin || showRegistrations) { pages.add(new PageRegistration("gb.federation", FederationPage.class)); } + + if (!authenticateView || (authenticateView && GitBlitWebSession.get().isLoggedIn())) { + addDropDownMenus(pages); + } + NavigationPanel navPanel = new NavigationPanel("navPanel", getClass(), pages); add(navPanel); @@ -125,8 +136,8 @@ WicketUtils.setInputPlaceholder(pwField, getString("gb.password")); loginForm.add(pwField); add(loginForm); - if (GitBlit.getBoolean(Keys.web.authenticateViewPages, true) - || GitBlit.getBoolean(Keys.web.authenticateAdminPages, true)) { + + if (authenticateView || authenticateAdmin) { loginForm.setVisible(!GitBlitWebSession.get().isLoggedIn()); } else { loginForm.setVisible(false); @@ -165,6 +176,53 @@ setResponsePage(getApplication().getHomePage()); } } + } + + protected void addDropDownMenus(List<PageRegistration> pages) { + + } + + protected List<DropDownMenuItem> getFilterMenuItems() { + final UserModel user = GitBlitWebSession.get().getUser(); + Set<DropDownMenuItem> filters = new LinkedHashSet<DropDownMenuItem>(); + + // accessible repositories by federation set + for (RepositoryModel repository : GitBlit.self().getRepositoryModels(user)) { + for (String set : repository.federationSets) { + filters.add(new DropDownMenuItem(set, "set", set)); + } + } + if (filters.size() > 0) { + // divider + filters.add(new DropDownMenuItem()); + } + + // user's team memberships + if (user != null && user.teams.size() > 0) { + for (TeamModel team : user.teams) { + filters.add(new DropDownMenuItem(team.name, "team", team.name)); + } + // divider + filters.add(new DropDownMenuItem()); + } + + // custom filters + String customFilters = GitBlit.getString(Keys.web.customFilters, null); + if (!StringUtils.isEmpty(customFilters)) { + List<String> expressions = StringUtils.getStringsFromValue(customFilters, "!!!"); + for (String expression : expressions) { + filters.add(new DropDownMenuItem(null, "x", expression)); + } + } + + if (filters.size() > 0) { + // if we have any filters, add the divider + filters.add(new DropDownMenuItem()); + // add All Repositories + filters.add(new DropDownMenuItem("All Repositories", null, null)); + } + + return new ArrayList<DropDownMenuItem>(filters); } protected List<RepositoryModel> getRepositories(PageParameters params) { @@ -220,7 +278,7 @@ } else if (!StringUtils.isEmpty(team)) { // filter the repositories by the specified teams List<String> teams = StringUtils.getStringsFromValue(team, ","); - + // need TeamModels first List<TeamModel> teamModels = new ArrayList<TeamModel>(); for (String name : teams) { @@ -229,7 +287,7 @@ teamModels.add(model); } } - + // brute-force our way through finding the matching models List<RepositoryModel> matchingModels = new ArrayList<RepositoryModel>(); for (RepositoryModel repositoryModel : models) { -- Gitblit v1.9.1