From 91aad771ac411b317139bab1b862e9d9cfd4e59d Mon Sep 17 00:00:00 2001 From: Paul Martin <paul@paulsputer.com> Date: Thu, 07 Apr 2016 19:01:14 -0400 Subject: [PATCH] Fixes #1028 - FilestorePage now pages and filters --- src/main/java/com/gitblit/wicket/WicketUtils.java | 387 +++++++++++++++++++++++++++++++++--------------------- 1 files changed, 235 insertions(+), 152 deletions(-) diff --git a/src/main/java/com/gitblit/wicket/WicketUtils.java b/src/main/java/com/gitblit/wicket/WicketUtils.java index d2c14fc..99c1e08 100644 --- a/src/main/java/com/gitblit/wicket/WicketUtils.java +++ b/src/main/java/com/gitblit/wicket/WicketUtils.java @@ -20,7 +20,8 @@ import java.text.SimpleDateFormat; import java.util.Collection; import java.util.Date; -import java.util.List; +import java.util.HashMap; +import java.util.Map; import java.util.TimeZone; import javax.servlet.http.HttpServletRequest; @@ -28,25 +29,26 @@ import org.apache.wicket.Component; import org.apache.wicket.PageParameters; import org.apache.wicket.Request; +import org.apache.wicket.behavior.AttributeAppender; import org.apache.wicket.behavior.HeaderContributor; import org.apache.wicket.behavior.SimpleAttributeModifier; import org.apache.wicket.markup.html.IHeaderContributor; import org.apache.wicket.markup.html.IHeaderResponse; import org.apache.wicket.markup.html.basic.Label; import org.apache.wicket.markup.html.image.ContextImage; +import org.apache.wicket.model.Model; import org.apache.wicket.protocol.http.WebRequest; import org.apache.wicket.resource.ContextRelativeResource; import org.eclipse.jgit.diff.DiffEntry.ChangeType; -import org.wicketstuff.googlecharts.AbstractChartData; -import org.wicketstuff.googlecharts.IChartData; import com.gitblit.Constants; import com.gitblit.Constants.AccessPermission; import com.gitblit.Constants.FederationPullStatus; -import com.gitblit.GitBlit; +import com.gitblit.IStoredSettings; import com.gitblit.Keys; import com.gitblit.models.FederationModel; import com.gitblit.models.Metric; +import com.gitblit.utils.DiffUtils.DiffComparator; import com.gitblit.utils.HttpUtils; import com.gitblit.utils.StringUtils; import com.gitblit.utils.TimeUtils; @@ -55,6 +57,10 @@ public static void setCssClass(Component container, String value) { container.add(new SimpleAttributeModifier("class", value)); + } + + public static void addCssClass(Component container, String value) { + container.add(new AttributeAppender("class", new Model<String>(value), " ")); } public static void setCssStyle(Component container, String value) { @@ -67,8 +73,8 @@ container.add(new SimpleAttributeModifier("style", background)); } - public static void setHtmlTooltip(Component container, String value) { - container.add(new SimpleAttributeModifier("title", value)); + public static Component setHtmlTooltip(Component container, String value) { + return container.add(new SimpleAttributeModifier("title", value)); } public static void setInputPlaceholder(Component container, String value) { @@ -93,22 +99,6 @@ } } - public static void setTicketCssClass(Component container, String state) { - String css = null; - if (state.equals("open")) { - css = "label label-important"; - } else if (state.equals("hold")) { - css = "label label-warning"; - } else if (state.equals("resolved")) { - css = "label label-success"; - } else if (state.equals("invalid")) { - css = "label"; - } - if (css != null) { - setCssClass(container, css); - } - } - public static void setPermissionClass(Component container, AccessPermission permission) { if (permission == null) { setCssClass(container, "badge"); @@ -129,7 +119,7 @@ default: setCssClass(container, "badge"); break; - } + } } public static void setAlternatingBackground(Component c, int i) { @@ -190,7 +180,7 @@ return newImage(wicketId, "file_excel_16x16.png"); } else if (filename.endsWith(".doc") || filename.endsWith(".docx")) { return newImage(wicketId, "file_doc_16x16.png"); - } else if (filename.endsWith(".ppt")) { + } else if (filename.endsWith(".ppt") || filename.endsWith(".pptx")) { return newImage(wicketId, "file_ppt_16x16.png"); } else if (filename.endsWith(".zip")) { return newImage(wicketId, "file_zip_16x16.png"); @@ -204,11 +194,10 @@ return newImage(wicketId, "file_settings_16x16.png"); } - List<String> mdExtensions = GitBlit.getStrings(Keys.web.markdownExtensions); - for (String ext : mdExtensions) { - if (filename.endsWith('.' + ext.toLowerCase())) { - return newImage(wicketId, "file_world_16x16.png"); - } + String ext = StringUtils.getFileExtension(filename).toLowerCase(); + IStoredSettings settings = GitBlitWebApp.get().settings(); + if (MarkupProcessor.getMarkupExtensions(settings).contains(ext)) { + return newImage(wicketId, "file_world_16x16.png"); } return newImage(wicketId, "file_16x16.png"); } @@ -246,17 +235,17 @@ public static Label newIcon(String wicketId, String css) { Label lbl = new Label(wicketId); - setCssClass(lbl, css); + setCssClass(lbl, css); return lbl; } - + public static Label newBlankIcon(String wicketId) { Label lbl = new Label(wicketId); setCssClass(lbl, ""); lbl.setRenderBodyOnly(true); return lbl; } - + public static ContextRelativeResource getResource(String file) { return new ContextRelativeResource(file); } @@ -271,6 +260,7 @@ return new HeaderContributor(new IHeaderContributor() { private static final long serialVersionUID = 1L; + @Override public void renderHead(IHeaderResponse response) { String contentType = "application/rss+xml"; @@ -285,104 +275,234 @@ } public static PageParameters newTokenParameter(String token) { - return new PageParameters("t=" + token); + Map<String, String> parameterMap = new HashMap<String, String>(); + parameterMap.put("t", token); + return new PageParameters(parameterMap); } - public static PageParameters newRegistrationParameter(String url, String name) { - return new PageParameters("u=" + url + ",n=" + name); + public static PageParameters newRegistrationParameter(String url, + String name) { + Map<String, String> parameterMap = new HashMap<String, String>(); + parameterMap.put("u", url); + parameterMap.put("n", name); + return new PageParameters(parameterMap); } public static PageParameters newUsernameParameter(String username) { - return new PageParameters("user=" + username); + Map<String, String> parameterMap = new HashMap<String, String>(); + parameterMap.put("user", username); + return new PageParameters(parameterMap); } public static PageParameters newTeamnameParameter(String teamname) { - return new PageParameters("team=" + teamname); + Map<String, String> parameterMap = new HashMap<String, String>(); + parameterMap.put("team", teamname); + return new PageParameters(parameterMap); } public static PageParameters newProjectParameter(String projectName) { - return new PageParameters("p=" + projectName); + Map<String, String> parameterMap = new HashMap<String, String>(); + parameterMap.put("p", projectName); + return new PageParameters(parameterMap); } public static PageParameters newRepositoryParameter(String repositoryName) { - return new PageParameters("r=" + repositoryName); + Map<String, String> parameterMap = new HashMap<String, String>(); + if (!StringUtils.isEmpty(repositoryName)) { + parameterMap.put("r", repositoryName); + } + return new PageParameters(parameterMap); } public static PageParameters newObjectParameter(String objectId) { - return new PageParameters("h=" + objectId); + Map<String, String> parameterMap = new HashMap<String, String>(); + parameterMap.put("h", objectId); + return new PageParameters(parameterMap); } - public static PageParameters newObjectParameter(String repositoryName, String objectId) { + public static PageParameters newObjectParameter(String repositoryName, + String objectId) { + Map<String, String> parameterMap = new HashMap<String, String>(); if (StringUtils.isEmpty(objectId)) { return newRepositoryParameter(repositoryName); } - return new PageParameters("r=" + repositoryName + ",h=" + objectId); + parameterMap.put("r", repositoryName); + parameterMap.put("h", objectId); + return new PageParameters(parameterMap); } - public static PageParameters newRangeParameter(String repositoryName, String startRange, String endRange) { - return new PageParameters("r=" + repositoryName + ",h=" + startRange + ".." + endRange); + public static PageParameters newDiffParameter(String repositoryName, + String objectId, DiffComparator diffComparator) { + Map<String, String> parameterMap = new HashMap<String, String>(); + if (StringUtils.isEmpty(objectId)) { + return newRepositoryParameter(repositoryName); + } + parameterMap.put("r", repositoryName); + parameterMap.put("h", objectId); + parameterMap.put("w", "" + diffComparator.ordinal()); + return new PageParameters(parameterMap); } - public static PageParameters newPathParameter(String repositoryName, String objectId, - String path) { + public static PageParameters newDiffParameter(String repositoryName, + String objectId, DiffComparator diffComparator, String blobPath) { + Map<String, String> parameterMap = new HashMap<String, String>(); + if (StringUtils.isEmpty(objectId)) { + return newRepositoryParameter(repositoryName); + } + parameterMap.put("r", repositoryName); + parameterMap.put("h", objectId); + parameterMap.put("w", "" + diffComparator.ordinal()); + parameterMap.put("f", blobPath); + return new PageParameters(parameterMap); + } + + public static PageParameters newRangeParameter(String repositoryName, + String startRange, String endRange) { + Map<String, String> parameterMap = new HashMap<String, String>(); + parameterMap.put("r", repositoryName); + parameterMap.put("h", startRange + ".." + endRange); + return new PageParameters(parameterMap); + } + + public static PageParameters newPathParameter(String repositoryName, + String objectId, String path) { + Map<String, String> parameterMap = new HashMap<String, String>(); if (StringUtils.isEmpty(path)) { return newObjectParameter(repositoryName, objectId); } if (StringUtils.isEmpty(objectId)) { - return new PageParameters("r=" + repositoryName + ",f=" + path); + parameterMap.put("r", repositoryName); + parameterMap.put("f", path); + return new PageParameters(parameterMap); } - return new PageParameters("r=" + repositoryName + ",h=" + objectId + ",f=" + path); + parameterMap.put("r", repositoryName); + parameterMap.put("h", objectId); + parameterMap.put("f", path); + return new PageParameters(parameterMap); } - public static PageParameters newLogPageParameter(String repositoryName, String objectId, + public static PageParameters newLogPageParameter(String repositoryName, + String objectId, int pageNumber) { + Map<String, String> parameterMap = new HashMap<String, String>(); + if (pageNumber <= 1) { + return newObjectParameter(repositoryName, objectId); + } + if (StringUtils.isEmpty(objectId)) { + parameterMap.put("r", repositoryName); + parameterMap.put("pg", String.valueOf(pageNumber)); + return new PageParameters(parameterMap); + } + parameterMap.put("r", repositoryName); + parameterMap.put("h", objectId); + parameterMap.put("pg", String.valueOf(pageNumber)); + return new PageParameters(parameterMap); + } + + public static PageParameters newHistoryPageParameter(String repositoryName, + String objectId, String path, int pageNumber) { + Map<String, String> parameterMap = new HashMap<String, String>(); + if (pageNumber <= 1) { + return newObjectParameter(repositoryName, objectId); + } + if (StringUtils.isEmpty(objectId)) { + parameterMap.put("r", repositoryName); + parameterMap.put("f", path); + parameterMap.put("pg", String.valueOf(pageNumber)); + return new PageParameters(parameterMap); + } + parameterMap.put("r", repositoryName); + parameterMap.put("h", objectId); + parameterMap.put("f", path); + parameterMap.put("pg", String.valueOf(pageNumber)); + return new PageParameters(parameterMap); + } + + public static PageParameters newFilestorePageParameter(int pageNumber, String filter) { + Map<String, String> parameterMap = new HashMap<String, String>(); + + if (pageNumber > 1) { + parameterMap.put("pg", String.valueOf(pageNumber)); + } + if (filter != null) { + parameterMap.put("s", String.valueOf(filter)); + } + + return new PageParameters(parameterMap); + } + + public static PageParameters newBlobDiffParameter(String repositoryName, + String baseCommitId, String commitId, String path) { + Map<String, String> parameterMap = new HashMap<String, String>(); + if (StringUtils.isEmpty(commitId)) { + parameterMap.put("r", repositoryName); + parameterMap.put("f", path); + parameterMap.put("hb", baseCommitId); + return new PageParameters(parameterMap); + } + parameterMap.put("r", repositoryName); + parameterMap.put("h", commitId); + parameterMap.put("f", path); + parameterMap.put("hb", baseCommitId); + return new PageParameters(parameterMap); + } + + public static PageParameters newSearchParameter(String repositoryName, + String commitId, String search, Constants.SearchType type) { + Map<String, String> parameterMap = new HashMap<String, String>(); + if (StringUtils.isEmpty(commitId)) { + parameterMap.put("r", repositoryName); + parameterMap.put("s", search); + parameterMap.put("st", type.name()); + return new PageParameters(parameterMap); + } + parameterMap.put("r", repositoryName); + parameterMap.put("h", commitId); + parameterMap.put("s", search); + parameterMap.put("st", type.name()); + return new PageParameters(parameterMap); + } + + public static PageParameters newSearchParameter(String repositoryName, + String commitId, String search, Constants.SearchType type, int pageNumber) { - if (pageNumber <= 1) { - return newObjectParameter(repositoryName, objectId); - } - if (StringUtils.isEmpty(objectId)) { - return new PageParameters("r=" + repositoryName + ",pg=" + pageNumber); - } - return new PageParameters("r=" + repositoryName + ",h=" + objectId + ",pg=" + pageNumber); - } - - public static PageParameters newHistoryPageParameter(String repositoryName, String objectId, - String path, int pageNumber) { - if (pageNumber <= 1) { - return newObjectParameter(repositoryName, objectId); - } - if (StringUtils.isEmpty(objectId)) { - return new PageParameters("r=" + repositoryName + ",f=" + path + ",pg=" + pageNumber); - } - return new PageParameters("r=" + repositoryName + ",h=" + objectId + ",f=" + path + ",pg=" - + pageNumber); - } - - public static PageParameters newBlobDiffParameter(String repositoryName, String baseCommitId, - String commitId, String path) { + Map<String, String> parameterMap = new HashMap<String, String>(); if (StringUtils.isEmpty(commitId)) { - return new PageParameters("r=" + repositoryName + ",f=" + path + ",hb=" + baseCommitId); + parameterMap.put("r", repositoryName); + parameterMap.put("s", search); + parameterMap.put("st", type.name()); + parameterMap.put("pg", String.valueOf(pageNumber)); + return new PageParameters(parameterMap); } - return new PageParameters("r=" + repositoryName + ",h=" + commitId + ",f=" + path + ",hb=" - + baseCommitId); + parameterMap.put("r", repositoryName); + parameterMap.put("h", commitId); + parameterMap.put("s", search); + parameterMap.put("st", type.name()); + parameterMap.put("pg", String.valueOf(pageNumber)); + return new PageParameters(parameterMap); } - public static PageParameters newSearchParameter(String repositoryName, String commitId, - String search, Constants.SearchType type) { - if (StringUtils.isEmpty(commitId)) { - return new PageParameters("r=" + repositoryName + ",s=" + search + ",st=" + type.name()); - } - return new PageParameters("r=" + repositoryName + ",h=" + commitId + ",s=" + search - + ",st=" + type.name()); + public static PageParameters newBlameTypeParameter(String repositoryName, + String commitId, String path, String blameType) { + Map<String, String> parameterMap = new HashMap<String, String>(); + parameterMap.put("r", repositoryName); + parameterMap.put("h", commitId); + parameterMap.put("f", path); + parameterMap.put("blametype", blameType); + return new PageParameters(parameterMap); } - public static PageParameters newSearchParameter(String repositoryName, String commitId, - String search, Constants.SearchType type, int pageNumber) { - if (StringUtils.isEmpty(commitId)) { - return new PageParameters("r=" + repositoryName + ",s=" + search + ",st=" + type.name() - + ",pg=" + pageNumber); + public static PageParameters newTicketsParameters(String repositoryName, String... states) { + PageParameters tParams = newRepositoryParameter(repositoryName); + if (states != null) { + for (String state : states) { + tParams.add("status", state); + } } - return new PageParameters("r=" + repositoryName + ",h=" + commitId + ",s=" + search - + ",st=" + type.name() + ",pg=" + pageNumber); + return tParams; + } + + public static PageParameters newOpenTicketsParameter(String repositoryName) { + return newTicketsParameters(repositoryName, TicketsUI.openStatii); } public static String getProjectName(PageParameters params) { @@ -413,6 +533,11 @@ return params.getString("st", null); } + public static DiffComparator getDiffComparator(PageParameters params) { + int ordinal = params.getInt("w", 0); + return DiffComparator.values()[ordinal]; + } + public static int getPage(PageParameters params) { // index from 1 return params.getInt("pg", 1); @@ -431,7 +556,7 @@ } public static int getDaysBack(PageParameters params) { - return params.getInt("db", 7); + return params.getInt("db", 0); } public static String getUsername(PageParameters params) { @@ -455,10 +580,14 @@ } public static Label createDateLabel(String wicketId, Date date, TimeZone timeZone, TimeUtils timeUtils) { - String format = GitBlit.getString(Keys.web.datestampShortFormat, "MM/dd/yy"); + return createDateLabel(wicketId, date, timeZone, timeUtils, true); + } + + public static Label createDateLabel(String wicketId, Date date, TimeZone timeZone, TimeUtils timeUtils, boolean setCss) { + String format = GitBlitWebApp.get().settings().getString(Keys.web.datestampShortFormat, "MM/dd/yy"); DateFormat df = new SimpleDateFormat(format); if (timeZone == null) { - timeZone = GitBlit.getTimezone(); + timeZone = GitBlitWebApp.get().getTimezone(); } df.setTimeZone(timeZone); String dateString; @@ -472,13 +601,15 @@ // past title = timeUtils.timeAgo(date); } - if ((System.currentTimeMillis() - date.getTime()) < 10 * 24 * 60 * 60 * 1000L) { + if (title != null && (System.currentTimeMillis() - date.getTime()) < 10 * 24 * 60 * 60 * 1000L) { String tmp = dateString; dateString = title; title = tmp; } Label label = new Label(wicketId, dateString); - WicketUtils.setCssClass(label, timeUtils.timeAgoCss(date)); + if (setCss) { + WicketUtils.setCssClass(label, timeUtils.timeAgoCss(date)); + } if (!StringUtils.isEmpty(title)) { WicketUtils.setHtmlTooltip(label, title); } @@ -486,10 +617,10 @@ } public static Label createTimeLabel(String wicketId, Date date, TimeZone timeZone, TimeUtils timeUtils) { - String format = GitBlit.getString(Keys.web.timeFormat, "HH:mm"); + String format = GitBlitWebApp.get().settings().getString(Keys.web.timeFormat, "HH:mm"); DateFormat df = new SimpleDateFormat(format); if (timeZone == null) { - timeZone = GitBlit.getTimezone(); + timeZone = GitBlitWebApp.get().getTimezone(); } df.setTimeZone(timeZone); String timeString; @@ -507,10 +638,10 @@ } public static Label createDatestampLabel(String wicketId, Date date, TimeZone timeZone, TimeUtils timeUtils) { - String format = GitBlit.getString(Keys.web.datestampLongFormat, "EEEE, MMMM d, yyyy"); + String format = GitBlitWebApp.get().settings().getString(Keys.web.datestampLongFormat, "EEEE, MMMM d, yyyy"); DateFormat df = new SimpleDateFormat(format); if (timeZone == null) { - timeZone = GitBlit.getTimezone(); + timeZone = GitBlitWebApp.get().getTimezone(); } df.setTimeZone(timeZone); String dateString; @@ -523,10 +654,13 @@ if (TimeUtils.isToday(date, timeZone)) { title = timeUtils.today(); } else if (TimeUtils.isYesterday(date, timeZone)) { - title = timeUtils.yesterday(); + title = timeUtils.yesterday(); } else if (date.getTime() <= System.currentTimeMillis()) { // past title = timeUtils.timeAgo(date); + } else { + // future + title = timeUtils.inFuture(date); } if ((System.currentTimeMillis() - date.getTime()) < 10 * 24 * 60 * 60 * 1000L) { String tmp = dateString; @@ -541,11 +675,11 @@ } public static Label createTimestampLabel(String wicketId, Date date, TimeZone timeZone, TimeUtils timeUtils) { - String format = GitBlit.getString(Keys.web.datetimestampLongFormat, + String format = GitBlitWebApp.get().settings().getString(Keys.web.datetimestampLongFormat, "EEEE, MMMM d, yyyy HH:mm Z"); DateFormat df = new SimpleDateFormat(format); if (timeZone == null) { - timeZone = GitBlit.getTimezone(); + timeZone = GitBlitWebApp.get().getTimezone(); } df.setTimeZone(timeZone); String dateString; @@ -566,31 +700,6 @@ return label; } - public static IChartData getChartData(Collection<Metric> metrics) { - final double[] commits = new double[metrics.size()]; - final double[] tags = new double[metrics.size()]; - int i = 0; - double max = 0; - for (Metric m : metrics) { - commits[i] = m.count; - if (m.tag > 0) { - tags[i] = m.count; - } else { - tags[i] = -1d; - } - max = Math.max(max, m.count); - i++; - } - IChartData data = new AbstractChartData(max) { - private static final long serialVersionUID = 1L; - - public double[][] getData() { - return new double[][] { commits, tags }; - } - }; - return data; - } - public static double maxValue(Collection<Metric> metrics) { double max = Double.MIN_VALUE; for (Metric m : metrics) { @@ -600,30 +709,4 @@ } return max; } - - public static IChartData getScatterData(Collection<Metric> metrics) { - final double[] y = new double[metrics.size()]; - final double[] x = new double[metrics.size()]; - int i = 0; - double max = 0; - for (Metric m : metrics) { - y[i] = m.count; - if (m.duration > 0) { - x[i] = m.duration; - } else { - x[i] = -1d; - } - max = Math.max(max, m.count); - i++; - } - IChartData data = new AbstractChartData(max) { - private static final long serialVersionUID = 1L; - - public double[][] getData() { - return new double[][] { x, y }; - } - }; - return data; - } - } -- Gitblit v1.9.1