You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by ah...@apache.org on 2021/10/11 08:06:14 UTC

[isis] branch 2877-compound.value.types created (now e54c21f)

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

ahuber pushed a change to branch 2877-compound.value.types
in repository https://gitbox.apache.org/repos/asf/isis.git.


      at e54c21f  ISIS-2877: comments and renaming viewer classes

This branch includes the following new commits:

     new e54c21f  ISIS-2877: comments and renaming viewer classes

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


[isis] 01/01: ISIS-2877: comments and renaming viewer classes

Posted by ah...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

ahuber pushed a commit to branch 2877-compound.value.types
in repository https://gitbox.apache.org/repos/asf/isis.git

commit e54c21f7159c8356f0e6f4ce62bd572ba7d7c2c2
Author: Andi Huber <ah...@apache.org>
AuthorDate: Mon Oct 11 10:06:00 2021 +0200

    ISIS-2877: comments and renaming viewer classes
---
 .../webapp/wicket/jpa/DemoAppWicketJpa.java        |   3 +-
 .../value/CalendarEventSemanticsProvider.java      |  16 +++-
 .../viewer/wicket/model/models/ValueModel.java     |   5 +-
 .../actionresponse/ActionResultResponseType.java   |   3 +
 .../scalars/ComponentFactoryScalarAbstract.java    |   9 +-
 .../ui/components/scalars/ScalarPanelAbstract.java |   8 +-
 .../scalars/ScalarPanelTextFieldAbstract.java      |   2 +-
 .../ScalarPanelTextFieldParseableAbstract.java     |   3 +-
 .../scalars/value/compound/ValueCompoundPanel.java | 100 +++++++++++++++++++++
 .../ValueCompoundPanelFactory.java}                |  28 +++---
 .../scalars/value/compound/ValueCompoundPanex.html |  62 +++++++++++++
 .../ValueFallbackPanel.java}                       |   8 +-
 .../ValueFallbackPanelFactory.java}                |  15 ++--
 .../value/StandaloneValuePanelFactory.java         |   7 +-
 .../ComponentFactoryRegistrarDefault.java          |  36 +++++---
 15 files changed, 252 insertions(+), 53 deletions(-)

diff --git a/examples/demo/wicket/jpa/src/main/java/demoapp/webapp/wicket/jpa/DemoAppWicketJpa.java b/examples/demo/wicket/jpa/src/main/java/demoapp/webapp/wicket/jpa/DemoAppWicketJpa.java
index 8d11d3f..ed14087 100644
--- a/examples/demo/wicket/jpa/src/main/java/demoapp/webapp/wicket/jpa/DemoAppWicketJpa.java
+++ b/examples/demo/wicket/jpa/src/main/java/demoapp/webapp/wicket/jpa/DemoAppWicketJpa.java
@@ -33,6 +33,7 @@ import org.apache.isis.valuetypes.markdown.persistence.jpa.IsisModuleValMarkdown
 import org.apache.isis.valuetypes.markdown.ui.wkt.IsisModuleValMarkdownUiWkt;
 import org.apache.isis.valuetypes.sse.ui.wkt.IsisModuleValSseUiWkt;
 import org.apache.isis.viewer.wicket.viewer.IsisModuleViewerWicketViewer;
+import org.apache.isis.viewer.wicket.viewer.registries.components.ComponentFactoryRegistryDefault;
 
 import demoapp.web.DemoAppManifestJpa;
 import demoapp.webapp.wicket.common.ui.DemoAppWicketCommon;
