選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。

PageLinksPanel.java 5.7KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149
  1. package com.gitblit.wicket.panels;
  2. import java.util.ArrayList;
  3. import java.util.Arrays;
  4. import java.util.HashMap;
  5. import java.util.List;
  6. import java.util.Map;
  7. import org.apache.wicket.Component;
  8. import org.apache.wicket.markup.html.basic.Label;
  9. import org.apache.wicket.markup.html.form.DropDownChoice;
  10. import org.apache.wicket.markup.html.form.StatelessForm;
  11. import org.apache.wicket.markup.html.form.TextField;
  12. import org.apache.wicket.markup.html.link.BookmarkablePageLink;
  13. import org.apache.wicket.markup.html.panel.Panel;
  14. import org.apache.wicket.markup.repeater.Item;
  15. import org.apache.wicket.markup.repeater.data.DataView;
  16. import org.apache.wicket.markup.repeater.data.ListDataProvider;
  17. import org.apache.wicket.model.IModel;
  18. import org.apache.wicket.model.Model;
  19. import org.eclipse.jgit.lib.Repository;
  20. import com.gitblit.GitBlit;
  21. import com.gitblit.Keys;
  22. import com.gitblit.utils.JGitUtils;
  23. import com.gitblit.utils.JGitUtils.SearchType;
  24. import com.gitblit.wicket.LinkPanel;
  25. import com.gitblit.wicket.WicketUtils;
  26. import com.gitblit.wicket.pages.BranchesPage;
  27. import com.gitblit.wicket.pages.LogPage;
  28. import com.gitblit.wicket.pages.SearchPage;
  29. import com.gitblit.wicket.pages.SummaryPage;
  30. import com.gitblit.wicket.pages.TagsPage;
  31. import com.gitblit.wicket.pages.TicketsPage;
  32. import com.gitblit.wicket.pages.TreePage;
  33. public class PageLinksPanel extends Panel {
  34. private static final long serialVersionUID = 1L;
  35. private final Map<String, String> knownPages = new HashMap<String, String>() {
  36. private static final long serialVersionUID = 1L;
  37. {
  38. put("summary", "gb.summary");
  39. put("log", "gb.log");
  40. put("branches", "gb.branches");
  41. put("tags", "gb.tags");
  42. put("tree", "gb.tree");
  43. put("tickets", "gb.tickets");
  44. }
  45. };
  46. public PageLinksPanel(String id, Repository r, final String repositoryName, String pageName) {
  47. super(id);
  48. // summary
  49. add(new BookmarkablePageLink<Void>("summary", SummaryPage.class, WicketUtils.newRepositoryParameter(repositoryName)));
  50. add(new BookmarkablePageLink<Void>("log", LogPage.class, WicketUtils.newRepositoryParameter(repositoryName)));
  51. add(new BookmarkablePageLink<Void>("branches", BranchesPage.class, WicketUtils.newRepositoryParameter(repositoryName)));
  52. add(new BookmarkablePageLink<Void>("tags", TagsPage.class, WicketUtils.newRepositoryParameter(repositoryName)));
  53. add(new BookmarkablePageLink<Void>("tree", TreePage.class, WicketUtils.newRepositoryParameter(repositoryName)));
  54. List<String> extras = new ArrayList<String>();
  55. // Get the repository tickets setting
  56. boolean checkTickets = JGitUtils.getRepositoryUseTickets(r);
  57. if (checkTickets && JGitUtils.getTicketsBranch(r) != null) {
  58. extras.add("tickets");
  59. }
  60. // Get the repository docs setting
  61. boolean checkDocs = JGitUtils.getRepositoryUseDocs(r);
  62. if (checkDocs && JGitUtils.getDocumentsBranch(r) != null) {
  63. extras.add("docs");
  64. }
  65. ListDataProvider<String> extrasDp = new ListDataProvider<String>(extras);
  66. DataView<String> extrasView = new DataView<String>("extra", extrasDp) {
  67. private static final long serialVersionUID = 1L;
  68. public void populateItem(final Item<String> item) {
  69. String extra = item.getModelObject();
  70. if (extra.equals("tickets")) {
  71. item.add(new Label("extraSeparator", " | "));
  72. item.add(new LinkPanel("extraLink", null, getString("gb.tickets"), TicketsPage.class, WicketUtils.newRepositoryParameter(repositoryName)));
  73. } else if (extra.equals("docs")) {
  74. item.add(new Label("extraSeparator", " | "));
  75. item.add(new LinkPanel("extraLink", null, getString("gb.docs"), TicketsPage.class, WicketUtils.newRepositoryParameter(repositoryName)));
  76. }
  77. }
  78. };
  79. add(extrasView);
  80. add(new SearchForm("searchForm", repositoryName));
  81. }
  82. public void disablePageLink(String pageName) {
  83. for (String wicketId : knownPages.keySet()) {
  84. String key = knownPages.get(wicketId);
  85. String linkName = getString(key);
  86. if (linkName.equals(pageName)) {
  87. Component c = get(wicketId);
  88. if (c != null) {
  89. c.setEnabled(false);
  90. }
  91. break;
  92. }
  93. }
  94. }
  95. class SearchForm extends StatelessForm<Void> {
  96. private static final long serialVersionUID = 1L;
  97. private final String repositoryName;
  98. private final IModel<String> searchBoxModel = new Model<String>("");
  99. private final IModel<SearchType> searchTypeModel = new Model<SearchType>(SearchType.COMMIT);
  100. public SearchForm(String id, String repositoryName) {
  101. super(id);
  102. this.repositoryName = repositoryName;
  103. DropDownChoice<SearchType> searchType = new DropDownChoice<SearchType>("searchType", Arrays.asList(SearchType.values()));
  104. searchType.setModel(searchTypeModel);
  105. WicketUtils.setHtmlTooltip(searchType, getString("gb.searchTypeTooltip"));
  106. add(searchType.setVisible(GitBlit.self().settings().getBoolean(Keys.web.showSearchTypeSelection, false)));
  107. TextField<String> searchBox = new TextField<String>("searchBox", searchBoxModel);
  108. add(searchBox);
  109. WicketUtils.setHtmlTooltip(searchBox, getString("gb.searchTooltip"));
  110. WicketUtils.setInputPlaceholder(searchBox, getString("gb.search"));
  111. }
  112. @Override
  113. public void onSubmit() {
  114. SearchType searchType = searchTypeModel.getObject();
  115. String searchString = searchBoxModel.getObject();
  116. for (SearchType type : SearchType.values()) {
  117. if (searchString.toLowerCase().startsWith(type.name().toLowerCase() + ":")) {
  118. searchType = type;
  119. searchString = searchString.substring(type.name().toLowerCase().length() + 1).trim();
  120. break;
  121. }
  122. }
  123. setResponsePage(SearchPage.class, WicketUtils.newSearchParameter(repositoryName, null, searchString, searchType));
  124. }
  125. }
  126. }