This is an automated email from the ASF dual-hosted git repository.

jamesbognar pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/juneau.git


The following commit(s) were added to refs/heads/master by this push:
     new 2b1641f3f JUNEAU-249 UI does not resolve variables anymore
2b1641f3f is described below

commit 2b1641f3f153725aca750ab59a60cf1d127240f7
Author: JamesBognar <[email protected]>
AuthorDate: Mon Aug 28 11:46:07 2023 -0400

    JUNEAU-249 UI does not resolve variables anymore
---
 .../apache/juneau/html/BasicHtmlDocTemplate.java   |  9 ++++++
 .../org/apache/juneau/html/HtmlDocSerializer.java  | 32 ++++++++++++++++++++--
 .../juneau/html/HtmlDocSerializerSession.java      | 11 ++++++++
 .../java/org/apache/juneau/html/HtmlWriter.java    |  8 ++++++
 .../juneau/html/annotation/HtmlDocConfig.java      | 21 ++++++++++++++
 .../html/annotation/HtmlDocConfigAnnotation.java   |  1 +
 .../apache/juneau/serializer/SerializerWriter.java | 14 ++++++++++
 .../main/java/org/apache/juneau/xml/XmlWriter.java | 11 ++++++++
 .../a/rttests/RoundTripAddClassAttrsTest.java      |  2 +-
 9 files changed, 106 insertions(+), 3 deletions(-)

diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/BasicHtmlDocTemplate.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/BasicHtmlDocTemplate.java
index 4261aab0a..4071405fd 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/BasicHtmlDocTemplate.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/BasicHtmlDocTemplate.java
@@ -13,6 +13,7 @@
 package org.apache.juneau.html;
 
 import static org.apache.juneau.html.AsideFloat.*;
+import static org.apache.juneau.common.internal.StringUtils.*;
 
 import org.apache.juneau.internal.*;
 
