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 7.9KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199
  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.text.MessageFormat;
  18. import java.util.ArrayList;
  19. import java.util.List;
  20. import java.util.Map;
  21. import org.apache.wicket.Component;
  22. import org.apache.wicket.Localizer;
  23. import org.apache.wicket.PageParameters;
  24. import org.apache.wicket.markup.html.basic.Label;
  25. import org.apache.wicket.markup.html.link.BookmarkablePageLink;
  26. import org.apache.wicket.markup.html.link.ExternalLink;
  27. import org.apache.wicket.markup.html.link.Link;
  28. import org.apache.wicket.markup.html.panel.Fragment;
  29. import com.gitblit.Constants.AccessRestrictionType;
  30. import com.gitblit.GitBlit;
  31. import com.gitblit.Keys;
  32. import com.gitblit.SyndicationServlet;
  33. import com.gitblit.models.RepositoryModel;
  34. import com.gitblit.models.UserModel;
  35. import com.gitblit.utils.ArrayUtils;
  36. import com.gitblit.utils.StringUtils;
  37. import com.gitblit.wicket.GitBlitWebSession;
  38. import com.gitblit.wicket.WicketUtils;
  39. import com.gitblit.wicket.pages.BasePage;
  40. import com.gitblit.wicket.pages.DocsPage;
  41. import com.gitblit.wicket.pages.EditRepositoryPage;
  42. import com.gitblit.wicket.pages.LogPage;
  43. import com.gitblit.wicket.pages.SummaryPage;
  44. import com.gitblit.wicket.pages.TicketsPage;
  45. import com.gitblit.wicket.pages.TreePage;
  46. public class ProjectRepositoryPanel extends BasePanel {
  47. private static final long serialVersionUID = 1L;
  48. public ProjectRepositoryPanel(String wicketId, Localizer localizer, Component owner,
  49. final boolean isAdmin, final RepositoryModel entry,
  50. final Map<AccessRestrictionType, String> accessRestrictions) {
  51. super(wicketId);
  52. final boolean showSwatch = GitBlit.getBoolean(Keys.web.repositoryListSwatches, true);
  53. final boolean gitServlet = GitBlit.getBoolean(Keys.git.enableGitServlet, true);
  54. final boolean showSize = GitBlit.getBoolean(Keys.web.showRepositorySizes, true);
  55. // repository swatch
  56. Component swatch;
  57. if (entry.isBare) {
  58. swatch = new Label("repositorySwatch", "&nbsp;").setEscapeModelStrings(false);
  59. } else {
  60. swatch = new Label("repositorySwatch", "!");
  61. WicketUtils.setHtmlTooltip(swatch, localizer.getString("gb.workingCopyWarning", owner));
  62. }
  63. WicketUtils.setCssBackground(swatch, entry.toString());
  64. add(swatch);
  65. swatch.setVisible(showSwatch);
  66. PageParameters pp = WicketUtils.newRepositoryParameter(entry.name);
  67. add(new LinkPanel("repositoryName", "list", StringUtils.getRelativePath(entry.projectPath,
  68. StringUtils.stripDotGit(entry.name)), SummaryPage.class, pp));
  69. add(new Label("repositoryDescription", entry.description).setVisible(!StringUtils
  70. .isEmpty(entry.description)));
  71. if (StringUtils.isEmpty(entry.originRepository)) {
  72. add(new Label("originRepository").setVisible(false));
  73. } else {
  74. Fragment forkFrag = new Fragment("originRepository", "originFragment", this);
  75. forkFrag.add(new LinkPanel("originRepository", null, StringUtils.stripDotGit(entry.originRepository),
  76. SummaryPage.class, WicketUtils.newRepositoryParameter(entry.originRepository)));
  77. add(forkFrag);
  78. }
  79. add(new BookmarkablePageLink<Void>("tickets", TicketsPage.class, pp).setVisible(entry.useTickets));
  80. add(new BookmarkablePageLink<Void>("docs", DocsPage.class, pp).setVisible(entry.useDocs));
  81. if (entry.isFrozen) {
  82. add(WicketUtils.newImage("frozenIcon", "cold_16x16.png", localizer.getString("gb.isFrozen", owner)));
  83. } else {
  84. add(WicketUtils.newClearPixel("frozenIcon").setVisible(false));
  85. }
  86. if (entry.isFederated) {
  87. add(WicketUtils.newImage("federatedIcon", "federated_16x16.png", localizer.getString("gb.isFederated", owner)));
  88. } else {
  89. add(WicketUtils.newClearPixel("federatedIcon").setVisible(false));
  90. }
  91. switch (entry.accessRestriction) {
  92. case NONE:
  93. add(WicketUtils.newBlankImage("accessRestrictionIcon").setVisible(false));
  94. break;
  95. case PUSH:
  96. add(WicketUtils.newImage("accessRestrictionIcon", "lock_go_16x16.png",
  97. accessRestrictions.get(entry.accessRestriction)));
  98. break;
  99. case CLONE:
  100. add(WicketUtils.newImage("accessRestrictionIcon", "lock_pull_16x16.png",
  101. accessRestrictions.get(entry.accessRestriction)));
  102. break;
  103. case VIEW:
  104. add(WicketUtils.newImage("accessRestrictionIcon", "shield_16x16.png",
  105. accessRestrictions.get(entry.accessRestriction)));
  106. break;
  107. default:
  108. add(WicketUtils.newBlankImage("accessRestrictionIcon"));
  109. }
  110. add(new Label("repositoryOwner", StringUtils.isEmpty(entry.owner) ? "" : (entry.owner + " ("
  111. + localizer.getString("gb.owner", owner) + ")")));
  112. UserModel user = GitBlitWebSession.get().getUser();
  113. Fragment repositoryLinks;
  114. boolean showOwner = user != null && user.username.equalsIgnoreCase(entry.owner);
  115. // owner of personal repository gets admin powers
  116. boolean showAdmin = isAdmin || entry.isUsersPersonalRepository(user.username);
  117. if (showAdmin || showOwner) {
  118. repositoryLinks = new Fragment("repositoryLinks", showAdmin ? "repositoryAdminLinks"
  119. : "repositoryOwnerLinks", this);
  120. repositoryLinks.add(new BookmarkablePageLink<Void>("editRepository", EditRepositoryPage.class,
  121. WicketUtils.newRepositoryParameter(entry.name)));
  122. if (showAdmin) {
  123. Link<Void> deleteLink = new Link<Void>("deleteRepository") {
  124. private static final long serialVersionUID = 1L;
  125. @Override
  126. public void onClick() {
  127. if (GitBlit.self().deleteRepositoryModel(entry)) {
  128. info(MessageFormat.format(getString("gb.repositoryDeleted"), entry));
  129. // TODO dp.remove(entry);
  130. } else {
  131. error(MessageFormat.format(getString("gb.repositoryDeleteFailed"), entry));
  132. }
  133. }
  134. };
  135. deleteLink.add(new JavascriptEventConfirmation("onclick", MessageFormat.format(
  136. localizer.getString("gb.deleteRepository", owner), entry)));
  137. repositoryLinks.add(deleteLink);
  138. }
  139. } else {
  140. repositoryLinks = new Fragment("repositoryLinks", "repositoryUserLinks", this);
  141. }
  142. repositoryLinks.add(new BookmarkablePageLink<Void>("tree", TreePage.class, WicketUtils
  143. .newRepositoryParameter(entry.name)).setEnabled(entry.hasCommits));
  144. repositoryLinks.add(new BookmarkablePageLink<Void>("log", LogPage.class, WicketUtils
  145. .newRepositoryParameter(entry.name)).setEnabled(entry.hasCommits));
  146. add(repositoryLinks);
  147. String lastChange;
  148. if (entry.lastChange.getTime() == 0) {
  149. lastChange = "--";
  150. } else {
  151. lastChange = getTimeUtils().timeAgo(entry.lastChange);
  152. }
  153. Label lastChangeLabel = new Label("repositoryLastChange", lastChange);
  154. add(lastChangeLabel);
  155. WicketUtils.setCssClass(lastChangeLabel, getTimeUtils().timeAgoCss(entry.lastChange));
  156. if (entry.hasCommits) {
  157. // Existing repository
  158. add(new Label("repositorySize", entry.size).setVisible(showSize));
  159. } else {
  160. // New repository
  161. add(new Label("repositorySize", localizer.getString("gb.empty", owner)).setEscapeModelStrings(false));
  162. }
  163. add(new ExternalLink("syndication", SyndicationServlet.asLink("", entry.name, null, 0)));
  164. List<String> repositoryUrls = new ArrayList<String>();
  165. if (gitServlet) {
  166. // add the Gitblit repository url
  167. repositoryUrls.add(BasePage.getRepositoryUrl(entry));
  168. }
  169. repositoryUrls.addAll(GitBlit.self().getOtherCloneUrls(entry.name));
  170. String primaryUrl = ArrayUtils.isEmpty(repositoryUrls) ? "" : repositoryUrls.remove(0);
  171. add(new RepositoryUrlPanel("repositoryCloneUrl", primaryUrl));
  172. }
  173. }