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 24KB

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