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;