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.

ProjectRepositoryPanel.java 6.3KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166
  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.panels;
  17. import java.util.Map;
  18. import org.apache.wicket.Component;
  19. import org.apache.wicket.Localizer;
  20. import org.apache.wicket.PageParameters;
  21. import org.apache.wicket.markup.html.basic.Label;
  22. import org.apache.wicket.markup.html.link.BookmarkablePageLink;
  23. import org.apache.wicket.markup.html.link.ExternalLink;
  24. import org.apache.wicket.markup.html.panel.Fragment;
  25. import com.gitblit.Constants.AccessRestrictionType;
  26. import com.gitblit.Keys;
  27. import com.gitblit.models.RepositoryModel;
  28. import com.gitblit.models.UserModel;
  29. import com.gitblit.servlet.SyndicationServlet;
  30. import com.gitblit.utils.ArrayUtils;
  31. import com.gitblit.utils.StringUtils;
  32. import com.gitblit.wicket.GitBlitWebSession;
  33. import com.gitblit.wicket.WicketUtils;
  34. import com.gitblit.wicket.pages.EditRepositoryPage;
  35. import com.gitblit.wicket.pages.LogPage;
  36. import com.gitblit.wicket.pages.SummaryPage;
  37. import com.gitblit.wicket.pages.TreePage;
  38. public class ProjectRepositoryPanel extends BasePanel {
  39. private static final long serialVersionUID = 1L;
  40. public ProjectRepositoryPanel(String wicketId, Localizer localizer, Component parent,
  41. final boolean isAdmin, final RepositoryModel entry,
  42. final Map<AccessRestrictionType, String> accessRestrictions) {
  43. super(wicketId);
  44. final boolean showSwatch = app().settings().getBoolean(Keys.web.repositoryListSwatches, true);
  45. final boolean showSize = app().settings().getBoolean(Keys.web.showRepositorySizes, true);
  46. // repository swatch
  47. Component swatch;
  48. if (entry.isBare) {
  49. swatch = new Label("repositorySwatch", "&nbsp;").setEscapeModelStrings(false);
  50. } else {
  51. swatch = new Label("repositorySwatch", "!");
  52. WicketUtils.setHtmlTooltip(swatch, localizer.getString("gb.workingCopyWarning", parent));
  53. }
  54. WicketUtils.setCssBackground(swatch, entry.toString());
  55. add(swatch);
  56. swatch.setVisible(showSwatch);
  57. PageParameters pp = WicketUtils.newRepositoryParameter(entry.name);
  58. add(new LinkPanel("repositoryName", "list", StringUtils.getRelativePath(entry.projectPath,
  59. StringUtils.stripDotGit(entry.name)), SummaryPage.class, pp));
  60. add(new Label("repositoryDescription", entry.description).setVisible(!StringUtils
  61. .isEmpty(entry.description)));
  62. if (StringUtils.isEmpty(entry.originRepository)) {
  63. add(new Label("originRepository").setVisible(false));
  64. } else {
  65. Fragment forkFrag = new Fragment("originRepository", "originFragment", this);
  66. forkFrag.add(new LinkPanel("originRepository", null, StringUtils.stripDotGit(entry.originRepository),
  67. SummaryPage.class, WicketUtils.newRepositoryParameter(entry.originRepository)));
  68. add(forkFrag);
  69. }
  70. if (entry.isSparkleshared()) {
  71. add(WicketUtils.newImage("sparkleshareIcon", "star_16x16.png", localizer.getString("gb.isSparkleshared", parent)));
  72. } else {
  73. add(WicketUtils.newClearPixel("sparkleshareIcon").setVisible(false));
  74. }
  75. if (entry.isMirror) {
  76. add(WicketUtils.newImage("mirrorIcon", "mirror_16x16.png", localizer.getString("gb.isMirror", parent)));
  77. } else {
  78. add(WicketUtils.newClearPixel("mirrorIcon").setVisible(false));
  79. }
  80. if (entry.isFrozen) {
  81. add(WicketUtils.newImage("frozenIcon", "cold_16x16.png", localizer.getString("gb.isFrozen", parent)));
  82. } else {
  83. add(WicketUtils.newClearPixel("frozenIcon").setVisible(false));
  84. }
  85. if (entry.isFederated) {
  86. add(WicketUtils.newImage("federatedIcon", "federated_16x16.png", localizer.getString("gb.isFederated", parent)));
  87. } else {
  88. add(WicketUtils.newClearPixel("federatedIcon").setVisible(false));
  89. }
  90. if (ArrayUtils.isEmpty(entry.owners)) {
  91. add(new Label("repositoryOwner").setVisible(false));
  92. } else {
  93. String owner = "";
  94. for (String username : entry.owners) {
  95. UserModel ownerModel = app().users().getUserModel(username);
  96. if (ownerModel != null) {
  97. owner = ownerModel.getDisplayName();
  98. }
  99. }
  100. if (entry.owners.size() > 1) {
  101. owner += ", ...";
  102. }
  103. Label ownerLabel = (new Label("repositoryOwner", owner + " (" +
  104. localizer.getString("gb.owner", parent) + ")"));
  105. WicketUtils.setHtmlTooltip(ownerLabel, ArrayUtils.toString(entry.owners));
  106. add(ownerLabel);
  107. }
  108. UserModel user = GitBlitWebSession.get().getUser();
  109. if (user == null) {
  110. user = UserModel.ANONYMOUS;
  111. }
  112. Fragment repositoryLinks;
  113. if (user.canAdmin(entry)) {
  114. repositoryLinks = new Fragment("repositoryLinks", "repositoryOwnerLinks", this);
  115. repositoryLinks.add(new BookmarkablePageLink<Void>("editRepository", EditRepositoryPage.class,
  116. WicketUtils.newRepositoryParameter(entry.name)));
  117. } else {
  118. repositoryLinks = new Fragment("repositoryLinks", "repositoryUserLinks", this);
  119. }
  120. repositoryLinks.add(new BookmarkablePageLink<Void>("tree", TreePage.class, WicketUtils
  121. .newRepositoryParameter(entry.name)).setEnabled(entry.hasCommits));
  122. repositoryLinks.add(new BookmarkablePageLink<Void>("log", LogPage.class, WicketUtils
  123. .newRepositoryParameter(entry.name)).setEnabled(entry.hasCommits));
  124. add(repositoryLinks);
  125. String lastChange;
  126. if (entry.lastChange.getTime() == 0) {
  127. lastChange = "--";
  128. } else {
  129. lastChange = getTimeUtils().timeAgo(entry.lastChange);
  130. }
  131. Label lastChangeLabel = new Label("repositoryLastChange", lastChange);
  132. add(lastChangeLabel);
  133. WicketUtils.setCssClass(lastChangeLabel, getTimeUtils().timeAgoCss(entry.lastChange));
  134. if (entry.hasCommits) {
  135. // Existing repository
  136. add(new Label("repositorySize", entry.size).setVisible(showSize));
  137. } else {
  138. // New repository
  139. add(new Label("repositorySize", localizer.getString("gb.empty", parent)).setEscapeModelStrings(false));
  140. }
  141. add(new ExternalLink("syndication", SyndicationServlet.asLink("", entry.name, null, 0)));
  142. }
  143. }