You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by th...@apache.org on 2024/03/04 19:04:09 UTC
(wicket) branch master updated: WICKET-6890 Introduce strategy for class name debug output (#781)
This is an automated email from the ASF dual-hosted git repository.
theigl pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/wicket.git
The following commit(s) were added to refs/heads/master by this push:
new c42afcd1de WICKET-6890 Introduce strategy for class name debug output (#781)
c42afcd1de is described below
commit c42afcd1dedf9ffb99f3aa7628768b5c79743a23
Author: Thomas Heigl <th...@gmail.com>
AuthorDate: Mon Mar 4 20:04:03 2024 +0100
WICKET-6890 Introduce strategy for class name debug output (#781)
* WICKET-6890 Introduce strategy for class name debug output
* WICKET-6890 Support setting class output strategy via JMX
* WICKET-6890 JavaDoc
---------
Co-authored-by: Martin Grigorov <ma...@users.noreply.github.com>
---
...OutputMarkupContainerClassNameBehaviorTest.java | 26 ++++++--
.../java/org/apache/wicket/MarkupContainer.java | 23 ++++++-
.../src/main/java/org/apache/wicket/Page.java | 2 +-
.../OutputMarkupContainerClassNameBehavior.java | 4 +-
.../org/apache/wicket/settings/DebugSettings.java | 71 ++++++++++++++++++++--
.../org/apache/wicket/jmx/DebugSettingsMBean.java | 14 ++++-
.../apache/wicket/jmx/wrapper/DebugSettings.java | 6 ++
7 files changed, 127 insertions(+), 19 deletions(-)
diff --git a/wicket-core-tests/src/test/java/org/apache/wicket/behavior/OutputMarkupContainerClassNameBehaviorTest.java b/wicket-core-tests/src/test/java/org/apache/wicket/behavior/OutputMarkupContainerClassNameBehaviorTest.java
index 77de9af69c..782ff1186d 100644
--- a/wicket-core-tests/src/test/java/org/apache/wicket/behavior/OutputMarkupContainerClassNameBehaviorTest.java
+++ b/wicket-core-tests/src/test/java/org/apache/wicket/behavior/OutputMarkupContainerClassNameBehaviorTest.java
@@ -21,15 +21,16 @@ import static org.junit.jupiter.api.Assertions.assertTrue;
import org.apache.wicket.MockPanelWithLink;
import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.settings.DebugSettings;
import org.apache.wicket.util.tester.WicketTestCase;
import org.junit.jupiter.api.Test;
class OutputMarkupContainerClassNameBehaviorTest extends WicketTestCase {
@Test
- void whenDebugIsEnabled_thenRenderAttribute()
+ void whenDebugIsEnabledWithAttribute_thenRenderAttribute()
{
- tester.getApplication().getDebugSettings().setOutputMarkupContainerClassName(true);
+ tester.getApplication().getDebugSettings().setOutputMarkupContainerClassNameStrategy(DebugSettings.ClassOutputStrategy.TAG_ATTRIBUTE);
MockPanelWithLink component = new MockPanelWithLink("test") {
@Override
@@ -43,9 +44,25 @@ class OutputMarkupContainerClassNameBehaviorTest extends WicketTestCase {
}
@Test
- void whenDebugIsDisabled_thenDontRenderAttribute()
+ void whenDebugIsEnabledWithComment_thenRenderComment()
{
- tester.getApplication().getDebugSettings().setOutputMarkupContainerClassName(false);
+ tester.getApplication().getDebugSettings().setOutputMarkupContainerClassNameStrategy(DebugSettings.ClassOutputStrategy.HTML_COMMENT);
+
+ MockPanelWithLink component = new MockPanelWithLink("test") {
+ @Override
+ protected void onLinkClick(AjaxRequestTarget target) {
+
+ }
+ };
+ tester.startComponentInPage(component);
+
+ assertTrue(tester.getLastResponseAsString().contains("<!-- MARKUP FOR org.apache.wicket.MockPanelWithLink BEGIN -->"));
+ }
+
+ @Test
+ void whenDebugIsDisabled_thenDontRenderAttributeOrComment()
+ {
+ tester.getApplication().getDebugSettings().setOutputMarkupContainerClassNameStrategy(DebugSettings.ClassOutputStrategy.NONE);
MockPanelWithLink component = new MockPanelWithLink("test") {
@Override
@@ -56,5 +73,6 @@ class OutputMarkupContainerClassNameBehaviorTest extends WicketTestCase {
tester.startComponentInPage(component);
assertFalse(tester.getLastResponseAsString().contains("<wicket:panel wicket:className=\"org.apache.wicket.MockPanelWithLink\">"));
+ assertFalse(tester.getLastResponseAsString().contains("<!-- MARKUP FOR org.apache.wicket.MockPanelWithLink BEGIN -->"));
}
}
diff --git a/wicket-core/src/main/java/org/apache/wicket/MarkupContainer.java b/wicket-core/src/main/java/org/apache/wicket/MarkupContainer.java
index 8703c61635..fbd83ea012 100644
--- a/wicket-core/src/main/java/org/apache/wicket/MarkupContainer.java
+++ b/wicket-core/src/main/java/org/apache/wicket/MarkupContainer.java
@@ -787,9 +787,10 @@ public abstract class MarkupContainer extends Component implements Iterable<Comp
try
{
setIgnoreAttributeModifier(true);
- final boolean outputClassName = getApplication().getDebugSettings()
- .isOutputMarkupContainerClassName();
- if (outputClassName)
+
+ final DebugSettings.ClassOutputStrategy outputClassName = getApplication().getDebugSettings()
+ .getOutputMarkupContainerClassNameStrategy();
+ if (outputClassName == DebugSettings.ClassOutputStrategy.TAG_ATTRIBUTE)
{
associatedMarkupOpenTag.addBehavior(OutputMarkupContainerClassNameBehavior.INSTANCE);
}
@@ -797,8 +798,24 @@ public abstract class MarkupContainer extends Component implements Iterable<Comp
renderComponentTag(associatedMarkupOpenTag);
associatedMarkupStream.next();
+ String className = null;
+ if (outputClassName == DebugSettings.ClassOutputStrategy.HTML_COMMENT)
+ {
+ className = Classes.name(getClass());
+ getResponse().write("<!-- MARKUP FOR ");
+ getResponse().write(className);
+ getResponse().write(" BEGIN -->");
+ }
+
renderComponentTagBody(associatedMarkupStream, associatedMarkupOpenTag);
+ if (outputClassName == DebugSettings.ClassOutputStrategy.HTML_COMMENT)
+ {
+ getResponse().write("<!-- MARKUP FOR ");
+ getResponse().write(className);
+ getResponse().write(" END -->");
+ }
+
renderClosingComponentTag(associatedMarkupStream, associatedMarkupOpenTag, false);
}
finally
diff --git a/wicket-core/src/main/java/org/apache/wicket/Page.java b/wicket-core/src/main/java/org/apache/wicket/Page.java
index 956b9b59af..bf758ab815 100644
--- a/wicket-core/src/main/java/org/apache/wicket/Page.java
+++ b/wicket-core/src/main/java/org/apache/wicket/Page.java
@@ -829,7 +829,7 @@ public abstract class Page extends MarkupContainer
if (getApplication().getDebugSettings().isOutputMarkupContainerClassName())
{
- String className = Classes.name(getClass());
+ final String className = Classes.name(getClass());
getResponse().write("<!-- Page Class ");
getResponse().write(className);
getResponse().write(" END -->\n");
diff --git a/wicket-core/src/main/java/org/apache/wicket/behavior/OutputMarkupContainerClassNameBehavior.java b/wicket-core/src/main/java/org/apache/wicket/behavior/OutputMarkupContainerClassNameBehavior.java
index 8783d01533..3ffa2da88e 100644
--- a/wicket-core/src/main/java/org/apache/wicket/behavior/OutputMarkupContainerClassNameBehavior.java
+++ b/wicket-core/src/main/java/org/apache/wicket/behavior/OutputMarkupContainerClassNameBehavior.java
@@ -28,9 +28,9 @@ import org.apache.wicket.util.lang.Classes;
* the markup element of {@link ComponentTag} with value the fully
* qualified class name of the markup container.</p>
*
- * <p>It is used internally by Wicket when {@link DebugSettings#isOutputMarkupContainerClassName()} is active.</p>
+ * <p>It is used internally by Wicket when {@link org.apache.wicket.settings.DebugSettings.ClassOutputStrategy#TAG_ATTRIBUTE} is active.</p>
*
- * @see DebugSettings#setOutputMarkupContainerClassName(boolean)
+ * @see DebugSettings#setOutputMarkupContainerClassNameStrategy(DebugSettings.ClassOutputStrategy)
*/
public class OutputMarkupContainerClassNameBehavior extends Behavior {
diff --git a/wicket-core/src/main/java/org/apache/wicket/settings/DebugSettings.java b/wicket-core/src/main/java/org/apache/wicket/settings/DebugSettings.java
index 92d393ea3a..8d2883fca1 100644
--- a/wicket-core/src/main/java/org/apache/wicket/settings/DebugSettings.java
+++ b/wicket-core/src/main/java/org/apache/wicket/settings/DebugSettings.java
@@ -16,6 +16,8 @@
*/
package org.apache.wicket.settings;
+import org.apache.wicket.util.lang.Args;
+
/**
* Settings class for various debug settings
* <p>
@@ -54,7 +56,7 @@ public class DebugSettings
/**
* Whether the container's class name should be printed to response (in a html comment).
*/
- private boolean outputMarkupContainerClassName = false;
+ private ClassOutputStrategy outputMarkupContainerClassNameStrategy = ClassOutputStrategy.NONE;
private String componentPathAttributeName = null;
@@ -104,14 +106,26 @@ public class DebugSettings
}
/**
- * Returns whether the output of markup container's should be wrapped by comments containing the
- * container's class name.
+ * Returns whether the output of markup container's should contain the
+ * container's Java class name.
*
- * @return true if the markup container's class name should be written to response
+ * @return true if the markup container's Java class name should be written to response
+ * @deprecated use {@link #getOutputMarkupContainerClassNameStrategy()} instead
*/
+ @Deprecated(forRemoval = true)
public boolean isOutputMarkupContainerClassName()
{
- return outputMarkupContainerClassName;
+ return outputMarkupContainerClassNameStrategy != ClassOutputStrategy.NONE;
+ }
+
+ /**
+ * Returns the strategy for outputting the Java class name of a markup container
+ *
+ * @return the strategy for outputting the Java class name of a markup container
+ */
+ public ClassOutputStrategy getOutputMarkupContainerClassNameStrategy()
+ {
+ return outputMarkupContainerClassNameStrategy;
}
/**
@@ -173,13 +187,39 @@ public class DebugSettings
*
* @param enable
* @return {@code this} object for chaining
+ * @deprecated use {@link #setOutputMarkupContainerClassNameStrategy(ClassOutputStrategy)} instead
*/
+ @Deprecated(forRemoval = true)
public DebugSettings setOutputMarkupContainerClassName(boolean enable)
{
- outputMarkupContainerClassName = enable;
+ outputMarkupContainerClassNameStrategy = enable ? ClassOutputStrategy.HTML_COMMENT : ClassOutputStrategy.NONE;
+ return this;
+ }
+
+ /**
+ * Sets the strategy for outputting the Java class name of a markup container in the HTML output.
+ *
+ * @param strategy
+ * @return {@code this} object for chaining
+ */
+ public DebugSettings setOutputMarkupContainerClassNameStrategy(ClassOutputStrategy strategy)
+ {
+ outputMarkupContainerClassNameStrategy = Args.notNull(strategy, "strategy");
return this;
}
+ /**
+ * Sets the strategy for outputting the Java class name of a markup container in the HTML output.
+ *
+ * @param strategyName the enum name of the {@link ClassOutputStrategy} to use
+ * @return {@code this} object for chaining
+ */
+ public DebugSettings setOutputMarkupContainerClassNameStrategy(String strategyName)
+ {
+ final ClassOutputStrategy strategy = Enum.valueOf(ClassOutputStrategy.class, strategyName);
+ return setOutputMarkupContainerClassNameStrategy(strategy);
+ }
+
/**
* If the parameter value is non-empty then Wicket will use it as the name of an attribute of the
* component tag to print the {@link org.apache.wicket.Component}'s path.
@@ -233,4 +273,23 @@ public class DebugSettings
{
return developmentUtilitiesEnabled;
}
+
+ /**
+ * Strategy for outputting the Java class name of a markup container
+ */
+ public enum ClassOutputStrategy
+ {
+ /**
+ * Output the container's class name in an HTML comment
+ */
+ HTML_COMMENT,
+ /**
+ * Output the container's class name in a tag attribute
+ */
+ TAG_ATTRIBUTE,
+ /**
+ * Do not output the container's class name
+ */
+ NONE
+ }
}
diff --git a/wicket-jmx/src/main/java/org/apache/wicket/jmx/DebugSettingsMBean.java b/wicket-jmx/src/main/java/org/apache/wicket/jmx/DebugSettingsMBean.java
index 283f5ed6e4..1374ea2185 100644
--- a/wicket-jmx/src/main/java/org/apache/wicket/jmx/DebugSettingsMBean.java
+++ b/wicket-jmx/src/main/java/org/apache/wicket/jmx/DebugSettingsMBean.java
@@ -72,14 +72,22 @@ public interface DebugSettingsMBean
* class name. (Useful for determining which part of page belongs to which markup file).
*
* @param enable
+ * @deprecated use {@link #setOutputMarkupContainerClassNameStrategy(String)} instead
*/
void setOutputMarkupContainerClassName(boolean enable);
/**
- * Returns whether the output of markup container's should be wrapped by comments containing the
- * container's class name.
+ * Sets the strategy for outputting the Java class name of a markup container in the HTML output.
+ * (Useful for determining which part of page belongs to which markup file).
+ *
+ * @param strategyName the enum name of the class output strategy to use
+ */
+ void setOutputMarkupContainerClassNameStrategy(String strategyName);
+
+ /**
+ * Returns whether the markup container's Java class name should be written to the response.
*
- * @return true if the markup container's class name should be written to response
+ * @return true if the markup container's Java class name should be written to response
*/
boolean isOutputMarkupContainerClassName();
diff --git a/wicket-jmx/src/main/java/org/apache/wicket/jmx/wrapper/DebugSettings.java b/wicket-jmx/src/main/java/org/apache/wicket/jmx/wrapper/DebugSettings.java
index f4cdea5139..e30c561126 100644
--- a/wicket-jmx/src/main/java/org/apache/wicket/jmx/wrapper/DebugSettings.java
+++ b/wicket-jmx/src/main/java/org/apache/wicket/jmx/wrapper/DebugSettings.java
@@ -86,6 +86,12 @@ public class DebugSettings implements DebugSettingsMBean
application.getDebugSettings().setOutputMarkupContainerClassName(enable);
}
+ @Override
+ public void setOutputMarkupContainerClassNameStrategy(final String strategyName) {
+ application.getDebugSettings().setOutputMarkupContainerClassNameStrategy(strategyName);
+
+ }
+
@Override
public boolean isOutputMarkupContainerClassName()
{