Skip to content

Commit

Permalink
Fixes #2. Adds a field to exclude some job patterns from icon color c…
Browse files Browse the repository at this point in the history
…omputation
  • Loading branch information
taksan committed Mar 17, 2017
1 parent 312856f commit 21b982a
Show file tree
Hide file tree
Showing 7 changed files with 70 additions and 32 deletions.
Expand Up @@ -16,12 +16,18 @@ public class CategorizedItemsBuilder {
private List<GroupTopLevelItem> groupItems = new ArrayList<GroupTopLevelItem>();
private List<? extends CategorizationCriteria> groupingRules;
private Map<String, TopLevelItem> itemsData;
private String regexToIgnoreOnColorComputing;

public CategorizedItemsBuilder(List<TopLevelItem> itemsToCategorize, List<? extends CategorizationCriteria> groupingRules) {
this.itemsToCategorize = itemsToCategorize;
this.groupingRules = groupingRules;
this(itemsToCategorize, groupingRules, "");
}

public CategorizedItemsBuilder(List<TopLevelItem> items, List<? extends CategorizationCriteria> groupingRules, String regexToIgnoreOnColorComputing) {
this.itemsToCategorize = items;
this.groupingRules = groupingRules;
this.regexToIgnoreOnColorComputing = regexToIgnoreOnColorComputing;
}

public List<TopLevelItem> getRegroupedItems() {
return buildRegroupedItems(itemsToCategorize);
}
Expand Down Expand Up @@ -98,7 +104,7 @@ private GroupTopLevelItem getGroupForItemOrCreateIfNeeded(
{
boolean groupIsMissing = !groupItemByGroupName.containsKey(groupName);
if (groupIsMissing) {
GroupTopLevelItem value = new GroupTopLevelItem(groupName);
GroupTopLevelItem value = new GroupTopLevelItem(groupName, regexToIgnoreOnColorComputing);
groupItems.add(value);
groupItemByGroupName.put(groupName, value);
groupedItems.add(groupItemByGroupName.get(groupName));
Expand Down
Expand Up @@ -30,6 +30,7 @@

public class CategorizedJobsView extends ListView {
private List<GroupingRule> groupingRules = new ArrayList<GroupingRule>();
private String regexToIgnoreOnColorComputing = "";

private DescribableList<CategorizationCriteria, Descriptor<CategorizationCriteria>> categorizationCriteria;

Expand Down Expand Up @@ -74,17 +75,24 @@ private Object readResolve() {

public List<TopLevelItem> getGroupedItems() {
if (categorizationCriteria == null)
categorizedItemsBuilder = new CategorizedItemsBuilder(super.getItems(), groupingRules);
categorizedItemsBuilder = new CategorizedItemsBuilder(super.getItems(), groupingRules, getRegexToIgnoreOnColorComputing());
else
categorizedItemsBuilder = new CategorizedItemsBuilder(super.getItems(), categorizationCriteria.toList());
categorizedItemsBuilder = new CategorizedItemsBuilder(super.getItems(), categorizationCriteria.toList(), getRegexToIgnoreOnColorComputing());

return categorizedItemsBuilder.getRegroupedItems();
}

public String getRegexToIgnoreOnColorComputing() {
if (regexToIgnoreOnColorComputing == null)
return "";
return regexToIgnoreOnColorComputing;
}

public void migrateOldFormat() {
if (categorizationCriteria !=null)
return;
if (groupingRules ==null || groupingRules.size() == 0)

if (groupingRules == null || groupingRules.size() == 0)
categorizationCriteria = new DescribableList<CategorizationCriteria, Descriptor<CategorizationCriteria>>(this);
else {
categorizationCriteria = new DescribableList<CategorizationCriteria, Descriptor<CategorizationCriteria>>(this, groupingRules);
Expand All @@ -97,11 +105,10 @@ protected void submit(StaplerRequest req) throws ServletException, FormException
forcefullyDisableRecurseBecauseItCausesClassCastExceptionOnJenkins1_532_1(req);
super.submit(req);
categorizationCriteria.rebuildHetero(req, req.getSubmittedForm(), CategorizationCriteria.all(), "categorizationCriteria");
regexToIgnoreOnColorComputing = req.getParameter("regexToIgnoreOnColorComputing");
}


public void forcefullyDisableRecurseBecauseItCausesClassCastExceptionOnJenkins1_532_1(
StaplerRequest req) {
public void forcefullyDisableRecurseBecauseItCausesClassCastExceptionOnJenkins1_532_1( StaplerRequest req) {
req.setAttribute("recurse", false);
}

Expand Down
Expand Up @@ -36,9 +36,12 @@ public class GroupTopLevelItem implements TopLevelItem{
private int nestLevel;
private final String groupClass;
protected List<TopLevelItem> nestedItems = new ArrayList<TopLevelItem>();

private String regexToIgnoreOnColorComputing;

public GroupTopLevelItem(String groupLabel) {
public GroupTopLevelItem(String groupLabel, String regexToIgnoreOnColorComputing) {
groupName = groupLabel;
this.regexToIgnoreOnColorComputing = regexToIgnoreOnColorComputing;
this.nestLevel = 0;
this.groupClass = "g_"+groupLabel.replaceAll("[^a-zA-Z0-9_]","_")+groupLabel.hashCode();
this.specificCss.append("font-weight:bold;");
Expand Down Expand Up @@ -84,9 +87,11 @@ public void checkPermission(Permission permission) throws AccessDeniedException

public BallColor getIconColor() {
BallColor colorState = BallColor.NOTBUILT;
for (TopLevelItem items : getNestedItems()) {
if (items instanceof AbstractProject) {
BallColor projectColorState = ((AbstractProject)items).getIconColor();
for (TopLevelItem item : getNestedItems()) {
if (item instanceof AbstractProject) {
if (item.getName().matches(regexToIgnoreOnColorComputing))
continue;
BallColor projectColorState = ((AbstractProject)item).getIconColor();
colorState = chooseNextColor(colorState, projectColorState);
}
}
Expand Down
Expand Up @@ -52,7 +52,7 @@ private String getItemName(TopLevelItem item) {
}

String getNormalizedGroupRegex() {
return normalizeRegex(getGroupRegex());
return Utils.normalizeRegex(getGroupRegex());
}

@Extension
Expand All @@ -63,19 +63,6 @@ public String getDisplayName() {
}
}

private static String normalizeRegex(String groupRegex) {
if (groupRegex == null) return "";
String regex = groupRegex;
if (!regex.startsWith(".*"))
regex =".*"+regex;
if (!regex.endsWith(".*"))
regex +=".*";
if (!regex.contains("(")) {
regex = ".*("+groupRegex+").*";
}
return regex;
}

public String getGroupRegex() {
return groupRegex;
}
Expand Down
18 changes: 18 additions & 0 deletions src/main/java/org/jenkinsci/plugins/categorizedview/Utils.java
@@ -0,0 +1,18 @@
package org.jenkinsci.plugins.categorizedview;

public class Utils {

static String normalizeRegex(String groupRegex) {
if (groupRegex == null) return "";
String regex = groupRegex;
if (!regex.startsWith(".*"))
regex =".*"+regex;
if (!regex.endsWith(".*"))
regex +=".*";
if (!regex.contains("(")) {
regex = ".*("+groupRegex+").*";
}
return regex;
}

}
Expand Up @@ -88,9 +88,13 @@ THE SOFTWARE.
</f:section>

<f:section title="${%Job group categorization}">
<f:entry title="${%Ignore jobs matching the following regex on group icon color and failre computation}">
<f:textbox name="regexToIgnoreOnColorComputing" field="regexToIgnoreOnColorComputing"/>
</f:entry>
<f:block>
<f:repeatableHeteroProperty field="categorizationCriteria" hasHeader="true" addCaption="${%Add new categorization criteria}"/>
</f:block>

</f:section>

<f:section title="${%Columns}">
Expand Down
Expand Up @@ -20,7 +20,7 @@

@SuppressWarnings("rawtypes")
public class GroupTopLevelItemTest {
GroupTopLevelItem subject = new GroupTopLevelItem("");
GroupTopLevelItem subject = new GroupTopLevelItem("",".*ignore-me.*");
@Test
public void getBuildHealth_returnsWorstHealthValue() {
subject.add(makeProjectWithHealth(80));
Expand All @@ -45,6 +45,9 @@ public void getIconColor_ShouldReturnWorstBallColor() {
subject.add(makeProjectWithColor(BallColor.DISABLED));
assertEquals(BallColor.BLUE, subject.getIconColor());

subject.add(makeProjectWithColor(BallColor.ABORTED, "ignore-me"));
assertEquals(BallColor.BLUE, subject.getIconColor());

subject.add(makeProjectWithColor(BallColor.ABORTED));
assertEquals(BallColor.ABORTED, subject.getIconColor());

Expand Down Expand Up @@ -162,9 +165,13 @@ public AbstractBuild getFrom(AbstractProject project) {
}
});
}

private TopLevelItem makeProjectWithColor(BallColor color) {
FreeStyleProject freeStyleProject = makeMockProject();
return makeProjectWithColor(color, "");
}

private TopLevelItem makeProjectWithColor(BallColor color, String projName) {
FreeStyleProject freeStyleProject = makeMockProject(projName);
when(freeStyleProject.getIconColor()).thenReturn(color);
return freeStyleProject;
}
Expand All @@ -188,9 +195,13 @@ private TopLevelItem makeMockToGetBuild(DateTime parse, GetBuild getBuild) {
return freeStyleProject;
}

public FreeStyleProject makeMockProject() {
private FreeStyleProject makeMockProject() {
return makeMockProject("");
}

public FreeStyleProject makeMockProject(String projName) {
FreeStyleProject freeStyleProject = mock(FreeStyleProject.class);
when(freeStyleProject.getName()).thenReturn("");
when(freeStyleProject.getName()).thenReturn(projName);
return freeStyleProject;
}

Expand Down

0 comments on commit 21b982a

Please sign in to comment.