@@ -77,7 +78,7 @@ public class DemoAppWicketJpa extends SpringBootServletInitializer {
     public static void main(final String[] args) {
     	IsisPresets.prototyping();
         //IsisPresets.logging(WebRequestCycleForIsis.class, "debug");
-        //IsisPresets.logging(ComponentFactoryRegistryDefault.class, "debug");
+        IsisPresets.logging(ComponentFactoryRegistryDefault.class, "debug");
         //IsisPresets.logging(EntityModel.class, "debug");
         //IsisPresets.logging(FormExecutorDefault.class, "debug");
 
diff --git a/extensions/vw/fullcalendar/applib/src/main/java/org/apache/isis/extensions/fullcalendar/applib/value/CalendarEventSemanticsProvider.java b/extensions/vw/fullcalendar/applib/src/main/java/org/apache/isis/extensions/fullcalendar/applib/value/CalendarEventSemanticsProvider.java
index 33105bd..78df77e 100644
--- a/extensions/vw/fullcalendar/applib/src/main/java/org/apache/isis/extensions/fullcalendar/applib/value/CalendarEventSemanticsProvider.java
+++ b/extensions/vw/fullcalendar/applib/src/main/java/org/apache/isis/extensions/fullcalendar/applib/value/CalendarEventSemanticsProvider.java
@@ -22,14 +22,17 @@ import java.time.Instant;
 
 import org.springframework.stereotype.Component;
 
-import org.apache.isis.applib.adapters.ValueSemanticsAbstract;
 import org.apache.isis.applib.adapters.DefaultsProvider;
+import org.apache.isis.applib.adapters.Renderer;
+import org.apache.isis.applib.adapters.ValueSemanticsAbstract;
 import org.apache.isis.schema.common.v2.ValueType;
 
 @Component
 public class CalendarEventSemanticsProvider
 extends ValueSemanticsAbstract<CalendarEvent>
-implements DefaultsProvider<CalendarEvent>{
+implements
+    DefaultsProvider<CalendarEvent>,
+    Renderer<CalendarEvent> {
 
     @Override
     public Class<CalendarEvent> getCorrespondingClass() {
@@ -41,10 +44,19 @@ implements DefaultsProvider<CalendarEvent>{
         return UNREPRESENTED;
     }
 
+    // -- DEFAULTS PROVIDER
+
     @Override
     public CalendarEvent getDefaultValue() {
         return new CalendarEvent(
                 Instant.now().toEpochMilli(), "Default Calendar", "New Event", "empty");
     }
 
+    // -- RENDERER
+
+    @Override
+    public String simpleTextRepresentation(final Context context, final CalendarEvent value) {
+        return render(value, v->v.toString());
+    }
+
 }
diff --git a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ValueModel.java b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ValueModel.java
index adb583f..12ca57a 100644
--- a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ValueModel.java
+++ b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ValueModel.java
@@ -28,7 +28,7 @@ import org.apache.isis.core.runtime.context.IsisAppCommonContext;
 import lombok.NonNull;
 
 /**
- * Represents a standalone value.
+ * Represents a standalone value (used for standalone value page).
  */
 public class ValueModel extends ModelAbstract<ManagedObject> {
 
@@ -79,7 +79,4 @@ public class ValueModel extends ModelAbstract<ManagedObject> {
         this.actionModelHint = actionModelHint;
     }
 
-
-
-
 }
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/actionresponse/ActionResultResponseType.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/actionresponse/ActionResultResponseType.java
index e2b450f..51ca86e 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/actionresponse/ActionResultResponseType.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/actionresponse/ActionResultResponseType.java
@@ -78,6 +78,9 @@ public enum ActionResultResponseType {
             return ActionResultResponse.toPage(new StandaloneCollectionPage(collectionModel));
         }
     },
+    /**
+     * Renders the value-type in its own <i>Standalone Value Page</i>.
+     */
     VALUE {
         @Override
         public ActionResultResponse interpretResult(
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ComponentFactoryScalarAbstract.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ComponentFactoryScalarAbstract.java
index ee4da87..bfb12ca 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ComponentFactoryScalarAbstract.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ComponentFactoryScalarAbstract.java
@@ -25,15 +25,16 @@ import org.apache.isis.viewer.common.model.components.ComponentType;
 import org.apache.isis.viewer.wicket.model.models.ScalarModel;
 import org.apache.isis.viewer.wicket.ui.ComponentFactoryAbstract;
 
-public abstract class ComponentFactoryScalarAbstract extends ComponentFactoryAbstract {
+public abstract class ComponentFactoryScalarAbstract
+extends ComponentFactoryAbstract {
 
     private static final long serialVersionUID = 1L;
 
     private final Class<?>[] scalarTypes;
 
-    public ComponentFactoryScalarAbstract(
-            Class<?> componentClass,
-            Class<?>... scalarTypes) {
+    protected ComponentFactoryScalarAbstract(
+            final Class<?> componentClass,
+            final Class<?>... scalarTypes) {
 
         super(ComponentType.SCALAR_NAME_AND_VALUE, componentClass);
         this.scalarTypes = scalarTypes;
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java
index 5a9d242..d90b3b3 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java
@@ -655,15 +655,15 @@ implements ScalarModelSubscriber {
             throw new IllegalStateException(this.getClass().getName() + ": obtainInlinePromptModel() returning null is not compatible with supportsInlinePrompt() returning true ");
         }
 
-        final WebMarkupContainer inlinePromptLink = new WebMarkupContainer(ID_SCALAR_VALUE_INLINE_PROMPT_LINK);
+        final WebMarkupContainer inlinePromptLink =
+                new WebMarkupContainer(ID_SCALAR_VALUE_INLINE_PROMPT_LINK);
         inlinePromptLink.setOutputMarkupId(true);
         inlinePromptLink.setOutputMarkupPlaceholderTag(true);
 
         configureInlinePromptLink(inlinePromptLink);
 
-        final Component editInlineLinkLabel = createInlinePromptComponent(ID_SCALAR_VALUE_INLINE_PROMPT_LABEL,
-                inlinePromptModel
-                );
+        final Component editInlineLinkLabel =
+                createInlinePromptComponent(ID_SCALAR_VALUE_INLINE_PROMPT_LABEL, inlinePromptModel);
         inlinePromptLink.add(editInlineLinkLabel);
 
         return inlinePromptLink;
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.java
index 6358d77..0395a18 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.java
@@ -272,7 +272,7 @@ implements TextFieldValueModel.ScalarModelProvider {
 
     /**
      * Mandatory hook method to build the component to render the model when in
-     * {@link org.apache.isis.viewer.wicket.ui.components.scalars.ScalarPanelAbstract.Rendering#COMPACT compact}
+     * {@link org.apache.isis.viewer.wicket.ui.components.scalars.ScalarPanelAbstract.Rendering#COMPACT}
      * format.
      * <p>
      * This default implementation uses a {@link Label}, however it may be overridden if required.
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldParseableAbstract.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldParseableAbstract.java
index 7ad32d7..1e019fc 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldParseableAbstract.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldParseableAbstract.java
@@ -31,7 +31,8 @@ import org.apache.isis.viewer.wicket.model.models.ScalarModel;
  * s where moreover the scalar parameter or property is a value type that is
  * parseable.
  */
-public abstract class ScalarPanelTextFieldParseableAbstract extends ScalarPanelTextFieldAbstract<String> {
+public abstract class ScalarPanelTextFieldParseableAbstract
+extends ScalarPanelTextFieldAbstract<String> {
 
     private static final long serialVersionUID = 1L;
 
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/value/compound/ValueCompoundPanel.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/value/compound/ValueCompoundPanel.java
new file mode 100644
index 0000000..f3eec78
--- /dev/null
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/value/compound/ValueCompoundPanel.java
@@ -0,0 +1,100 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+package org.apache.isis.viewer.wicket.ui.components.scalars.value.compound;
+
+import org.apache.wicket.markup.html.form.AbstractTextComponent;
+import org.apache.wicket.markup.html.form.TextField;
+import org.apache.wicket.model.LambdaModel;
+
+import org.apache.isis.applib.adapters.Parser;
+import org.apache.isis.applib.adapters.Renderer;
+import org.apache.isis.applib.annotation.Value;
+import org.apache.isis.core.metamodel.facets.object.value.ValueFacet;
+import org.apache.isis.viewer.wicket.model.models.ScalarModel;
+import org.apache.isis.viewer.wicket.ui.components.scalars.ScalarPanelAbstract;
+import org.apache.isis.viewer.wicket.ui.components.scalars.ScalarPanelTextFieldParseableAbstract;
+
+/**
+ * Panel for rendering any value types that do not have their own custom
+ * {@link ScalarPanelAbstract panel} to render them.
+ *
+ * <p>
+ * This is a fallback panel; values are expected to be {@link Parser parseable}
+ * (typically through the Isis' {@link Value} annotation.
+ */
+//FIXME[ISIS-2877] introduced for experiments, should be removed before merge into 'master'
+public class ValueCompoundPanel
+extends ScalarPanelTextFieldParseableAbstract {
+
+    private static final long serialVersionUID = 1L;
+
+    public ValueCompoundPanel(final String id, final ScalarModel scalarModel) {
+        super(id, scalarModel);
+    }
+
+    @Override
+    protected String getScalarPanelType() {
+        return "valuePanel";
+    }
+
+    @Override
+    protected void onInitialize() {
+        super.onInitialize();
+        onInitializeReadonly(null);
+    }
+
+//    @Override
+//    protected InlinePromptConfig getInlinePromptConfig() {
+//        return InlinePromptConfig.notSupported();
+//    }
+
+    @Override
+    protected AbstractTextComponent<String> createTextFieldForRegular(final String id) {
+        return new TextField<>(id, LambdaModel.of(()->
+            renderer().simpleTextRepresentation(null, scalarModel.getObject().getPojo())));
+    }
+
+
+//    @Override
+//    protected Component createComponentForCompact() {
+//        val objAdapter = getModel().getObject();
+//        return new Label(ID_SCALAR_IF_COMPACT, "compact");
+//                //renderer().simpleTextRepresentation(null, objAdapter.getPojo()));
+//    }
+//
+//    @Override
+//    protected MarkupContainer createComponentForRegular() {
+//        return new LabeledWebMarkupContainer(ID_SCALAR_IF_REGULAR, Model.of("regular")) {};
+//    }
+//
+//    @Override
+//    protected Component getScalarValueComponent() {
+//        return new Label(ID_SCALAR_VALUE, "regular");
+//
+////        val formGroup = new FormGroup(ID_SCALAR_IF_REGULAR, null);
+////        return formGroup;
+//    }
+
+    // -- HELPER
+
+    private Renderer renderer() {
+        final ValueFacet<?> valueFacet = scalarModel.getScalarTypeSpec().getFacet(ValueFacet.class);
+        return valueFacet.selectDefaultRenderer().get();
+    }
+}
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/value/ValuePanelFactory.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/value/compound/ValueCompoundPanelFactory.java
similarity index 69%
copy from viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/value/ValuePanelFactory.java
copy to viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/value/compound/ValueCompoundPanelFactory.java
index dc64544..3cab8b9 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/value/ValuePanelFactory.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/value/compound/ValueCompoundPanelFactory.java
@@ -16,7 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.isis.viewer.wicket.ui.components.scalars.value;
+package org.apache.isis.viewer.wicket.ui.components.scalars.value.compound;
 
 import org.apache.wicket.Component;
 import org.apache.wicket.model.IModel;
@@ -26,15 +26,19 @@ import org.apache.isis.viewer.wicket.model.models.ScalarModel;
 import org.apache.isis.viewer.wicket.ui.ComponentFactory;
 import org.apache.isis.viewer.wicket.ui.components.scalars.ComponentFactoryScalarAbstract;
 
+import lombok.val;
+
 /**
- * {@link ComponentFactory} for the {@link ValuePanel}.
+ * {@link ComponentFactory} for the {@link ValueCompoundPanel}.
  */
-public class ValuePanelFactory extends ComponentFactoryScalarAbstract {
+//FIXME[ISIS-2877] introduced for experiments, should be removed before merge into 'master'
+public class ValueCompoundPanelFactory
+extends ComponentFactoryScalarAbstract {
 
     private static final long serialVersionUID = 1L;
 
-    public ValuePanelFactory() {
-        super(ValuePanel.class); // not asking the supertype to validate types, so no value types need be provided.
+    public ValueCompoundPanelFactory() {
+        super(ValueCompoundPanel.class);
     }
 
     @Override
@@ -42,20 +46,20 @@ public class ValuePanelFactory extends ComponentFactoryScalarAbstract {
         if (!(model instanceof ScalarModel)) {
             return ApplicationAdvice.DOES_NOT_APPLY;
         }
-        final ScalarModel scalarModel = (ScalarModel) model;
-        final ValueFacet valueFacet = scalarModel.getScalarTypeSpec().getFacet(ValueFacet.class);
+        val scalarModel = (ScalarModel) model;
+        if(scalarModel.isCollection()) {
+            return ApplicationAdvice.DOES_NOT_APPLY;
+        }
+        final ValueFacet<?> valueFacet = scalarModel.getScalarTypeSpec().getFacet(ValueFacet.class);
         if(valueFacet == null) {
             return ApplicationAdvice.DOES_NOT_APPLY;
         }
-        final boolean hasChoices = scalarModel.hasChoices();
-        // autoComplete not supported on values, only references
-        // final boolean hasAutoComplete = scalarModel.hasAutoComplete();
-        return appliesIf( !(hasChoices /*|| hasAutoComplete*/) );
+        return appliesIf(valueFacet.selectDefaultRenderer().isPresent());
     }
 
     @Override
     public Component createComponent(final String id, final ScalarModel scalarModel) {
-        return new ValuePanel(id, scalarModel);
+        return new ValueCompoundPanel(id, scalarModel);
     }
 
 
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/value/compound/ValueCompoundPanex.html b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/value/compound/ValueCompoundPanex.html
new file mode 100644
index 0000000..ffb7411
--- /dev/null
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/value/compound/ValueCompoundPanex.html
@@ -0,0 +1,62 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+
+         http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+-->
+<!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml"
+      xmlns:wicket="http://wicket.apache.org"
+      xml:lang="en"
+      lang="en">
+<body>
+<wicket:panel>
+    <div class="scalarNameAndValueComponentType"
+         wicket:id="scalarTypeContainer">
+
+        <div class="form-group"
+             wicket:id="scalarIfRegular">
+
+            <label class="scalarName col-form-label"
+                   wicket:id="scalarName"
+            >[Label text]</label>
+
+            <span class="scalarValueWrapper">
+                <div class="scalarPlaceholder">
+                    <span class="scalarValueInput">
+                        <span class="editing">
+                            <span class="scalarValue text-right">
+                                <span name="scalarValue" wicket:id="scalarValue" />
+                            </span>
+                        </span>
+                    </span>
+                    <span class="associatedActionLinksRight"
+                          wicket:id="associatedActionLinksRight"
+                    >[drop down]</span>
+                </div>
+                <span wicket:id="feedback" class="form-text"></span>
+                <span wicket:id="associatedActionLinksBelow"></span>
+            </span>
+            <div class="clearfix"></div>
+        </div>
+
+        <wicket:container wicket:id="scalarIfCompact"></wicket:container>
+    </div>
+
+</wicket:panel>
+</body>
+</html>
+
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/value/ValuePanel.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/value/fallback/ValueFallbackPanel.java
similarity index 88%
rename from viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/value/ValuePanel.java
rename to viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/value/fallback/ValueFallbackPanel.java
index d875e3f..3736dce 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/value/ValuePanel.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/value/fallback/ValueFallbackPanel.java
@@ -16,8 +16,9 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.isis.viewer.wicket.ui.components.scalars.value;
+package org.apache.isis.viewer.wicket.ui.components.scalars.value.fallback;
 
+import org.apache.isis.applib.adapters.Parser;
 import org.apache.isis.applib.annotation.Value;
 import org.apache.isis.viewer.wicket.model.models.ScalarModel;
 import org.apache.isis.viewer.wicket.ui.components.scalars.ScalarPanelAbstract;
@@ -31,11 +32,12 @@ import org.apache.isis.viewer.wicket.ui.components.scalars.ScalarPanelTextFieldP
  * This is a fallback panel; values are expected to be {@link Parser parseable}
  * (typically through the Isis' {@link Value} annotation.
  */
-public class ValuePanel extends ScalarPanelTextFieldParseableAbstract {
+public class ValueFallbackPanel
+extends ScalarPanelTextFieldParseableAbstract {
 
     private static final long serialVersionUID = 1L;
 
-    public ValuePanel(final String id, final ScalarModel scalarModel) {
+    public ValueFallbackPanel(final String id, final ScalarModel scalarModel) {
         super(id, scalarModel);
     }
 
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/value/ValuePanelFactory.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/value/fallback/ValueFallbackPanelFactory.java
similarity index 81%
rename from viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/value/ValuePanelFactory.java
rename to viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/value/fallback/ValueFallbackPanelFactory.java
index dc64544..ae86a4f 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/value/ValuePanelFactory.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/value/fallback/ValueFallbackPanelFactory.java
@@ -16,7 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.isis.viewer.wicket.ui.components.scalars.value;
+package org.apache.isis.viewer.wicket.ui.components.scalars.value.fallback;
 
 import org.apache.wicket.Component;
 import org.apache.wicket.model.IModel;
@@ -27,14 +27,15 @@ import org.apache.isis.viewer.wicket.ui.ComponentFactory;
 import org.apache.isis.viewer.wicket.ui.components.scalars.ComponentFactoryScalarAbstract;
 
 /**
- * {@link ComponentFactory} for the {@link ValuePanel}.
+ * {@link ComponentFactory} for the {@link ValueFallbackPanel}.
  */
-public class ValuePanelFactory extends ComponentFactoryScalarAbstract {
+public class ValueFallbackPanelFactory
+extends ComponentFactoryScalarAbstract {
 
     private static final long serialVersionUID = 1L;
 
-    public ValuePanelFactory() {
-        super(ValuePanel.class); // not asking the supertype to validate types, so no value types need be provided.
+    public ValueFallbackPanelFactory() {
+        super(ValueFallbackPanel.class); // not asking the supertype to validate types, so no value types need be provided.
     }
 
     @Override
@@ -43,7 +44,7 @@ public class ValuePanelFactory extends ComponentFactoryScalarAbstract {
             return ApplicationAdvice.DOES_NOT_APPLY;
         }
         final ScalarModel scalarModel = (ScalarModel) model;
-        final ValueFacet valueFacet = scalarModel.getScalarTypeSpec().getFacet(ValueFacet.class);
+        final ValueFacet<?> valueFacet = scalarModel.getScalarTypeSpec().getFacet(ValueFacet.class);
         if(valueFacet == null) {
             return ApplicationAdvice.DOES_NOT_APPLY;
         }
@@ -55,7 +56,7 @@ public class ValuePanelFactory extends ComponentFactoryScalarAbstract {
 
     @Override
     public Component createComponent(final String id, final ScalarModel scalarModel) {
-        return new ValuePanel(id, scalarModel);
+        return new ValueFallbackPanel(id, scalarModel);
     }
 
 
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/value/StandaloneValuePanelFactory.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/value/StandaloneValuePanelFactory.java
index 393eaa9..e6f7786 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/value/StandaloneValuePanelFactory.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/value/StandaloneValuePanelFactory.java
@@ -29,7 +29,8 @@ import org.apache.isis.viewer.wicket.ui.ComponentFactoryAbstract;
 /**
  * {@link ComponentFactory} for rendering standalone values..
  */
-public class StandaloneValuePanelFactory extends ComponentFactoryAbstract {
+public class StandaloneValuePanelFactory
+extends ComponentFactoryAbstract {
 
     private static final long serialVersionUID = 1L;
 
@@ -39,7 +40,9 @@ public class StandaloneValuePanelFactory extends ComponentFactoryAbstract {
 
     @Override
     public ApplicationAdvice appliesTo(final IModel<?> model) {
-        return ApplicationAdvice.appliesIf(model instanceof ValueModel && ((ValueModel)model).getObject() != null);
+        return ApplicationAdvice.appliesIf(
+                model instanceof ValueModel
+                    && ((ValueModel)model).getObject() != null);
     }
 
     @Override
diff --git a/viewers/wicket/viewer/src/main/java/org/apache/isis/viewer/wicket/viewer/registries/components/ComponentFactoryRegistrarDefault.java b/viewers/wicket/viewer/src/main/java/org/apache/isis/viewer/wicket/viewer/registries/components/ComponentFactoryRegistrarDefault.java
index 69dfcfc..e2c70a2 100644
--- a/viewers/wicket/viewer/src/main/java/org/apache/isis/viewer/wicket/viewer/registries/components/ComponentFactoryRegistrarDefault.java
+++ b/viewers/wicket/viewer/src/main/java/org/apache/isis/viewer/wicket/viewer/registries/components/ComponentFactoryRegistrarDefault.java
@@ -18,7 +18,14 @@
  */
 package org.apache.isis.viewer.wicket.viewer.registries.components;
 
-import lombok.extern.log4j.Log4j2;
+import java.util.List;
+
+import javax.annotation.Priority;
+import javax.inject.Named;
+
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.stereotype.Service;
+
 import org.apache.isis.applib.annotation.PriorityPrecedence;
 import org.apache.isis.commons.internal.base._NullSafe;
 import org.apache.isis.viewer.wicket.ui.ComponentFactory;
@@ -64,11 +71,19 @@ import org.apache.isis.viewer.wicket.ui.components.scalars.jodatime.JodaLocalTim
 import org.apache.isis.viewer.wicket.ui.components.scalars.markup.MarkupPanelFactories;
 import org.apache.isis.viewer.wicket.ui.components.scalars.oiddto.OidDtoPanelFactory;
 import org.apache.isis.viewer.wicket.ui.components.scalars.passwd.IsisPasswordPanelFactory;
-import org.apache.isis.viewer.wicket.ui.components.scalars.primitive.*;
+import org.apache.isis.viewer.wicket.ui.components.scalars.primitive.BooleanPanelFactory;
+import org.apache.isis.viewer.wicket.ui.components.scalars.primitive.BytePanelFactory;
+import org.apache.isis.viewer.wicket.ui.components.scalars.primitive.CharacterPanelFactory;
+import org.apache.isis.viewer.wicket.ui.components.scalars.primitive.DoublePanelFactory;
+import org.apache.isis.viewer.wicket.ui.components.scalars.primitive.FloatPanelFactory;
+import org.apache.isis.viewer.wicket.ui.components.scalars.primitive.IntegerPanelFactory;
+import org.apache.isis.viewer.wicket.ui.components.scalars.primitive.LongPanelFactory;
+import org.apache.isis.viewer.wicket.ui.components.scalars.primitive.ShortPanelFactory;
 import org.apache.isis.viewer.wicket.ui.components.scalars.reference.ReferencePanelFactory;
 import org.apache.isis.viewer.wicket.ui.components.scalars.string.StringPanelFactory;
 import org.apache.isis.viewer.wicket.ui.components.scalars.uuid.UuidPanelFactory;
-import org.apache.isis.viewer.wicket.ui.components.scalars.value.ValuePanelFactory;
+import org.apache.isis.viewer.wicket.ui.components.scalars.value.compound.ValueCompoundPanelFactory;
+import org.apache.isis.viewer.wicket.ui.components.scalars.value.fallback.ValueFallbackPanelFactory;
 import org.apache.isis.viewer.wicket.ui.components.scalars.valuechoices.ValueChoicesSelect2PanelFactory;
 import org.apache.isis.viewer.wicket.ui.components.standalonecollection.StandaloneCollectionPanelFactory;
 import org.apache.isis.viewer.wicket.ui.components.tree.TreePanelFactories;
@@ -77,12 +92,8 @@ import org.apache.isis.viewer.wicket.ui.components.value.StandaloneValuePanelFac
 import org.apache.isis.viewer.wicket.ui.components.voidreturn.VoidReturnPanelFactory;
 import org.apache.isis.viewer.wicket.ui.components.welcome.WelcomePanelFactory;
 import org.apache.isis.viewer.wicket.ui.components.widgets.entitysimplelink.EntityLinkSimplePanelFactory;
-import org.springframework.beans.factory.annotation.Qualifier;
-import org.springframework.stereotype.Service;
 
-import javax.annotation.Priority;
-import javax.inject.Named;
-import java.util.List;
+import lombok.extern.log4j.Log4j2;
 
 /**
  * Default implementation of {@link ComponentFactoryRegistrar} that registers a
@@ -156,11 +167,11 @@ public class ComponentFactoryRegistrarDefault implements ComponentFactoryRegistr
         addComponentFactoriesForUnknown(componentFactories);
     }
 
-    protected void addComponentFactoriesForPageHeader(ComponentFactoryList componentFactories) {
+    protected void addComponentFactoriesForPageHeader(final ComponentFactoryList componentFactories) {
         componentFactories.add(new HeaderPanelFactory());
     }
 
-    protected void addComponentFactoriesForPageFooter(ComponentFactoryList componentFactories) {
+    protected void addComponentFactoriesForPageFooter(final ComponentFactoryList componentFactories) {
         componentFactories.add(new FooterPanelFactory());
     }
 
@@ -246,7 +257,8 @@ public class ComponentFactoryRegistrarDefault implements ComponentFactoryRegistr
         componentFactories.add(new Jdk8LocalDatePanelFactory());
         componentFactories.add(new Jdk8LocalDateTimePanelFactory());
 
-        componentFactories.add(new ValuePanelFactory());
+        componentFactories.add(new ValueCompoundPanelFactory());
+        componentFactories.add(new ValueFallbackPanelFactory());
 
         // or for choices
         componentFactories.add(new ValueChoicesSelect2PanelFactory());
@@ -284,7 +296,7 @@ public class ComponentFactoryRegistrarDefault implements ComponentFactoryRegistr
         componentFactories.add(new TertiaryMenuPanelFactory());
     }
 
-    protected void addComponentFactoriesForBreadcrumbs(ComponentFactoryList componentFactories) {
+    protected void addComponentFactoriesForBreadcrumbs(final ComponentFactoryList componentFactories) {
         componentFactories.add(new BookmarkedPagesPanelFactory());
     }