You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by da...@apache.org on 2020/06/25 19:15:11 UTC

[isis] 01/01: ISIS-2222 : more on the primitive char pages

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

danhaywood pushed a commit to branch ISIS-2222
in repository https://gitbox.apache.org/repos/asf/isis.git

commit 1a64ec7d54f07056f3431e184d83d80ccd4b489f
Author: danhaywood <da...@haywood-associates.co.uk>
AuthorDate: Thu Jun 25 20:14:48 2020 +0100

    ISIS-2222 : more on the primitive char pages
---
 .../chars/PrimitiveChars-description.adoc          | 55 ++++++++++++++++++++--
 .../primitive/chars/PrimitiveChars.layout.xml      |  3 ++
 .../PrimitiveCharHolder_actionReturning.java       |  5 +-
 ...veCharHolder_mixinPropertyNamedNotEscaped.java} | 19 ++++----
 ...rimitiveCharHolder_mixinPropertyNavigable.java} | 20 ++++----
 ...itiveCharHolder_mixinPropertyWithCssClass.java} | 21 ++++-----
 ...dateReadOnlyProperty2PromptInlineAsIfEdit.java} |  2 +-
 ...older_updateReadOnlyPropertyPositionPanel.java} |  4 +-
 ...r_updateReadOnlyPropertyPromptStyleInline.java} |  4 +-
 ...er_updateReadOnlyPropertyPromptStyleModal.java} |  4 +-
 ...eReadOnlyPropertyPromptStylePanelDropDown.java} |  4 +-
 ..._updateReadOnlyPropertyPromptStyleSidebar.java} |  4 +-
 ...arHolder_updateReadOnlyPropertyWithChoices.java |  6 +--
 .../jdo/PrimitiveCharJdoEntity-description.adoc    | 17 +++----
 .../chars/jdo/PrimitiveCharJdoEntity.java          | 15 +++---
 .../chars/jdo/PrimitiveCharJdoEntity.layout.xml    |  2 +
 .../vm/PrimitiveCharViewModel-description.adoc     |  5 +-
 .../primitive/chars/vm/PrimitiveCharViewModel.java | 12 ++---
 .../chars/vm/PrimitiveCharViewModel.layout.xml     | 38 ++++-----------
 .../StatefulViewModelJaxbRefsEntity.layout.xml     |  1 -
 .../StatefulViewModelUsingJaxb.layout.xml          |  1 -
 .../src/main/resources/static/css/application.css  |  3 ++
 22 files changed, 134 insertions(+), 111 deletions(-)

diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/chars/PrimitiveChars-description.adoc b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/chars/PrimitiveChars-description.adoc
index cc5f2d2..b0f6aec 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/chars/PrimitiveChars-description.adoc
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/chars/PrimitiveChars-description.adoc
@@ -2,8 +2,8 @@ The framework has built-in support for all of the primitive data types, includin
 
 From here you can:
 
-* open a view model that uses the `char` datatype
 * navigate to an entity that uses the `char` datatype
+* open a view model that uses the `char` datatype
 
 Because `char` is a primitive value, the properties on these domain objects are mandatory.
 
@@ -24,11 +24,33 @@ public interface PrimitiveCharHolder {
     char getReadWriteProperty();
     void setReadWriteProperty(char c);
 
-    default char getReadOnlyPropertyDerived() { return getReadOnlyProperty(); }
-    default char getReadOnlyPropertyDerived2() { return getReadOnlyProperty(); }
+    @MemberOrder(name = "label-positions", sequence = "1")
+    @Property
+    @PropertyLayout(labelPosition = LabelPosition.LEFT, describedAs = "labelPosition=LEFT", hidden = Where.ALL_TABLES)
+    default char getReadOnlyPropertyDerivedLabelPositionLeft() { return getReadOnlyProperty(); }
+
+    @MemberOrder(name = "label-positions", sequence = "2")
+    @Property
+    @PropertyLayout(labelPosition = LabelPosition.TOP, describedAs = "labelPosition=TOP", hidden = Where.ALL_TABLES)
+    default char getReadOnlyPropertyDerivedLabelPositionTop() { return getReadOnlyProperty(); }
+
+    @MemberOrder(name = "label-positions", sequence = "3")
+    @Property
+    @PropertyLayout(labelPosition = LabelPosition.RIGHT, describedAs = "labelPosition=RIGHT", hidden = Where.ALL_TABLES)
+    default char getReadOnlyPropertyDerivedLabelPositionRight() { return getReadOnlyProperty(); }
+
+    @MemberOrder(name = "label-positions", sequence = "4")
+    @Property
+    @PropertyLayout(labelPosition = LabelPosition.NONE, describedAs = "labelPosition=NONE", hidden = Where.ALL_TABLES)
+    default char getReadOnlyPropertyDerivedLabelPositionNone() { return getReadOnlyProperty(); }
+
 }
 ----
 
