Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

RepositoriesPage.java 5.5KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154
  1. package com.gitblit.wicket.pages;
  2. import java.util.Collections;
  3. import java.util.Comparator;
  4. import java.util.Iterator;
  5. import java.util.List;
  6. import org.apache.wicket.PageParameters;
  7. import org.apache.wicket.extensions.markup.html.repeater.data.sort.OrderByBorder;
  8. import org.apache.wicket.extensions.markup.html.repeater.util.SortParam;
  9. import org.apache.wicket.extensions.markup.html.repeater.util.SortableDataProvider;
  10. import org.apache.wicket.markup.html.basic.Label;
  11. import org.apache.wicket.markup.html.link.BookmarkablePageLink;
  12. import org.apache.wicket.markup.html.panel.Fragment;
  13. import org.apache.wicket.markup.repeater.Item;
  14. import org.apache.wicket.markup.repeater.data.DataView;
  15. import org.apache.wicket.model.IModel;
  16. import org.apache.wicket.model.Model;
  17. import com.gitblit.StoredSettings;
  18. import com.gitblit.utils.Utils;
  19. import com.gitblit.wicket.BasePage;
  20. import com.gitblit.wicket.GitBlitWebApp;
  21. import com.gitblit.wicket.LinkPanel;
  22. import com.gitblit.wicket.WicketUtils;
  23. import com.gitblit.wicket.models.RepositoryModel;
  24. public class RepositoriesPage extends BasePage {
  25. public RepositoriesPage() {
  26. super();
  27. setupPage("", "");
  28. Fragment adminLinks = new Fragment("adminPanel", "adminLinks", this);
  29. adminLinks.add(new BookmarkablePageLink<Void>("newRepository", RepositoriesPage.class));
  30. adminLinks.add(new BookmarkablePageLink<Void>("newUser", RepositoriesPage.class));
  31. add(adminLinks.setVisible(StoredSettings.getBoolean("allowAdministration", false)));
  32. add(new Label("repositoriesMessage", StoredSettings.getString("repositoriesMessage", "")).setEscapeModelStrings(false));
  33. List<RepositoryModel> rows = GitBlitWebApp.get().getRepositories(getRequest());
  34. DataProvider dp = new DataProvider(rows);
  35. DataView<RepositoryModel> dataView = new DataView<RepositoryModel>("repository", dp) {
  36. private static final long serialVersionUID = 1L;
  37. int counter = 0;
  38. public void populateItem(final Item<RepositoryModel> item) {
  39. final RepositoryModel entry = item.getModelObject();
  40. PageParameters pp = WicketUtils.newRepositoryParameter(entry.name);
  41. item.add(new LinkPanel("repositoryName", "list", entry.name, SummaryPage.class, pp));
  42. item.add(new LinkPanel("repositoryDescription", "list", entry.description, SummaryPage.class, pp));
  43. item.add(new Label("repositoryOwner", entry.owner));
  44. String lastChange = Utils.timeAgo(entry.lastChange);
  45. Label lastChangeLabel = new Label("repositoryLastChange", lastChange);
  46. item.add(lastChangeLabel);
  47. WicketUtils.setCssClass(lastChangeLabel, Utils.timeAgoCss(entry.lastChange));
  48. WicketUtils.setAlternatingBackground(item, counter);
  49. counter++;
  50. }
  51. };
  52. add(dataView);
  53. add(newSort("orderByRepository", SortBy.repository, dp, dataView));
  54. add(newSort("orderByDescription", SortBy.description, dp, dataView));
  55. add(newSort("orderByOwner", SortBy.owner, dp, dataView));
  56. add(newSort("orderByDate", SortBy.date, dp, dataView));
  57. }
  58. protected enum SortBy {
  59. repository, description, owner, date;
  60. }
  61. protected OrderByBorder newSort(String wicketId, SortBy field, SortableDataProvider<?> dp, final DataView<?> dataView) {
  62. return new OrderByBorder(wicketId, field.name(), dp) {
  63. private static final long serialVersionUID = 1L;
  64. @Override
  65. protected void onSortChanged() {
  66. dataView.setCurrentPage(0);
  67. }
  68. };
  69. }
  70. private class DataProvider extends SortableDataProvider<RepositoryModel> {
  71. private static final long serialVersionUID = 1L;
  72. private List<RepositoryModel> list = null;
  73. protected DataProvider(List<RepositoryModel> list) {
  74. this.list = list;
  75. setSort(SortBy.date.name(), false);
  76. }
  77. @Override
  78. public int size() {
  79. if (list == null)
  80. return 0;
  81. return list.size();
  82. }
  83. @Override
  84. public IModel<RepositoryModel> model(RepositoryModel header) {
  85. return new Model<RepositoryModel>(header);
  86. }
  87. @Override
  88. public Iterator<RepositoryModel> iterator(int first, int count) {
  89. SortParam sp = getSort();
  90. String prop = sp.getProperty();
  91. final boolean asc = sp.isAscending();
  92. if (prop == null || prop.equals(SortBy.date.name())) {
  93. Collections.sort(list, new Comparator<RepositoryModel>() {
  94. @Override
  95. public int compare(RepositoryModel o1, RepositoryModel o2) {
  96. if (asc)
  97. return o1.lastChange.compareTo(o2.lastChange);
  98. return o2.lastChange.compareTo(o1.lastChange);
  99. }
  100. });
  101. } else if (prop.equals(SortBy.repository.name())) {
  102. Collections.sort(list, new Comparator<RepositoryModel>() {
  103. @Override
  104. public int compare(RepositoryModel o1, RepositoryModel o2) {
  105. if (asc)
  106. return o1.name.compareTo(o2.name);
  107. return o2.name.compareTo(o1.name);
  108. }
  109. });
  110. } else if (prop.equals(SortBy.owner.name())) {
  111. Collections.sort(list, new Comparator<RepositoryModel>() {
  112. @Override
  113. public int compare(RepositoryModel o1, RepositoryModel o2) {
  114. if (asc)
  115. return o1.owner.compareTo(o2.owner);
  116. return o2.owner.compareTo(o1.owner);
  117. }
  118. });
  119. } else if (prop.equals(SortBy.description.name())) {
  120. Collections.sort(list, new Comparator<RepositoryModel>() {
  121. @Override
  122. public int compare(RepositoryModel o1, RepositoryModel o2) {
  123. if (asc)
  124. return o1.description.compareTo(o2.description);
  125. return o2.description.compareTo(o1.description);
  126. }
  127. });
  128. }
  129. return list.subList(first, first + count).iterator();
  130. }
  131. }
  132. }