Você não pode selecionar mais de 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.

SummaryPage.java 4.9KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  1. package com.gitblit.wicket.pages;
  2. import java.awt.Color;
  3. import java.awt.Dimension;
  4. import java.text.MessageFormat;
  5. import java.util.List;
  6. import org.apache.wicket.PageParameters;
  7. import org.apache.wicket.markup.html.basic.Label;
  8. import org.eclipse.jgit.lib.Repository;
  9. import org.wicketstuff.googlecharts.AbstractChartData;
  10. import org.wicketstuff.googlecharts.Chart;
  11. import org.wicketstuff.googlecharts.ChartAxis;
  12. import org.wicketstuff.googlecharts.ChartAxisType;
  13. import org.wicketstuff.googlecharts.ChartProvider;
  14. import org.wicketstuff.googlecharts.ChartType;
  15. import org.wicketstuff.googlecharts.IChartData;
  16. import org.wicketstuff.googlecharts.LineStyle;
  17. import org.wicketstuff.googlecharts.MarkerType;
  18. import org.wicketstuff.googlecharts.ShapeMarker;
  19. import com.gitblit.GitBlit;
  20. import com.gitblit.Keys;
  21. import com.gitblit.utils.JGitUtils;
  22. import com.gitblit.utils.TimeUtils;
  23. import com.gitblit.wicket.RepositoryPage;
  24. import com.gitblit.wicket.WicketUtils;
  25. import com.gitblit.wicket.models.Metric;
  26. import com.gitblit.wicket.panels.BranchesPanel;
  27. import com.gitblit.wicket.panels.LogPanel;
  28. import com.gitblit.wicket.panels.TagsPanel;
  29. public class SummaryPage extends RepositoryPage {
  30. public SummaryPage(PageParameters params) {
  31. super(params);
  32. int numCommitsDef = 20;
  33. int numRefsDef = 5;
  34. int numberCommits = GitBlit.self().settings().getInteger(Keys.web.summaryCommitCount, numCommitsDef);
  35. if (numberCommits <= 0) {
  36. numberCommits = numCommitsDef;
  37. }
  38. int numberRefs = GitBlit.self().settings().getInteger(Keys.web.summaryRefsCount, numRefsDef);
  39. if (numberRefs <= 0) {
  40. numberRefs = numRefsDef;
  41. }
  42. Repository r = getRepository();
  43. List<Metric> metrics = null;
  44. Metric metricsTotal = null;
  45. if (GitBlit.self().settings().getBoolean(Keys.web.generateActivityGraph, true)) {
  46. metrics = JGitUtils.getDateMetrics(r);
  47. metricsTotal = metrics.remove(0);
  48. }
  49. // repository description
  50. add(new Label("repositoryDescription", getRepositoryModel().description));
  51. add(new Label("repositoryOwner", getRepositoryModel().owner));
  52. add(WicketUtils.createTimestampLabel("repositoryLastChange", JGitUtils.getLastChange(r), getTimeZone()));
  53. if (metricsTotal == null) {
  54. add(new Label("repositoryStats", ""));
  55. } else {
  56. add(new Label("repositoryStats", MessageFormat.format("{0} commits and {1} tags in {2}", metricsTotal.count, metricsTotal.tag, TimeUtils.duration(metricsTotal.duration))));
  57. }
  58. add(new Label("repositoryCloneUrl", GitBlit.self().getCloneUrl(repositoryName)));
  59. add(new LogPanel("commitsPanel", repositoryName, null, r, numberCommits, 0));
  60. add(new TagsPanel("tagsPanel", repositoryName, r, numberRefs));
  61. add(new BranchesPanel("branchesPanel", getRepositoryModel(), r, numberRefs));
  62. // Display an activity line graph
  63. insertActivityGraph(metrics);
  64. }
  65. @Override
  66. protected String getPageName() {
  67. return getString("gb.summary");
  68. }
  69. private void insertActivityGraph(List<Metric> metrics) {
  70. if (metrics.size() > 0 && GitBlit.self().settings().getBoolean(Keys.web.generateActivityGraph, true)) {
  71. IChartData data = getChartData(metrics);
  72. ChartProvider provider = new ChartProvider(new Dimension(400, 100), ChartType.LINE, data);
  73. ChartAxis dateAxis = new ChartAxis(ChartAxisType.BOTTOM);
  74. dateAxis.setLabels(new String[] { metrics.get(0).name, metrics.get(metrics.size() / 2).name, metrics.get(metrics.size() - 1).name });
  75. provider.addAxis(dateAxis);
  76. ChartAxis commitAxis = new ChartAxis(ChartAxisType.LEFT);
  77. commitAxis.setLabels(new String[] { "", String.valueOf((int) maxValue(metrics)) });
  78. provider.addAxis(commitAxis);
  79. provider.setLineStyles(new LineStyle[] {new LineStyle(2, 4, 0), new LineStyle(0, 4, 1)});
  80. provider.addShapeMarker(new ShapeMarker(MarkerType.CIRCLE, Color.BLUE, 1, -1, 5));
  81. add(new Chart("commitsChart", provider));
  82. } else {
  83. add(WicketUtils.newBlankImage("commitsChart"));
  84. }
  85. }
  86. protected IChartData getChartData(List<Metric> metrics) {
  87. final double[] commits = new double[metrics.size()];
  88. final double[] tags = new double[metrics.size()];
  89. int i = 0;
  90. double max = 0;
  91. for (Metric m : metrics) {
  92. commits[i] = m.count;
  93. if (m.tag > 0) {
  94. tags[i] = m.count;
  95. } else {
  96. tags[i] = -1d;
  97. }
  98. max = Math.max(max, m.count);
  99. i++;
  100. }
  101. IChartData data = new AbstractChartData(max) {
  102. private static final long serialVersionUID = 1L;
  103. public double[][] getData() {
  104. return new double[][] { commits, tags };
  105. }
  106. };
  107. return data;
  108. }
  109. protected String[] getNames(List<Metric> results) {
  110. String[] names = new String[results.size()];
  111. for (int i = 0; i < results.size(); i++) {
  112. names[i] = results.get(i).name;
  113. }
  114. return names;
  115. }
  116. protected double maxValue(List<Metric> metrics) {
  117. double max = Double.MIN_VALUE;
  118. for (Metric m : metrics) {
  119. if (m.count > max) {
  120. max = m.count;
  121. }
  122. }
  123. return max;
  124. }
  125. }