Paul Martin
2016-04-06 5bb79fbb553a11e6582392f658233cf58a4ceb11
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
420     public static PageParameters newBlobDiffParameter(String repositoryName,
421             String baseCommitId, String commitId, String path) {
422         Map<String, String> parameterMap = new HashMap<String, String>();
423         if (StringUtils.isEmpty(commitId)) {
424             parameterMap.put("r", repositoryName);
425             parameterMap.put("f", path);
426             parameterMap.put("hb", baseCommitId);
427             return new PageParameters(parameterMap);
428         }
429         parameterMap.put("r", repositoryName);
430         parameterMap.put("h", commitId);
431         parameterMap.put("f", path);
432         parameterMap.put("hb", baseCommitId);
433         return new PageParameters(parameterMap);
434     }
435
436     public static PageParameters newSearchParameter(String repositoryName,
437             String commitId, String search, Constants.SearchType type) {
438         Map<String, String> parameterMap = new HashMap<String, String>();
439         if (StringUtils.isEmpty(commitId)) {
440             parameterMap.put("r", repositoryName);
441             parameterMap.put("s", search);
442             parameterMap.put("st", type.name());
443             return new PageParameters(parameterMap);
444         }
445         parameterMap.put("r", repositoryName);
446         parameterMap.put("h", commitId);
447         parameterMap.put("s", search);
448         parameterMap.put("st", type.name());
449         return new PageParameters(parameterMap);
450     }
451
452     public static PageParameters newSearchParameter(String repositoryName,
453             String commitId, String search, Constants.SearchType type,
2a7306 454             int pageNumber) {
d80588 455         Map<String, String> parameterMap = new HashMap<String, String>();
a2709d 456         if (StringUtils.isEmpty(commitId)) {
d80588 457             parameterMap.put("r", repositoryName);
G 458             parameterMap.put("s", search);
459             parameterMap.put("st", type.name());
460             parameterMap.put("pg", String.valueOf(pageNumber));
461             return new PageParameters(parameterMap);
a2709d 462         }
d80588 463         parameterMap.put("r", repositoryName);
G 464         parameterMap.put("h", commitId);
465         parameterMap.put("s", search);
466         parameterMap.put("st", type.name());
467         parameterMap.put("pg", String.valueOf(pageNumber));
468         return new PageParameters(parameterMap);
98ce17 469     }
01ffd4 470
e3733c 471     public static PageParameters newBlameTypeParameter(String repositoryName,
AL 472             String commitId, String path, String blameType) {
473         Map<String, String> parameterMap = new HashMap<String, String>();
474         parameterMap.put("r", repositoryName);
475         parameterMap.put("h", commitId);
476         parameterMap.put("f", path);
477         parameterMap.put("blametype", blameType);
478         return new PageParameters(parameterMap);
479     }
98ce17 480
3b23dc 481     public static PageParameters newTicketsParameters(String repositoryName, String... states) {
JM 482         PageParameters tParams = newRepositoryParameter(repositoryName);
483         if (states != null) {
484             for (String state : states) {
485                 tParams.add("status", state);
486             }
487         }
488         return tParams;
489     }
490
491     public static PageParameters newOpenTicketsParameter(String repositoryName) {
492         return newTicketsParameters(repositoryName, TicketsUI.openStatii);
493     }
494
13a3f5 495     public static String getProjectName(PageParameters params) {
JM 496         return params.getString("p", "");
497     }
498
7d35e2 499     public static String getRepositoryName(PageParameters params) {
JM 500         return params.getString("r", "");
501     }
502
503     public static String getObject(PageParameters params) {
a2709d 504         return params.getString("h", null);
7d35e2 505     }
JM 506
507     public static String getPath(PageParameters params) {
508         return params.getString("f", null);
509     }
98ce17 510
f1dfc2 511     public static String getBaseObjectId(PageParameters params) {
JM 512         return params.getString("hb", null);
513     }
7d35e2 514
98ce17 515     public static String getSearchString(PageParameters params) {
JM 516         return params.getString("s", null);
517     }
518
519     public static String getSearchType(PageParameters params) {
520         return params.getString("st", null);
521     }
522
dd661a 523     public static DiffComparator getDiffComparator(PageParameters params) {
JM 524         int ordinal = params.getInt("w", 0);
525         return DiffComparator.values()[ordinal];
526     }
527
7d35e2 528     public static int getPage(PageParameters params) {
2a7306 529         // index from 1
e33b91 530         return params.getInt("pg", 1);
7d35e2 531     }
2a7306 532
cb57ec 533     public static String getRegEx(PageParameters params) {
JM 534         return params.getString("x", "");
535     }
536
6e6f9f 537     public static String getSet(PageParameters params) {
JM 538         return params.getString("set", "");
539     }
540
cb57ec 541     public static String getTeam(PageParameters params) {
JM 542         return params.getString("team", "");
543     }
544
6e6f9f 545     public static int getDaysBack(PageParameters params) {
5abe33 546         return params.getInt("db", 0);
6e6f9f 547     }
JM 548
dfb889 549     public static String getUsername(PageParameters params) {
JM 550         return params.getString("user", "");
551     }
7d35e2 552
fe24a0 553     public static String getTeamname(PageParameters params) {
JM 554         return params.getString("team", "");
555     }
556
831469 557     public static String getToken(PageParameters params) {
JM 558         return params.getString("t", "");
559     }
db91a3 560
831469 561     public static String getUrlParameter(PageParameters params) {
JM 562         return params.getString("u", "");
563     }
564
565     public static String getNameParameter(PageParameters params) {
566         return params.getString("n", "");
567     }
568
9adf62 569     public static Label createDateLabel(String wicketId, Date date, TimeZone timeZone, TimeUtils timeUtils) {
235ad9 570         return createDateLabel(wicketId, date, timeZone, timeUtils, true);
JM 571     }
699e71 572
235ad9 573     public static Label createDateLabel(String wicketId, Date date, TimeZone timeZone, TimeUtils timeUtils, boolean setCss) {
99d0d4 574         String format = GitBlitWebApp.get().settings().getString(Keys.web.datestampShortFormat, "MM/dd/yy");
2a7306 575         DateFormat df = new SimpleDateFormat(format);
6c6e7d 576         if (timeZone == null) {
99d0d4 577             timeZone = GitBlitWebApp.get().getTimezone();
698678 578         }
6c6e7d 579         df.setTimeZone(timeZone);
831469 580         String dateString;
JM 581         if (date.getTime() == 0) {
582             dateString = "--";
583         } else {
584             dateString = df.format(date);
585         }
586         String title = null;
587         if (date.getTime() <= System.currentTimeMillis()) {
588             // past
9adf62 589             title = timeUtils.timeAgo(date);
831469 590         }
01ffd4 591         if (title != null && (System.currentTimeMillis() - date.getTime()) < 10 * 24 * 60 * 60 * 1000L) {
698678 592             String tmp = dateString;
JM 593             dateString = title;
594             title = tmp;
595         }
596         Label label = new Label(wicketId, dateString);
235ad9 597         if (setCss) {
JM 598             WicketUtils.setCssClass(label, timeUtils.timeAgoCss(date));
599         }
831469 600         if (!StringUtils.isEmpty(title)) {
JM 601             WicketUtils.setHtmlTooltip(label, title);
602         }
698678 603         return label;
JM 604     }
db91a3 605
9adf62 606     public static Label createTimeLabel(String wicketId, Date date, TimeZone timeZone, TimeUtils timeUtils) {
99d0d4 607         String format = GitBlitWebApp.get().settings().getString(Keys.web.timeFormat, "HH:mm");
6e6f9f 608         DateFormat df = new SimpleDateFormat(format);
6c6e7d 609         if (timeZone == null) {
99d0d4 610             timeZone = GitBlitWebApp.get().getTimezone();
6e6f9f 611         }
6c6e7d 612         df.setTimeZone(timeZone);
6e6f9f 613         String timeString;
JM 614         if (date.getTime() == 0) {
615             timeString = "--";
616         } else {
617             timeString = df.format(date);
618         }
9adf62 619         String title = timeUtils.timeAgo(date);
6e6f9f 620         Label label = new Label(wicketId, timeString);
JM 621         if (!StringUtils.isEmpty(title)) {
622             WicketUtils.setHtmlTooltip(label, title);
623         }
624         return label;
625     }
db91a3 626
9adf62 627     public static Label createDatestampLabel(String wicketId, Date date, TimeZone timeZone, TimeUtils timeUtils) {
99d0d4 628         String format = GitBlitWebApp.get().settings().getString(Keys.web.datestampLongFormat, "EEEE, MMMM d, yyyy");
6e6f9f 629         DateFormat df = new SimpleDateFormat(format);
6c6e7d 630         if (timeZone == null) {
99d0d4 631             timeZone = GitBlitWebApp.get().getTimezone();
6e6f9f 632         }
6c6e7d 633         df.setTimeZone(timeZone);
6e6f9f 634         String dateString;
JM 635         if (date.getTime() == 0) {
636             dateString = "--";
637         } else {
638             dateString = df.format(date);
639         }
640         String title = null;
9b26b7 641         if (TimeUtils.isToday(date, timeZone)) {
9adf62 642             title = timeUtils.today();
9b26b7 643         } else if (TimeUtils.isYesterday(date, timeZone)) {
a96110 644             title = timeUtils.yesterday();
712210 645         } else if (date.getTime() <= System.currentTimeMillis()) {
6e6f9f 646             // past
9adf62 647             title = timeUtils.timeAgo(date);
a96110 648         } else {
JM 649             // future
650             title = timeUtils.inFuture(date);
6e6f9f 651         }
JM 652         if ((System.currentTimeMillis() - date.getTime()) < 10 * 24 * 60 * 60 * 1000L) {
653             String tmp = dateString;
654             dateString = title;
655             title = tmp;
656         }
657         Label label = new Label(wicketId, dateString);
658         if (!StringUtils.isEmpty(title)) {
659             WicketUtils.setHtmlTooltip(label, title);
660         }
661         return label;
662     }
155bf7 663
9adf62 664     public static Label createTimestampLabel(String wicketId, Date date, TimeZone timeZone, TimeUtils timeUtils) {
99d0d4 665         String format = GitBlitWebApp.get().settings().getString(Keys.web.datetimestampLongFormat,
a4ed6d 666                 "EEEE, MMMM d, yyyy HH:mm Z");
2a7306 667         DateFormat df = new SimpleDateFormat(format);
6c6e7d 668         if (timeZone == null) {
99d0d4 669             timeZone = GitBlitWebApp.get().getTimezone();
bc10f9 670         }
6c6e7d 671         df.setTimeZone(timeZone);
a2709d 672         String dateString;
JM 673         if (date.getTime() == 0) {
674             dateString = "--";
675         } else {
676             dateString = df.format(date);
677         }
831469 678         String title = null;
JM 679         if (date.getTime() <= System.currentTimeMillis()) {
680             // past
9adf62 681             title = timeUtils.timeAgo(date);
831469 682         }
bc10f9 683         Label label = new Label(wicketId, dateString);
831469 684         if (!StringUtils.isEmpty(title)) {
JM 685             WicketUtils.setHtmlTooltip(label, title);
686         }
bc10f9 687         return label;
JM 688     }
008322 689
f1720c 690     public static double maxValue(Collection<Metric> metrics) {
JM 691         double max = Double.MIN_VALUE;
692         for (Metric m : metrics) {
693             if (m.count > max) {
694                 max = m.count;
695             }
696         }
697         return max;
698     }
5fe7df 699 }