Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Filter name feature #305

Open
wants to merge 9 commits into
base: master
Choose a base branch
from
Next Next commit
Adds job name filter feature, feature filters configurable prefix, su…
…ffix and regex from job name on display
unityunityunity committed Apr 7, 2017
commit 6e54e397693afed342589af43626fb8c34c1aad0
Original file line number Diff line number Diff line change
@@ -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 {
Original file line number Diff line number Diff line change
@@ -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<Job<?, ?>> order) {
this.order = order;
}
Original file line number Diff line number Diff line change
@@ -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());
Original file line number Diff line number Diff line change
@@ -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<NameFilter> {
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());
}

}
Original file line number Diff line number Diff line change
@@ -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;
}
}
Original file line number Diff line number Diff line change
@@ -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;
}
}
Original file line number Diff line number Diff line change
@@ -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;
}

}
Original file line number Diff line number Diff line change
@@ -40,6 +40,27 @@
</f:entry>
</f:optionalBlock>

<f:optionalBlock name="usefilterprefix" title="${%Exclude a prefix from the job name on display}"
checked="${it.filterPrefix != null}" help="/help/view-config/filterprefix.html">
<f:entry title="${%Prefix filter}">
<f:textbox name="filterPrefix" field="filterPrefix"/>
</f:entry>
</f:optionalBlock>

<f:optionalBlock name="usefiltersuffix" title="${%Exclude a suffix from the job name on display}"
checked="${it.filterSuffix != null}" help="/help/view-config/filtersuffix.html">
<f:entry title="${%Suffix filter}">
<f:textbox name="filterSuffix" field="filterSuffix"/>
</f:entry>
</f:optionalBlock>

<f:optionalBlock name="usefilterregex" title="${%Match a regex and exclude it from the name from the job name on display}"
checked="${it.filterRegex != null}" help="/help/view-config/filterregex.html">
<f:entry title="${%Regex filter}">
<f:textbox name="filterRegex" field="filterRegex"/>
</f:entry>
</f:optionalBlock>

<j:if test="${it.hasJobFilterExtensions()}">
<f:block>
<f:repeatableHeteroProperty field="jobFilters" hasHeader="true" addCaption="${%Add Job Filter}" />
Original file line number Diff line number Diff line change
@@ -18,7 +18,7 @@
<header>
<h2>
<a title="{{project.name}}"
href="{{project.url}}">{{project.name}}</a>
href="{{project.url}}">{{project.nameFilter != project.name ? project.nameFilter : project.name}}</a>
</h2>
<ul class="details">
<li data-ng-show="! project.claim.active">{{ project.headline }}</li>