From 06116dd5f166ec2fff0531d21d6a291c9018703c Mon Sep 17 00:00:00 2001 From: James Moger <james.moger@gitblit.com> Date: Mon, 17 Jun 2013 16:00:17 -0400 Subject: [PATCH] Minor tweaks to SalesForce user service --- src/main/java/com/gitblit/wicket/pages/DashboardPage.java | 145 +++++++++++++++++++++++++++++------------------- 1 files changed, 88 insertions(+), 57 deletions(-) diff --git a/src/main/java/com/gitblit/wicket/pages/DashboardPage.java b/src/main/java/com/gitblit/wicket/pages/DashboardPage.java index 6a4c565..6c328b1 100644 --- a/src/main/java/com/gitblit/wicket/pages/DashboardPage.java +++ b/src/main/java/com/gitblit/wicket/pages/DashboardPage.java @@ -29,8 +29,12 @@ import java.util.Comparator; import java.util.Date; import java.util.HashMap; +import java.util.HashSet; import java.util.List; import java.util.Map; +import java.util.Set; +import java.util.TimeZone; +import java.util.TreeSet; import org.apache.wicket.Component; import org.apache.wicket.PageParameters; @@ -91,7 +95,11 @@ String message = readMarkdown(messageSource, "login.mkd"); Component repositoriesMessage = new Label("repositoriesMessage", message); add(repositoriesMessage.setEscapeModelStrings(false)); - add(new Label("repositoriesPanel")); + add(new Label("digests")); + add(new Label("active").setVisible(false)); + add(new Label("starred").setVisible(false)); + add(new Label("owned").setVisible(false)); + add(new Label("feedheader").setVisible(false)); return; } @@ -103,6 +111,9 @@ add(repositoriesMessage); UserModel user = GitBlitWebSession.get().getUser(); + if (user == null) { + user = UserModel.ANONYMOUS; + } Comparator<RepositoryModel> lastUpdateSort = new Comparator<RepositoryModel>() { @Override @@ -111,87 +122,97 @@ } }; - Map<String, RepositoryModel> reposMap = new HashMap<String, RepositoryModel>(); - - // owned repositories - List<RepositoryModel> owned = new ArrayList<RepositoryModel>(); - if (user != null && !UserModel.ANONYMOUS.equals(user)) { - for (RepositoryModel model : GitBlit.self().getRepositoryModels(user)) { - reposMap.put(model.name, model); - if (model.isUsersPersonalRepository(user.username) || model.isOwner(user.username)) { - owned.add(model); - } - } - } - Collections.sort(owned, lastUpdateSort); - - // starred repositories - List<RepositoryModel> starred = new ArrayList<RepositoryModel>(); - if (user != null && !UserModel.ANONYMOUS.equals(user)) { - for (String name : user.getPreferences().getStarredRepositories()) { - if (!reposMap.containsKey(name)) { - RepositoryModel repo = GitBlit.self().getRepositoryModel(name); - reposMap.put(name, repo); - } - starred.add(reposMap.get(name)); - } - } - Collections.sort(starred, lastUpdateSort); - // parameters int daysBack = params == null ? 0 : WicketUtils.getDaysBack(params); if (daysBack < 1) { - daysBack = 14; + daysBack = 7; } Calendar c = Calendar.getInstance(); c.add(Calendar.DATE, -1*daysBack); Date minimumDate = c.getTime(); + TimeZone timezone = getTimeZone(); - // active repositories (displayed for anonymous users) + // build repo lists + List<RepositoryModel> starred = new ArrayList<RepositoryModel>(); + List<RepositoryModel> owned = new ArrayList<RepositoryModel>(); List<RepositoryModel> active = new ArrayList<RepositoryModel>(); - if (user == null || UserModel.ANONYMOUS.equals(user)) { - List<RepositoryModel> list = GitBlit.self().getRepositoryModels(UserModel.ANONYMOUS); - for (RepositoryModel model : list) { - if (model.lastChange.after(minimumDate)) { - active.add(model); - reposMap.put(model.name, model); - } + + for (RepositoryModel model : getRepositoryModels()) { + if (model.isUsersPersonalRepository(user.username) || model.isOwner(user.username)) { + owned.add(model); } - Collections.sort(active, lastUpdateSort); + + if (user.getPreferences().isStarredRepository(model.name)) { + starred.add(model); + } + + if (model.isShowActivity() && model.lastChange.after(minimumDate)) { + active.add(model); + } } - // show pushlog feed + Collections.sort(owned, lastUpdateSort); + Collections.sort(starred, lastUpdateSort); + Collections.sort(active, lastUpdateSort); + + Set<RepositoryModel> feedSources = new HashSet<RepositoryModel>(); + feedSources.addAll(starred); + if (feedSources.isEmpty()) { + feedSources.addAll(active); + } + + // create daily commit digest feed List<PushLogEntry> pushes = new ArrayList<PushLogEntry>(); - for (RepositoryModel model : reposMap.values()) { + for (RepositoryModel model : feedSources) { Repository repository = GitBlit.self().getRepository(model.name); - List<DailyLogEntry> entries = PushLogUtils.getDailyLogByRef(model.name, repository, minimumDate); + List<DailyLogEntry> entries = PushLogUtils.getDailyLogByRef(model.name, repository, minimumDate, timezone); pushes.addAll(entries); repository.close(); } if (pushes.size() == 0) { - if (reposMap.size() == 0) { - add(new LinkPanel("pushes", null, "find some repositories", RepositoriesPage.class)); + // quiet or no starred repositories + if (feedSources.size() == 0) { + if (UserModel.ANONYMOUS.equals(user)) { + add(new Label("digests", getString("gb.noActivity"))); + } else { + add(new LinkPanel("digests", null, getString("gb.findSomeRepositories"), RepositoriesPage.class)); + } } else { - add(new Label("pushes", "all is quiet")); + add(new Label("digests", getString("gb.noActivity"))); } } else { + // show daily commit digest feed Collections.sort(pushes); - add(new PushesPanel("pushes", pushes)); + add(new PushesPanel("digests", pushes)); } // add the nifty charts if (!ArrayUtils.isEmpty(pushes)) { - GoogleCharts charts = createCharts(pushes); - add(new HeaderContributor(charts)); + // aggregate author exclusions + Set<String> authorExclusions = new TreeSet<String>(); + for (String author : GitBlit.getStrings(Keys.web.metricAuthorExclusions)) { + authorExclusions.add(author.toLowerCase()); + } + for (RepositoryModel model : feedSources) { + if (!ArrayUtils.isEmpty(model.metricAuthorExclusions)) { + for (String author : model.metricAuthorExclusions) { + authorExclusions.add(author.toLowerCase()); + } + } + } + + addCharts(pushes, authorExclusions, daysBack); + } else { + add(new Label("feedheader").setVisible(false)); } // active repository list - if (ArrayUtils.isEmpty(active)) { - add(new Label("active").setVisible(false)); - } else { + if (starred.isEmpty()) { Fragment activeView = createNgList("active", "activeListFragment", "activeCtrl", active); add(activeView); + } else { + add(new Label("active").setVisible(false)); } // starred repository list @@ -352,14 +373,16 @@ * and the active authors pie chart * * @param recentPushes - * @return + * @param authorExclusions + * @param daysBack */ - private GoogleCharts createCharts(List<PushLogEntry> recentPushes) { + private void addCharts(List<PushLogEntry> recentPushes, Set<String> authorExclusions, int daysBack) { // activity metrics Map<String, Metric> repositoryMetrics = new HashMap<String, Metric>(); Map<String, Metric> authorMetrics = new HashMap<String, Metric>(); // aggregate repository and author metrics + int totalCommits = 0; for (PushLogEntry push : recentPushes) { // aggregate repository metrics @@ -370,13 +393,21 @@ repositoryMetrics.get(repository).count += 1; for (RepositoryCommit commit : push.getCommits()) { - String author = commit.getAuthorIdent().getName(); - if (!authorMetrics.containsKey(author)) { - authorMetrics.put(author, new Metric(author)); + totalCommits++; + String author = StringUtils.removeNewlines(commit.getAuthorIdent().getName()); + String authorName = author.toLowerCase(); + String authorEmail = StringUtils.removeNewlines(commit.getAuthorIdent().getEmailAddress()).toLowerCase(); + if (!authorExclusions.contains(authorName) && !authorExclusions.contains(authorEmail)) { + if (!authorMetrics.containsKey(author)) { + authorMetrics.put(author, new Metric(author)); + } + authorMetrics.get(author).count += 1; } - authorMetrics.get(author).count += 1; } } + + add(new Label("feedheader", MessageFormat.format(getString("gb.recentActivityStats"), + daysBack, totalCommits, authorMetrics.size()))); // build google charts GoogleCharts charts = new GoogleCharts(); @@ -399,7 +430,7 @@ chart.setShowLegend(false); charts.addChart(chart); - return charts; + add(new HeaderContributor(charts)); } class RepoListItem implements Serializable { -- Gitblit v1.9.1