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

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


The following commit(s) were added to refs/heads/master by this push:
     new b714e5c79d ISIS-3112: switch on syntax highlighting when demanded by 
value semantics
b714e5c79d is described below

commit b714e5c79d28d9b7810a6f378ebf13201032274d
Author: Andi Huber <[email protected]>
AuthorDate: Fri Aug 5 11:24:42 2022 +0200

    ISIS-3112: switch on syntax highlighting when demanded by value
    semantics
---
 .../isis/applib/value/semantics/Renderer.java      | 10 +++
 .../semantics/AsciiDocValueSemantics.java          |  5 ++
 .../ChangesDtoValueSemanticsPrettyRender.java      |  8 ++
 .../CommandDtoValueSemanticsPrettyRender.java      |  8 ++
 .../InteractionDtoValueSemanticsPrettyRender.java  |  8 ++
 .../ui/wkt/components/AsciiDocComponentWkt.java    |  3 +-
 .../ConverterBasedOnValueSemantics.java            | 58 ++-----------
 .../model/value/OptionsBasedOnValueSemantics.java} | 54 ++++++------
 .../ValueSemanticsModelAbstract.java}              | 98 +++-------------------
 .../components/scalars/ScalarPanelAbstract2.java   | 23 ++++-
 .../ScalarPanelTextFieldWithValueSemantics.java    |  2 +-
 .../datepicker/TextFieldWithDateTimePicker.java    |  2 +-
 .../components/scalars/markup/MarkupComponent.java | 36 ++++++--
 .../ui/components/scalars/ConverterTester.java     |  2 +-
 .../scalars/jdkmath/BigDecimalConverterTest.java   |  2 +-
 15 files changed, 143 insertions(+), 176 deletions(-)

diff --git 
a/api/applib/src/main/java/org/apache/isis/applib/value/semantics/Renderer.java 
b/api/applib/src/main/java/org/apache/isis/applib/value/semantics/Renderer.java
index 37096b94fb..f147fd2a96 100644
--- 
a/api/applib/src/main/java/org/apache/isis/applib/value/semantics/Renderer.java
+++ 
b/api/applib/src/main/java/org/apache/isis/applib/value/semantics/Renderer.java
@@ -35,4 +35,14 @@ public interface Renderer<T> {
         return titlePresentation(context, value);
     }
 
+    public static enum SyntaxHighlighter {
+        NONE,
+        /** <i>Prism<> with 'coy' theme */
+        PRISM_COY;
+    }
+
+    default SyntaxHighlighter syntaxHighlighter() {
+        return SyntaxHighlighter.NONE;
+    }
+
 }
diff --git 
a/valuetypes/asciidoc/metamodel/src/main/java/org/apache/isis/valuetypes/asciidoc/metamodel/semantics/AsciiDocValueSemantics.java
 
b/valuetypes/asciidoc/metamodel/src/main/java/org/apache/isis/valuetypes/asciidoc/metamodel/semantics/AsciiDocValueSemantics.java
index caaecf229e..08a93274ae 100644
--- 
a/valuetypes/asciidoc/metamodel/src/main/java/org/apache/isis/valuetypes/asciidoc/metamodel/semantics/AsciiDocValueSemantics.java
+++ 
b/valuetypes/asciidoc/metamodel/src/main/java/org/apache/isis/valuetypes/asciidoc/metamodel/semantics/AsciiDocValueSemantics.java
@@ -74,6 +74,11 @@ implements
         return renderHtml(adoc, AsciiDoc::asHtml);
     }
 
+    @Override
+    public SyntaxHighlighter syntaxHighlighter() {
+        return SyntaxHighlighter.PRISM_COY;
+    }
+
     // -- PARSER
 
     @Override
diff --git 
a/valuetypes/asciidoc/metamodel/src/main/java/org/apache/isis/valuetypes/asciidoc/metamodel/semantics/ChangesDtoValueSemanticsPrettyRender.java
 
