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.

RepositoryPage.java 4.1KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. package com.gitblit.wicket;
  2. import java.util.HashMap;
  3. import java.util.List;
  4. import java.util.Map;
  5. import javax.servlet.http.HttpServletRequest;
  6. import org.apache.wicket.PageParameters;
  7. import org.apache.wicket.markup.html.basic.Label;
  8. import org.apache.wicket.protocol.http.servlet.ServletWebRequest;
  9. import org.eclipse.jgit.lib.Repository;
  10. import org.eclipse.jgit.revwalk.RevCommit;
  11. import com.gitblit.StoredSettings;
  12. import com.gitblit.utils.JGitUtils;
  13. import com.gitblit.wicket.pages.RepositoriesPage;
  14. import com.gitblit.wicket.panels.PageLinksPanel;
  15. import com.gitblit.wicket.panels.RefsPanel;
  16. public abstract class RepositoryPage extends BasePage {
  17. protected final String repositoryName;
  18. protected final String commitId;
  19. protected String description;
  20. private transient Repository r = null;
  21. public RepositoryPage(PageParameters params) {
  22. super(params);
  23. if (!params.containsKey("p")) {
  24. error("Repository not specified!");
  25. redirectToInterceptPage(new RepositoriesPage());
  26. }
  27. repositoryName = params.getString("p", "");
  28. commitId = params.getString("h", "");
  29. Repository r = getRepository();
  30. // setup the page links and disable this page's link
  31. PageLinksPanel pageLinks = new PageLinksPanel("pageLinks", r, repositoryName, getPageName());
  32. add(pageLinks);
  33. pageLinks.disablePageLink(getPageName());
  34. setStatelessHint(true);
  35. }
  36. protected Repository getRepository() {
  37. if (r == null) {
  38. ServletWebRequest servletWebRequest = (ServletWebRequest) getRequest();
  39. HttpServletRequest req = servletWebRequest.getHttpServletRequest();
  40. req.getServerName();
  41. Repository r = GitBlitWebApp.get().getRepository(req, repositoryName);
  42. if (r == null) {
  43. error("Can not load repository " + repositoryName);
  44. redirectToInterceptPage(new RepositoriesPage());
  45. return null;
  46. }
  47. description = JGitUtils.getRepositoryDescription(r);
  48. this.r = r;
  49. }
  50. return r;
  51. }
  52. protected void addRefs(Repository r, RevCommit c) {
  53. add(new RefsPanel("refsPanel", r, c));
  54. }
  55. protected void addFullText(String wicketId, String text, boolean substituteRegex) {
  56. String html = WicketUtils.breakLines(text);
  57. if (substituteRegex) {
  58. Map<String, String> map = new HashMap<String, String>();
  59. // global regex keys
  60. for (String key : StoredSettings.getAllKeys("regex.global")) {
  61. String subKey = key.substring(key.lastIndexOf('.') + 1);
  62. map.put(subKey, StoredSettings.getString(key, ""));
  63. }
  64. // repository-specific regex keys
  65. List<String> keys = StoredSettings.getAllKeys("regex." + repositoryName.toLowerCase());
  66. for (String key : keys) {
  67. String subKey = key.substring(key.lastIndexOf('.') + 1);
  68. map.put(subKey, StoredSettings.getString(key, ""));
  69. }
  70. for (String key : map.keySet()) {
  71. String definition = map.get(key).trim();
  72. String[] chunks = definition.split("!!!");
  73. if (chunks.length == 2) {
  74. html = html.replaceAll(chunks[0], chunks[1]);
  75. } else {
  76. logger.warn(key + " improperly formatted. Use !!! to separate match from replacement: " + definition);
  77. }
  78. }
  79. }
  80. add(new Label(wicketId, html).setEscapeModelStrings(false));
  81. }
  82. protected abstract String getPageName();
  83. @Override
  84. protected void onBeforeRender() {
  85. // dispose of repository object
  86. if (r != null) {
  87. r.close();
  88. r = null;
  89. }
  90. // setup page header and footer
  91. setupPage(repositoryName, "/ " + getPageName());
  92. super.onBeforeRender();
  93. }
  94. protected PageParameters newRepositoryParameter() {
  95. return new PageParameters("p=" + repositoryName);
  96. }
  97. protected PageParameters newCommitParameter() {
  98. return newCommitParameter(commitId);
  99. }
  100. protected PageParameters newCommitParameter(String commitId) {
  101. if (commitId == null || commitId.trim().length() == 0) {
  102. return newRepositoryParameter();
  103. }
  104. return new PageParameters("p=" + repositoryName + ",h=" + commitId);
  105. }
  106. protected PageParameters newPathParameter(String path) {
  107. if (path == null || path.trim().length() == 0) {
  108. return newCommitParameter();
  109. }
  110. return new PageParameters("p=" + repositoryName + ",h=" + commitId + ",f=" + path);
  111. }
  112. }