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.0KB

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