You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

ForksPage.java 5.7KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163
  1. /*
  2. * Copyright 2012 gitblit.com.
  3. *
  4. * Licensed under the Apache License, Version 2.0 (the "License");
  5. * you may not use this file except in compliance with the License.
  6. * You may obtain a copy of the License at
  7. *
  8. * http://www.apache.org/licenses/LICENSE-2.0
  9. *
  10. * Unless required by applicable law or agreed to in writing, software
  11. * distributed under the License is distributed on an "AS IS" BASIS,
  12. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  13. * See the License for the specific language governing permissions and
  14. * limitations under the License.
  15. */
  16. package com.gitblit.wicket.pages;
  17. import java.io.Serializable;
  18. import java.util.ArrayList;
  19. import java.util.List;
  20. import org.apache.wicket.Component;
  21. import org.apache.wicket.PageParameters;
  22. import org.apache.wicket.markup.html.basic.Label;
  23. import org.apache.wicket.markup.repeater.Item;
  24. import org.apache.wicket.markup.repeater.data.DataView;
  25. import org.apache.wicket.markup.repeater.data.ListDataProvider;
  26. import org.eclipse.jgit.lib.PersonIdent;
  27. import com.gitblit.Keys;
  28. import com.gitblit.models.ForkModel;
  29. import com.gitblit.models.RepositoryModel;
  30. import com.gitblit.models.UserModel;
  31. import com.gitblit.utils.StringUtils;
  32. import com.gitblit.wicket.GitBlitWebSession;
  33. import com.gitblit.wicket.WicketUtils;
  34. import com.gitblit.wicket.panels.AvatarImage;
  35. import com.gitblit.wicket.panels.LinkPanel;
  36. public class ForksPage extends RepositoryPage {
  37. public ForksPage(PageParameters params) {
  38. super(params);
  39. final RepositoryModel pageRepository = getRepositoryModel();
  40. ForkModel root = app().repositories().getForkNetwork(pageRepository.name);
  41. List<FlatFork> network = flatten(root);
  42. ListDataProvider<FlatFork> forksDp = new ListDataProvider<FlatFork>(network);
  43. DataView<FlatFork> forksList = new DataView<FlatFork>("fork", forksDp) {
  44. private static final long serialVersionUID = 1L;
  45. @Override
  46. public void populateItem(final Item<FlatFork> item) {
  47. FlatFork fork = item.getModelObject();
  48. RepositoryModel repository = fork.repository;
  49. if (repository.isPersonalRepository()) {
  50. UserModel user = app().users().getUserModel(repository.projectPath.substring(1));
  51. if (user == null) {
  52. // user account no longer exists
  53. user = new UserModel(repository.projectPath.substring(1));
  54. }
  55. PersonIdent ident = new PersonIdent(user.getDisplayName(), user.emailAddress == null ? user.getDisplayName() : user.emailAddress);
  56. item.add(new AvatarImage("anAvatar", ident, 20));
  57. if (pageRepository.equals(repository)) {
  58. // do not link to self
  59. item.add(new Label("aProject", user.getDisplayName()));
  60. } else {
  61. item.add(new LinkPanel("aProject", null, user.getDisplayName(), UserPage.class, WicketUtils.newUsernameParameter(user.username)));
  62. }
  63. } else {
  64. Component swatch;
  65. if (repository.isBare){
  66. swatch = new Label("anAvatar", "&nbsp;").setEscapeModelStrings(false);
  67. } else {
  68. swatch = new Label("anAvatar", "!");
  69. WicketUtils.setHtmlTooltip(swatch, getString("gb.workingCopyWarning"));
  70. }
  71. WicketUtils.setCssClass(swatch, "repositorySwatch");
  72. WicketUtils.setCssBackground(swatch, repository.toString());
  73. item.add(swatch);
  74. String projectName = repository.projectPath;
  75. if (StringUtils.isEmpty(projectName)) {
  76. projectName = app().settings().getString(Keys.web.repositoryRootGroupName, "main");
  77. }
  78. if (pageRepository.equals(repository)) {
  79. // do not link to self
  80. item.add(new Label("aProject", projectName));
  81. } else {
  82. item.add(new LinkPanel("aProject", null, projectName, ProjectPage.class, WicketUtils.newProjectParameter(projectName)));
  83. }
  84. }
  85. String repo = StringUtils.getLastPathElement(repository.name);
  86. UserModel user = GitBlitWebSession.get().getUser();
  87. if (user == null) {
  88. user = UserModel.ANONYMOUS;
  89. }
  90. if (user.canView(repository)) {
  91. if (pageRepository.equals(repository)) {
  92. // do not link to self
  93. item.add(new Label("aFork", StringUtils.stripDotGit(repo)));
  94. } else {
  95. item.add(new LinkPanel("aFork", null, StringUtils.stripDotGit(repo), SummaryPage.class, WicketUtils.newRepositoryParameter(repository.name)));
  96. }
  97. item.add(WicketUtils.createDateLabel("lastChange", repository.lastChange, getTimeZone(), getTimeUtils()));
  98. } else {
  99. item.add(new Label("aFork", repo));
  100. item.add(new Label("lastChange").setVisible(false));
  101. }
  102. WicketUtils.setCssStyle(item, "margin-left:" + (32*fork.level) + "px;");
  103. if (fork.level == 0) {
  104. WicketUtils.setCssClass(item, "forkSource");
  105. } else {
  106. WicketUtils.setCssClass(item, "forkEntry");
  107. }
  108. }
  109. };
  110. add(forksList);
  111. }
  112. @Override
  113. protected String getPageName() {
  114. return getString("gb.forks");
  115. }
  116. protected List<FlatFork> flatten(ForkModel root) {
  117. List<FlatFork> list = new ArrayList<FlatFork>();
  118. list.addAll(flatten(root, 0));
  119. return list;
  120. }
  121. protected List<FlatFork> flatten(ForkModel node, int level) {
  122. List<FlatFork> list = new ArrayList<FlatFork>();
  123. if (node == null) {
  124. return list;
  125. }
  126. list.add(new FlatFork(node.repository, level));
  127. if (!node.isLeaf()) {
  128. for (ForkModel fork : node.forks) {
  129. list.addAll(flatten(fork, level + 1));
  130. }
  131. }
  132. return list;
  133. }
  134. private class FlatFork implements Serializable {
  135. private static final long serialVersionUID = 1L;
  136. public final RepositoryModel repository;
  137. public final int level;
  138. public FlatFork(RepositoryModel repository, int level) {
  139. this.repository = repository;
  140. this.level = level;
  141. }
  142. }
  143. }