From 6e54e397693afed342589af43626fb8c34c1aad0 Mon Sep 17 00:00:00 2001 From: vincent Date: Fri, 7 Apr 2017 15:08:55 +0200 Subject: [PATCH 1/8] Adds job name filter feature, feature filters configurable prefix, suffix and regex from job name on display --- .../buildmonitor/BuildMonitorView.java | 21 ++++++ .../plugins/buildmonitor/Config.java | 26 ++++++++ .../buildmonitor/viewmodel/JobViews.java | 2 + .../viewmodel/features/HasNameFilter.java | 36 +++++++++++ .../features/nameFilter/NameFilter.java | 23 +++++++ .../features/nameFilter/NameFilterConfig.java | 14 ++++ .../features/nameFilter/NameFilterer.java | 64 +++++++++++++++++++ .../BuildMonitorView/configure-entries.jelly | 21 ++++++ .../BuildMonitorView/widgets.jelly | 2 +- 9 files changed, 208 insertions(+), 1 deletion(-) create mode 100644 build-monitor-plugin/src/main/java/com/smartcodeltd/jenkinsci/plugins/buildmonitor/viewmodel/features/HasNameFilter.java create mode 100644 build-monitor-plugin/src/main/java/com/smartcodeltd/jenkinsci/plugins/buildmonitor/viewmodel/features/nameFilter/NameFilter.java create mode 100644 build-monitor-plugin/src/main/java/com/smartcodeltd/jenkinsci/plugins/buildmonitor/viewmodel/features/nameFilter/NameFilterConfig.java create mode 100644 build-monitor-plugin/src/main/java/com/smartcodeltd/jenkinsci/plugins/buildmonitor/viewmodel/features/nameFilter/NameFilterer.java diff --git a/build-monitor-plugin/src/main/java/com/smartcodeltd/jenkinsci/plugins/buildmonitor/BuildMonitorView.java b/build-monitor-plugin/src/main/java/com/smartcodeltd/jenkinsci/plugins/buildmonitor/BuildMonitorView.java index 0b324db25..b539afc70 100644 --- a/build-monitor-plugin/src/main/java/com/smartcodeltd/jenkinsci/plugins/buildmonitor/BuildMonitorView.java +++ b/build-monitor-plugin/src/main/java/com/smartcodeltd/jenkinsci/plugins/buildmonitor/BuildMonitorView.java @@ -103,6 +103,21 @@ public boolean collectAnonymousUsageStatistics() { return descriptor.getPermissionToCollectAnonymousUsageStatistics(); } + @SuppressWarnings("unused") // used in .jelly + public String getFilterPrefix() { + return currentConfig().getFilterPrefix(); + } + + @SuppressWarnings("unused") // used in .jelly + public String getFilterSuffix() { + return currentConfig().getFilterSuffix(); + } + + @SuppressWarnings("unused") // used in .jelly + public String getFilterRegex() { + return currentConfig().getFilterRegex(); + } + @Override protected void submit(StaplerRequest req) throws ServletException, IOException, FormException { super.submit(req); @@ -113,7 +128,13 @@ protected void submit(StaplerRequest req) throws ServletException, IOException, String requestedOrdering = req.getParameter("order"); title = req.getParameter("title"); + String filterPrefix = req.getParameter("filterPrefix"); + String filterSuffix = req.getParameter("filterSuffix"); + String filterRegex = req.getParameter("filterRegex"); + currentConfig().setFilterPrefix(filterPrefix); + currentConfig().setFilterSuffix(filterSuffix); + currentConfig().setFilterRegex(filterRegex); currentConfig().setDisplayCommitters(json.optBoolean("displayCommitters", true)); try { diff --git a/build-monitor-plugin/src/main/java/com/smartcodeltd/jenkinsci/plugins/buildmonitor/Config.java b/build-monitor-plugin/src/main/java/com/smartcodeltd/jenkinsci/plugins/buildmonitor/Config.java index 83ebd2e7b..a32fdde8e 100644 --- a/build-monitor-plugin/src/main/java/com/smartcodeltd/jenkinsci/plugins/buildmonitor/Config.java +++ b/build-monitor-plugin/src/main/java/com/smartcodeltd/jenkinsci/plugins/buildmonitor/Config.java @@ -11,6 +11,31 @@ public class Config { private boolean displayCommitters; + private String filterPrefix, filterSuffix, filterRegex; + + public void setFilterPrefix(String filterPrefix) { + this.filterPrefix = filterPrefix; + } + + public void setFilterSuffix(String filterSuffix) { + this.filterSuffix = filterSuffix; + } + + public void setFilterRegex(String filterRegex) { + this.filterRegex = filterRegex; + } + + public String getFilterPrefix() { + return getOrElse(this.filterPrefix,""); + } + + public String getFilterSuffix() { + return getOrElse(this.filterSuffix,""); + } + + public String getFilterRegex() { + return getOrElse(this.filterRegex,""); + } public static Config defaultConfig() { return new Config(); @@ -28,6 +53,7 @@ public static Config defaultConfig() { return getOrElse(order, new ByName()); } + public void setOrder(Comparator> order) { this.order = order; } diff --git a/build-monitor-plugin/src/main/java/com/smartcodeltd/jenkinsci/plugins/buildmonitor/viewmodel/JobViews.java b/build-monitor-plugin/src/main/java/com/smartcodeltd/jenkinsci/plugins/buildmonitor/viewmodel/JobViews.java index f185ade83..3b1c1b576 100644 --- a/build-monitor-plugin/src/main/java/com/smartcodeltd/jenkinsci/plugins/buildmonitor/viewmodel/JobViews.java +++ b/build-monitor-plugin/src/main/java/com/smartcodeltd/jenkinsci/plugins/buildmonitor/viewmodel/JobViews.java @@ -3,6 +3,7 @@ import com.smartcodeltd.jenkinsci.plugins.buildmonitor.facade.StaticJenkinsAPIs; import com.smartcodeltd.jenkinsci.plugins.buildmonitor.viewmodel.features.*; import com.smartcodeltd.jenkinsci.plugins.buildmonitor.viewmodel.features.headline.HeadlineConfig; +import com.smartcodeltd.jenkinsci.plugins.buildmonitor.viewmodel.features.nameFilter.NameFilterConfig; import hudson.model.Job; import java.util.List; @@ -32,6 +33,7 @@ public JobView viewOf(Job job) { viewFeatures.add(new HasHeadline(new HeadlineConfig(config.shouldDisplayCommitters()))); viewFeatures.add(new KnowsLastCompletedBuildDetails()); viewFeatures.add(new KnowsCurrentBuildsDetails()); + viewFeatures.add(new HasNameFilter(new NameFilterConfig(config.getFilterPrefix(), config.getFilterSuffix(), config.getFilterRegex()))); if (jenkins.hasPlugin(Claim)) { viewFeatures.add(new CanBeClaimed()); diff --git a/build-monitor-plugin/src/main/java/com/smartcodeltd/jenkinsci/plugins/buildmonitor/viewmodel/features/HasNameFilter.java b/build-monitor-plugin/src/main/java/com/smartcodeltd/jenkinsci/plugins/buildmonitor/viewmodel/features/HasNameFilter.java new file mode 100644 index 000000000..057624552 --- /dev/null +++ b/build-monitor-plugin/src/main/java/com/smartcodeltd/jenkinsci/plugins/buildmonitor/viewmodel/features/HasNameFilter.java @@ -0,0 +1,36 @@ +package com.smartcodeltd.jenkinsci.plugins.buildmonitor.viewmodel.features; + +import com.smartcodeltd.jenkinsci.plugins.buildmonitor.viewmodel.JobView; +import com.smartcodeltd.jenkinsci.plugins.buildmonitor.viewmodel.features.nameFilter.*; + +import static com.google.common.collect.Iterables.filter; +import static com.google.common.collect.Lists.newArrayList; + +public class HasNameFilter implements Feature { + private JobView job; + private NameFilterConfig config; + + public HasNameFilter(NameFilterConfig config) { + this.config = config; + } + + @Override + public HasNameFilter of(JobView jobView) { + this.job = jobView; + + return this; + } + + @Override + public NameFilter asJson() { + NameFilterer nameFilterer = new NameFilterer(job.name()); + + nameFilterer = nameFilterer + .filterPrefix(config.prefix) + .filterSuffix(config.suffix) + .filterRegex(config.regex); + + return new NameFilter(nameFilterer.getJobName()); + } + +} \ No newline at end of file diff --git a/build-monitor-plugin/src/main/java/com/smartcodeltd/jenkinsci/plugins/buildmonitor/viewmodel/features/nameFilter/NameFilter.java b/build-monitor-plugin/src/main/java/com/smartcodeltd/jenkinsci/plugins/buildmonitor/viewmodel/features/nameFilter/NameFilter.java new file mode 100644 index 000000000..f0ed51734 --- /dev/null +++ b/build-monitor-plugin/src/main/java/com/smartcodeltd/jenkinsci/plugins/buildmonitor/viewmodel/features/nameFilter/NameFilter.java @@ -0,0 +1,23 @@ +package com.smartcodeltd.jenkinsci.plugins.buildmonitor.viewmodel.features.nameFilter; + +import org.codehaus.jackson.annotate.JsonValue; + +/** + * @author Vincent & Robert + */ +public class NameFilter { + private final String value; + + public NameFilter(String value) { + this.value = value; + } + + @JsonValue + public String value() { + return value; + } + + public NameFilter asJson() { + return this; + } +} \ No newline at end of file diff --git a/build-monitor-plugin/src/main/java/com/smartcodeltd/jenkinsci/plugins/buildmonitor/viewmodel/features/nameFilter/NameFilterConfig.java b/build-monitor-plugin/src/main/java/com/smartcodeltd/jenkinsci/plugins/buildmonitor/viewmodel/features/nameFilter/NameFilterConfig.java new file mode 100644 index 000000000..50b812535 --- /dev/null +++ b/build-monitor-plugin/src/main/java/com/smartcodeltd/jenkinsci/plugins/buildmonitor/viewmodel/features/nameFilter/NameFilterConfig.java @@ -0,0 +1,14 @@ +package com.smartcodeltd.jenkinsci.plugins.buildmonitor.viewmodel.features.nameFilter; + +/** + * @author Vincent & Robert + */ +public class NameFilterConfig { + public final String prefix, suffix, regex; + + public NameFilterConfig(String prefix, String suffix, String regex) { + this.prefix = prefix; + this.suffix = suffix; + this.regex = regex; + } +} \ No newline at end of file diff --git a/build-monitor-plugin/src/main/java/com/smartcodeltd/jenkinsci/plugins/buildmonitor/viewmodel/features/nameFilter/NameFilterer.java b/build-monitor-plugin/src/main/java/com/smartcodeltd/jenkinsci/plugins/buildmonitor/viewmodel/features/nameFilter/NameFilterer.java new file mode 100644 index 000000000..041fd8c66 --- /dev/null +++ b/build-monitor-plugin/src/main/java/com/smartcodeltd/jenkinsci/plugins/buildmonitor/viewmodel/features/nameFilter/NameFilterer.java @@ -0,0 +1,64 @@ +package com.smartcodeltd.jenkinsci.plugins.buildmonitor.viewmodel.features.nameFilter; + +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +/** + * Contains methods used to filter the job name with specified prefix, suffix and regex + */ +public class NameFilterer { + + private String jobName; + + public NameFilterer(String jobName) { + this.jobName = jobName; + } + + public NameFilterer filterSuffix(String suffix) { + if (suffix.length() <= 0) { + return this; + } + + if (jobName.substring(jobName.length() - suffix.length(), jobName.length()).equals(suffix.substring(0, suffix.length()))) { + String filteredName = jobName.substring(0, jobName.length() - suffix.length()); + + return new NameFilterer(filteredName); + } + + return this; + } + + + public NameFilterer filterPrefix(String prefix) { + if (prefix.length() <= 0) { + return this; + } + + if (jobName.substring(0, prefix.length()).equals(prefix.substring(0, prefix.length()))) { + String filteredName = jobName.substring(prefix.length(), jobName.length()); + + return new NameFilterer(filteredName); + } + + return this; + } + + public NameFilterer filterRegex(String regex) { + if (regex.length() <= 0) { + return this; + } + + String filteredName; + + Pattern p = Pattern.compile(regex); + Matcher m = p.matcher(jobName); + filteredName = m.replaceAll(""); + + return new NameFilterer(filteredName); + } + + public String getJobName() { + return jobName; + } + +} \ No newline at end of file diff --git a/build-monitor-plugin/src/main/resources/com/smartcodeltd/jenkinsci/plugins/buildmonitor/BuildMonitorView/configure-entries.jelly b/build-monitor-plugin/src/main/resources/com/smartcodeltd/jenkinsci/plugins/buildmonitor/BuildMonitorView/configure-entries.jelly index 59a277a47..7f3563a8b 100644 --- a/build-monitor-plugin/src/main/resources/com/smartcodeltd/jenkinsci/plugins/buildmonitor/BuildMonitorView/configure-entries.jelly +++ b/build-monitor-plugin/src/main/resources/com/smartcodeltd/jenkinsci/plugins/buildmonitor/BuildMonitorView/configure-entries.jelly @@ -40,6 +40,27 @@ + + + + + + + + + + + + + + + + + + diff --git a/build-monitor-plugin/src/main/resources/com/smartcodeltd/jenkinsci/plugins/buildmonitor/BuildMonitorView/widgets.jelly b/build-monitor-plugin/src/main/resources/com/smartcodeltd/jenkinsci/plugins/buildmonitor/BuildMonitorView/widgets.jelly index fcd1badfe..d7bac7af6 100644 --- a/build-monitor-plugin/src/main/resources/com/smartcodeltd/jenkinsci/plugins/buildmonitor/BuildMonitorView/widgets.jelly +++ b/build-monitor-plugin/src/main/resources/com/smartcodeltd/jenkinsci/plugins/buildmonitor/BuildMonitorView/widgets.jelly @@ -18,7 +18,7 @@