b/valuetypes/asciidoc/metamodel/src/main/java/org/apache/isis/valuetypes/asciidoc/metamodel/semantics/ChangesDtoValueSemanticsPrettyRender.java
index a2a2c87d46..67414e5a5c 100644
--- 
a/valuetypes/asciidoc/metamodel/src/main/java/org/apache/isis/valuetypes/asciidoc/metamodel/semantics/ChangesDtoValueSemanticsPrettyRender.java
+++ 
b/valuetypes/asciidoc/metamodel/src/main/java/org/apache/isis/valuetypes/asciidoc/metamodel/semantics/ChangesDtoValueSemanticsPrettyRender.java
@@ -43,4 +43,12 @@ extends ChangesDtoValueSemantics {
         return _XmlToHtml.toHtml(xml);
     }
 
+    // -- RENDERER
+
+    @Override
+    public SyntaxHighlighter syntaxHighlighter() {
+        return SyntaxHighlighter.PRISM_COY;
+    }
+
+
 }
diff --git 
a/valuetypes/asciidoc/metamodel/src/main/java/org/apache/isis/valuetypes/asciidoc/metamodel/semantics/CommandDtoValueSemanticsPrettyRender.java
 
b/valuetypes/asciidoc/metamodel/src/main/java/org/apache/isis/valuetypes/asciidoc/metamodel/semantics/CommandDtoValueSemanticsPrettyRender.java
index 362584c2ac..675cf4986d 100644
--- 
a/valuetypes/asciidoc/metamodel/src/main/java/org/apache/isis/valuetypes/asciidoc/metamodel/semantics/CommandDtoValueSemanticsPrettyRender.java
+++ 
b/valuetypes/asciidoc/metamodel/src/main/java/org/apache/isis/valuetypes/asciidoc/metamodel/semantics/CommandDtoValueSemanticsPrettyRender.java
@@ -42,4 +42,12 @@ extends CommandDtoValueSemantics {
         return _XmlToHtml.toHtml(xml);
     }
 
+    // -- RENDERER
+
+    @Override
+    public SyntaxHighlighter syntaxHighlighter() {
+        return SyntaxHighlighter.PRISM_COY;
+    }
+
+
 }
diff --git 
a/valuetypes/asciidoc/metamodel/src/main/java/org/apache/isis/valuetypes/asciidoc/metamodel/semantics/InteractionDtoValueSemanticsPrettyRender.java
 
b/valuetypes/asciidoc/metamodel/src/main/java/org/apache/isis/valuetypes/asciidoc/metamodel/semantics/InteractionDtoValueSemanticsPrettyRender.java
index a96734a34a..84fb76c954 100644
--- 
a/valuetypes/asciidoc/metamodel/src/main/java/org/apache/isis/valuetypes/asciidoc/metamodel/semantics/InteractionDtoValueSemanticsPrettyRender.java
+++ 
b/valuetypes/asciidoc/metamodel/src/main/java/org/apache/isis/valuetypes/asciidoc/metamodel/semantics/InteractionDtoValueSemanticsPrettyRender.java
@@ -42,4 +42,12 @@ extends InteractionDtoValueSemantics {
         return _XmlToHtml.toHtml(xml);
     }
 
+    // -- RENDERER
+
+    @Override
+    public SyntaxHighlighter syntaxHighlighter() {
+        return SyntaxHighlighter.PRISM_COY;
+    }
+
+
 }
diff --git 
a/valuetypes/asciidoc/ui/wicket/src/main/java/org/apache/isis/valuetypes/asciidoc/ui/wkt/components/AsciiDocComponentWkt.java
 
b/valuetypes/asciidoc/ui/wicket/src/main/java/org/apache/isis/valuetypes/asciidoc/ui/wkt/components/AsciiDocComponentWkt.java
index 508a5b88df..3ba9555daf 100644
--- 
a/valuetypes/asciidoc/ui/wicket/src/main/java/org/apache/isis/valuetypes/asciidoc/ui/wkt/components/AsciiDocComponentWkt.java
+++ 
b/valuetypes/asciidoc/ui/wicket/src/main/java/org/apache/isis/valuetypes/asciidoc/ui/wkt/components/AsciiDocComponentWkt.java
@@ -20,6 +20,7 @@ package org.apache.isis.valuetypes.asciidoc.ui.wkt.components;
 
 import org.apache.wicket.model.IModel;
 
+import org.apache.isis.applib.value.semantics.Renderer.SyntaxHighlighter;
 import 
