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.

RepositoriesPage.java 5.2KB

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