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.

WicketUtils.java 22KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688
  1. /*
  2. * Copyright 2011 gitblit.com.
  3. *
  4. * Licensed under the Apache License, Version 2.0 (the "License");
  5. * you may not use this file except in compliance with the License.
  6. * You may obtain a copy of the License at
  7. *
  8. * http://www.apache.org/licenses/LICENSE-2.0
  9. *
  10. * Unless required by applicable law or agreed to in writing, software
  11. * distributed under the License is distributed on an "AS IS" BASIS,
  12. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  13. * See the License for the specific language governing permissions and
  14. * limitations under the License.
  15. */
  16. package com.gitblit.wicket;
  17. import java.text.DateFormat;
  18. import java.text.MessageFormat;
  19. import java.text.SimpleDateFormat;
  20. import java.util.Collection;
  21. import java.util.Date;
  22. import java.util.HashMap;
  23. import java.util.Map;
  24. import java.util.TimeZone;
  25. import javax.servlet.http.HttpServletRequest;
  26. import org.apache.wicket.Component;
  27. import org.apache.wicket.PageParameters;
  28. import org.apache.wicket.Request;
  29. import org.apache.wicket.behavior.HeaderContributor;
  30. import org.apache.wicket.behavior.SimpleAttributeModifier;
  31. import org.apache.wicket.markup.html.IHeaderContributor;
  32. import org.apache.wicket.markup.html.IHeaderResponse;
  33. import org.apache.wicket.markup.html.basic.Label;
  34. import org.apache.wicket.markup.html.image.ContextImage;
  35. import org.apache.wicket.protocol.http.WebRequest;
  36. import org.apache.wicket.resource.ContextRelativeResource;
  37. import org.eclipse.jgit.diff.DiffEntry.ChangeType;
  38. import org.wicketstuff.googlecharts.AbstractChartData;
  39. import org.wicketstuff.googlecharts.IChartData;
  40. import com.gitblit.Constants;
  41. import com.gitblit.Constants.AccessPermission;
  42. import com.gitblit.Constants.FederationPullStatus;
  43. import com.gitblit.GitBlit;
  44. import com.gitblit.Keys;
  45. import com.gitblit.models.FederationModel;
  46. import com.gitblit.models.Metric;
  47. import com.gitblit.utils.HttpUtils;
  48. import com.gitblit.utils.StringUtils;
  49. import com.gitblit.utils.TimeUtils;
  50. public class WicketUtils {
  51. public static void setCssClass(Component container, String value) {
  52. container.add(new SimpleAttributeModifier("class", value));
  53. }
  54. public static void setCssStyle(Component container, String value) {
  55. container.add(new SimpleAttributeModifier("style", value));
  56. }
  57. public static void setCssBackground(Component container, String value) {
  58. String background = MessageFormat.format("background-color:{0};",
  59. StringUtils.getColor(value));
  60. container.add(new SimpleAttributeModifier("style", background));
  61. }
  62. public static void setHtmlTooltip(Component container, String value) {
  63. container.add(new SimpleAttributeModifier("title", value));
  64. }
  65. public static void setInputPlaceholder(Component container, String value) {
  66. container.add(new SimpleAttributeModifier("placeholder", value));
  67. }
  68. public static void setChangeTypeCssClass(Component container, ChangeType type) {
  69. switch (type) {
  70. case ADD:
  71. setCssClass(container, "addition");
  72. break;
  73. case COPY:
  74. case RENAME:
  75. setCssClass(container, "rename");
  76. break;
  77. case DELETE:
  78. setCssClass(container, "deletion");
  79. break;
  80. case MODIFY:
  81. setCssClass(container, "modification");
  82. break;
  83. }
  84. }
  85. public static void setPermissionClass(Component container, AccessPermission permission) {
  86. if (permission == null) {
  87. setCssClass(container, "badge");
  88. return;
  89. }
  90. switch (permission) {
  91. case REWIND:
  92. case DELETE:
  93. case CREATE:
  94. setCssClass(container, "badge badge-success");
  95. break;
  96. case PUSH:
  97. setCssClass(container, "badge badge-info");
  98. break;
  99. case CLONE:
  100. setCssClass(container, "badge badge-inverse");
  101. break;
  102. default:
  103. setCssClass(container, "badge");
  104. break;
  105. }
  106. }
  107. public static void setAlternatingBackground(Component c, int i) {
  108. String clazz = i % 2 == 0 ? "light" : "dark";
  109. setCssClass(c, clazz);
  110. }
  111. public static Label createAuthorLabel(String wicketId, String author) {
  112. Label label = new Label(wicketId, author);
  113. WicketUtils.setHtmlTooltip(label, author);
  114. return label;
  115. }
  116. public static ContextImage getPullStatusImage(String wicketId, FederationPullStatus status) {
  117. String filename = null;
  118. switch (status) {
  119. case MIRRORED:
  120. case PULLED:
  121. filename = "bullet_green.png";
  122. break;
  123. case SKIPPED:
  124. filename = "bullet_yellow.png";
  125. break;
  126. case FAILED:
  127. filename = "bullet_red.png";
  128. break;
  129. case EXCLUDED:
  130. filename = "bullet_white.png";
  131. break;
  132. case PENDING:
  133. case NOCHANGE:
  134. default:
  135. filename = "bullet_black.png";
  136. }
  137. return WicketUtils.newImage(wicketId, filename, status.name());
  138. }
  139. public static ContextImage getFileImage(String wicketId, String filename) {
  140. filename = filename.toLowerCase();
  141. if (filename.endsWith(".java")) {
  142. return newImage(wicketId, "file_java_16x16.png");
  143. } else if (filename.endsWith(".rb")) {
  144. return newImage(wicketId, "file_ruby_16x16.png");
  145. } else if (filename.endsWith(".php")) {
  146. return newImage(wicketId, "file_php_16x16.png");
  147. } else if (filename.endsWith(".cs")) {
  148. return newImage(wicketId, "file_cs_16x16.png");
  149. } else if (filename.endsWith(".cpp")) {
  150. return newImage(wicketId, "file_cpp_16x16.png");
  151. } else if (filename.endsWith(".c")) {
  152. return newImage(wicketId, "file_c_16x16.png");
  153. } else if (filename.endsWith(".h")) {
  154. return newImage(wicketId, "file_h_16x16.png");
  155. } else if (filename.endsWith(".sln")) {
  156. return newImage(wicketId, "file_vs_16x16.png");
  157. } else if (filename.endsWith(".csv") || filename.endsWith(".xls")
  158. || filename.endsWith(".xlsx")) {
  159. return newImage(wicketId, "file_excel_16x16.png");
  160. } else if (filename.endsWith(".doc") || filename.endsWith(".docx")) {
  161. return newImage(wicketId, "file_doc_16x16.png");
  162. } else if (filename.endsWith(".ppt") || filename.endsWith(".pptx")) {
  163. return newImage(wicketId, "file_ppt_16x16.png");
  164. } else if (filename.endsWith(".zip")) {
  165. return newImage(wicketId, "file_zip_16x16.png");
  166. } else if (filename.endsWith(".pdf")) {
  167. return newImage(wicketId, "file_acrobat_16x16.png");
  168. } else if (filename.endsWith(".htm") || filename.endsWith(".html")) {
  169. return newImage(wicketId, "file_world_16x16.png");
  170. } else if (filename.endsWith(".xml")) {
  171. return newImage(wicketId, "file_code_16x16.png");
  172. } else if (filename.endsWith(".properties")) {
  173. return newImage(wicketId, "file_settings_16x16.png");
  174. }
  175. MarkupProcessor processor = new MarkupProcessor(GitBlit.getSettings());
  176. String ext = StringUtils.getFileExtension(filename).toLowerCase();
  177. if (processor.getMarkupExtensions().contains(ext)) {
  178. return newImage(wicketId, "file_world_16x16.png");
  179. }
  180. return newImage(wicketId, "file_16x16.png");
  181. }
  182. public static ContextImage getRegistrationImage(String wicketId, FederationModel registration,
  183. Component c) {
  184. if (registration.isResultData()) {
  185. return WicketUtils.newImage(wicketId, "information_16x16.png",
  186. c.getString("gb.federationResults"));
  187. } else {
  188. return WicketUtils.newImage(wicketId, "arrow_left.png",
  189. c.getString("gb.federationRegistration"));
  190. }
  191. }
  192. public static ContextImage newClearPixel(String wicketId) {
  193. return newImage(wicketId, "pixel.png");
  194. }
  195. public static ContextImage newBlankImage(String wicketId) {
  196. return newImage(wicketId, "blank.png");
  197. }
  198. public static ContextImage newImage(String wicketId, String file) {
  199. return newImage(wicketId, file, null);
  200. }
  201. public static ContextImage newImage(String wicketId, String file, String tooltip) {
  202. ContextImage img = new ContextImage(wicketId, file);
  203. if (!StringUtils.isEmpty(tooltip)) {
  204. setHtmlTooltip(img, tooltip);
  205. }
  206. return img;
  207. }
  208. public static Label newIcon(String wicketId, String css) {
  209. Label lbl = new Label(wicketId);
  210. setCssClass(lbl, css);
  211. return lbl;
  212. }
  213. public static Label newBlankIcon(String wicketId) {
  214. Label lbl = new Label(wicketId);
  215. setCssClass(lbl, "");
  216. lbl.setRenderBodyOnly(true);
  217. return lbl;
  218. }
  219. public static ContextRelativeResource getResource(String file) {
  220. return new ContextRelativeResource(file);
  221. }
  222. public static String getGitblitURL(Request request) {
  223. HttpServletRequest req = ((WebRequest) request).getHttpServletRequest();
  224. return HttpUtils.getGitblitURL(req);
  225. }
  226. public static HeaderContributor syndicationDiscoveryLink(final String feedTitle,
  227. final String url) {
  228. return new HeaderContributor(new IHeaderContributor() {
  229. private static final long serialVersionUID = 1L;
  230. @Override
  231. public void renderHead(IHeaderResponse response) {
  232. String contentType = "application/rss+xml";
  233. StringBuilder buffer = new StringBuilder();
  234. buffer.append("<link rel=\"alternate\" ");
  235. buffer.append("type=\"").append(contentType).append("\" ");
  236. buffer.append("title=\"").append(feedTitle).append("\" ");
  237. buffer.append("href=\"").append(url).append("\" />");
  238. response.renderString(buffer.toString());
  239. }
  240. });
  241. }
  242. public static PageParameters newTokenParameter(String token) {
  243. Map<String, String> parameterMap = new HashMap<String, String>();
  244. parameterMap.put("t", token);
  245. return new PageParameters(parameterMap);
  246. }
  247. public static PageParameters newRegistrationParameter(String url,
  248. String name) {
  249. Map<String, String> parameterMap = new HashMap<String, String>();
  250. parameterMap.put("u", url);
  251. parameterMap.put("n", name);
  252. return new PageParameters(parameterMap);
  253. }
  254. public static PageParameters newUsernameParameter(String username) {
  255. Map<String, String> parameterMap = new HashMap<String, String>();
  256. parameterMap.put("user", username);
  257. return new PageParameters(parameterMap);
  258. }
  259. public static PageParameters newTeamnameParameter(String teamname) {
  260. Map<String, String> parameterMap = new HashMap<String, String>();
  261. parameterMap.put("team", teamname);
  262. return new PageParameters(parameterMap);
  263. }
  264. public static PageParameters newProjectParameter(String projectName) {
  265. Map<String, String> parameterMap = new HashMap<String, String>();
  266. parameterMap.put("p", projectName);
  267. return new PageParameters(parameterMap);
  268. }
  269. public static PageParameters newRepositoryParameter(String repositoryName) {
  270. Map<String, String> parameterMap = new HashMap<String, String>();
  271. parameterMap.put("r", repositoryName);
  272. return new PageParameters(parameterMap);
  273. }
  274. public static PageParameters newObjectParameter(String objectId) {
  275. Map<String, String> parameterMap = new HashMap<String, String>();
  276. parameterMap.put("h", objectId);
  277. return new PageParameters(parameterMap);
  278. }
  279. public static PageParameters newObjectParameter(String repositoryName,
  280. String objectId) {
  281. Map<String, String> parameterMap = new HashMap<String, String>();
  282. if (StringUtils.isEmpty(objectId)) {
  283. return newRepositoryParameter(repositoryName);
  284. }
  285. parameterMap.put("r", repositoryName);
  286. parameterMap.put("h", objectId);
  287. return new PageParameters(parameterMap);
  288. }
  289. public static PageParameters newRangeParameter(String repositoryName,
  290. String startRange, String endRange) {
  291. Map<String, String> parameterMap = new HashMap<String, String>();
  292. parameterMap.put("r", repositoryName);
  293. parameterMap.put("h", startRange + ".." + endRange);
  294. return new PageParameters(parameterMap);
  295. }
  296. public static PageParameters newPathParameter(String repositoryName,
  297. String objectId, String path) {
  298. Map<String, String> parameterMap = new HashMap<String, String>();
  299. if (StringUtils.isEmpty(path)) {
  300. return newObjectParameter(repositoryName, objectId);
  301. }
  302. if (StringUtils.isEmpty(objectId)) {
  303. parameterMap.put("r", repositoryName);
  304. parameterMap.put("f", path);
  305. return new PageParameters(parameterMap);
  306. }
  307. parameterMap.put("r", repositoryName);
  308. parameterMap.put("h", objectId);
  309. parameterMap.put("f", path);
  310. return new PageParameters(parameterMap);
  311. }
  312. public static PageParameters newLogPageParameter(String repositoryName,
  313. String objectId, int pageNumber) {
  314. Map<String, String> parameterMap = new HashMap<String, String>();
  315. if (pageNumber <= 1) {
  316. return newObjectParameter(repositoryName, objectId);
  317. }
  318. if (StringUtils.isEmpty(objectId)) {
  319. parameterMap.put("r", repositoryName);
  320. parameterMap.put("pg", String.valueOf(pageNumber));
  321. return new PageParameters(parameterMap);
  322. }
  323. parameterMap.put("r", repositoryName);
  324. parameterMap.put("h", objectId);
  325. parameterMap.put("pg", String.valueOf(pageNumber));
  326. return new PageParameters(parameterMap);
  327. }
  328. public static PageParameters newHistoryPageParameter(String repositoryName,
  329. String objectId, String path, int pageNumber) {
  330. Map<String, String> parameterMap = new HashMap<String, String>();
  331. if (pageNumber <= 1) {
  332. return newObjectParameter(repositoryName, objectId);
  333. }
  334. if (StringUtils.isEmpty(objectId)) {
  335. parameterMap.put("r", repositoryName);
  336. parameterMap.put("f", path);
  337. parameterMap.put("pg", String.valueOf(pageNumber));
  338. return new PageParameters(parameterMap);
  339. }
  340. parameterMap.put("r", repositoryName);
  341. parameterMap.put("h", objectId);
  342. parameterMap.put("f", path);
  343. parameterMap.put("pg", String.valueOf(pageNumber));
  344. return new PageParameters(parameterMap);
  345. }
  346. public static PageParameters newBlobDiffParameter(String repositoryName,
  347. String baseCommitId, String commitId, String path) {
  348. Map<String, String> parameterMap = new HashMap<String, String>();
  349. if (StringUtils.isEmpty(commitId)) {
  350. parameterMap.put("r", repositoryName);
  351. parameterMap.put("f", path);
  352. parameterMap.put("hb", baseCommitId);
  353. return new PageParameters(parameterMap);
  354. }
  355. parameterMap.put("r", repositoryName);
  356. parameterMap.put("h", commitId);
  357. parameterMap.put("f", path);
  358. parameterMap.put("hb", baseCommitId);
  359. return new PageParameters(parameterMap);
  360. }
  361. public static PageParameters newSearchParameter(String repositoryName,
  362. String commitId, String search, Constants.SearchType type) {
  363. Map<String, String> parameterMap = new HashMap<String, String>();
  364. if (StringUtils.isEmpty(commitId)) {
  365. parameterMap.put("r", repositoryName);
  366. parameterMap.put("s", search);
  367. parameterMap.put("st", type.name());
  368. return new PageParameters(parameterMap);
  369. }
  370. parameterMap.put("r", repositoryName);
  371. parameterMap.put("h", commitId);
  372. parameterMap.put("s", search);
  373. parameterMap.put("st", type.name());
  374. return new PageParameters(parameterMap);
  375. }
  376. public static PageParameters newSearchParameter(String repositoryName,
  377. String commitId, String search, Constants.SearchType type,
  378. int pageNumber) {
  379. Map<String, String> parameterMap = new HashMap<String, String>();
  380. if (StringUtils.isEmpty(commitId)) {
  381. parameterMap.put("r", repositoryName);
  382. parameterMap.put("s", search);
  383. parameterMap.put("st", type.name());
  384. parameterMap.put("pg", String.valueOf(pageNumber));
  385. return new PageParameters(parameterMap);
  386. }
  387. parameterMap.put("r", repositoryName);
  388. parameterMap.put("h", commitId);
  389. parameterMap.put("s", search);
  390. parameterMap.put("st", type.name());
  391. parameterMap.put("pg", String.valueOf(pageNumber));
  392. return new PageParameters(parameterMap);
  393. }
  394. public static String getProjectName(PageParameters params) {
  395. return params.getString("p", "");
  396. }
  397. public static String getRepositoryName(PageParameters params) {
  398. return params.getString("r", "");
  399. }
  400. public static String getObject(PageParameters params) {
  401. return params.getString("h", null);
  402. }
  403. public static String getPath(PageParameters params) {
  404. return params.getString("f", null);
  405. }
  406. public static String getBaseObjectId(PageParameters params) {
  407. return params.getString("hb", null);
  408. }
  409. public static String getSearchString(PageParameters params) {
  410. return params.getString("s", null);
  411. }
  412. public static String getSearchType(PageParameters params) {
  413. return params.getString("st", null);
  414. }
  415. public static int getPage(PageParameters params) {
  416. // index from 1
  417. return params.getInt("pg", 1);
  418. }
  419. public static String getRegEx(PageParameters params) {
  420. return params.getString("x", "");
  421. }
  422. public static String getSet(PageParameters params) {
  423. return params.getString("set", "");
  424. }
  425. public static String getTeam(PageParameters params) {
  426. return params.getString("team", "");
  427. }
  428. public static int getDaysBack(PageParameters params) {
  429. return params.getInt("db", 0);
  430. }
  431. public static String getUsername(PageParameters params) {
  432. return params.getString("user", "");
  433. }
  434. public static String getTeamname(PageParameters params) {
  435. return params.getString("team", "");
  436. }
  437. public static String getToken(PageParameters params) {
  438. return params.getString("t", "");
  439. }
  440. public static String getUrlParameter(PageParameters params) {
  441. return params.getString("u", "");
  442. }
  443. public static String getNameParameter(PageParameters params) {
  444. return params.getString("n", "");
  445. }
  446. public static Label createDateLabel(String wicketId, Date date, TimeZone timeZone, TimeUtils timeUtils) {
  447. return createDateLabel(wicketId, date, timeZone, timeUtils, true);
  448. }
  449. public static Label createDateLabel(String wicketId, Date date, TimeZone timeZone, TimeUtils timeUtils, boolean setCss) {
  450. String format = GitBlit.getString(Keys.web.datestampShortFormat, "MM/dd/yy");
  451. DateFormat df = new SimpleDateFormat(format);
  452. if (timeZone == null) {
  453. timeZone = GitBlit.getTimezone();
  454. }
  455. df.setTimeZone(timeZone);
  456. String dateString;
  457. if (date.getTime() == 0) {
  458. dateString = "--";
  459. } else {
  460. dateString = df.format(date);
  461. }
  462. String title = null;
  463. if (date.getTime() <= System.currentTimeMillis()) {
  464. // past
  465. title = timeUtils.timeAgo(date);
  466. }
  467. if ((System.currentTimeMillis() - date.getTime()) < 10 * 24 * 60 * 60 * 1000L) {
  468. String tmp = dateString;
  469. dateString = title;
  470. title = tmp;
  471. }
  472. Label label = new Label(wicketId, dateString);
  473. if (setCss) {
  474. WicketUtils.setCssClass(label, timeUtils.timeAgoCss(date));
  475. }
  476. if (!StringUtils.isEmpty(title)) {
  477. WicketUtils.setHtmlTooltip(label, title);
  478. }
  479. return label;
  480. }
  481. public static Label createTimeLabel(String wicketId, Date date, TimeZone timeZone, TimeUtils timeUtils) {
  482. String format = GitBlit.getString(Keys.web.timeFormat, "HH:mm");
  483. DateFormat df = new SimpleDateFormat(format);
  484. if (timeZone == null) {
  485. timeZone = GitBlit.getTimezone();
  486. }
  487. df.setTimeZone(timeZone);
  488. String timeString;
  489. if (date.getTime() == 0) {
  490. timeString = "--";
  491. } else {
  492. timeString = df.format(date);
  493. }
  494. String title = timeUtils.timeAgo(date);
  495. Label label = new Label(wicketId, timeString);
  496. if (!StringUtils.isEmpty(title)) {
  497. WicketUtils.setHtmlTooltip(label, title);
  498. }
  499. return label;
  500. }
  501. public static Label createDatestampLabel(String wicketId, Date date, TimeZone timeZone, TimeUtils timeUtils) {
  502. String format = GitBlit.getString(Keys.web.datestampLongFormat, "EEEE, MMMM d, yyyy");
  503. DateFormat df = new SimpleDateFormat(format);
  504. if (timeZone == null) {
  505. timeZone = GitBlit.getTimezone();
  506. }
  507. df.setTimeZone(timeZone);
  508. String dateString;
  509. if (date.getTime() == 0) {
  510. dateString = "--";
  511. } else {
  512. dateString = df.format(date);
  513. }
  514. String title = null;
  515. if (TimeUtils.isToday(date, timeZone)) {
  516. title = timeUtils.today();
  517. } else if (TimeUtils.isYesterday(date, timeZone)) {
  518. title = timeUtils.yesterday();
  519. } else if (date.getTime() <= System.currentTimeMillis()) {
  520. // past
  521. title = timeUtils.timeAgo(date);
  522. }
  523. if ((System.currentTimeMillis() - date.getTime()) < 10 * 24 * 60 * 60 * 1000L) {
  524. String tmp = dateString;
  525. dateString = title;
  526. title = tmp;
  527. }
  528. Label label = new Label(wicketId, dateString);
  529. if (!StringUtils.isEmpty(title)) {
  530. WicketUtils.setHtmlTooltip(label, title);
  531. }
  532. return label;
  533. }
  534. public static Label createTimestampLabel(String wicketId, Date date, TimeZone timeZone, TimeUtils timeUtils) {
  535. String format = GitBlit.getString(Keys.web.datetimestampLongFormat,
  536. "EEEE, MMMM d, yyyy HH:mm Z");
  537. DateFormat df = new SimpleDateFormat(format);
  538. if (timeZone == null) {
  539. timeZone = GitBlit.getTimezone();
  540. }
  541. df.setTimeZone(timeZone);
  542. String dateString;
  543. if (date.getTime() == 0) {
  544. dateString = "--";
  545. } else {
  546. dateString = df.format(date);
  547. }
  548. String title = null;
  549. if (date.getTime() <= System.currentTimeMillis()) {
  550. // past
  551. title = timeUtils.timeAgo(date);
  552. }
  553. Label label = new Label(wicketId, dateString);
  554. if (!StringUtils.isEmpty(title)) {
  555. WicketUtils.setHtmlTooltip(label, title);
  556. }
  557. return label;
  558. }
  559. public static IChartData getChartData(Collection<Metric> metrics) {
  560. final double[] commits = new double[metrics.size()];
  561. final double[] tags = new double[metrics.size()];
  562. int i = 0;
  563. double max = 0;
  564. for (Metric m : metrics) {
  565. commits[i] = m.count;
  566. if (m.tag > 0) {
  567. tags[i] = m.count;
  568. } else {
  569. tags[i] = -1d;
  570. }
  571. max = Math.max(max, m.count);
  572. i++;
  573. }
  574. IChartData data = new AbstractChartData(max) {
  575. private static final long serialVersionUID = 1L;
  576. @Override
  577. public double[][] getData() {
  578. return new double[][] { commits, tags };
  579. }
  580. };
  581. return data;
  582. }
  583. public static double maxValue(Collection<Metric> metrics) {
  584. double max = Double.MIN_VALUE;
  585. for (Metric m : metrics) {
  586. if (m.count > max) {
  587. max = m.count;
  588. }
  589. }
  590. return max;
  591. }
  592. public static IChartData getScatterData(Collection<Metric> metrics) {
  593. final double[] y = new double[metrics.size()];
  594. final double[] x = new double[metrics.size()];
  595. int i = 0;
  596. double max = 0;
  597. for (Metric m : metrics) {
  598. y[i] = m.count;
  599. if (m.duration > 0) {
  600. x[i] = m.duration;
  601. } else {
  602. x[i] = -1d;
  603. }
  604. max = Math.max(max, m.count);
  605. i++;
  606. }
  607. IChartData data = new AbstractChartData(max) {
  608. private static final long serialVersionUID = 1L;
  609. @Override
  610. public double[][] getData() {
  611. return new double[][] { x, y };
  612. }
  613. };
  614. return data;
  615. }
  616. }