Skip to content

Commit 14d9927

Browse files
committed
added switch to disallow nesting of same sections
1 parent f2b5906 commit 14d9927

File tree

5 files changed

+42
-18
lines changed

5 files changed

+42
-18
lines changed

src/main/java/org/jvnet/hudson/plugins/collapsingconsolesections/CollapsingSectionAnnotator.java

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -23,17 +23,19 @@
2323
*/
2424
package org.jvnet.hudson.plugins.collapsingconsolesections;
2525

26-
import hudson.MarkupText;
27-
import hudson.Util;
28-
import hudson.console.ConsoleAnnotator;
29-
import hudson.model.Run;
3026
import java.io.Serializable;
3127
import java.util.Arrays;
3228
import java.util.List;
3329
import java.util.Stack;
3430
import java.util.regex.Matcher;
31+
3532
import javax.annotation.Nonnull;
3633

34+
import hudson.MarkupText;
35+
import hudson.Util;
36+
import hudson.console.ConsoleAnnotator;
37+
import hudson.model.Run;
38+
3739
public class CollapsingSectionAnnotator extends ConsoleAnnotator<Object> {
3840

3941
@Nonnull
@@ -62,8 +64,8 @@ public ConsoleAnnotator annotate(Object context, MarkupText text) {
6264
return null;
6365
}
6466

67+
SectionDefinition currentSection = currentSections.peek();
6568
while (!currentSections.empty()) {
66-
SectionDefinition currentSection = currentSections.peek();
6769
if (currentSection.getSectionEndPattern().matcher(text.getText().trim()).matches()) {
6870
popSection(text);
6971
if (currentSection.isCollapseOnlyOneLevel()) {
@@ -72,9 +74,13 @@ public ConsoleAnnotator annotate(Object context, MarkupText text) {
7274
} else {
7375
break;
7476
}
77+
currentSection = currentSections.peek();
7578
}
7679

7780
for (SectionDefinition section : sections) {
81+
if(currentSection.getSectionDisplayName().equals(section.getSectionDisplayName()) && !section.isAllowNesting()) {
82+
continue;
83+
}
7884
Matcher m = section.getSectionStartPattern().matcher(text.getText().trim());
7985
if (m.matches()) {
8086
pushSection(text, m, section);

src/main/java/org/jvnet/hudson/plugins/collapsingconsolesections/CollapsingSectionNote.java

Lines changed: 16 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -23,25 +23,29 @@
2323
*/
2424
package org.jvnet.hudson.plugins.collapsingconsolesections;
2525

26-
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
27-
import hudson.Extension;
28-
import hudson.MarkupText;
29-
import hudson.console.ConsoleAnnotationDescriptor;
30-
import hudson.console.ConsoleAnnotator;
31-
import hudson.console.ConsoleNote;
32-
import hudson.util.FormValidation;
3326
import java.lang.reflect.Array;
3427
import java.util.regex.Pattern;
3528
import java.util.regex.PatternSyntaxException;
29+
3630
import javax.annotation.CheckForNull;
3731
import javax.annotation.Nonnull;
32+
3833
import net.sf.json.JSONObject;
34+
3935
import org.kohsuke.accmod.Restricted;
4036
import org.kohsuke.accmod.restrictions.NoExternalUse;
4137
import org.kohsuke.stapler.DataBoundConstructor;
4238
import org.kohsuke.stapler.QueryParameter;
4339
import org.kohsuke.stapler.StaplerRequest;
4440

41+
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
42+
import hudson.Extension;
43+
import hudson.MarkupText;
44+
import hudson.console.ConsoleAnnotationDescriptor;
45+
import hudson.console.ConsoleAnnotator;
46+
import hudson.console.ConsoleNote;
47+
import hudson.util.FormValidation;
48+
4549
/**
4650
*
4751
* @author dty
@@ -56,19 +60,21 @@ public class CollapsingSectionNote extends ConsoleNote {
5660
private String sectionEndPattern;
5761
private boolean collapseOnlyOneLevel;
5862
private boolean collapseSection;
63+
private boolean allowNesting;
5964

6065
@DataBoundConstructor
61-
public CollapsingSectionNote(@Nonnull String sectionDisplayName, @Nonnull String sectionStartPattern, @Nonnull String sectionEndPattern, boolean collapseOnlyOneLevel, boolean collapseSection) {
66+
public CollapsingSectionNote(@Nonnull String sectionDisplayName, @Nonnull String sectionStartPattern, @Nonnull String sectionEndPattern, boolean collapseOnlyOneLevel, boolean collapseSection, boolean allowNesting) {
6267
this.sectionDisplayName = sectionDisplayName;
6368
this.sectionStartPattern = sectionStartPattern;
6469
this.sectionEndPattern = sectionEndPattern;
6570
this.collapseOnlyOneLevel = collapseOnlyOneLevel;
6671
this.collapseSection = collapseSection;
72+
this.allowNesting = allowNesting;
6773
}
6874

6975
@Deprecated
7076
public CollapsingSectionNote(String sectionDisplayName, String sectionStartPattern, String sectionEndPattern, boolean collapseOnlyOneLevel) {
71-
this(sectionDisplayName, sectionStartPattern, sectionEndPattern, collapseOnlyOneLevel, false);
77+
this(sectionDisplayName, sectionStartPattern, sectionEndPattern, collapseOnlyOneLevel, false, false);
7278
}
7379

7480
@Nonnull
@@ -101,7 +107,7 @@ public boolean isCollapseOnlyOneLevel() {
101107

102108
@Nonnull
103109
public SectionDefinition getDefinition() {
104-
return new SectionDefinition(sectionDisplayName, sectionStartPattern, sectionEndPattern, collapseOnlyOneLevel, collapseSection);
110+
return new SectionDefinition(sectionDisplayName, sectionStartPattern, sectionEndPattern, collapseOnlyOneLevel, collapseSection, allowNesting);
105111
}
106112

107113
@Override

src/main/java/org/jvnet/hudson/plugins/collapsingconsolesections/SectionDefinition.java

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
import java.util.regex.Matcher;
2828
import java.util.regex.Pattern;
2929
import java.util.regex.PatternSyntaxException;
30+
3031
import javax.annotation.Nonnull;
3132

3233
/**
@@ -39,21 +40,22 @@ public class SectionDefinition implements Serializable {
3940
private Pattern end;
4041
private boolean collapseOnlyOneLevel;
4142
private boolean collapseSection;
43+
private boolean allowNesting;
4244

4345
/**
4446
* @deprecated Use {@link #SectionDefinition(java.lang.String, java.lang.String, java.lang.String, boolean, boolean)} instead.
4547
*/
4648
@Deprecated
4749
public SectionDefinition(String sectionName, String sectionStartPattern, String sectionEndPattern) {
48-
this(sectionName, sectionStartPattern, sectionEndPattern, false, false);
50+
this(sectionName, sectionStartPattern, sectionEndPattern, false, false, false);
4951
}
5052

5153
/**
5254
* @deprecated Use {@link #SectionDefinition(java.lang.String, java.lang.String, java.lang.String, boolean, boolean)} instead.
5355
*/
5456
@Deprecated
5557
public SectionDefinition(String sectionName, String sectionStartPattern, String sectionEndPattern, boolean collapseOnlyOneLevel) {
56-
this(sectionName, sectionStartPattern, sectionEndPattern, collapseOnlyOneLevel, false);
58+
this(sectionName, sectionStartPattern, sectionEndPattern, collapseOnlyOneLevel, false, false);
5759
}
5860

5961
/**
@@ -65,12 +67,13 @@ public SectionDefinition(String sectionName, String sectionStartPattern, String
6567
* @param collapseSection If {@code true}, the section should be collapsed by default
6668
* @throws PatternSyntaxException One of the patterns is invalid
6769
*/
68-
public SectionDefinition(@Nonnull String sectionName, @Nonnull String sectionStartPattern, @Nonnull String sectionEndPattern, boolean collapseOnlyOneLevel, boolean collapseSection) throws PatternSyntaxException {
70+
public SectionDefinition(@Nonnull String sectionName, @Nonnull String sectionStartPattern, @Nonnull String sectionEndPattern, boolean collapseOnlyOneLevel, boolean collapseSection, boolean allowNesting) throws PatternSyntaxException {
6971
name = sectionName;
7072
start = Pattern.compile(sectionStartPattern);
7173
end = Pattern.compile(sectionEndPattern);
7274
this.collapseOnlyOneLevel = collapseOnlyOneLevel;
7375
this.collapseSection = collapseSection;
76+
this.allowNesting = allowNesting;
7477
}
7578

7679
@Nonnull
@@ -111,4 +114,7 @@ public boolean isCollapseSection() {
111114
public boolean isCollapseOnlyOneLevel() {
112115
return collapseOnlyOneLevel;
113116
}
117+
public boolean isAllowNesting() {
118+
return allowNesting;
119+
}
114120
}

src/main/resources/org/jvnet/hudson/plugins/collapsingconsolesections/CollapsingSectionNote/global.jelly

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,9 @@ THE SOFTWARE.
4848
<f:entry title="${%Collapse Sections}" field="collapseSection">
4949
<f:checkbox title="${%Collapse Sections by default}" checked="${instance.collapseSection}"/>
5050
</f:entry>
51+
<f:entry title="${%Allow Nesting}" field="allowNesting">
52+
<f:checkbox title="${%Allow Nesting Sections}" checked="${instance.allowNesting}"/>
53+
</f:entry>
5154
<f:entry title="">
5255
<div align="right">
5356
<f:repeatableDeleteButton value="Delete ${descriptor.displayName}"/>
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
<div>
2+
Determines whether nesting of the same section should be allowed.
3+
</div>

0 commit comments

Comments
 (0)