+The default methods have annotations that automatically inherited.
+Using `@MemberOrder` positions the properties into the appropriate `<field-set>` within the `Xxx.layout.xml` layout file.
+
+
 == Mixin actions
 
 A number of mixin actions contribute through this interface, demonstrate the use of `char` as a parameter and as a return type.
@@ -60,7 +82,7 @@ public class PrimitiveCharHolder_updateReadOnlyProperty {
 +
 There are a number of variants of this action, to demonstrate different prompt layouts.
 
-* and the `actionReturning` action is:
+* the `actionReturning` action is:
 +
 [source,java]
 ----
@@ -80,3 +102,28 @@ public class PrimitiveCharHolder_actionReturning {
 }
 ----
 
+== Mixin properties
+
+We also use the interface to contribute a number of mixin properties:
+
+* the `mixinPropertyWithCssClass` property:
++
+[source,java]
+----
+@Property()
+@PropertyLayout(cssClass = "red", describedAs = "cssClass = \"red\" ")
+@RequiredArgsConstructor
+public class PrimitiveCharHolder_mixinPropertyWithCssClass {
+
+    private final PrimitiveCharHolder primitiveCharHolder;
+
+    @MemberOrder(name = "contributed", sequence = "1")
+    public char prop() {
+        return primitiveCharHolder.getReadOnlyProperty();
+    }
+}
+----
++
+TIP: the styling is provided from the `application.css` static resource.
+
+
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/chars/PrimitiveChars.layout.xml b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/chars/PrimitiveChars.layout.xml
index d321296..55c5b87 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/chars/PrimitiveChars.layout.xml
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/chars/PrimitiveChars.layout.xml
@@ -21,6 +21,9 @@
 				<bs3:col span="12">
 					<cpt:collection id="entities"/>
 				</bs3:col>
+				<bs3:col span="12">
+					<cpt:action id="openViewModel"/>
+				</bs3:col>
 			</bs3:row>
 			<cpt:fieldSet name="Other" id="other" unreferencedProperties="true"/>
 		</bs3:col>
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/chars/holder/PrimitiveCharHolder_actionReturning.java b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/chars/holder/PrimitiveCharHolder_actionReturning.java
index 4f7224a..a8104a8 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/chars/holder/PrimitiveCharHolder_actionReturning.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/chars/holder/PrimitiveCharHolder_actionReturning.java
@@ -27,11 +27,8 @@ import lombok.RequiredArgsConstructor;
 
 
 @Action(
-        semantics = SemanticsOf.SAFE,
-        associateWith = "readOnlyProperty",
-        associateWithSequence = "1"
+        semantics = SemanticsOf.SAFE
 )
-@ActionLayout(position = ActionLayout.Position.PANEL)
 @RequiredArgsConstructor
 public class PrimitiveCharHolder_actionReturning {
 
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/chars/holder/PrimitiveCharHolder_actionReturning.java b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/chars/holder/PrimitiveCharHolder_mixinPropertyNamedNotEscaped.java
similarity index 70%
copy from examples/demo/domain/src/main/java/demoapp/dom/types/primitive/chars/holder/PrimitiveCharHolder_actionReturning.java
copy to examples/demo/domain/src/main/java/demoapp/dom/types/primitive/chars/holder/PrimitiveCharHolder_mixinPropertyNamedNotEscaped.java
index 4f7224a..7bafffe 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/chars/holder/PrimitiveCharHolder_actionReturning.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/chars/holder/PrimitiveCharHolder_mixinPropertyNamedNotEscaped.java
@@ -18,27 +18,24 @@
  */
 package demoapp.dom.types.primitive.chars.holder;
 
-import org.apache.isis.applib.annotation.Action;
-import org.apache.isis.applib.annotation.ActionLayout;
 import org.apache.isis.applib.annotation.MemberOrder;
-import org.apache.isis.applib.annotation.SemanticsOf;
+import org.apache.isis.applib.annotation.Property;
+import org.apache.isis.applib.annotation.PropertyLayout;
 
 import lombok.RequiredArgsConstructor;
 
 
-@Action(
-        semantics = SemanticsOf.SAFE,
-        associateWith = "readOnlyProperty",
-        associateWithSequence = "1"
-)
-@ActionLayout(position = ActionLayout.Position.PANEL)
+//@Property()
+//@PropertyLayout(named = "<i>Named<i/> <b>not</b> escaped property", namedEscaped = false, describedAs = "named = \"(some markup)\", namedEscaped = false") // TODO: this doesn't render, and causes bootlint issues
 @RequiredArgsConstructor
-public class PrimitiveCharHolder_actionReturning {
+public class PrimitiveCharHolder_mixinPropertyNamedNotEscaped {
 
     private final PrimitiveCharHolder primitiveCharHolder;
 
-    public char act() {
+    @MemberOrder(name = "contributed", sequence = "3")
+    public char prop() {
         return primitiveCharHolder.getReadOnlyProperty();
     }
 
+
 }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/chars/holder/PrimitiveCharHolder_actionReturning.java b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/chars/holder/PrimitiveCharHolder_mixinPropertyNavigable.java
similarity index 72%
copy from examples/demo/domain/src/main/java/demoapp/dom/types/primitive/chars/holder/PrimitiveCharHolder_actionReturning.java
copy to examples/demo/domain/src/main/java/demoapp/dom/types/primitive/chars/holder/PrimitiveCharHolder_mixinPropertyNavigable.java
index 4f7224a..ca18015 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/chars/holder/PrimitiveCharHolder_actionReturning.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/chars/holder/PrimitiveCharHolder_mixinPropertyNavigable.java
@@ -18,27 +18,25 @@
  */
 package demoapp.dom.types.primitive.chars.holder;
 
-import org.apache.isis.applib.annotation.Action;
-import org.apache.isis.applib.annotation.ActionLayout;
 import org.apache.isis.applib.annotation.MemberOrder;
-import org.apache.isis.applib.annotation.SemanticsOf;
+import org.apache.isis.applib.annotation.Navigable;
+import org.apache.isis.applib.annotation.Property;
+import org.apache.isis.applib.annotation.PropertyLayout;
 
 import lombok.RequiredArgsConstructor;
 
 
-@Action(
-        semantics = SemanticsOf.SAFE,
-        associateWith = "readOnlyProperty",
-        associateWithSequence = "1"
-)
-@ActionLayout(position = ActionLayout.Position.PANEL)
+//@Property()
+//@PropertyLayout( navigable = Navigable.PARENT, describedAs = "navigable=PARENT") // TODO: doesn't seem to do anything
 @RequiredArgsConstructor
-public class PrimitiveCharHolder_actionReturning {
+public class PrimitiveCharHolder_mixinPropertyNavigable {
 
     private final PrimitiveCharHolder primitiveCharHolder;
 
-    public char act() {
+    @MemberOrder(name = "contributed", sequence = "1")
+    public char prop() {
         return primitiveCharHolder.getReadOnlyProperty();
     }
 
+
 }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/chars/holder/PrimitiveCharHolder_actionReturning.java b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/chars/holder/PrimitiveCharHolder_mixinPropertyWithCssClass.java
similarity index 71%
copy from examples/demo/domain/src/main/java/demoapp/dom/types/primitive/chars/holder/PrimitiveCharHolder_actionReturning.java
copy to examples/demo/domain/src/main/java/demoapp/dom/types/primitive/chars/holder/PrimitiveCharHolder_mixinPropertyWithCssClass.java
index 4f7224a..aa146b3 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/chars/holder/PrimitiveCharHolder_actionReturning.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/chars/holder/PrimitiveCharHolder_mixinPropertyWithCssClass.java
@@ -18,27 +18,24 @@
  */
 package demoapp.dom.types.primitive.chars.holder;
 
-import org.apache.isis.applib.annotation.Action;
-import org.apache.isis.applib.annotation.ActionLayout;
 import org.apache.isis.applib.annotation.MemberOrder;
-import org.apache.isis.applib.annotation.SemanticsOf;
+import org.apache.isis.applib.annotation.Navigable;
+import org.apache.isis.applib.annotation.Property;
+import org.apache.isis.applib.annotation.PropertyLayout;
+import org.apache.isis.applib.annotation.Where;
 
 import lombok.RequiredArgsConstructor;
 
 
-@Action(
-        semantics = SemanticsOf.SAFE,
-        associateWith = "readOnlyProperty",
-        associateWithSequence = "1"
-)
-@ActionLayout(position = ActionLayout.Position.PANEL)
+@Property()
+@PropertyLayout(cssClass = "red", describedAs = "cssClass = \"red\" ", hidden = Where.ALL_TABLES)
 @RequiredArgsConstructor
-public class PrimitiveCharHolder_actionReturning {
+public class PrimitiveCharHolder_mixinPropertyWithCssClass {
 
     private final PrimitiveCharHolder primitiveCharHolder;
 
-    public char act() {
+    @MemberOrder(name = "contributed", sequence = "1")
+    public char prop() {
         return primitiveCharHolder.getReadOnlyProperty();
     }
-
 }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/chars/holder/PrimitiveCharHolder_updateReadOnlyProperty2InlineAsIfEdit.java b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/chars/holder/PrimitiveCharHolder_updateReadOnlyProperty2PromptInlineAsIfEdit.java
similarity index 95%
rename from examples/demo/domain/src/main/java/demoapp/dom/types/primitive/chars/holder/PrimitiveCharHolder_updateReadOnlyProperty2InlineAsIfEdit.java
rename to examples/demo/domain/src/main/java/demoapp/dom/types/primitive/chars/holder/PrimitiveCharHolder_updateReadOnlyProperty2PromptInlineAsIfEdit.java
index ddc59e3..e516491 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/chars/holder/PrimitiveCharHolder_updateReadOnlyProperty2InlineAsIfEdit.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/chars/holder/PrimitiveCharHolder_updateReadOnlyProperty2PromptInlineAsIfEdit.java
@@ -33,7 +33,7 @@ import lombok.RequiredArgsConstructor;
 )
 @ActionLayout(promptStyle = PromptStyle.INLINE_AS_IF_EDIT)
 @RequiredArgsConstructor
-public class PrimitiveCharHolder_updateReadOnlyProperty2InlineAsIfEdit {
+public class PrimitiveCharHolder_updateReadOnlyProperty2PromptInlineAsIfEdit {
 
     private final PrimitiveCharHolder primitiveCharHolder;
 
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/chars/holder/PrimitiveCharHolder_updateReadOnlyPropertyPanel.java b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/chars/holder/PrimitiveCharHolder_updateReadOnlyPropertyPositionPanel.java
similarity index 89%
rename from examples/demo/domain/src/main/java/demoapp/dom/types/primitive/chars/holder/PrimitiveCharHolder_updateReadOnlyPropertyPanel.java
rename to examples/demo/domain/src/main/java/demoapp/dom/types/primitive/chars/holder/PrimitiveCharHolder_updateReadOnlyPropertyPositionPanel.java
index 2051971..857b28d 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/chars/holder/PrimitiveCharHolder_updateReadOnlyPropertyPanel.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/chars/holder/PrimitiveCharHolder_updateReadOnlyPropertyPositionPanel.java
@@ -31,9 +31,9 @@ import lombok.RequiredArgsConstructor;
         associateWith = "readOnlyProperty",
         associateWithSequence = "2"
 )
-@ActionLayout(position = ActionLayout.Position.PANEL)
+@ActionLayout(position = ActionLayout.Position.PANEL, named = "Position in panel", describedAs = "position = PANEL")
 @RequiredArgsConstructor
-public class PrimitiveCharHolder_updateReadOnlyPropertyPanel {
+public class PrimitiveCharHolder_updateReadOnlyPropertyPositionPanel {
 
     private final PrimitiveCharHolder primitiveCharHolder;
 
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/chars/holder/PrimitiveCharHolder_updateReadOnlyPropertyInline.java b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/chars/holder/PrimitiveCharHolder_updateReadOnlyPropertyPromptStyleInline.java
similarity index 93%
rename from examples/demo/domain/src/main/java/demoapp/dom/types/primitive/chars/holder/PrimitiveCharHolder_updateReadOnlyPropertyInline.java
rename to examples/demo/domain/src/main/java/demoapp/dom/types/primitive/chars/holder/PrimitiveCharHolder_updateReadOnlyPropertyPromptStyleInline.java
index ecb7019..f970852 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/chars/holder/PrimitiveCharHolder_updateReadOnlyPropertyInline.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/chars/holder/PrimitiveCharHolder_updateReadOnlyPropertyPromptStyleInline.java
@@ -31,9 +31,9 @@ import lombok.RequiredArgsConstructor;
         associateWith = "readOnlyProperty",
         associateWithSequence = "1"
 )
-@ActionLayout(promptStyle = PromptStyle.INLINE, named = "Inline")
+@ActionLayout(promptStyle = PromptStyle.INLINE, named = "Inline", describedAs = "promptStyle = INLINE")
 @RequiredArgsConstructor
-public class PrimitiveCharHolder_updateReadOnlyPropertyInline {
+public class PrimitiveCharHolder_updateReadOnlyPropertyPromptStyleInline {
 
     private final PrimitiveCharHolder primitiveCharHolder;
 
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/chars/holder/PrimitiveCharHolder_updateReadOnlyPropertyModal.java b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/chars/holder/PrimitiveCharHolder_updateReadOnlyPropertyPromptStyleModal.java
similarity index 89%
rename from examples/demo/domain/src/main/java/demoapp/dom/types/primitive/chars/holder/PrimitiveCharHolder_updateReadOnlyPropertyModal.java
rename to examples/demo/domain/src/main/java/demoapp/dom/types/primitive/chars/holder/PrimitiveCharHolder_updateReadOnlyPropertyPromptStyleModal.java
index 6aac431..844bd2f 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/chars/holder/PrimitiveCharHolder_updateReadOnlyPropertyModal.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/chars/holder/PrimitiveCharHolder_updateReadOnlyPropertyPromptStyleModal.java
@@ -31,9 +31,9 @@ import lombok.RequiredArgsConstructor;
         associateWith = "readOnlyProperty",
         associateWithSequence = "2"
 )
-@ActionLayout(promptStyle = PromptStyle.DIALOG_MODAL, named = "in modal")
+@ActionLayout(promptStyle = PromptStyle.DIALOG_MODAL, named = "Modal", describedAs = "promptStyle = MODAL")
 @RequiredArgsConstructor
-public class PrimitiveCharHolder_updateReadOnlyPropertyModal {
+public class PrimitiveCharHolder_updateReadOnlyPropertyPromptStyleModal {
 
     private final PrimitiveCharHolder primitiveCharHolder;
 
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/chars/holder/PrimitiveCharHolder_updateReadOnlyPropertyPanelDropDown.java b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/chars/holder/PrimitiveCharHolder_updateReadOnlyPropertyPromptStylePanelDropDown.java
similarity index 88%
rename from examples/demo/domain/src/main/java/demoapp/dom/types/primitive/chars/holder/PrimitiveCharHolder_updateReadOnlyPropertyPanelDropDown.java
rename to examples/demo/domain/src/main/java/demoapp/dom/types/primitive/chars/holder/PrimitiveCharHolder_updateReadOnlyPropertyPromptStylePanelDropDown.java
index 1d765a6..ef53244 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/chars/holder/PrimitiveCharHolder_updateReadOnlyPropertyPanelDropDown.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/chars/holder/PrimitiveCharHolder_updateReadOnlyPropertyPromptStylePanelDropDown.java
@@ -31,9 +31,9 @@ import lombok.RequiredArgsConstructor;
         associateWith = "readOnlyProperty",
         associateWithSequence = "3"
 )
-@ActionLayout(position = ActionLayout.Position.PANEL_DROPDOWN)
+@ActionLayout(position = ActionLayout.Position.PANEL_DROPDOWN, named = "Panel Dropdown", describedAs = "position = PANEL_DROPDOWN")
 @RequiredArgsConstructor
-public class PrimitiveCharHolder_updateReadOnlyPropertyPanelDropDown {
+public class PrimitiveCharHolder_updateReadOnlyPropertyPromptStylePanelDropDown {
 
     private final PrimitiveCharHolder primitiveCharHolder;
 
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/chars/holder/PrimitiveCharHolder_updateReadOnlyPropertySidebar.java b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/chars/holder/PrimitiveCharHolder_updateReadOnlyPropertyPromptStyleSidebar.java
similarity index 92%
rename from examples/demo/domain/src/main/java/demoapp/dom/types/primitive/chars/holder/PrimitiveCharHolder_updateReadOnlyPropertySidebar.java
rename to examples/demo/domain/src/main/java/demoapp/dom/types/primitive/chars/holder/PrimitiveCharHolder_updateReadOnlyPropertyPromptStyleSidebar.java
index 192eeb7..3df0aaa 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/chars/holder/PrimitiveCharHolder_updateReadOnlyPropertySidebar.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/chars/holder/PrimitiveCharHolder_updateReadOnlyPropertyPromptStyleSidebar.java
@@ -31,9 +31,9 @@ import lombok.RequiredArgsConstructor;
         associateWith = "readOnlyProperty",
         associateWithSequence = "3"
 )
-@ActionLayout(promptStyle = PromptStyle.DIALOG_SIDEBAR, named = "in sidebar")
+@ActionLayout(promptStyle = PromptStyle.DIALOG_SIDEBAR, named = "sidebar", describedAs = "promptStyle = DIALOG_SIDEBAR")
 @RequiredArgsConstructor
-public class PrimitiveCharHolder_updateReadOnlyPropertySidebar {
+public class PrimitiveCharHolder_updateReadOnlyPropertyPromptStyleSidebar {
 
     private final PrimitiveCharHolder primitiveCharHolder;
 
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/chars/holder/PrimitiveCharHolder_updateReadOnlyPropertyWithChoices.java b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/chars/holder/PrimitiveCharHolder_updateReadOnlyPropertyWithChoices.java
index bbbec21..7daa8d7 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/chars/holder/PrimitiveCharHolder_updateReadOnlyPropertyWithChoices.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/chars/holder/PrimitiveCharHolder_updateReadOnlyPropertyWithChoices.java
@@ -51,8 +51,8 @@ public class PrimitiveCharHolder_updateReadOnlyPropertyWithChoices {
     public List<Character> choices0Act() {
         return Stream.of('a', 'b', 'c').collect(Collectors.toList());
     }
-    public String disableAct() {
-        return "Not yet supported";
-    }
+    public boolean hideAct() {
+        return true;
+    } // TODO: choices doesn't seem to work for this datatype
 
 }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/chars/jdo/PrimitiveCharJdoEntity-description.adoc b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/chars/jdo/PrimitiveCharJdoEntity-description.adoc
index 2fbb540..6ae7268 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/chars/jdo/PrimitiveCharJdoEntity-description.adoc
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/chars/jdo/PrimitiveCharJdoEntity-description.adoc
@@ -10,14 +10,14 @@ JDO supports `char` out-of-the-box, so no special annotations are required.
 public class PrimitiveCharJdoEntity
     implements HasAsciiDocDescription,   PrimitiveCharHolder {          // <.>
 
-    public PrimitiveCharJdoEntity(char initialValue) {                  // <.>
-        this.readOnlyProperty = initialValue;
-        this.readWriteProperty = initialValue;
-    }
+    public PrimitiveCharJdoEntity(char initialValue) { ... }            // <.>
 
-    @Getter @Setter
     @Title
-    private char readOnlyProperty;
+    @Getter @Setter
+    private char readOnlyProperty;                                      // <.>
+
+    @Getter @Setter
+    private char readOnlyProperty2;
 
     @Getter @Setter
     @Property(editing = Editing.ENABLED)
@@ -25,5 +25,6 @@ public class PrimitiveCharJdoEntity
 
 }
 ----
-<.> a no-arg constructor is introduced by JDO enhnancer
-<.> as a convenience
\ No newline at end of file
+<.> a no-arg constructor is introduced by JDO enhancer
+<.> as a convenience
+<.> no additional annotations required.
\ No newline at end of file
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/chars/jdo/PrimitiveCharJdoEntity.java b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/chars/jdo/PrimitiveCharJdoEntity.java
index 661ed7f..9a0b4d5 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/chars/jdo/PrimitiveCharJdoEntity.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/chars/jdo/PrimitiveCharJdoEntity.java
@@ -23,18 +23,15 @@ import javax.jdo.annotations.IdGeneratorStrategy;
 import javax.jdo.annotations.IdentityType;
 import javax.jdo.annotations.PersistenceCapable;
 
-import org.apache.isis.applib.annotation.Action;
-import org.apache.isis.applib.annotation.Bounding;
 import org.apache.isis.applib.annotation.DomainObject;
 import org.apache.isis.applib.annotation.Editing;
-import org.apache.isis.applib.annotation.Nature;
 import org.apache.isis.applib.annotation.Property;
-import org.apache.isis.applib.annotation.SemanticsOf;
+import org.apache.isis.applib.annotation.PropertyLayout;
 import org.apache.isis.applib.annotation.Title;
+import org.apache.isis.applib.annotation.Where;
 
 import lombok.Getter;
 import lombok.Setter;
-import lombok.extern.log4j.Log4j2;
 
 import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
 import demoapp.dom.types.primitive.chars.holder.PrimitiveCharHolder;
@@ -44,7 +41,9 @@ import demoapp.dom.types.primitive.chars.holder.PrimitiveCharHolder;
 @DomainObject(
         objectType = "demoapp.PrimitiveCharJdoEntity"
 )
-public class PrimitiveCharJdoEntity implements HasAsciiDocDescription, PrimitiveCharHolder {
+public class PrimitiveCharJdoEntity
+        implements HasAsciiDocDescription,
+                   PrimitiveCharHolder {
 
     public PrimitiveCharJdoEntity(char initialValue) {
         this.readOnlyProperty = initialValue;
@@ -52,10 +51,12 @@ public class PrimitiveCharJdoEntity implements HasAsciiDocDescription, Primitive
         this.readWriteProperty = initialValue;
     }
 
-    @Getter @Setter
     @Title
+    @Getter @Setter
     private char readOnlyProperty;
 
+    @Property
+    @PropertyLayout(hidden = Where.ALL_TABLES)
     @Getter @Setter
     private char readOnlyProperty2;
 
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/chars/jdo/PrimitiveCharJdoEntity.layout.xml b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/chars/jdo/PrimitiveCharJdoEntity.layout.xml
index 7a24b9b..ffa55a8 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/chars/jdo/PrimitiveCharJdoEntity.layout.xml
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/chars/jdo/PrimitiveCharJdoEntity.layout.xml
@@ -8,6 +8,7 @@
 	<bs3:row>
 		<bs3:col span="10" unreferencedActions="true">
 			<cpt:domainObject />
+			<cpt:action id="actionReturning"/>
 			<cpt:action id="rebuildMetamodel"/>
 		</bs3:col>
 		<bs3:col span="2">
@@ -29,6 +30,7 @@
 				<cpt:property id="readWriteProperty" />
 			</cpt:fieldSet>
 			<cpt:fieldSet name="Label Positions" id="label-positions"/>
+			<cpt:fieldSet name="Contributed by Mixins" id="contributed"/>
 			<cpt:fieldSet name="Other" id="other" unreferencedProperties="true"/>
 		</bs3:col>
 		<bs3:col span="6">
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/chars/vm/PrimitiveCharViewModel-description.adoc b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/chars/vm/PrimitiveCharViewModel-description.adoc
index ac6ac10..9135e5e 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/chars/vm/PrimitiveCharViewModel-description.adoc
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/chars/vm/PrimitiveCharViewModel-description.adoc
@@ -20,7 +20,7 @@ public class PrimitiveCharViewModel
 
     @Title
     @Getter @Setter
-    private char readOnlyProperty;
+    private char readOnlyProperty;                      // <.>
 
     @Getter @Setter
     private char readOnlyProperty2;
@@ -32,4 +32,5 @@ public class PrimitiveCharViewModel
 }
 ----
 <.> a no-arg constructor is required by JAXB
-<.> as a convenience
\ No newline at end of file
+<.> as a convenience
+<.> no additional annotations required.
\ No newline at end of file
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/chars/vm/PrimitiveCharViewModel.java b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/chars/vm/PrimitiveCharViewModel.java
index 670bcaf..cf8d9b9 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/chars/vm/PrimitiveCharViewModel.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/chars/vm/PrimitiveCharViewModel.java
@@ -18,27 +18,22 @@
  */
 package demoapp.dom.types.primitive.chars.vm;
 
-import java.util.List;
-import java.util.stream.Collectors;
-import java.util.stream.Stream;
-
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlRootElement;
 import javax.xml.bind.annotation.XmlType;
 
-import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.DomainObject;
 import org.apache.isis.applib.annotation.Editing;
 import org.apache.isis.applib.annotation.Nature;
 import org.apache.isis.applib.annotation.Property;
+import org.apache.isis.applib.annotation.PropertyLayout;
 import org.apache.isis.applib.annotation.SemanticsOf;
 import org.apache.isis.applib.annotation.Title;
+import org.apache.isis.applib.annotation.Where;
 
 import lombok.Getter;
-import lombok.NoArgsConstructor;
 import lombok.Setter;
-import lombok.extern.log4j.Log4j2;
 
 import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
 import demoapp.dom.types.primitive.chars.holder.PrimitiveCharHolder;
@@ -65,7 +60,8 @@ public class PrimitiveCharViewModel
     @Getter @Setter
     private char readOnlyProperty;
 
-    @Title
+    @Property
+    @PropertyLayout(hidden = Where.ALL_TABLES)
     @Getter @Setter
     private char readOnlyProperty2;
 
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/chars/vm/PrimitiveCharViewModel.layout.xml b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/chars/vm/PrimitiveCharViewModel.layout.xml
index 899a7e0..ffa55a8 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/chars/vm/PrimitiveCharViewModel.layout.xml
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/chars/vm/PrimitiveCharViewModel.layout.xml
@@ -8,6 +8,7 @@
 	<bs3:row>
 		<bs3:col span="10" unreferencedActions="true">
 			<cpt:domainObject />
+			<cpt:action id="actionReturning"/>
 			<cpt:action id="rebuildMetamodel"/>
 		</bs3:col>
 		<bs3:col span="2">
@@ -17,39 +18,19 @@
 
 	<bs3:row>
 		<bs3:col span="6">
-			<cpt:fieldSet name="Demo" id="general">
-				<cpt:action id="actionReturning" position="PANEL"/>
-				<cpt:property id="readOnlyProperty" labelPosition="DEFAULT">
+			<cpt:fieldSet name="Action Prompt Styles" id="action-prompt-styles">
+				<cpt:property id="readOnlyProperty" />
+				<cpt:property id="readOnlyProperty2" >
 					<cpt:describedAs>
-						labelPosition=DEFAULT
-					</cpt:describedAs>
-				</cpt:property>
-				<cpt:property id="readOnlyProperty2" labelPosition="TOP" hidden="ALL_TABLES">
-					<cpt:describedAs>
-						labelPosition=TOP
-						hidden=ALL_TABLES
-					</cpt:describedAs>
-				</cpt:property>
-				<cpt:property id="readWriteProperty" labelPosition="LEFT">
-					<cpt:describedAs>
-						labelPosition=LEFT
+						Associated action uses promptStyle=INLINE_AS_IF_EDIT
 					</cpt:describedAs>
 				</cpt:property>
 			</cpt:fieldSet>
-			<cpt:fieldSet name="Derived Properties" id="derivedProperties">
-				<cpt:property id="readOnlyPropertyDerived" labelPosition="NONE" hidden="ALL_TABLES">
-					<cpt:describedAs>
-						labelPosition=NONE
-						hidden=ALL_TABLES
-					</cpt:describedAs>
-				</cpt:property>
-				<cpt:property id="readOnlyPropertyDerived2" labelPosition="RIGHT" hidden="ALL_TABLES">
-					<cpt:describedAs>
-						labelPosition=RIGHT
-						hidden=ALL_TABLES
-					</cpt:describedAs>
-				</cpt:property>
+			<cpt:fieldSet name="Editable Properties" id="editable-properties">
+				<cpt:property id="readWriteProperty" />
 			</cpt:fieldSet>
+			<cpt:fieldSet name="Label Positions" id="label-positions"/>
+			<cpt:fieldSet name="Contributed by Mixins" id="contributed"/>
 			<cpt:fieldSet name="Other" id="other" unreferencedProperties="true"/>
 		</bs3:col>
 		<bs3:col span="6">
@@ -59,6 +40,7 @@
 				<cpt:action id="rebuildMetamodel"  position="PANEL"/>
 				<cpt:action id="downloadMetamodelXml"  position="PANEL_DROPDOWN"/>
 				<cpt:action id="inspectMetamodel"  position="PANEL_DROPDOWN"/>
+				<cpt:action id="downloadJdoMetadata"  position="PANEL_DROPDOWN"/>
 				<cpt:action id="openRestApi" position="PANEL_DROPDOWN" />
 				<cpt:property id="description"/>
 			</cpt:fieldSet>
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/viewmodels/jaxbrefentity/StatefulViewModelJaxbRefsEntity.layout.xml b/examples/demo/domain/src/main/java/demoapp/dom/viewmodels/jaxbrefentity/StatefulViewModelJaxbRefsEntity.layout.xml
index bd7995d..1c8b66b 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/viewmodels/jaxbrefentity/StatefulViewModelJaxbRefsEntity.layout.xml
+++ b/examples/demo/domain/src/main/java/demoapp/dom/viewmodels/jaxbrefentity/StatefulViewModelJaxbRefsEntity.layout.xml
@@ -24,7 +24,6 @@
 			<cpt:fieldSet name="Description" id="description" >
 				<cpt:action id="clearHints" position="PANEL" />
 				<cpt:action id="downloadLayoutXml"  position="PANEL_DROPDOWN"/>
-				<cpt:action id="rebuildMetamodel"  position="PANEL"/>
 				<cpt:action id="downloadMetamodelXml"  position="PANEL_DROPDOWN"/>
 				<cpt:action id="inspectMetamodel"  position="PANEL_DROPDOWN"/>
 				<cpt:action id="openRestApi" position="PANEL_DROPDOWN" />
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/viewmodels/usingjaxb/StatefulViewModelUsingJaxb.layout.xml b/examples/demo/domain/src/main/java/demoapp/dom/viewmodels/usingjaxb/StatefulViewModelUsingJaxb.layout.xml
index 8747ce3..febca1c 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/viewmodels/usingjaxb/StatefulViewModelUsingJaxb.layout.xml
+++ b/examples/demo/domain/src/main/java/demoapp/dom/viewmodels/usingjaxb/StatefulViewModelUsingJaxb.layout.xml
@@ -27,7 +27,6 @@
 			<cpt:fieldSet name="Description" id="description" >
 				<cpt:action id="clearHints" position="PANEL" />
 				<cpt:action id="downloadLayoutXml"  position="PANEL_DROPDOWN"/>
-				<cpt:action id="rebuildMetamodel"  position="PANEL"/>
 				<cpt:action id="downloadMetamodelXml"  position="PANEL_DROPDOWN"/>
 				<cpt:action id="inspectMetamodel"  position="PANEL_DROPDOWN"/>
 				<cpt:action id="openRestApi" position="PANEL_DROPDOWN" />
diff --git a/examples/demo/domain/src/main/resources/static/css/application.css b/examples/demo/domain/src/main/resources/static/css/application.css
index 67e1538..49cc494 100644
--- a/examples/demo/domain/src/main/resources/static/css/application.css
+++ b/examples/demo/domain/src/main/resources/static/css/application.css
@@ -1,3 +1,6 @@
+.property.red label {
+	color: red;
+}
 
 .welcome {
 	font-size: 16px;