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