summaryrefslogtreecommitdiffstats
path: root/src/main/java/com/gitblit/wicket/panels/PushesPanel.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/com/gitblit/wicket/panels/PushesPanel.java')
-rw-r--r--src/main/java/com/gitblit/wicket/panels/PushesPanel.java206
1 files changed, 206 insertions, 0 deletions
diff --git a/src/main/java/com/gitblit/wicket/panels/PushesPanel.java b/src/main/java/com/gitblit/wicket/panels/PushesPanel.java
new file mode 100644
index 00000000..bab9c9e9
--- /dev/null
+++ b/src/main/java/com/gitblit/wicket/panels/PushesPanel.java
@@ -0,0 +1,206 @@
+/*
+ * 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.panels;
+
+import java.text.MessageFormat;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.markup.repeater.Item;
+import org.apache.wicket.markup.repeater.data.DataView;
+import org.apache.wicket.markup.repeater.data.ListDataProvider;
+import org.eclipse.jgit.lib.Repository;
+
+import com.gitblit.Constants;
+import com.gitblit.GitBlit;
+import com.gitblit.Keys;
+import com.gitblit.models.PushLogEntry;
+import com.gitblit.models.RepositoryCommit;
+import com.gitblit.models.RepositoryModel;
+import com.gitblit.models.UserModel;
+import com.gitblit.utils.PushLogUtils;
+import com.gitblit.utils.StringUtils;
+import com.gitblit.wicket.WicketUtils;
+import com.gitblit.wicket.pages.CommitPage;
+import com.gitblit.wicket.pages.GitSearchPage;
+import com.gitblit.wicket.pages.SummaryPage;
+import com.gitblit.wicket.pages.UserPage;
+
+public class PushesPanel extends BasePanel {
+
+ private static final long serialVersionUID = 1L;
+
+ private final boolean hasPushes;
+
+ private boolean hasMore;
+
+ public PushesPanel(String wicketId, final RepositoryModel model, Repository r, int limit, int pageOffset) {
+ super(wicketId);
+ boolean pageResults = limit <= 0;
+ int itemsPerPage = GitBlit.getInteger(Keys.web.itemsPerPage, 50);
+ if (itemsPerPage <= 1) {
+ itemsPerPage = 50;
+ }
+
+ final Map<String, String> usernameLookup = new HashMap<String, String>();
+ final int hashLen = GitBlit.getInteger(Keys.web.shortCommitIdLength, 6);
+ List<PushLogEntry> entries = PushLogUtils.getPushLog(model.name, r, limit);
+ // establish pusher identities
+ for (PushLogEntry push : entries) {
+ // handle push logs with email address instead of account name
+ String username = push.user.username;
+ if (push.user.username.indexOf('@') > -1) {
+ // push username is an email address, reverse lookup for account
+ if (!usernameLookup.containsKey(push.user.username)) {
+ for (UserModel user : GitBlit.self().getAllUsers()) {
+ if (push.user.username.equals(user.emailAddress)) {
+ username = user.username;
+ usernameLookup.put(push.user.username, username);
+ break;
+ }
+ }
+ } else {
+ username = usernameLookup.get(push.user.username);
+ }
+ } else {
+ // push username is an account name, lookup for email address
+ if (!usernameLookup.containsKey(push.user.username)) {
+ UserModel user = GitBlit.self().getUserModel(push.user.username);
+ if (user != null) {
+ push.user.emailAddress = user.emailAddress;
+ usernameLookup.put(push.user.username, user.emailAddress);
+ }
+ } else {
+ push.user.emailAddress = usernameLookup.get(push.user.username);
+ }
+ }
+ }
+
+ hasPushes = entries.size() > 0;
+
+ ListDataProvider<PushLogEntry> dp = new ListDataProvider<PushLogEntry>(entries);
+ DataView<PushLogEntry> pushView = new DataView<PushLogEntry>("push", dp) {
+ private static final long serialVersionUID = 1L;
+
+ public void populateItem(final Item<PushLogEntry> pushItem) {
+ final PushLogEntry push = pushItem.getModelObject();
+
+
+ pushItem.add(new GravatarImage("whoAvatar", push.getCommitterIdent(), 40));
+ pushItem.add(new LinkPanel("whoPushed", null, push.user.getDisplayName(),
+ UserPage.class, WicketUtils.newUsernameParameter(push.user.username)));
+ pushItem.add(new Label("whatPushed",
+ MessageFormat.format(push.getCommitCount() > 1 ? "pushed {0} commits to":"pushed 1 commit to", push.getCommitCount())));
+ String repoName = StringUtils.stripDotGit(model.name);
+ pushItem.add(new LinkPanel("wherePushed", null, repoName,
+ SummaryPage.class, WicketUtils.newRepositoryParameter(model.name)));
+ pushItem.add(WicketUtils.createDateLabel("whenPushed", push.date, getTimeZone(), getTimeUtils()));
+
+ ListDataProvider<RepositoryCommit> cdp = new ListDataProvider<RepositoryCommit>(push.getCommits());
+ DataView<RepositoryCommit> commitsView = new DataView<RepositoryCommit>("commit", cdp) {
+ private static final long serialVersionUID = 1L;
+
+ public void populateItem(final Item<RepositoryCommit> commitItem) {
+ final RepositoryCommit commit = commitItem.getModelObject();
+
+ // author search link
+ String author = commit.getAuthorIdent().getName();
+ LinkPanel authorLink = new LinkPanel("commitAuthor", "list", author,
+ GitSearchPage.class, WicketUtils.newSearchParameter(model.name,
+ null, author, Constants.SearchType.AUTHOR));
+ setPersonSearchTooltip(authorLink, author, Constants.SearchType.AUTHOR);
+ commitItem.add(authorLink);
+
+ // merge icon
+ if (commit.getParentCount() > 1) {
+ commitItem.add(WicketUtils.newImage("commitIcon", "commit_merge_16x16.png"));
+ } else {
+ commitItem.add(WicketUtils.newBlankImage("commitIcon"));
+ }
+
+ // short message
+ String shortMessage = commit.getShortMessage();
+ String trimmedMessage = shortMessage;
+ if (commit.getRefs() != null && commit.getRefs().size() > 0) {
+ trimmedMessage = StringUtils.trimString(shortMessage, Constants.LEN_SHORTLOG_REFS);
+ } else {
+ trimmedMessage = StringUtils.trimString(shortMessage, Constants.LEN_SHORTLOG);
+ }
+ LinkPanel shortlog = new LinkPanel("commitShortMessage", "list",
+ trimmedMessage, CommitPage.class, WicketUtils.newObjectParameter(
+ model.name, commit.getName()));
+ if (!shortMessage.equals(trimmedMessage)) {
+ WicketUtils.setHtmlTooltip(shortlog, shortMessage);
+ }
+ commitItem.add(shortlog);
+
+ commitItem.add(new RefsPanel("commitRefs", commit.repository, commit.getRefs()));
+
+ // commit hash link
+ LinkPanel commitHash = new LinkPanel("hashLink", null, commit.getName().substring(0, hashLen),
+ CommitPage.class, WicketUtils.newObjectParameter(
+ model.name, commit.getName()));
+ WicketUtils.setCssClass(commitHash, "shortsha1");
+ WicketUtils.setHtmlTooltip(commitHash, commit.getName());
+ commitItem.add(commitHash);
+
+// item.add(new BookmarkablePageLink<Void>("diff", CommitDiffPage.class, WicketUtils
+// .newObjectParameter(repositoryName, entry.getName())).setEnabled(entry
+// .getParentCount() > 0));
+// item.add(new BookmarkablePageLink<Void>("tree", TreePage.class, WicketUtils
+// .newObjectParameter(repositoryName, entry.getName())));
+ }
+ };
+
+ pushItem.add(commitsView);
+ }
+ };
+ add(pushView);
+
+ // determine to show pager, more, or neither
+// if (limit <= 0) {
+// // no display limit
+// add(new Label("moreLogs", "").setVisible(false));
+// } else {
+// if (pageResults) {
+// // paging
+// add(new Label("moreLogs", "").setVisible(false));
+// } else {
+// // more
+// if (commits.size() == limit) {
+// // show more
+// add(new LinkPanel("moreLogs", "link", new StringResourceModel("gb.moreLogs",
+// this, null), LogPage.class,
+// WicketUtils.newRepositoryParameter(repositoryName)));
+// } else {
+// // no more
+// add(new Label("moreLogs", "").setVisible(false));
+// }
+// }
+// }
+ }
+
+ public boolean hasMore() {
+ return hasMore;
+ }
+
+ public boolean hideIfEmpty() {
+ setVisible(hasPushes);
+ return hasPushes;
+ }
+}