@@ -262,6 +263,14 @@ public class BasicHtmlDocTemplate implements 
HtmlDocTemplate {
                } else {
                        session.indent = 6;
                        w.flush();
+                       if (session.isResolveBodyVars()) {
+                               w = new HtmlWriter(w) {
+                                       @Override
+                                       public HtmlWriter text(Object value, 
boolean preserveWhitespace) {
+                                               return 
super.text(session.resolve(stringify(value)), preserveWhitespace);
+                                       }
+                               };
+                       }
                        session.parentSerialize(w, o);
                }
 
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlDocSerializer.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlDocSerializer.java
index 8415e217e..190d9832f 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlDocSerializer.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlDocSerializer.java
@@ -112,7 +112,7 @@ public class HtmlDocSerializer extends 
HtmlStrippedDocSerializer {
                List<String> aside, footer, head, header, nav, navlinks, 
script, style, stylesheet;
                AsideFloat asideFloat;
                String noResultsMessage;
-               boolean nowrap;
+               boolean nowrap, resolveBodyVars;
                Class<? extends HtmlDocTemplate> template;
                List<Class<? extends HtmlWidget>> widgets;
 
@@ -146,6 +146,7 @@ public class HtmlDocSerializer extends 
HtmlStrippedDocSerializer {
                        asideFloat = copyFrom.asideFloat;
                        noResultsMessage = copyFrom.noResultsMessage;
                        nowrap = copyFrom.nowrap;
+                       resolveBodyVars = copyFrom.resolveBodyVars;
                        template = copyFrom.template;
                        widgets = copy(copyFrom.widgets);
                }
@@ -169,6 +170,7 @@ public class HtmlDocSerializer extends 
HtmlStrippedDocSerializer {
                        asideFloat = copyFrom.asideFloat;
                        noResultsMessage = copyFrom.noResultsMessage;
                        nowrap = copyFrom.nowrap;
+                       resolveBodyVars = copyFrom.resolveBodyVars;
                        template = copyFrom.template;
                        widgets = copy(copyFrom.widgets);
                }
@@ -199,6 +201,7 @@ public class HtmlDocSerializer extends 
HtmlStrippedDocSerializer {
                                asideFloat,
                                noResultsMessage,
                                nowrap,
+                               resolveBodyVars,
                                template,
                                widgets
                        );
@@ -599,6 +602,30 @@ public class HtmlDocSerializer extends 
HtmlStrippedDocSerializer {
                        return this;
                }
 
+               /**
+                * Resolve $ variables in serialized POJO.
+                *
+                * @return This object.
+                */
+               @FluentSetter
+               public Builder resolveBodyVars() {
+                       return resolveBodyVars(true);
+               }
+
+               /**
+                * Same as {@link #resolveBodyVars()} but allows you to 
explicitly specify the boolean value.
+                *
+                * @param value
+                *      The new value for this property.
+                * @return This object.
+                * @see #nowrap()
+                */
+               @FluentSetter
+               public Builder resolveBodyVars(boolean value) {
+                       resolveBodyVars = value;
+                       return this;
+               }
+
                /**
                 * Adds the specified Javascript code to the HTML page.
                 *
@@ -1631,7 +1658,7 @@ public class HtmlDocSerializer extends 
HtmlStrippedDocSerializer {
        final String[] style, stylesheet, script, navlinks, head, header, nav, 
aside, footer;
        final AsideFloat asideFloat;
        final String noResultsMessage;
-       final boolean nowrap;
+       final boolean nowrap, resolveBodyVars;
        final Class<? extends HtmlDocTemplate> template;
        final List<Class<? extends HtmlWidget>> widgets;
 
@@ -1660,6 +1687,7 @@ public class HtmlDocSerializer extends 
HtmlStrippedDocSerializer {
                asideFloat = builder.asideFloat;
                noResultsMessage = builder.noResultsMessage;
                nowrap = builder.nowrap;
+               resolveBodyVars = builder.resolveBodyVars;
                template = builder.template;
                widgets = builder.widgets == null ? emptyList() : 
copyOf(builder.widgets);
 
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlDocSerializerSession.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlDocSerializerSession.java
index 5aabd54b2..05a77260d 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlDocSerializerSession.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlDocSerializerSession.java
@@ -367,6 +367,17 @@ public class HtmlDocSerializerSession extends 
HtmlStrippedDocSerializerSession {
                return ctx.nowrap;
        }
 
+       /**
+        * Resolve $ variables in serialized POJO.
+        *
+        * @see HtmlDocSerializer.Builder#resolveBodyVars()
+        * @return
+        *      <jk>true</jk> if $ variables in serialized POJO should be 
resolved.
+        */
+       protected final boolean isResolveBodyVars() {
+               return ctx.resolveBodyVars;
+       }
+
        /**
         * Javascript code.
         *
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlWriter.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlWriter.java
index bc24cc709..89ded89e5 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlWriter.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlWriter.java
@@ -43,6 +43,14 @@ public class HtmlWriter extends XmlWriter {
                super(out, useWhitespace, maxIndent, trimStrings, quoteChar, 
uriResolver, false, null);
        }
 
+       /**
+        * Copy constructor.
+        *
+        * @param w Writer being copied.
+        */
+       public HtmlWriter(HtmlWriter w) {
+               super(w);
+       }
 
        
//-----------------------------------------------------------------------------------------------------------------
        // Overridden methods
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/annotation/HtmlDocConfig.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/annotation/HtmlDocConfig.java
index 2e8894818..9c87a0791 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/annotation/HtmlDocConfig.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/annotation/HtmlDocConfig.java
@@ -430,6 +430,27 @@ public @interface HtmlDocConfig {
         */
        String nowrap() default "";
 
+       /**
+        * Resolve $ variables in serialized pojo.
+        *
+        * <ul class='values'>
+        *      <li><js>"true"</js>
+        *      <li><js>"false"</js> (default)
+        * </ul>
+        *
+        * <h5 class='section'>Notes:</h5><ul>
+        *      <li class='note'>
+        *              Supports <a class="doclink" 
href="../../../../../index.html#jrs.SvlVariables">SVL Variables</a> (e.g. 
<js>"$L{my.localized.variable}"</js>).
+        * </ul>
+        *
+        * <h5 class='section'>See Also:</h5><ul>
+        *      <li class='jm'>{@link 
org.apache.juneau.html.HtmlDocSerializer.Builder#resolveBodyVars()}
+        * </ul>
+        *
+        * @return The annotation value.
+        */
+       String resolveBodyVars() default "";
+
        /**
         * Javascript code.
         *
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/annotation/HtmlDocConfigAnnotation.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/annotation/HtmlDocConfigAnnotation.java
index 79474ce75..e532d4b10 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/annotation/HtmlDocConfigAnnotation.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/annotation/HtmlDocConfigAnnotation.java
@@ -57,6 +57,7 @@ public class HtmlDocConfigAnnotation {
                        string(a.asideFloat()).filter(x -> ! 
"DEFAULT".equalsIgnoreCase(x)).map(AsideFloat::valueOf).ifPresent(x -> 
b.asideFloat(x));
                        string(a.noResultsMessage()).ifPresent(x -> 
b.noResultsMessage(x));
                        bool(a.nowrap()).ifPresent(x -> b.nowrap(x));
+                       bool(a.resolveBodyVars()).ifPresent(x -> 
b.resolveBodyVars(x));
                        type(a.template()).ifPresent(x -> b.template(x));
                        classes(a.widgets()).ifPresent(x -> b.widgets((Class<? 
extends HtmlWidget>[]) x));
                }
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/SerializerWriter.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/SerializerWriter.java
index 5da7c415c..3844def06 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/SerializerWriter.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/SerializerWriter.java
@@ -74,6 +74,20 @@ public class SerializerWriter extends Writer {
                this.uriResolver = uriResolver;
        }
 
+       /**
+        * Copy Constructor
+        *
+        * @param w Writer being copied.
+        */
+       public SerializerWriter(SerializerWriter w) {
+               this.out = w.out;
+               this.useWhitespace = w.useWhitespace;
+               this.maxIndent = w.maxIndent;
+               this.trimStrings = w.trimStrings;
+               this.quoteChar = w.quoteChar;
+               this.uriResolver = w.uriResolver;
+       }
+
        /**
         * Performs a carriage return.
         *
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlWriter.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlWriter.java
index 6766f24a3..cf3daf450 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlWriter.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlWriter.java
@@ -55,6 +55,17 @@ public class XmlWriter extends SerializerWriter {
                this.defaultNsPrefix = defaultNamespace == null ? null : 
defaultNamespace.name;
        }
 
+       /**
+        * Copy constructor.
+        *
+        * @param w Writer being copied.
+        */
+       public XmlWriter(XmlWriter w) {
+               super(w);
+               this.enableNs = w.enableNs;
+               this.defaultNsPrefix = w.defaultNsPrefix;
+       }
+
        /**
         * Writes an opening tag to the output:  
<code><xt>&lt;ns:name</xt></code>
         *
diff --git 
a/juneau-utest/src/test/java/org/apache/juneau/a/rttests/RoundTripAddClassAttrsTest.java
 
b/juneau-utest/src/test/java/org/apache/juneau/a/rttests/RoundTripAddClassAttrsTest.java
index 1aa1b87f7..9a7499c8c 100755
--- 
a/juneau-utest/src/test/java/org/apache/juneau/a/rttests/RoundTripAddClassAttrsTest.java
+++ 
b/juneau-utest/src/test/java/org/apache/juneau/a/rttests/RoundTripAddClassAttrsTest.java
@@ -37,7 +37,7 @@ import org.junit.runners.*;
 @FixMethodOrder(NAME_ASCENDING)
 public class RoundTripAddClassAttrsTest extends RoundTripTest {
 
-       @Parameterized.Parameters
+       @Parameterized.Parameters(name="{0}")
        public static Collection<Object[]> getPairs() {
                return Arrays.asList(new Object[][] {
                        { /* 0 */

Reply via email to