From f66e89662c091e082bd1d2feb6ac91513ccff273 Mon Sep 17 00:00:00 2001 From: Rafael Cavazin <rafaelcavazin@gmail.com> Date: Sun, 21 Jul 2013 09:59:00 -0400 Subject: [PATCH] Merge branch 'master' of https://github.com/gitblit/gitblit --- src/main/java/com/gitblit/wicket/pages/ForksPage.java | 160 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 160 insertions(+), 0 deletions(-) diff --git a/src/main/java/com/gitblit/wicket/pages/ForksPage.java b/src/main/java/com/gitblit/wicket/pages/ForksPage.java new file mode 100644 index 0000000..f59955e --- /dev/null +++ b/src/main/java/com/gitblit/wicket/pages/ForksPage.java @@ -0,0 +1,160 @@ +/* + * Copyright 2012 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.pages; + +import java.io.Serializable; +import java.util.ArrayList; +import java.util.List; + +import org.apache.wicket.Component; +import org.apache.wicket.PageParameters; +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.PersonIdent; + +import com.gitblit.GitBlit; +import com.gitblit.Keys; +import com.gitblit.models.ForkModel; +import com.gitblit.models.RepositoryModel; +import com.gitblit.models.UserModel; +import com.gitblit.utils.StringUtils; +import com.gitblit.wicket.GitBlitWebSession; +import com.gitblit.wicket.WicketUtils; +import com.gitblit.wicket.panels.GravatarImage; +import com.gitblit.wicket.panels.LinkPanel; + +public class ForksPage extends RepositoryPage { + + public ForksPage(PageParameters params) { + super(params); + + final RepositoryModel pageRepository = getRepositoryModel(); + + ForkModel root = GitBlit.self().getForkNetwork(pageRepository.name); + List<FlatFork> network = flatten(root); + + ListDataProvider<FlatFork> forksDp = new ListDataProvider<FlatFork>(network); + DataView<FlatFork> forksList = new DataView<FlatFork>("fork", forksDp) { + private static final long serialVersionUID = 1L; + + public void populateItem(final Item<FlatFork> item) { + FlatFork fork = item.getModelObject(); + RepositoryModel repository = fork.repository; + + if (repository.isPersonalRepository()) { + UserModel user = GitBlit.self().getUserModel(repository.projectPath.substring(1)); + if (user == null) { + // user account no longer exists + user = new UserModel(repository.projectPath.substring(1)); + } + PersonIdent ident = new PersonIdent(user.getDisplayName(), user.emailAddress == null ? user.getDisplayName() : user.emailAddress); + item.add(new GravatarImage("anAvatar", ident, 20)); + if (pageRepository.equals(repository)) { + // do not link to self + item.add(new Label("aProject", user.getDisplayName())); + } else { + item.add(new LinkPanel("aProject", null, user.getDisplayName(), UserPage.class, WicketUtils.newUsernameParameter(user.username))); + } + } else { + Component swatch; + if (repository.isBare){ + swatch = new Label("anAvatar", " ").setEscapeModelStrings(false); + } else { + swatch = new Label("anAvatar", "!"); + WicketUtils.setHtmlTooltip(swatch, getString("gb.workingCopyWarning")); + } + WicketUtils.setCssClass(swatch, "repositorySwatch"); + WicketUtils.setCssBackground(swatch, repository.toString()); + item.add(swatch); + String projectName = repository.projectPath; + if (StringUtils.isEmpty(projectName)) { + projectName = GitBlit.getString(Keys.web.repositoryRootGroupName, "main"); + } + if (pageRepository.equals(repository)) { + // do not link to self + item.add(new Label("aProject", projectName)); + } else { + item.add(new LinkPanel("aProject", null, projectName, ProjectPage.class, WicketUtils.newProjectParameter(projectName))); + } + } + + String repo = StringUtils.getLastPathElement(repository.name); + UserModel user = GitBlitWebSession.get().getUser(); + if (user == null) { + user = UserModel.ANONYMOUS; + } + if (user.canView(repository)) { + if (pageRepository.equals(repository)) { + // do not link to self + item.add(new Label("aFork", StringUtils.stripDotGit(repo))); + } else { + item.add(new LinkPanel("aFork", null, StringUtils.stripDotGit(repo), SummaryPage.class, WicketUtils.newRepositoryParameter(repository.name))); + } + item.add(WicketUtils.createDateLabel("lastChange", repository.lastChange, getTimeZone(), getTimeUtils())); + } else { + item.add(new Label("aFork", repo)); + item.add(new Label("lastChange").setVisible(false)); + } + + WicketUtils.setCssStyle(item, "margin-left:" + (32*fork.level) + "px;"); + if (fork.level == 0) { + WicketUtils.setCssClass(item, "forkSource"); + } else { + WicketUtils.setCssClass(item, "forkEntry"); + } + } + }; + + add(forksList); + } + + @Override + protected String getPageName() { + return getString("gb.forks"); + } + + protected List<FlatFork> flatten(ForkModel root) { + List<FlatFork> list = new ArrayList<FlatFork>(); + list.addAll(flatten(root, 0)); + return list; + } + + protected List<FlatFork> flatten(ForkModel node, int level) { + List<FlatFork> list = new ArrayList<FlatFork>(); + list.add(new FlatFork(node.repository, level)); + if (!node.isLeaf()) { + for (ForkModel fork : node.forks) { + list.addAll(flatten(fork, level + 1)); + } + } + return list; + } + + private class FlatFork implements Serializable { + + private static final long serialVersionUID = 1L; + + public final RepositoryModel repository; + public final int level; + + public FlatFork(RepositoryModel repository, int level) { + this.repository = repository; + this.level = level; + } + } +} -- Gitblit v1.9.1