org.apache.isis.viewer.wicket.ui.components.scalars.markup.MarkupComponent;
 
 public class AsciiDocComponentWkt extends MarkupComponent {
@@ -29,7 +30,7 @@ public class AsciiDocComponentWkt extends MarkupComponent {
     public AsciiDocComponentWkt(final String id, final IModel<?> model){
         super(id, model,
                 Options.builder()
-                .syntaxHighLighter(SyntaxHighLighter.PRISM)
+                .syntaxHighlighter(SyntaxHighlighter.PRISM_COY)
                 .build());
     }
 
diff --git 
a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/converter/ConverterBasedOnValueSemantics.java
 
b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/value/ConverterBasedOnValueSemantics.java
similarity index 63%
copy from 
viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/converter/ConverterBasedOnValueSemantics.java
copy to 
viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/value/ConverterBasedOnValueSemantics.java
index f838623fe9..d49c4f5199 100644
--- 
a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/converter/ConverterBasedOnValueSemantics.java
+++ 
b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/value/ConverterBasedOnValueSemantics.java
@@ -16,49 +16,32 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.isis.viewer.wicket.model.converter;
+package org.apache.isis.viewer.wicket.model.value;
 
 import java.util.Locale;
 
 import org.apache.wicket.util.convert.ConversionException;
 import org.apache.wicket.util.convert.IConverter;
 
-import org.apache.isis.applib.Identifier;
-import org.apache.isis.commons.functional.Either;
+import org.apache.isis.commons.internal.base._Casts;
 import org.apache.isis.commons.internal.exceptions._Exceptions;
 import org.apache.isis.core.metamodel.commons.ScalarRepresentation;
 import org.apache.isis.core.metamodel.facets.object.value.ValueFacet;
-import org.apache.isis.core.metamodel.spec.feature.ObjectActionParameter;
 import org.apache.isis.core.metamodel.spec.feature.ObjectFeature;
-import org.apache.isis.core.metamodel.spec.feature.OneToOneAssociation;
-import org.apache.isis.core.runtime.context.IsisAppCommonContext;
-import 
org.apache.isis.core.runtime.context.IsisAppCommonContext.HasCommonContext;
-import org.apache.isis.viewer.wicket.model.util.WktContext;
 
 import lombok.NonNull;
-import lombok.Synchronized;
 import lombok.val;
 
 public class ConverterBasedOnValueSemantics<T>
-implements
-    IConverter<T>,
-    HasCommonContext {
+extends ValueSemanticsModelAbstract
+implements IConverter<T> {
 
     private static final long serialVersionUID = 1L;
 
-    private final Identifier featureIdentifier;
-    private final ScalarRepresentation scalarRepresentation;
-    private transient Either<OneToOneAssociation, ObjectActionParameter> 
propOrParam;
-    private transient IsisAppCommonContext commonContext;
-
     public ConverterBasedOnValueSemantics(
             final @NonNull ObjectFeature propOrParam,
             final @NonNull ScalarRepresentation scalarRepresentation) {
-        this.scalarRepresentation = scalarRepresentation;
-        this.propOrParam = propOrParam instanceof OneToOneAssociation // 
memoize
-                ? Either.left((OneToOneAssociation)propOrParam)
-                : Either.right((ObjectActionParameter)propOrParam);
-        this.featureIdentifier = propOrParam.getFeatureIdentifier();
+        super(propOrParam, scalarRepresentation);
     }
 
     /**
@@ -133,36 +116,9 @@ implements
 
     // -- HELPER
 
-    @Synchronized
-    private ObjectFeature feature() {
-        if(propOrParam==null) {
-            val feature = 
getSpecificationLoader().loadFeature(featureIdentifier).orElse(null);
-            this.propOrParam = (feature instanceof OneToOneAssociation)
-                    ? Either.left((OneToOneAssociation)feature)
-                    : Either.right(((ObjectActionParameter)feature));
-        }
-        return propOrParam.fold(
-                ObjectFeature.class::cast,
-                ObjectFeature.class::cast);
-    }
-
-    @SuppressWarnings("unchecked")
-    private ValueFacet<T> valueFacet() {
-        val feature = feature();
-        val valueFacet = feature.getElementType()
-                .valueFacet()
-                .orElseThrow(()->_Exceptions.noSuchElement(
-                        "Value type Property or Parameter %s is missing a 
ValueFacet",
-                        feature.getFeatureIdentifier()));
-
-        return (ValueFacet<T>) valueFacet;
-    }
-
-    // -- DEPENDENCIES
-
     @Override
-    public final IsisAppCommonContext getCommonContext() {
-        return commonContext = WktContext.computeIfAbsent(commonContext);
+    protected ValueFacet<T> valueFacet() {
+        return _Casts.uncheckedCast(super.valueFacet());
     }
 
 }
diff --git 
a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldWithValueSemantics.java
 
b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/value/OptionsBasedOnValueSemantics.java
similarity index 50%
copy from 
viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldWithValueSemantics.java
copy to 
viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/value/OptionsBasedOnValueSemantics.java
index cbe4a68af8..69e58d18b3 100644
--- 
a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldWithValueSemantics.java
+++ 
b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/value/OptionsBasedOnValueSemantics.java
@@ -16,47 +16,47 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.isis.viewer.wicket.ui.components.scalars;
+package org.apache.isis.viewer.wicket.model.value;
 
-import java.util.EnumSet;
+import java.util.Optional;
 
-import org.apache.wicket.util.convert.IConverter;
-
-import org.apache.isis.applib.value.semantics.ValueSemanticsProvider;
+import org.apache.isis.applib.value.semantics.Renderer;
+import org.apache.isis.applib.value.semantics.Renderer.SyntaxHighlighter;
+import org.apache.isis.commons.internal.exceptions._Exceptions;
 import org.apache.isis.core.metamodel.commons.ScalarRepresentation;
 import org.apache.isis.core.metamodel.spec.feature.ObjectFeature;
-import 
org.apache.isis.viewer.wicket.model.converter.ConverterBasedOnValueSemantics;
-import org.apache.isis.viewer.wicket.model.models.ScalarModel;
 
 import lombok.NonNull;
+import lombok.val;
 
-/**
- * Specialization of {@link ScalarPanelTextFieldAbstract},
- * where the scalar (parameter or property) is a value-type,
- * using conversion that is backed by a {@link ValueSemanticsProvider}.
- */
-public class ScalarPanelTextFieldWithValueSemantics<T>
-extends ScalarPanelTextFieldAbstract<T> {
+public class OptionsBasedOnValueSemantics
+extends ValueSemanticsModelAbstract {
 
     private static final long serialVersionUID = 1L;
 
-    public ScalarPanelTextFieldWithValueSemantics(
-            final String id,
-            final ScalarModel scalarModel,
-            final Class<T> type) {
-        super(id, scalarModel, type);
-    }
-
-    @Override
-    protected final IConverter<T> getConverter(
+    public OptionsBasedOnValueSemantics(
             final @NonNull ObjectFeature propOrParam,
             final @NonNull ScalarRepresentation scalarRepresentation) {
-        return new ConverterBasedOnValueSemantics<>(propOrParam, 
scalarRepresentation);
+        super(propOrParam, scalarRepresentation);
+    }
+
+    public final Optional<Renderer<?>> lookupRenderer() {
+        val valueFacet = valueFacet();
+        switch(scalarRepresentation) {
+        case EDITING:
+            return Optional.empty();
+        case VIEWING:
+            return Optional.of(propOrParam.fold(
+                    
prop->valueFacet.selectRendererForPropertyElseFallback(prop),
+                    
param->valueFacet.selectRendererForParameterElseFallback(param)));
+        }
+        throw _Exceptions.unmatchedCase(scalarRepresentation);
     }
 
-    @Override
-    protected void setupFormatModifiers(final EnumSet<FormatModifier> 
modifiers) {
-        modifiers.add(FormatModifier.NO_OUTPUT_ESCAPE);
+    public final SyntaxHighlighter getSyntaxHighlighter() {
+        return lookupRenderer()
+        .map(Renderer::syntaxHighlighter)
+        .orElse(SyntaxHighlighter.NONE);
     }
 
 }
diff --git 
a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/converter/ConverterBasedOnValueSemantics.java
 
b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/value/ValueSemanticsModelAbstract.java
similarity index 50%
rename from 
viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/converter/ConverterBasedOnValueSemantics.java
rename to 
viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/value/ValueSemanticsModelAbstract.java
index f838623fe9..bafa98ffdb 100644
--- 
a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/converter/ConverterBasedOnValueSemantics.java
+++ 
b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/value/ValueSemanticsModelAbstract.java
@@ -16,12 +16,9 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.isis.viewer.wicket.model.converter;
+package org.apache.isis.viewer.wicket.model.value;
 
-import java.util.Locale;
-
-import org.apache.wicket.util.convert.ConversionException;
-import org.apache.wicket.util.convert.IConverter;
+import java.io.Serializable;
 
 import org.apache.isis.applib.Identifier;
 import org.apache.isis.commons.functional.Either;
@@ -39,19 +36,19 @@ import lombok.NonNull;
 import lombok.Synchronized;
 import lombok.val;
 
-public class ConverterBasedOnValueSemantics<T>
+abstract class ValueSemanticsModelAbstract
 implements
-    IConverter<T>,
-    HasCommonContext {
+    HasCommonContext,
+    Serializable {
 
     private static final long serialVersionUID = 1L;
 
-    private final Identifier featureIdentifier;
-    private final ScalarRepresentation scalarRepresentation;
-    private transient Either<OneToOneAssociation, ObjectActionParameter> 
propOrParam;
+    protected final Identifier featureIdentifier;
+    protected final ScalarRepresentation scalarRepresentation;
+    protected transient Either<OneToOneAssociation, ObjectActionParameter> 
propOrParam;
     private transient IsisAppCommonContext commonContext;
 
-    public ConverterBasedOnValueSemantics(
+    protected ValueSemanticsModelAbstract(
             final @NonNull ObjectFeature propOrParam,
             final @NonNull ScalarRepresentation scalarRepresentation) {
         this.scalarRepresentation = scalarRepresentation;
@@ -61,80 +58,10 @@ implements
         this.featureIdentifier = propOrParam.getFeatureIdentifier();
     }
 
-    /**
-     * Parameter {@code locale} is ignored!
-     * @see IConverter#convertToObject(String, Locale)
-     */
-    @Override
-    public final T convertToObject(final String text, final Locale locale) 
throws ConversionException {
-
-        // guard against framework bugs
-        if(scalarRepresentation.isViewing()) {
-            throw _Exceptions.illegalArgument("Internal Error: "
-                    + "cannot convert a rendering representation back to its 
value-type '%s' -> %s",
-                        text,
-                        featureIdentifier);
-        }
-
-        val feature = feature();
-        val valueFacet = valueFacet();
-
-        val context = valueFacet
-                .createValueSemanticsContext(feature);
-
-        try {
-            return valueFacet.selectParserForFeatureElseFallback(feature)
-                    .parseTextRepresentation(context, text);
-        } catch (Exception e) {
-            if(e instanceof ConversionException) {
-                throw e;
-            } else {
-                throw new ConversionException(e.getMessage(), e);
-            }
-        }
-    }
-
-    /**
-     * Parameter {@code locale} is ignored!
-     * @see IConverter#convertToString(Object, Locale)
-     */
-    @Override
-    public final String convertToString(final T value, final Locale locale) {
-
-        val feature = feature();
-        val valueFacet = valueFacet();
-
-        val context = valueFacet
-                .createValueSemanticsContext(feature);
-
-        switch(scalarRepresentation) {
-        case EDITING:
-            return valueFacet.selectParserForFeatureElseFallback(feature)
-                    .parseableTextRepresentation(context, value);
-        case VIEWING:
-            return propOrParam.fold(
-                    
prop->valueFacet.selectRendererForPropertyElseFallback(prop)
-                            .titlePresentation(context, value),
-                    
param->valueFacet.selectRendererForParameterElseFallback(param)
-                            .titlePresentation(context, value));
-        }
-
-        throw _Exceptions.unmatchedCase(scalarRepresentation);
-    }
-
-    public String getEditingPattern() {
-        val feature = feature();
-        val valueFacet = valueFacet();
-        val context = valueFacet
-                .createValueSemanticsContext(feature);
-        return valueFacet.selectParserForFeatureElseFallback(feature)
-                .getPattern(context);
-    }
-
     // -- HELPER
 
     @Synchronized
-    private ObjectFeature feature() {
+    protected ObjectFeature feature() {
         if(propOrParam==null) {
             val feature = 
getSpecificationLoader().loadFeature(featureIdentifier).orElse(null);
             this.propOrParam = (feature instanceof OneToOneAssociation)
@@ -146,8 +73,7 @@ implements
                 ObjectFeature.class::cast);
     }
 
-    @SuppressWarnings("unchecked")
-    private ValueFacet<T> valueFacet() {
+    protected ValueFacet<?> valueFacet() {
         val feature = feature();
         val valueFacet = feature.getElementType()
                 .valueFacet()
@@ -155,7 +81,7 @@ implements
                         "Value type Property or Parameter %s is missing a 
ValueFacet",
                         feature.getFeatureIdentifier()));
 
-        return (ValueFacet<T>) valueFacet;
+        return valueFacet;
     }
 
     // -- DEPENDENCIES
diff --git 
a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract2.java
 
b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract2.java
index 7bf3a135a6..320a41fdf7 100644
--- 
a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract2.java
+++ 
b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract2.java
@@ -26,16 +26,21 @@ import org.apache.wicket.markup.html.WebMarkupContainer;
 import org.apache.wicket.markup.html.basic.Label;
 import org.apache.wicket.markup.html.form.FormComponent;
 import org.apache.wicket.markup.repeater.RepeatingView;
+import org.apache.wicket.model.IModel;
 import org.springframework.lang.Nullable;
 
 import 
org.apache.isis.applib.value.semantics.ValueSemanticsAbstract.PlaceholderLiteral;
+import org.apache.isis.core.metamodel.commons.ScalarRepresentation;
 import org.apache.isis.viewer.commons.model.StringForRendering;
 import org.apache.isis.viewer.wicket.model.models.InlinePromptContext;
 import org.apache.isis.viewer.wicket.model.models.ScalarModel;
+import org.apache.isis.viewer.wicket.model.value.OptionsBasedOnValueSemantics;
 import 
org.apache.isis.viewer.wicket.ui.components.scalars.ScalarFragmentFactory.CompactFragment;
 import 
org.apache.isis.viewer.wicket.ui.components.scalars.ScalarFragmentFactory.FieldFragement;
 import 
org.apache.isis.viewer.wicket.ui.components.scalars.ScalarFragmentFactory.FieldFrame;
 import 
org.apache.isis.viewer.wicket.ui.components.scalars.ScalarFragmentFactory.PromptFragment;
+import 
org.apache.isis.viewer.wicket.ui.components.scalars.markup.MarkupComponent;
+import 
org.apache.isis.viewer.wicket.ui.components.scalars.markup.MarkupComponent.Options;
 import org.apache.isis.viewer.wicket.ui.panels.FormExecutorDefault;
 import org.apache.isis.viewer.wicket.ui.util.Wkt;
 import org.apache.isis.viewer.wicket.ui.util.WktTooltips;
@@ -137,10 +142,26 @@ extends ScalarPanelAbstract {
         return CompactFragment.LABEL
                     .createFragment(id, this, scalarValueId->
                         
getFormatModifiers().contains(FormatModifier.NO_OUTPUT_ESCAPE)
-                            ? Wkt.markup(scalarValueId, 
this::outputFormatAsString)
+                            ? markupComponent(scalarValueId, 
this::outputFormatAsString)
                             : Wkt.labelWithDynamicEscaping(scalarValueId, 
this::obtainOutputFormat));
     }
 
+
+    // -- SEMANTICS
+
+    private OptionsBasedOnValueSemantics getSemantics(final ScalarModel 
scalarModel) {
+        return new OptionsBasedOnValueSemantics(scalarModel.getMetaModel(), 
scalarModel.isEditMode()
+                ? ScalarRepresentation.EDITING
+                : ScalarRepresentation.VIEWING);
+    }
+
+    private MarkupComponent markupComponent(final String id, final 
IModel<String> model) {
+        return new MarkupComponent(id, model,
+                Options.builder()
+                
.syntaxHighlighter(getSemantics(scalarModel()).getSyntaxHighlighter())
+                .build());
+    }
+
     private boolean isUsingTextarea() {
         if(getRenderScenario().isCompact()
                 || getFormatModifiers().contains(FormatModifier.MARKUP)
diff --git 
a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldWithValueSemantics.java
 
b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldWithValueSemantics.java
index cbe4a68af8..dfcc425ebf 100644
--- 
a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldWithValueSemantics.java
+++ 
b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldWithValueSemantics.java
@@ -25,8 +25,8 @@ import org.apache.wicket.util.convert.IConverter;
 import org.apache.isis.applib.value.semantics.ValueSemanticsProvider;
 import org.apache.isis.core.metamodel.commons.ScalarRepresentation;
 import org.apache.isis.core.metamodel.spec.feature.ObjectFeature;
-import 
org.apache.isis.viewer.wicket.model.converter.ConverterBasedOnValueSemantics;
 import org.apache.isis.viewer.wicket.model.models.ScalarModel;
+import 
org.apache.isis.viewer.wicket.model.value.ConverterBasedOnValueSemantics;
 
 import lombok.NonNull;
 
diff --git 
a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/datepicker/TextFieldWithDateTimePicker.java
 
b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/datepicker/TextFieldWithDateTimePicker.java
index fe40ea4c78..0047695c49 100644
--- 
a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/datepicker/TextFieldWithDateTimePicker.java
+++ 
b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/datepicker/TextFieldWithDateTimePicker.java
@@ -31,8 +31,8 @@ import org.apache.wicket.util.convert.IConverter;
 
 import org.apache.isis.applib.locale.UserLocale;
 import org.apache.isis.core.runtime.context.IsisAppCommonContext;
-import 
org.apache.isis.viewer.wicket.model.converter.ConverterBasedOnValueSemantics;
 import org.apache.isis.viewer.wicket.model.models.ScalarModel;
+import 
org.apache.isis.viewer.wicket.model.value.ConverterBasedOnValueSemantics;
 
 import static de.agilecoders.wicket.jquery.JQuery.$;
 
diff --git 
a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/markup/MarkupComponent.java
 
b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/markup/MarkupComponent.java
index 3b9af3b8f7..11c8507152 100644
--- 
a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/markup/MarkupComponent.java
+++ 
b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/markup/MarkupComponent.java
@@ -31,7 +31,10 @@ import org.apache.wicket.markup.html.WebComponent;
 import org.apache.wicket.markup.parser.XmlTag.TagType;
 import org.apache.wicket.model.IModel;
 import org.apache.wicket.request.resource.ResourceReference;
+import org.springframework.lang.Nullable;
 
+import org.apache.isis.applib.value.semantics.Renderer.SyntaxHighlighter;
+import org.apache.isis.commons.internal.exceptions._Exceptions;
 import org.apache.isis.core.metamodel.spec.ManagedObject;
 import org.apache.isis.core.metamodel.spec.feature.ObjectFeature;
 import org.apache.isis.viewer.commons.model.feature.ParameterUiModel;
@@ -47,7 +50,10 @@ public class MarkupComponent extends WebComponent {
 
     private static final long serialVersionUID = 1L;
 
-    public static enum SyntaxHighLighter {
+    /**
+     * Maps {@link SyntaxHighlighter} to behavior.
+     */
+    private static enum HighlightBehavior {
         NONE {
             @Override
             void renderHead(final IHeaderResponse response) {
@@ -70,6 +76,20 @@ public class MarkupComponent extends WebComponent {
                 return MarkupComponent_reloadJs.decorate(htmlContent, 
prismJsRefs());
             }
         };
+
+        public static HighlightBehavior valueOf(final @Nullable 
SyntaxHighlighter syntaxHighlighter) {
+            if(syntaxHighlighter==null) {
+                return NONE;
+            }
+            switch(syntaxHighlighter) {
+            case PRISM_COY:
+                return HighlightBehavior.PRISM;
+            case NONE:
+                return HighlightBehavior.NONE;
+            default:
+                throw _Exceptions.unmatchedCase(syntaxHighlighter);
+            }
+        }
         abstract void renderHead(IHeaderResponse response);
         abstract CharSequence htmlContentPostProcess(CharSequence htmlContent);
         private static final List<ResourceReference> prismJsRefs() {
@@ -82,18 +102,23 @@ public class MarkupComponent extends WebComponent {
         private static final long serialVersionUID = 1L;
 
         @Builder.Default
-        private SyntaxHighLighter syntaxHighLighter = SyntaxHighLighter.NONE;
+        private SyntaxHighlighter syntaxHighlighter = SyntaxHighlighter.NONE;
 
         public static Options defaults() {
             return Options.builder().build();
         }
+
+        public HighlightBehavior highlightBehavior() {
+            return HighlightBehavior.valueOf(getSyntaxHighlighter());
+        }
+
     }
 
     // -- CONSTRUCTION
 
     private final Options options;
 
-    protected MarkupComponent(final String id, final IModel<?> model, final 
Options options) {
+    public MarkupComponent(final String id, final IModel<?> model, final 
Options options) {
         super(id, model);
         this.options = options;
     }
@@ -107,15 +132,14 @@ public class MarkupComponent extends WebComponent {
     @Override
     public final void renderHead(final IHeaderResponse response) {
         super.renderHead(response);
-        options.getSyntaxHighLighter().renderHead(response);
+        options.highlightBehavior().renderHead(response);
     }
 
-
     @Override
     public void onComponentTagBody(final MarkupStream markupStream, final 
ComponentTag openTag){
         val htmlContent = extractHtmlOrElse(getDefaultModelObject(), "" 
/*fallback*/);
         replaceComponentTagBody(markupStream, openTag,
-                
options.getSyntaxHighLighter().htmlContentPostProcess(htmlContent));
+                
options.highlightBehavior().htmlContentPostProcess(htmlContent));
     }
 
     @Override
diff --git 
a/viewers/wicket/ui/src/test/java/org/apache/isis/viewer/wicket/ui/components/scalars/ConverterTester.java
 
b/viewers/wicket/ui/src/test/java/org/apache/isis/viewer/wicket/ui/components/scalars/ConverterTester.java
index 111e402cbb..9ceffff47f 100644
--- 
a/viewers/wicket/ui/src/test/java/org/apache/isis/viewer/wicket/ui/components/scalars/ConverterTester.java
+++ 
b/viewers/wicket/ui/src/test/java/org/apache/isis/viewer/wicket/ui/components/scalars/ConverterTester.java
@@ -41,7 +41,7 @@ import 
org.apache.isis.core.metamodel._testing.MetaModelContext_forTesting;
 import org.apache.isis.core.metamodel.commons.ScalarRepresentation;
 import org.apache.isis.core.metamodel.context.MetaModelContext;
 import org.apache.isis.core.security._testing.InteractionService_forTesting;
-import 
org.apache.isis.viewer.wicket.model.converter.ConverterBasedOnValueSemantics;
+import 
org.apache.isis.viewer.wicket.model.value.ConverterBasedOnValueSemantics;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertNotNull;
diff --git 
a/viewers/wicket/ui/src/test/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkmath/BigDecimalConverterTest.java
 
b/viewers/wicket/ui/src/test/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkmath/BigDecimalConverterTest.java
index 9efc0461ea..595272c9d0 100644
--- 
a/viewers/wicket/ui/src/test/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkmath/BigDecimalConverterTest.java
+++ 
b/viewers/wicket/ui/src/test/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkmath/BigDecimalConverterTest.java
@@ -30,7 +30,7 @@ import org.apache.isis.applib.annotation.DomainObject;
 import org.apache.isis.applib.annotation.Property;
 import org.apache.isis.core.metamodel.commons.ScalarRepresentation;
 import org.apache.isis.core.metamodel.valuesemantics.BigDecimalValueSemantics;
-import 
org.apache.isis.viewer.wicket.model.converter.ConverterBasedOnValueSemantics;
+import 
org.apache.isis.viewer.wicket.model.value.ConverterBasedOnValueSemantics;
 import org.apache.isis.viewer.wicket.ui.components.scalars.ConverterTester;
 
 import lombok.Getter;

Reply via email to