{{project.name}} + href="{{project.url}}">{{project.nameFilter != project.name ? project.nameFilter : project.name}}

  • {{ project.headline }}
  • From e7a036185a8c13d3ab2a218d67ece46c67d00bd1 Mon Sep 17 00:00:00 2001 From: vincent Date: Fri, 7 Apr 2017 16:02:38 +0200 Subject: [PATCH 2/8] Added hlep info on job name filter options in configure page --- .../BuildMonitorView/configure-entries.jelly | 31 ++++++++----------- .../BuildMonitorView/help-filterName.html | 3 ++ 2 files changed, 16 insertions(+), 18 deletions(-) create mode 100644 build-monitor-plugin/src/main/resources/com/smartcodeltd/jenkinsci/plugins/buildmonitor/BuildMonitorView/help-filterName.html diff --git a/build-monitor-plugin/src/main/resources/com/smartcodeltd/jenkinsci/plugins/buildmonitor/BuildMonitorView/configure-entries.jelly b/build-monitor-plugin/src/main/resources/com/smartcodeltd/jenkinsci/plugins/buildmonitor/BuildMonitorView/configure-entries.jelly index 7f3563a8b..3236bc859 100644 --- a/build-monitor-plugin/src/main/resources/com/smartcodeltd/jenkinsci/plugins/buildmonitor/BuildMonitorView/configure-entries.jelly +++ b/build-monitor-plugin/src/main/resources/com/smartcodeltd/jenkinsci/plugins/buildmonitor/BuildMonitorView/configure-entries.jelly @@ -40,32 +40,27 @@ - - + + + + + + + + + + + - - - + - - - + - - - - - - - diff --git a/build-monitor-plugin/src/main/resources/com/smartcodeltd/jenkinsci/plugins/buildmonitor/BuildMonitorView/help-filterName.html b/build-monitor-plugin/src/main/resources/com/smartcodeltd/jenkinsci/plugins/buildmonitor/BuildMonitorView/help-filterName.html new file mode 100644 index 000000000..1e8f05356 --- /dev/null +++ b/build-monitor-plugin/src/main/resources/com/smartcodeltd/jenkinsci/plugins/buildmonitor/BuildMonitorView/help-filterName.html @@ -0,0 +1,3 @@ +
    + Filters input from job name and displays shortened name on build monitor. +
    \ No newline at end of file From bf5b581996c04fe2022cbeb0b364296128c3100d Mon Sep 17 00:00:00 2001 From: vincent Date: Fri, 7 Apr 2017 16:02:38 +0200 Subject: [PATCH 3/8] Added help info on job name filter options in configure page --- .../BuildMonitorView/configure-entries.jelly | 31 ++++++++----------- .../BuildMonitorView/help-filterName.html | 3 ++ 2 files changed, 16 insertions(+), 18 deletions(-) create mode 100644 build-monitor-plugin/src/main/resources/com/smartcodeltd/jenkinsci/plugins/buildmonitor/BuildMonitorView/help-filterName.html diff --git a/build-monitor-plugin/src/main/resources/com/smartcodeltd/jenkinsci/plugins/buildmonitor/BuildMonitorView/configure-entries.jelly b/build-monitor-plugin/src/main/resources/com/smartcodeltd/jenkinsci/plugins/buildmonitor/BuildMonitorView/configure-entries.jelly index 7f3563a8b..3236bc859 100644 --- a/build-monitor-plugin/src/main/resources/com/smartcodeltd/jenkinsci/plugins/buildmonitor/BuildMonitorView/configure-entries.jelly +++ b/build-monitor-plugin/src/main/resources/com/smartcodeltd/jenkinsci/plugins/buildmonitor/BuildMonitorView/configure-entries.jelly @@ -40,32 +40,27 @@ - - + + + + + + + + + + + - - - + - - - + - - - - - - - diff --git a/build-monitor-plugin/src/main/resources/com/smartcodeltd/jenkinsci/plugins/buildmonitor/BuildMonitorView/help-filterName.html b/build-monitor-plugin/src/main/resources/com/smartcodeltd/jenkinsci/plugins/buildmonitor/BuildMonitorView/help-filterName.html new file mode 100644 index 000000000..1e8f05356 --- /dev/null +++ b/build-monitor-plugin/src/main/resources/com/smartcodeltd/jenkinsci/plugins/buildmonitor/BuildMonitorView/help-filterName.html @@ -0,0 +1,3 @@ +
    + Filters input from job name and displays shortened name on build monitor. +
    \ No newline at end of file From c92902005f871cc2853b4a193edf5600f5eaef52 Mon Sep 17 00:00:00 2001 From: vincent Date: Tue, 18 Apr 2017 09:34:48 +0200 Subject: [PATCH 4/8] Renamed NameFilter files to JobNameFilter name structure --- .../buildmonitor/viewmodel/JobViews.java | 4 ++-- .../viewmodel/features/HasNameFilter.java | 17 +++++++---------- .../JobNameFilter.java} | 8 ++++---- .../JobNameFilterConfig.java} | 6 +++--- .../JobNameFilterer.java} | 18 +++++++++--------- 5 files changed, 25 insertions(+), 28 deletions(-) rename build-monitor-plugin/src/main/java/com/smartcodeltd/jenkinsci/plugins/buildmonitor/viewmodel/features/{nameFilter/NameFilter.java => jobNameFilter/JobNameFilter.java} (70%) rename build-monitor-plugin/src/main/java/com/smartcodeltd/jenkinsci/plugins/buildmonitor/viewmodel/features/{nameFilter/NameFilterConfig.java => jobNameFilter/JobNameFilterConfig.java} (63%) rename build-monitor-plugin/src/main/java/com/smartcodeltd/jenkinsci/plugins/buildmonitor/viewmodel/features/{nameFilter/NameFilterer.java => jobNameFilter/JobNameFilterer.java} (74%) diff --git a/build-monitor-plugin/src/main/java/com/smartcodeltd/jenkinsci/plugins/buildmonitor/viewmodel/JobViews.java b/build-monitor-plugin/src/main/java/com/smartcodeltd/jenkinsci/plugins/buildmonitor/viewmodel/JobViews.java index 3b1c1b576..2f7bde4df 100644 --- a/build-monitor-plugin/src/main/java/com/smartcodeltd/jenkinsci/plugins/buildmonitor/viewmodel/JobViews.java +++ b/build-monitor-plugin/src/main/java/com/smartcodeltd/jenkinsci/plugins/buildmonitor/viewmodel/JobViews.java @@ -3,7 +3,7 @@ import com.smartcodeltd.jenkinsci.plugins.buildmonitor.facade.StaticJenkinsAPIs; import com.smartcodeltd.jenkinsci.plugins.buildmonitor.viewmodel.features.*; import com.smartcodeltd.jenkinsci.plugins.buildmonitor.viewmodel.features.headline.HeadlineConfig; -import com.smartcodeltd.jenkinsci.plugins.buildmonitor.viewmodel.features.nameFilter.NameFilterConfig; +import com.smartcodeltd.jenkinsci.plugins.buildmonitor.viewmodel.features.jobNameFilter.JobNameFilterConfig; import hudson.model.Job; import java.util.List; @@ -33,7 +33,7 @@ public JobView viewOf(Job job) { viewFeatures.add(new HasHeadline(new HeadlineConfig(config.shouldDisplayCommitters()))); viewFeatures.add(new KnowsLastCompletedBuildDetails()); viewFeatures.add(new KnowsCurrentBuildsDetails()); - viewFeatures.add(new HasNameFilter(new NameFilterConfig(config.getFilterPrefix(), config.getFilterSuffix(), config.getFilterRegex()))); + viewFeatures.add(new HasNameFilter(new JobNameFilterConfig(config.getFilterPrefix(), config.getFilterSuffix(), config.getFilterRegex()))); if (jenkins.hasPlugin(Claim)) { viewFeatures.add(new CanBeClaimed()); diff --git a/build-monitor-plugin/src/main/java/com/smartcodeltd/jenkinsci/plugins/buildmonitor/viewmodel/features/HasNameFilter.java b/build-monitor-plugin/src/main/java/com/smartcodeltd/jenkinsci/plugins/buildmonitor/viewmodel/features/HasNameFilter.java index 057624552..dc743f3fc 100644 --- a/build-monitor-plugin/src/main/java/com/smartcodeltd/jenkinsci/plugins/buildmonitor/viewmodel/features/HasNameFilter.java +++ b/build-monitor-plugin/src/main/java/com/smartcodeltd/jenkinsci/plugins/buildmonitor/viewmodel/features/HasNameFilter.java @@ -1,16 +1,13 @@ package com.smartcodeltd.jenkinsci.plugins.buildmonitor.viewmodel.features; import com.smartcodeltd.jenkinsci.plugins.buildmonitor.viewmodel.JobView; -import com.smartcodeltd.jenkinsci.plugins.buildmonitor.viewmodel.features.nameFilter.*; +import com.smartcodeltd.jenkinsci.plugins.buildmonitor.viewmodel.features.jobNameFilter.*; -import static com.google.common.collect.Iterables.filter; -import static com.google.common.collect.Lists.newArrayList; - -public class HasNameFilter implements Feature { +public class HasNameFilter implements Feature { private JobView job; - private NameFilterConfig config; + private JobNameFilterConfig config; - public HasNameFilter(NameFilterConfig config) { + public HasNameFilter(JobNameFilterConfig config) { this.config = config; } @@ -22,15 +19,15 @@ public HasNameFilter of(JobView jobView) { } @Override - public NameFilter asJson() { - NameFilterer nameFilterer = new NameFilterer(job.name()); + public JobNameFilter asJson() { + JobNameFilterer nameFilterer = new JobNameFilterer(job.name()); nameFilterer = nameFilterer .filterPrefix(config.prefix) .filterSuffix(config.suffix) .filterRegex(config.regex); - return new NameFilter(nameFilterer.getJobName()); + return new JobNameFilter(nameFilterer.getJobName()); } } \ No newline at end of file diff --git a/build-monitor-plugin/src/main/java/com/smartcodeltd/jenkinsci/plugins/buildmonitor/viewmodel/features/nameFilter/NameFilter.java b/build-monitor-plugin/src/main/java/com/smartcodeltd/jenkinsci/plugins/buildmonitor/viewmodel/features/jobNameFilter/JobNameFilter.java similarity index 70% rename from build-monitor-plugin/src/main/java/com/smartcodeltd/jenkinsci/plugins/buildmonitor/viewmodel/features/nameFilter/NameFilter.java rename to build-monitor-plugin/src/main/java/com/smartcodeltd/jenkinsci/plugins/buildmonitor/viewmodel/features/jobNameFilter/JobNameFilter.java index f0ed51734..3b004b742 100644 --- a/build-monitor-plugin/src/main/java/com/smartcodeltd/jenkinsci/plugins/buildmonitor/viewmodel/features/nameFilter/NameFilter.java +++ b/build-monitor-plugin/src/main/java/com/smartcodeltd/jenkinsci/plugins/buildmonitor/viewmodel/features/jobNameFilter/JobNameFilter.java @@ -1,14 +1,14 @@ -package com.smartcodeltd.jenkinsci.plugins.buildmonitor.viewmodel.features.nameFilter; +package com.smartcodeltd.jenkinsci.plugins.buildmonitor.viewmodel.features.jobNameFilter; import org.codehaus.jackson.annotate.JsonValue; /** * @author Vincent & Robert */ -public class NameFilter { +public class JobNameFilter { private final String value; - public NameFilter(String value) { + public JobNameFilter(String value) { this.value = value; } @@ -17,7 +17,7 @@ public String value() { return value; } - public NameFilter asJson() { + public JobNameFilter asJson() { return this; } } \ No newline at end of file diff --git a/build-monitor-plugin/src/main/java/com/smartcodeltd/jenkinsci/plugins/buildmonitor/viewmodel/features/nameFilter/NameFilterConfig.java b/build-monitor-plugin/src/main/java/com/smartcodeltd/jenkinsci/plugins/buildmonitor/viewmodel/features/jobNameFilter/JobNameFilterConfig.java similarity index 63% rename from build-monitor-plugin/src/main/java/com/smartcodeltd/jenkinsci/plugins/buildmonitor/viewmodel/features/nameFilter/NameFilterConfig.java rename to build-monitor-plugin/src/main/java/com/smartcodeltd/jenkinsci/plugins/buildmonitor/viewmodel/features/jobNameFilter/JobNameFilterConfig.java index 50b812535..59260ba64 100644 --- a/build-monitor-plugin/src/main/java/com/smartcodeltd/jenkinsci/plugins/buildmonitor/viewmodel/features/nameFilter/NameFilterConfig.java +++ b/build-monitor-plugin/src/main/java/com/smartcodeltd/jenkinsci/plugins/buildmonitor/viewmodel/features/jobNameFilter/JobNameFilterConfig.java @@ -1,12 +1,12 @@ -package com.smartcodeltd.jenkinsci.plugins.buildmonitor.viewmodel.features.nameFilter; +package com.smartcodeltd.jenkinsci.plugins.buildmonitor.viewmodel.features.jobNameFilter; /** * @author Vincent & Robert */ -public class NameFilterConfig { +public class JobNameFilterConfig { public final String prefix, suffix, regex; - public NameFilterConfig(String prefix, String suffix, String regex) { + public JobNameFilterConfig(String prefix, String suffix, String regex) { this.prefix = prefix; this.suffix = suffix; this.regex = regex; diff --git a/build-monitor-plugin/src/main/java/com/smartcodeltd/jenkinsci/plugins/buildmonitor/viewmodel/features/nameFilter/NameFilterer.java b/build-monitor-plugin/src/main/java/com/smartcodeltd/jenkinsci/plugins/buildmonitor/viewmodel/features/jobNameFilter/JobNameFilterer.java similarity index 74% rename from build-monitor-plugin/src/main/java/com/smartcodeltd/jenkinsci/plugins/buildmonitor/viewmodel/features/nameFilter/NameFilterer.java rename to build-monitor-plugin/src/main/java/com/smartcodeltd/jenkinsci/plugins/buildmonitor/viewmodel/features/jobNameFilter/JobNameFilterer.java index 041fd8c66..abe94ebd3 100644 --- a/build-monitor-plugin/src/main/java/com/smartcodeltd/jenkinsci/plugins/buildmonitor/viewmodel/features/nameFilter/NameFilterer.java +++ b/build-monitor-plugin/src/main/java/com/smartcodeltd/jenkinsci/plugins/buildmonitor/viewmodel/features/jobNameFilter/JobNameFilterer.java @@ -1,4 +1,4 @@ -package com.smartcodeltd.jenkinsci.plugins.buildmonitor.viewmodel.features.nameFilter; +package com.smartcodeltd.jenkinsci.plugins.buildmonitor.viewmodel.features.jobNameFilter; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -6,15 +6,15 @@ /** * Contains methods used to filter the job name with specified prefix, suffix and regex */ -public class NameFilterer { +public class JobNameFilterer { private String jobName; - public NameFilterer(String jobName) { + public JobNameFilterer(String jobName) { this.jobName = jobName; } - public NameFilterer filterSuffix(String suffix) { + public JobNameFilterer filterSuffix(String suffix) { if (suffix.length() <= 0) { return this; } @@ -22,14 +22,14 @@ public NameFilterer filterSuffix(String suffix) { if (jobName.substring(jobName.length() - suffix.length(), jobName.length()).equals(suffix.substring(0, suffix.length()))) { String filteredName = jobName.substring(0, jobName.length() - suffix.length()); - return new NameFilterer(filteredName); + return new JobNameFilterer(filteredName); } return this; } - public NameFilterer filterPrefix(String prefix) { + public JobNameFilterer filterPrefix(String prefix) { if (prefix.length() <= 0) { return this; } @@ -37,13 +37,13 @@ public NameFilterer filterPrefix(String prefix) { if (jobName.substring(0, prefix.length()).equals(prefix.substring(0, prefix.length()))) { String filteredName = jobName.substring(prefix.length(), jobName.length()); - return new NameFilterer(filteredName); + return new JobNameFilterer(filteredName); } return this; } - public NameFilterer filterRegex(String regex) { + public JobNameFilterer filterRegex(String regex) { if (regex.length() <= 0) { return this; } @@ -54,7 +54,7 @@ public NameFilterer filterRegex(String regex) { Matcher m = p.matcher(jobName); filteredName = m.replaceAll(""); - return new NameFilterer(filteredName); + return new JobNameFilterer(filteredName); } public String getJobName() { From 444794dbfbcb0ec3a4d80bd6dc0534316b6b2cfd Mon Sep 17 00:00:00 2001 From: vincent Date: Tue, 18 Apr 2017 10:51:13 +0200 Subject: [PATCH 5/8] Renamed filter class to something more convenient --- .../buildmonitor/viewmodel/features/HasNameFilter.java | 7 +++---- .../{JobNameFilter.java => JobNameFiltered.java} | 6 +++--- .../viewmodel/features/jobNameFilter/JobNameFilterer.java | 3 --- .../plugins/buildmonitor/BuildMonitorView/widgets.jelly | 3 ++- 4 files changed, 8 insertions(+), 11 deletions(-) rename build-monitor-plugin/src/main/java/com/smartcodeltd/jenkinsci/plugins/buildmonitor/viewmodel/features/jobNameFilter/{JobNameFilter.java => JobNameFiltered.java} (75%) diff --git a/build-monitor-plugin/src/main/java/com/smartcodeltd/jenkinsci/plugins/buildmonitor/viewmodel/features/HasNameFilter.java b/build-monitor-plugin/src/main/java/com/smartcodeltd/jenkinsci/plugins/buildmonitor/viewmodel/features/HasNameFilter.java index dc743f3fc..94603b23e 100644 --- a/build-monitor-plugin/src/main/java/com/smartcodeltd/jenkinsci/plugins/buildmonitor/viewmodel/features/HasNameFilter.java +++ b/build-monitor-plugin/src/main/java/com/smartcodeltd/jenkinsci/plugins/buildmonitor/viewmodel/features/HasNameFilter.java @@ -3,7 +3,7 @@ import com.smartcodeltd.jenkinsci.plugins.buildmonitor.viewmodel.JobView; import com.smartcodeltd.jenkinsci.plugins.buildmonitor.viewmodel.features.jobNameFilter.*; -public class HasNameFilter implements Feature { +public class HasNameFilter implements Feature { private JobView job; private JobNameFilterConfig config; @@ -19,7 +19,7 @@ public HasNameFilter of(JobView jobView) { } @Override - public JobNameFilter asJson() { + public JobNameFiltered asJson() { JobNameFilterer nameFilterer = new JobNameFilterer(job.name()); nameFilterer = nameFilterer @@ -27,7 +27,6 @@ public JobNameFilter asJson() { .filterSuffix(config.suffix) .filterRegex(config.regex); - return new JobNameFilter(nameFilterer.getJobName()); + return new JobNameFiltered(nameFilterer.getJobName()); } - } \ No newline at end of file diff --git a/build-monitor-plugin/src/main/java/com/smartcodeltd/jenkinsci/plugins/buildmonitor/viewmodel/features/jobNameFilter/JobNameFilter.java b/build-monitor-plugin/src/main/java/com/smartcodeltd/jenkinsci/plugins/buildmonitor/viewmodel/features/jobNameFilter/JobNameFiltered.java similarity index 75% rename from build-monitor-plugin/src/main/java/com/smartcodeltd/jenkinsci/plugins/buildmonitor/viewmodel/features/jobNameFilter/JobNameFilter.java rename to build-monitor-plugin/src/main/java/com/smartcodeltd/jenkinsci/plugins/buildmonitor/viewmodel/features/jobNameFilter/JobNameFiltered.java index 3b004b742..1621b4886 100644 --- a/build-monitor-plugin/src/main/java/com/smartcodeltd/jenkinsci/plugins/buildmonitor/viewmodel/features/jobNameFilter/JobNameFilter.java +++ b/build-monitor-plugin/src/main/java/com/smartcodeltd/jenkinsci/plugins/buildmonitor/viewmodel/features/jobNameFilter/JobNameFiltered.java @@ -5,10 +5,10 @@ /** * @author Vincent & Robert */ -public class JobNameFilter { +public class JobNameFiltered { private final String value; - public JobNameFilter(String value) { + public JobNameFiltered(String value) { this.value = value; } @@ -17,7 +17,7 @@ public String value() { return value; } - public JobNameFilter asJson() { + public JobNameFiltered asJson() { return this; } } \ No newline at end of file diff --git a/build-monitor-plugin/src/main/java/com/smartcodeltd/jenkinsci/plugins/buildmonitor/viewmodel/features/jobNameFilter/JobNameFilterer.java b/build-monitor-plugin/src/main/java/com/smartcodeltd/jenkinsci/plugins/buildmonitor/viewmodel/features/jobNameFilter/JobNameFilterer.java index abe94ebd3..6b15a8ab6 100644 --- a/build-monitor-plugin/src/main/java/com/smartcodeltd/jenkinsci/plugins/buildmonitor/viewmodel/features/jobNameFilter/JobNameFilterer.java +++ b/build-monitor-plugin/src/main/java/com/smartcodeltd/jenkinsci/plugins/buildmonitor/viewmodel/features/jobNameFilter/JobNameFilterer.java @@ -7,7 +7,6 @@ * Contains methods used to filter the job name with specified prefix, suffix and regex */ public class JobNameFilterer { - private String jobName; public JobNameFilterer(String jobName) { @@ -28,7 +27,6 @@ public JobNameFilterer filterSuffix(String suffix) { return this; } - public JobNameFilterer filterPrefix(String prefix) { if (prefix.length() <= 0) { return this; @@ -60,5 +58,4 @@ public JobNameFilterer filterRegex(String regex) { public String getJobName() { return jobName; } - } \ No newline at end of file diff --git a/build-monitor-plugin/src/main/resources/com/smartcodeltd/jenkinsci/plugins/buildmonitor/BuildMonitorView/widgets.jelly b/build-monitor-plugin/src/main/resources/com/smartcodeltd/jenkinsci/plugins/buildmonitor/BuildMonitorView/widgets.jelly index d7bac7af6..2631fa465 100644 --- a/build-monitor-plugin/src/main/resources/com/smartcodeltd/jenkinsci/plugins/buildmonitor/BuildMonitorView/widgets.jelly +++ b/build-monitor-plugin/src/main/resources/com/smartcodeltd/jenkinsci/plugins/buildmonitor/BuildMonitorView/widgets.jelly @@ -18,8 +18,9 @@

    {{project.nameFilter != project.name ? project.nameFilter : project.name}} + href="{{project.url}}">{{project.jobNameFiltered != project.name ? project.jobNameFiltered : project.name}}

    + {{project}}
    • {{ project.headline }}
    • Date: Tue, 18 Apr 2017 10:59:00 +0200 Subject: [PATCH 6/8] Removed whitespace and test output --- .../smartcodeltd/jenkinsci/plugins/buildmonitor/Config.java | 3 +-- .../plugins/buildmonitor/BuildMonitorView/widgets.jelly | 1 - 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/build-monitor-plugin/src/main/java/com/smartcodeltd/jenkinsci/plugins/buildmonitor/Config.java b/build-monitor-plugin/src/main/java/com/smartcodeltd/jenkinsci/plugins/buildmonitor/Config.java index a32fdde8e..84ad57a4a 100644 --- a/build-monitor-plugin/src/main/java/com/smartcodeltd/jenkinsci/plugins/buildmonitor/Config.java +++ b/build-monitor-plugin/src/main/java/com/smartcodeltd/jenkinsci/plugins/buildmonitor/Config.java @@ -52,8 +52,7 @@ public static Config defaultConfig() { return getOrElse(order, new ByName()); } - - + public void setOrder(Comparator> order) { this.order = order; } diff --git a/build-monitor-plugin/src/main/resources/com/smartcodeltd/jenkinsci/plugins/buildmonitor/BuildMonitorView/widgets.jelly b/build-monitor-plugin/src/main/resources/com/smartcodeltd/jenkinsci/plugins/buildmonitor/BuildMonitorView/widgets.jelly index 2631fa465..797eb9987 100644 --- a/build-monitor-plugin/src/main/resources/com/smartcodeltd/jenkinsci/plugins/buildmonitor/BuildMonitorView/widgets.jelly +++ b/build-monitor-plugin/src/main/resources/com/smartcodeltd/jenkinsci/plugins/buildmonitor/BuildMonitorView/widgets.jelly @@ -20,7 +20,6 @@ {{project.jobNameFiltered != project.name ? project.jobNameFiltered : project.name}} - {{project}}
      • {{ project.headline }}
      • Date: Tue, 18 Apr 2017 11:30:37 +0200 Subject: [PATCH 7/8] Changed text in help files and cleaned up Config.java from unnecessary newline --- .../smartcodeltd/jenkinsci/plugins/buildmonitor/Config.java | 2 +- .../buildmonitor/BuildMonitorView/configure-entries.jelly | 6 +++--- .../buildmonitor/BuildMonitorView/help-filterName.html | 3 --- .../BuildMonitorView/help-filterNamePrefix.html | 3 +++ .../buildmonitor/BuildMonitorView/help-filterNameRegex.html | 3 +++ .../BuildMonitorView/help-filterNameSuffix.html | 3 +++ 6 files changed, 13 insertions(+), 7 deletions(-) delete mode 100644 build-monitor-plugin/src/main/resources/com/smartcodeltd/jenkinsci/plugins/buildmonitor/BuildMonitorView/help-filterName.html create mode 100644 build-monitor-plugin/src/main/resources/com/smartcodeltd/jenkinsci/plugins/buildmonitor/BuildMonitorView/help-filterNamePrefix.html create mode 100644 build-monitor-plugin/src/main/resources/com/smartcodeltd/jenkinsci/plugins/buildmonitor/BuildMonitorView/help-filterNameRegex.html create mode 100644 build-monitor-plugin/src/main/resources/com/smartcodeltd/jenkinsci/plugins/buildmonitor/BuildMonitorView/help-filterNameSuffix.html diff --git a/build-monitor-plugin/src/main/java/com/smartcodeltd/jenkinsci/plugins/buildmonitor/Config.java b/build-monitor-plugin/src/main/java/com/smartcodeltd/jenkinsci/plugins/buildmonitor/Config.java index 84ad57a4a..9ecc90dc4 100644 --- a/build-monitor-plugin/src/main/java/com/smartcodeltd/jenkinsci/plugins/buildmonitor/Config.java +++ b/build-monitor-plugin/src/main/java/com/smartcodeltd/jenkinsci/plugins/buildmonitor/Config.java @@ -52,7 +52,7 @@ public static Config defaultConfig() { return getOrElse(order, new ByName()); } - + public void setOrder(Comparator> order) { this.order = order; } diff --git a/build-monitor-plugin/src/main/resources/com/smartcodeltd/jenkinsci/plugins/buildmonitor/BuildMonitorView/configure-entries.jelly b/build-monitor-plugin/src/main/resources/com/smartcodeltd/jenkinsci/plugins/buildmonitor/BuildMonitorView/configure-entries.jelly index 3236bc859..5f7f48abd 100644 --- a/build-monitor-plugin/src/main/resources/com/smartcodeltd/jenkinsci/plugins/buildmonitor/BuildMonitorView/configure-entries.jelly +++ b/build-monitor-plugin/src/main/resources/com/smartcodeltd/jenkinsci/plugins/buildmonitor/BuildMonitorView/configure-entries.jelly @@ -50,15 +50,15 @@ - + - + - + diff --git a/build-monitor-plugin/src/main/resources/com/smartcodeltd/jenkinsci/plugins/buildmonitor/BuildMonitorView/help-filterName.html b/build-monitor-plugin/src/main/resources/com/smartcodeltd/jenkinsci/plugins/buildmonitor/BuildMonitorView/help-filterName.html deleted file mode 100644 index 1e8f05356..000000000 --- a/build-monitor-plugin/src/main/resources/com/smartcodeltd/jenkinsci/plugins/buildmonitor/BuildMonitorView/help-filterName.html +++ /dev/null @@ -1,3 +0,0 @@ -
        - Filters input from job name and displays shortened name on build monitor. -
        \ No newline at end of file diff --git a/build-monitor-plugin/src/main/resources/com/smartcodeltd/jenkinsci/plugins/buildmonitor/BuildMonitorView/help-filterNamePrefix.html b/build-monitor-plugin/src/main/resources/com/smartcodeltd/jenkinsci/plugins/buildmonitor/BuildMonitorView/help-filterNamePrefix.html new file mode 100644 index 000000000..216fa1dd7 --- /dev/null +++ b/build-monitor-plugin/src/main/resources/com/smartcodeltd/jenkinsci/plugins/buildmonitor/BuildMonitorView/help-filterNamePrefix.html @@ -0,0 +1,3 @@ +
        + Removes Prefix from job name on build monitor. +
        \ No newline at end of file diff --git a/build-monitor-plugin/src/main/resources/com/smartcodeltd/jenkinsci/plugins/buildmonitor/BuildMonitorView/help-filterNameRegex.html b/build-monitor-plugin/src/main/resources/com/smartcodeltd/jenkinsci/plugins/buildmonitor/BuildMonitorView/help-filterNameRegex.html new file mode 100644 index 000000000..b1fe93f76 --- /dev/null +++ b/build-monitor-plugin/src/main/resources/com/smartcodeltd/jenkinsci/plugins/buildmonitor/BuildMonitorView/help-filterNameRegex.html @@ -0,0 +1,3 @@ +
        + Removes matching regex from job name on build monitor. +
        \ No newline at end of file diff --git a/build-monitor-plugin/src/main/resources/com/smartcodeltd/jenkinsci/plugins/buildmonitor/BuildMonitorView/help-filterNameSuffix.html b/build-monitor-plugin/src/main/resources/com/smartcodeltd/jenkinsci/plugins/buildmonitor/BuildMonitorView/help-filterNameSuffix.html new file mode 100644 index 000000000..70b71c3b3 --- /dev/null +++ b/build-monitor-plugin/src/main/resources/com/smartcodeltd/jenkinsci/plugins/buildmonitor/BuildMonitorView/help-filterNameSuffix.html @@ -0,0 +1,3 @@ +
        + Removes Suffix from job name on build monitor. +
        \ No newline at end of file From 3d9defe2200ca3c4d20cc0ac2226e9191872dbc7 Mon Sep 17 00:00:00 2001 From: vincent Date: Tue, 25 Apr 2017 12:10:29 +0200 Subject: [PATCH 8/8] removed text input for prefix and suffix filter and replaced it with checkboxes that finds the most common prefix and suffix instead automatically --- .../buildmonitor/BuildMonitorView.java | 15 +----- .../plugins/buildmonitor/Config.java | 26 +++++---- .../buildmonitor/viewmodel/JobViews.java | 6 ++- .../viewmodel/features/HasNameFilter.java | 5 +- .../StripMostCommonPrefix.java | 17 ++++++ .../StripMostCommonPrefixConfig.java | 12 +++++ .../StripMostCommonSuffix.java | 17 ++++++ .../StripMostCommonSuffixConfig.java | 12 +++++ .../StrippedMostCommonPrefix.java | 23 ++++++++ .../StrippedMostCommonSuffix.java | 23 ++++++++ .../jobNameFilter/JobNameFilterConfig.java | 6 +-- .../jobNameFilter/JobNameFilterer.java | 28 ---------- .../features/shouldStripMostCommonPrefix.java | 29 ++++++++++ .../features/shouldStripMostCommonSuffix.java | 27 ++++++++++ .../BuildMonitorView/configure-entries.jelly | 12 ++--- .../BuildMonitorView/widgets.jelly | 16 +++++- .../src/main/webapp/scripts/controllers.js | 54 ++++++++++++++++++- .../src/main/webapp/scripts/filters.js | 9 ++-- 18 files changed, 258 insertions(+), 79 deletions(-) create mode 100644 build-monitor-plugin/src/main/java/com/smartcodeltd/jenkinsci/plugins/buildmonitor/viewmodel/features/StripMostCommons/StripMostCommonPrefix.java create mode 100644 build-monitor-plugin/src/main/java/com/smartcodeltd/jenkinsci/plugins/buildmonitor/viewmodel/features/StripMostCommons/StripMostCommonPrefixConfig.java create mode 100644 build-monitor-plugin/src/main/java/com/smartcodeltd/jenkinsci/plugins/buildmonitor/viewmodel/features/StripMostCommons/StripMostCommonSuffix.java create mode 100644 build-monitor-plugin/src/main/java/com/smartcodeltd/jenkinsci/plugins/buildmonitor/viewmodel/features/StripMostCommons/StripMostCommonSuffixConfig.java create mode 100644 build-monitor-plugin/src/main/java/com/smartcodeltd/jenkinsci/plugins/buildmonitor/viewmodel/features/StripMostCommons/StrippedMostCommonPrefix.java create mode 100644 build-monitor-plugin/src/main/java/com/smartcodeltd/jenkinsci/plugins/buildmonitor/viewmodel/features/StripMostCommons/StrippedMostCommonSuffix.java create mode 100644 build-monitor-plugin/src/main/java/com/smartcodeltd/jenkinsci/plugins/buildmonitor/viewmodel/features/shouldStripMostCommonPrefix.java create mode 100644 build-monitor-plugin/src/main/java/com/smartcodeltd/jenkinsci/plugins/buildmonitor/viewmodel/features/shouldStripMostCommonSuffix.java diff --git a/build-monitor-plugin/src/main/java/com/smartcodeltd/jenkinsci/plugins/buildmonitor/BuildMonitorView.java b/build-monitor-plugin/src/main/java/com/smartcodeltd/jenkinsci/plugins/buildmonitor/BuildMonitorView.java index b539afc70..7c6d70722 100644 --- a/build-monitor-plugin/src/main/java/com/smartcodeltd/jenkinsci/plugins/buildmonitor/BuildMonitorView.java +++ b/build-monitor-plugin/src/main/java/com/smartcodeltd/jenkinsci/plugins/buildmonitor/BuildMonitorView.java @@ -103,15 +103,6 @@ public boolean collectAnonymousUsageStatistics() { return descriptor.getPermissionToCollectAnonymousUsageStatistics(); } - @SuppressWarnings("unused") // used in .jelly - public String getFilterPrefix() { - return currentConfig().getFilterPrefix(); - } - - @SuppressWarnings("unused") // used in .jelly - public String getFilterSuffix() { - return currentConfig().getFilterSuffix(); - } @SuppressWarnings("unused") // used in .jelly public String getFilterRegex() { @@ -128,12 +119,10 @@ protected void submit(StaplerRequest req) throws ServletException, IOException, String requestedOrdering = req.getParameter("order"); title = req.getParameter("title"); - String filterPrefix = req.getParameter("filterPrefix"); - String filterSuffix = req.getParameter("filterSuffix"); String filterRegex = req.getParameter("filterRegex"); - currentConfig().setFilterPrefix(filterPrefix); - currentConfig().setFilterSuffix(filterSuffix); + currentConfig().setStripCommonPrefix(json.optBoolean("stripPrefix",false)); + currentConfig().setStripCommonSuffix(json.optBoolean("stripSuffix",false)); currentConfig().setFilterRegex(filterRegex); currentConfig().setDisplayCommitters(json.optBoolean("displayCommitters", true)); diff --git a/build-monitor-plugin/src/main/java/com/smartcodeltd/jenkinsci/plugins/buildmonitor/Config.java b/build-monitor-plugin/src/main/java/com/smartcodeltd/jenkinsci/plugins/buildmonitor/Config.java index 9ecc90dc4..2fef28df2 100644 --- a/build-monitor-plugin/src/main/java/com/smartcodeltd/jenkinsci/plugins/buildmonitor/Config.java +++ b/build-monitor-plugin/src/main/java/com/smartcodeltd/jenkinsci/plugins/buildmonitor/Config.java @@ -10,27 +10,25 @@ public class Config { - private boolean displayCommitters; - private String filterPrefix, filterSuffix, filterRegex; + private boolean displayCommitters,shouldStripCommonPrefix,shouldStripCommonSuffix; + private String filterRegex; - public void setFilterPrefix(String filterPrefix) { - this.filterPrefix = filterPrefix; + public void setStripCommonPrefix(boolean strip){ + this.shouldStripCommonPrefix = strip; } - public void setFilterSuffix(String filterSuffix) { - this.filterSuffix = filterSuffix; + public void setStripCommonSuffix(boolean strip){ + this.shouldStripCommonSuffix = strip; } - - public void setFilterRegex(String filterRegex) { - this.filterRegex = filterRegex; + public Boolean ShouldStripCommonPrefix(){ + return getOrElse(shouldStripCommonPrefix,false); } - - public String getFilterPrefix() { - return getOrElse(this.filterPrefix,""); + public Boolean ShouldStripCommonSuffix(){ + return getOrElse(shouldStripCommonSuffix,false); } - public String getFilterSuffix() { - return getOrElse(this.filterSuffix,""); + public void setFilterRegex(String filterRegex) { + this.filterRegex = filterRegex; } public String getFilterRegex() { diff --git a/build-monitor-plugin/src/main/java/com/smartcodeltd/jenkinsci/plugins/buildmonitor/viewmodel/JobViews.java b/build-monitor-plugin/src/main/java/com/smartcodeltd/jenkinsci/plugins/buildmonitor/viewmodel/JobViews.java index 2f7bde4df..da51f3ced 100644 --- a/build-monitor-plugin/src/main/java/com/smartcodeltd/jenkinsci/plugins/buildmonitor/viewmodel/JobViews.java +++ b/build-monitor-plugin/src/main/java/com/smartcodeltd/jenkinsci/plugins/buildmonitor/viewmodel/JobViews.java @@ -2,6 +2,8 @@ import com.smartcodeltd.jenkinsci.plugins.buildmonitor.facade.StaticJenkinsAPIs; import com.smartcodeltd.jenkinsci.plugins.buildmonitor.viewmodel.features.*; +import com.smartcodeltd.jenkinsci.plugins.buildmonitor.viewmodel.features.StripMostCommons.StripMostCommonPrefixConfig; +import com.smartcodeltd.jenkinsci.plugins.buildmonitor.viewmodel.features.StripMostCommons.StripMostCommonSuffixConfig; import com.smartcodeltd.jenkinsci.plugins.buildmonitor.viewmodel.features.headline.HeadlineConfig; import com.smartcodeltd.jenkinsci.plugins.buildmonitor.viewmodel.features.jobNameFilter.JobNameFilterConfig; import hudson.model.Job; @@ -31,9 +33,11 @@ public JobView viewOf(Job job) { // todo: a more elegant way of assembling the features would be nice viewFeatures.add(new HasHeadline(new HeadlineConfig(config.shouldDisplayCommitters()))); + viewFeatures.add(new shouldStripMostCommonPrefix(new StripMostCommonPrefixConfig(config.ShouldStripCommonPrefix()))); + viewFeatures.add(new shouldStripMostCommonSuffix(new StripMostCommonSuffixConfig(config.ShouldStripCommonSuffix()))); viewFeatures.add(new KnowsLastCompletedBuildDetails()); viewFeatures.add(new KnowsCurrentBuildsDetails()); - viewFeatures.add(new HasNameFilter(new JobNameFilterConfig(config.getFilterPrefix(), config.getFilterSuffix(), config.getFilterRegex()))); + viewFeatures.add(new HasNameFilter(new JobNameFilterConfig(config.getFilterRegex()))); if (jenkins.hasPlugin(Claim)) { viewFeatures.add(new CanBeClaimed()); diff --git a/build-monitor-plugin/src/main/java/com/smartcodeltd/jenkinsci/plugins/buildmonitor/viewmodel/features/HasNameFilter.java b/build-monitor-plugin/src/main/java/com/smartcodeltd/jenkinsci/plugins/buildmonitor/viewmodel/features/HasNameFilter.java index 94603b23e..02e7afec1 100644 --- a/build-monitor-plugin/src/main/java/com/smartcodeltd/jenkinsci/plugins/buildmonitor/viewmodel/features/HasNameFilter.java +++ b/build-monitor-plugin/src/main/java/com/smartcodeltd/jenkinsci/plugins/buildmonitor/viewmodel/features/HasNameFilter.java @@ -22,10 +22,7 @@ public HasNameFilter of(JobView jobView) { public JobNameFiltered asJson() { JobNameFilterer nameFilterer = new JobNameFilterer(job.name()); - nameFilterer = nameFilterer - .filterPrefix(config.prefix) - .filterSuffix(config.suffix) - .filterRegex(config.regex); + nameFilterer = nameFilterer.filterRegex(config.regex); return new JobNameFiltered(nameFilterer.getJobName()); } diff --git a/build-monitor-plugin/src/main/java/com/smartcodeltd/jenkinsci/plugins/buildmonitor/viewmodel/features/StripMostCommons/StripMostCommonPrefix.java b/build-monitor-plugin/src/main/java/com/smartcodeltd/jenkinsci/plugins/buildmonitor/viewmodel/features/StripMostCommons/StripMostCommonPrefix.java new file mode 100644 index 000000000..115224fb8 --- /dev/null +++ b/build-monitor-plugin/src/main/java/com/smartcodeltd/jenkinsci/plugins/buildmonitor/viewmodel/features/StripMostCommons/StripMostCommonPrefix.java @@ -0,0 +1,17 @@ +package com.smartcodeltd.jenkinsci.plugins.buildmonitor.viewmodel.features.StripMostCommons; + +/** + * Contains methods used to filter the job name with specified prefix, suffix and regex + */ +public class StripMostCommonPrefix { + private StripMostCommonPrefixConfig conf; + + public StripMostCommonPrefix(StripMostCommonPrefixConfig conf) { + this.conf = conf; + } + + public boolean getPrefix(){ + //Boolean.toString(conf.prefix) + return conf.prefix; + } +} \ No newline at end of file diff --git a/build-monitor-plugin/src/main/java/com/smartcodeltd/jenkinsci/plugins/buildmonitor/viewmodel/features/StripMostCommons/StripMostCommonPrefixConfig.java b/build-monitor-plugin/src/main/java/com/smartcodeltd/jenkinsci/plugins/buildmonitor/viewmodel/features/StripMostCommons/StripMostCommonPrefixConfig.java new file mode 100644 index 000000000..ada9407ae --- /dev/null +++ b/build-monitor-plugin/src/main/java/com/smartcodeltd/jenkinsci/plugins/buildmonitor/viewmodel/features/StripMostCommons/StripMostCommonPrefixConfig.java @@ -0,0 +1,12 @@ +package com.smartcodeltd.jenkinsci.plugins.buildmonitor.viewmodel.features.StripMostCommons; + +/** + * @author Vincent & Robert + */ +public class StripMostCommonPrefixConfig { + public final Boolean prefix; + + public StripMostCommonPrefixConfig(Boolean prefix) { + this.prefix = prefix; + } +} \ No newline at end of file diff --git a/build-monitor-plugin/src/main/java/com/smartcodeltd/jenkinsci/plugins/buildmonitor/viewmodel/features/StripMostCommons/StripMostCommonSuffix.java b/build-monitor-plugin/src/main/java/com/smartcodeltd/jenkinsci/plugins/buildmonitor/viewmodel/features/StripMostCommons/StripMostCommonSuffix.java new file mode 100644 index 000000000..b61214347 --- /dev/null +++ b/build-monitor-plugin/src/main/java/com/smartcodeltd/jenkinsci/plugins/buildmonitor/viewmodel/features/StripMostCommons/StripMostCommonSuffix.java @@ -0,0 +1,17 @@ +package com.smartcodeltd.jenkinsci.plugins.buildmonitor.viewmodel.features.StripMostCommons; + +/** + * Contains methods used to filter the job name with specified prefix, suffix and regex + */ +public class StripMostCommonSuffix { + private StripMostCommonSuffixConfig conf; + + public StripMostCommonSuffix(StripMostCommonSuffixConfig conf) { + this.conf = conf; + } + + + public boolean getSuffix(){ + return conf.suffix; + } +} \ No newline at end of file diff --git a/build-monitor-plugin/src/main/java/com/smartcodeltd/jenkinsci/plugins/buildmonitor/viewmodel/features/StripMostCommons/StripMostCommonSuffixConfig.java b/build-monitor-plugin/src/main/java/com/smartcodeltd/jenkinsci/plugins/buildmonitor/viewmodel/features/StripMostCommons/StripMostCommonSuffixConfig.java new file mode 100644 index 000000000..221e6a0e6 --- /dev/null +++ b/build-monitor-plugin/src/main/java/com/smartcodeltd/jenkinsci/plugins/buildmonitor/viewmodel/features/StripMostCommons/StripMostCommonSuffixConfig.java @@ -0,0 +1,12 @@ +package com.smartcodeltd.jenkinsci.plugins.buildmonitor.viewmodel.features.StripMostCommons; + +/** + * @author Vincent & Robert + */ +public class StripMostCommonSuffixConfig { + public final Boolean suffix; + + public StripMostCommonSuffixConfig(Boolean suffix) { + this.suffix = suffix; + } +} \ No newline at end of file diff --git a/build-monitor-plugin/src/main/java/com/smartcodeltd/jenkinsci/plugins/buildmonitor/viewmodel/features/StripMostCommons/StrippedMostCommonPrefix.java b/build-monitor-plugin/src/main/java/com/smartcodeltd/jenkinsci/plugins/buildmonitor/viewmodel/features/StripMostCommons/StrippedMostCommonPrefix.java new file mode 100644 index 000000000..15ceeeaef --- /dev/null +++ b/build-monitor-plugin/src/main/java/com/smartcodeltd/jenkinsci/plugins/buildmonitor/viewmodel/features/StripMostCommons/StrippedMostCommonPrefix.java @@ -0,0 +1,23 @@ +package com.smartcodeltd.jenkinsci.plugins.buildmonitor.viewmodel.features.StripMostCommons; + +import org.codehaus.jackson.annotate.JsonValue; + +/** + * @author Vincent & Robert + */ +public class StrippedMostCommonPrefix { + private final boolean value; + + public StrippedMostCommonPrefix(boolean value) { + this.value = value; + } + + @JsonValue + public boolean value() { + return value; + } + + public StrippedMostCommonPrefix asJson() { + return this; + } +} \ No newline at end of file diff --git a/build-monitor-plugin/src/main/java/com/smartcodeltd/jenkinsci/plugins/buildmonitor/viewmodel/features/StripMostCommons/StrippedMostCommonSuffix.java b/build-monitor-plugin/src/main/java/com/smartcodeltd/jenkinsci/plugins/buildmonitor/viewmodel/features/StripMostCommons/StrippedMostCommonSuffix.java new file mode 100644 index 000000000..0b65ec7d0 --- /dev/null +++ b/build-monitor-plugin/src/main/java/com/smartcodeltd/jenkinsci/plugins/buildmonitor/viewmodel/features/StripMostCommons/StrippedMostCommonSuffix.java @@ -0,0 +1,23 @@ +package com.smartcodeltd.jenkinsci.plugins.buildmonitor.viewmodel.features.StripMostCommons; + +import org.codehaus.jackson.annotate.JsonValue; + +/** + * @author Vincent & Robert + */ +public class StrippedMostCommonSuffix { + private final boolean value; + + public StrippedMostCommonSuffix(boolean value) { + this.value = value; + } + + @JsonValue + public boolean value() { + return value; + } + + public StrippedMostCommonSuffix asJson() { + return this; + } +} \ No newline at end of file diff --git a/build-monitor-plugin/src/main/java/com/smartcodeltd/jenkinsci/plugins/buildmonitor/viewmodel/features/jobNameFilter/JobNameFilterConfig.java b/build-monitor-plugin/src/main/java/com/smartcodeltd/jenkinsci/plugins/buildmonitor/viewmodel/features/jobNameFilter/JobNameFilterConfig.java index 59260ba64..bfb2a8aa5 100644 --- a/build-monitor-plugin/src/main/java/com/smartcodeltd/jenkinsci/plugins/buildmonitor/viewmodel/features/jobNameFilter/JobNameFilterConfig.java +++ b/build-monitor-plugin/src/main/java/com/smartcodeltd/jenkinsci/plugins/buildmonitor/viewmodel/features/jobNameFilter/JobNameFilterConfig.java @@ -4,11 +4,9 @@ * @author Vincent & Robert */ public class JobNameFilterConfig { - public final String prefix, suffix, regex; + public final String regex; - public JobNameFilterConfig(String prefix, String suffix, String regex) { - this.prefix = prefix; - this.suffix = suffix; + public JobNameFilterConfig( String regex) { this.regex = regex; } } \ No newline at end of file diff --git a/build-monitor-plugin/src/main/java/com/smartcodeltd/jenkinsci/plugins/buildmonitor/viewmodel/features/jobNameFilter/JobNameFilterer.java b/build-monitor-plugin/src/main/java/com/smartcodeltd/jenkinsci/plugins/buildmonitor/viewmodel/features/jobNameFilter/JobNameFilterer.java index 6b15a8ab6..13ff5fe8f 100644 --- a/build-monitor-plugin/src/main/java/com/smartcodeltd/jenkinsci/plugins/buildmonitor/viewmodel/features/jobNameFilter/JobNameFilterer.java +++ b/build-monitor-plugin/src/main/java/com/smartcodeltd/jenkinsci/plugins/buildmonitor/viewmodel/features/jobNameFilter/JobNameFilterer.java @@ -13,34 +13,6 @@ public JobNameFilterer(String jobName) { this.jobName = jobName; } - public JobNameFilterer filterSuffix(String suffix) { - if (suffix.length() <= 0) { - return this; - } - - if (jobName.substring(jobName.length() - suffix.length(), jobName.length()).equals(suffix.substring(0, suffix.length()))) { - String filteredName = jobName.substring(0, jobName.length() - suffix.length()); - - return new JobNameFilterer(filteredName); - } - - return this; - } - - public JobNameFilterer filterPrefix(String prefix) { - if (prefix.length() <= 0) { - return this; - } - - if (jobName.substring(0, prefix.length()).equals(prefix.substring(0, prefix.length()))) { - String filteredName = jobName.substring(prefix.length(), jobName.length()); - - return new JobNameFilterer(filteredName); - } - - return this; - } - public JobNameFilterer filterRegex(String regex) { if (regex.length() <= 0) { return this; diff --git a/build-monitor-plugin/src/main/java/com/smartcodeltd/jenkinsci/plugins/buildmonitor/viewmodel/features/shouldStripMostCommonPrefix.java b/build-monitor-plugin/src/main/java/com/smartcodeltd/jenkinsci/plugins/buildmonitor/viewmodel/features/shouldStripMostCommonPrefix.java new file mode 100644 index 000000000..881703f69 --- /dev/null +++ b/build-monitor-plugin/src/main/java/com/smartcodeltd/jenkinsci/plugins/buildmonitor/viewmodel/features/shouldStripMostCommonPrefix.java @@ -0,0 +1,29 @@ +package com.smartcodeltd.jenkinsci.plugins.buildmonitor.viewmodel.features; + +import com.smartcodeltd.jenkinsci.plugins.buildmonitor.viewmodel.JobView; +import com.smartcodeltd.jenkinsci.plugins.buildmonitor.viewmodel.features.StripMostCommons.StripMostCommonPrefix; +import com.smartcodeltd.jenkinsci.plugins.buildmonitor.viewmodel.features.StripMostCommons.StripMostCommonPrefixConfig; +import com.smartcodeltd.jenkinsci.plugins.buildmonitor.viewmodel.features.StripMostCommons.StrippedMostCommonPrefix; + +public class shouldStripMostCommonPrefix implements Feature { + private JobView job; + private StripMostCommonPrefixConfig config; + + + public shouldStripMostCommonPrefix(StripMostCommonPrefixConfig stripMostCommonPrefixConfig) { + this.config = stripMostCommonPrefixConfig; + } + + @Override + public shouldStripMostCommonPrefix of(JobView jobView) { + this.job = jobView; + + return this; + } + + @Override + public StrippedMostCommonPrefix asJson() { + StripMostCommonPrefix coms = new StripMostCommonPrefix(config); + return new StrippedMostCommonPrefix(coms.getPrefix()); + } +} \ No newline at end of file diff --git a/build-monitor-plugin/src/main/java/com/smartcodeltd/jenkinsci/plugins/buildmonitor/viewmodel/features/shouldStripMostCommonSuffix.java b/build-monitor-plugin/src/main/java/com/smartcodeltd/jenkinsci/plugins/buildmonitor/viewmodel/features/shouldStripMostCommonSuffix.java new file mode 100644 index 000000000..3b4202313 --- /dev/null +++ b/build-monitor-plugin/src/main/java/com/smartcodeltd/jenkinsci/plugins/buildmonitor/viewmodel/features/shouldStripMostCommonSuffix.java @@ -0,0 +1,27 @@ +package com.smartcodeltd.jenkinsci.plugins.buildmonitor.viewmodel.features; + +import com.smartcodeltd.jenkinsci.plugins.buildmonitor.viewmodel.JobView; +import com.smartcodeltd.jenkinsci.plugins.buildmonitor.viewmodel.features.StripMostCommons.*; + +public class shouldStripMostCommonSuffix implements Feature { + private JobView job; + private StripMostCommonSuffixConfig config; + + + public shouldStripMostCommonSuffix(StripMostCommonSuffixConfig Strip) { + this.config = Strip; + } + + @Override + public shouldStripMostCommonSuffix of(JobView jobView) { + this.job = jobView; + + return this; + } + + @Override + public StrippedMostCommonSuffix asJson() { + StripMostCommonSuffix coms = new StripMostCommonSuffix(config); + return new StrippedMostCommonSuffix(coms.getSuffix()); + } +} \ No newline at end of file diff --git a/build-monitor-plugin/src/main/resources/com/smartcodeltd/jenkinsci/plugins/buildmonitor/BuildMonitorView/configure-entries.jelly b/build-monitor-plugin/src/main/resources/com/smartcodeltd/jenkinsci/plugins/buildmonitor/BuildMonitorView/configure-entries.jelly index 5f7f48abd..ace420f8c 100644 --- a/build-monitor-plugin/src/main/resources/com/smartcodeltd/jenkinsci/plugins/buildmonitor/BuildMonitorView/configure-entries.jelly +++ b/build-monitor-plugin/src/main/resources/com/smartcodeltd/jenkinsci/plugins/buildmonitor/BuildMonitorView/configure-entries.jelly @@ -49,15 +49,11 @@
        - - - - - - - + + + + - diff --git a/build-monitor-plugin/src/main/resources/com/smartcodeltd/jenkinsci/plugins/buildmonitor/BuildMonitorView/widgets.jelly b/build-monitor-plugin/src/main/resources/com/smartcodeltd/jenkinsci/plugins/buildmonitor/BuildMonitorView/widgets.jelly index 797eb9987..ce8e55190 100644 --- a/build-monitor-plugin/src/main/resources/com/smartcodeltd/jenkinsci/plugins/buildmonitor/BuildMonitorView/widgets.jelly +++ b/build-monitor-plugin/src/main/resources/com/smartcodeltd/jenkinsci/plugins/buildmonitor/BuildMonitorView/widgets.jelly @@ -18,8 +18,20 @@

        {{project.jobNameFiltered != project.name ? project.jobNameFiltered : project.name}} + href="{{project.url}}"> + {{project.name}} + + +

        +

        {{project}}

        • {{ project.headline }}
        • -
        \ No newline at end of file +
      diff --git a/build-monitor-plugin/src/main/webapp/scripts/controllers.js b/build-monitor-plugin/src/main/webapp/scripts/controllers.js index 0e0e8dfae..70910394b 100644 --- a/build-monitor-plugin/src/main/webapp/scripts/controllers.js +++ b/build-monitor-plugin/src/main/webapp/scripts/controllers.js @@ -24,6 +24,8 @@ angular. return fetchJobViews().then(function (response) { $scope.jobs = response.data.data; + //required. + getFreqOfJobs($scope.jobs); $rootScope.$broadcast('jenkins:data-fetched', response.data.meta); @@ -37,6 +39,55 @@ angular. $scope.fontSize = fontSizeFor($scope.jobs, newColumnCount); }); + /* + TODO extract into widget. + */ + function getFreqOfJobs(itemsOnScreen){ + var namesOnScreen = []; + for(var i = 0; i < itemsOnScreen.length;i++){ + namesOnScreen.push(itemsOnScreen[i].jobNameFiltered); + $scope.jobs[i].name = itemsOnScreen[i].jobNameFiltered; + } + var sharedStartString,sharedEndString; + + if($scope.jobs[0].strippedMostCommonPrefix && $scope.jobs[0].strippedMostCommonPrefix != null){ + sharedStartString = sharedStart(namesOnScreen); + for(var i = 0; i < namesOnScreen.length; i++){ + $scope.jobs[i].name = namesOnScreen[i].substring(sharedStartString.length,namesOnScreen[i].length); + } + + } + if($scope.jobs[0].strippedMostCommonSuffix && $scope.jobs[0].strippedMostCommonSuffix != null){ + sharedEndString = sharedEnd(namesOnScreen); + for(var i = 0; i < itemsOnScreen.length;i++){ + if($scope.jobs[i].name.substring($scope.jobs[i].name.length-sharedEndString.length,$scope.jobs[i].name.length)==reverse(sharedEndString)){ + $scope.jobs[i].name = $scope.jobs[i].name.substring(0,$scope.jobs[i].name.length-sharedEndString.length); + + } + } + } + } + //shameful copy and paste from SO + function reverse(s){ + return s.split("").reverse().join(""); + } + function sharedStart(array){ + var A= array.concat().sort(), + a1= A[0], a2= A[A.length-1], L= a1.length, i= 0; + while(i