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/26 07:06:19 UTC

[isis] 03/05: ISIS-2222: adds in pages for other 6 primitive data types.

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 0effa0a80c5aa356fec3311408da6a346e5e7d50
Author: danhaywood <da...@haywood-associates.co.uk>
AuthorDate: Fri Jun 26 07:57:52 2020 +0100

    ISIS-2222: adds in pages for other 6 primitive data types.
---
 .../booleans/PrimitiveBooleans-description.adoc    | 129 +++++++++++++++++++++
 .../primitive/booleans/PrimitiveBooleans.java      |  76 ++++++++++++
 .../booleans/PrimitiveBooleans.layout.xml          |  46 ++++++++
 .../booleans/holder/PrimitiveBooleanHolder.java    |  84 ++++++++++++++
 .../PrimitiveBooleanHolder_actionReturning.java    |  39 +++++++
 ...BooleanHolder_mixinPropertyNamedNotEscaped.java |  39 +++++++
 ...mitiveBooleanHolder_mixinPropertyNavigable.java |  39 +++++++
 ...iveBooleanHolder_mixinPropertyWithCssClass.java |  40 +++++++
 ...pdateReadOnlyProperty2PromptInlineAsIfEdit.java |  49 ++++++++
 ...Holder_updateReadOnlyPropertyPositionPanel.java |  48 ++++++++
 ...er_updateReadOnlyPropertyPromptStyleInline.java |  49 ++++++++
 ...der_updateReadOnlyPropertyPromptStyleModal.java |  49 ++++++++
 ...teReadOnlyPropertyPromptStylePanelDropDown.java |  48 ++++++++
 ...r_updateReadOnlyPropertyPromptStyleSidebar.java |  49 ++++++++
 ...anHolder_updateReadOnlyPropertyWithChoices.java |  58 +++++++++
 .../booleans/jdo/PrimitiveBooleanJdoEntities.java  |  26 +++++
 .../jdo/PrimitiveBooleanJdoEntity-description.adoc |  31 +++++
 .../booleans/jdo/PrimitiveBooleanJdoEntity.java    |  67 +++++++++++
 .../jdo/PrimitiveBooleanJdoEntity.layout.xml       |  53 +++++++++
 .../jdo/PrimitiveBooleanJdoEntitySeedService.java  |  42 +++++++
 .../vm/PrimitiveBooleanViewModel-description.adoc  |  36 ++++++
 .../booleans/vm/PrimitiveBooleanViewModel.java     |  71 ++++++++++++
 .../vm/PrimitiveBooleanViewModel.layout.xml        |  53 +++++++++
 .../doubles/PrimitiveDoubles-description.adoc      | 129 +++++++++++++++++++++
 .../types/primitive/doubles/PrimitiveDoubles.java  |  76 ++++++++++++
 .../primitive/doubles/PrimitiveDoubles.layout.xml  |  46 ++++++++
 .../doubles/holder/PrimitiveDoubleHolder.java      |  84 ++++++++++++++
 .../PrimitiveDoubleHolder_actionReturning.java     |  41 +++++++
 ...eDoubleHolder_mixinPropertyNamedNotEscaped.java |  41 +++++++
 ...imitiveDoubleHolder_mixinPropertyNavigable.java |  39 +++++++
 ...tiveDoubleHolder_mixinPropertyWithCssClass.java |  40 +++++++
 ...pdateReadOnlyProperty2PromptInlineAsIfEdit.java |  49 ++++++++
 ...Holder_updateReadOnlyPropertyPositionPanel.java |  48 ++++++++
 ...er_updateReadOnlyPropertyPromptStyleInline.java |  49 ++++++++
 ...der_updateReadOnlyPropertyPromptStyleModal.java |  49 ++++++++
 ...teReadOnlyPropertyPromptStylePanelDropDown.java |  48 ++++++++
 ...r_updateReadOnlyPropertyPromptStyleSidebar.java |  49 ++++++++
 ...leHolder_updateReadOnlyPropertyWithChoices.java |  58 +++++++++
 .../doubles/jdo/PrimitiveDoubleJdoEntities.java    |  26 +++++
 .../jdo/PrimitiveDoubleJdoEntity-description.adoc  |  30 +++++
 .../doubles/jdo/PrimitiveDoubleJdoEntity.java      |  67 +++++++++++
 .../jdo/PrimitiveDoubleJdoEntity.layout.xml        |  53 +++++++++
 .../jdo/PrimitiveDoubleJdoEntitySeedService.java   |  42 +++++++
 .../vm/PrimitiveDoubleViewModel-description.adoc   |  36 ++++++
 .../doubles/vm/PrimitiveDoubleViewModel.java       |  71 ++++++++++++
 .../doubles/vm/PrimitiveDoubleViewModel.layout.xml |  53 +++++++++
 .../floats/PrimitiveFloats-description.adoc        | 129 +++++++++++++++++++++
 .../types/primitive/floats/PrimitiveFloats.java    |  76 ++++++++++++
 .../primitive/floats/PrimitiveFloats.layout.xml    |  46 ++++++++
 .../floats/holder/PrimitiveFloatHolder.java        |  84 ++++++++++++++
 .../PrimitiveFloatHolder_actionReturning.java      |  39 +++++++
 ...veFloatHolder_mixinPropertyNamedNotEscaped.java |  39 +++++++
 ...rimitiveFloatHolder_mixinPropertyNavigable.java |  39 +++++++
 ...itiveFloatHolder_mixinPropertyWithCssClass.java |  40 +++++++
 ...pdateReadOnlyProperty2PromptInlineAsIfEdit.java |  49 ++++++++
 ...Holder_updateReadOnlyPropertyPositionPanel.java |  48 ++++++++
 ...er_updateReadOnlyPropertyPromptStyleInline.java |  49 ++++++++
 ...der_updateReadOnlyPropertyPromptStyleModal.java |  49 ++++++++
 ...teReadOnlyPropertyPromptStylePanelDropDown.java |  48 ++++++++
 ...r_updateReadOnlyPropertyPromptStyleSidebar.java |  49 ++++++++
 ...atHolder_updateReadOnlyPropertyWithChoices.java |  58 +++++++++
 .../floats/jdo/PrimitiveFloatJdoEntities.java      |  26 +++++
 .../jdo/PrimitiveFloatJdoEntity-description.adoc   |  30 +++++
 .../floats/jdo/PrimitiveFloatJdoEntity.java        |  67 +++++++++++
 .../floats/jdo/PrimitiveFloatJdoEntity.layout.xml  |  53 +++++++++
 .../jdo/PrimitiveFloatJdoEntitySeedService.java    |  42 +++++++
 .../vm/PrimitiveFloatViewModel-description.adoc    |  36 ++++++
 .../floats/vm/PrimitiveFloatViewModel.java         |  71 ++++++++++++
 .../floats/vm/PrimitiveFloatViewModel.layout.xml   |  53 +++++++++
 .../primitive/ints/PrimitiveInts-description.adoc  | 129 +++++++++++++++++++++
 .../dom/types/primitive/ints/PrimitiveInts.java    |  76 ++++++++++++
 .../types/primitive/ints/PrimitiveInts.layout.xml  |  46 ++++++++
 .../primitive/ints/holder/PrimitiveIntHolder.java  |  84 ++++++++++++++
 .../holder/PrimitiveIntHolder_actionReturning.java |  39 +++++++
 ...tiveIntHolder_mixinPropertyNamedNotEscaped.java |  39 +++++++
 .../PrimitiveIntHolder_mixinPropertyNavigable.java |  39 +++++++
 ...imitiveIntHolder_mixinPropertyWithCssClass.java |  40 +++++++
 ...pdateReadOnlyProperty2PromptInlineAsIfEdit.java |  49 ++++++++
 ...Holder_updateReadOnlyPropertyPositionPanel.java |  48 ++++++++
 ...er_updateReadOnlyPropertyPromptStyleInline.java |  49 ++++++++
 ...der_updateReadOnlyPropertyPromptStyleModal.java |  49 ++++++++
 ...teReadOnlyPropertyPromptStylePanelDropDown.java |  48 ++++++++
 ...r_updateReadOnlyPropertyPromptStyleSidebar.java |  49 ++++++++
 ...ntHolder_updateReadOnlyPropertyWithChoices.java |  58 +++++++++
 .../ints/jdo/PrimitiveIntJdoEntities.java          |  26 +++++
 .../jdo/PrimitiveIntJdoEntity-description.adoc     |  30 +++++
 .../primitive/ints/jdo/PrimitiveIntJdoEntity.java  |  67 +++++++++++
 .../ints/jdo/PrimitiveIntJdoEntity.layout.xml      |  53 +++++++++
 .../ints/jdo/PrimitiveIntJdoEntitySeedService.java |  42 +++++++
 .../ints/vm/PrimitiveIntViewModel-description.adoc |  36 ++++++
 .../primitive/ints/vm/PrimitiveIntViewModel.java   |  71 ++++++++++++
 .../ints/vm/PrimitiveIntViewModel.layout.xml       |  53 +++++++++
 .../longs/PrimitiveLongs-description.adoc          | 129 +++++++++++++++++++++
 .../dom/types/primitive/longs/PrimitiveLongs.java  |  76 ++++++++++++
 .../primitive/longs/PrimitiveLongs.layout.xml      |  46 ++++++++
 .../longs/holder/PrimitiveLongHolder.java          |  84 ++++++++++++++
 .../PrimitiveLongHolder_actionReturning.java       |  39 +++++++
 ...iveLongHolder_mixinPropertyNamedNotEscaped.java |  39 +++++++
 ...PrimitiveLongHolder_mixinPropertyNavigable.java |  39 +++++++
 ...mitiveLongHolder_mixinPropertyWithCssClass.java |  40 +++++++
 ...pdateReadOnlyProperty2PromptInlineAsIfEdit.java |  49 ++++++++
 ...Holder_updateReadOnlyPropertyPositionPanel.java |  48 ++++++++
 ...er_updateReadOnlyPropertyPromptStyleInline.java |  49 ++++++++
 ...der_updateReadOnlyPropertyPromptStyleModal.java |  49 ++++++++
 ...teReadOnlyPropertyPromptStylePanelDropDown.java |  48 ++++++++
 ...r_updateReadOnlyPropertyPromptStyleSidebar.java |  49 ++++++++
 ...ngHolder_updateReadOnlyPropertyWithChoices.java |  59 ++++++++++
 .../longs/jdo/PrimitiveLongJdoEntities.java        |  26 +++++
 .../jdo/PrimitiveLongJdoEntity-description.adoc    |  30 +++++
 .../longs/jdo/PrimitiveLongJdoEntity.java          |  67 +++++++++++
 .../longs/jdo/PrimitiveLongJdoEntity.layout.xml    |  53 +++++++++
 .../jdo/PrimitiveLongJdoEntitySeedService.java     |  42 +++++++
 .../vm/PrimitiveLongViewModel-description.adoc     |  36 ++++++
 .../primitive/longs/vm/PrimitiveLongViewModel.java |  71 ++++++++++++
 .../longs/vm/PrimitiveLongViewModel.layout.xml     |  53 +++++++++
 .../shorts/PrimitiveShorts-description.adoc        | 129 +++++++++++++++++++++
 .../types/primitive/shorts/PrimitiveShorts.java    |  76 ++++++++++++
 .../primitive/shorts/PrimitiveShorts.layout.xml    |  46 ++++++++
 .../shorts/holder/PrimitiveShortHolder.java        |  84 ++++++++++++++
 .../PrimitiveShortHolder_actionReturning.java      |  39 +++++++
 ...veShortHolder_mixinPropertyNamedNotEscaped.java |  39 +++++++
 ...rimitiveShortHolder_mixinPropertyNavigable.java |  39 +++++++
 ...itiveShortHolder_mixinPropertyWithCssClass.java |  40 +++++++
 ...pdateReadOnlyProperty2PromptInlineAsIfEdit.java |  49 ++++++++
 ...Holder_updateReadOnlyPropertyPositionPanel.java |  48 ++++++++
 ...er_updateReadOnlyPropertyPromptStyleInline.java |  49 ++++++++
 ...der_updateReadOnlyPropertyPromptStyleModal.java |  49 ++++++++
 ...teReadOnlyPropertyPromptStylePanelDropDown.java |  48 ++++++++
 ...r_updateReadOnlyPropertyPromptStyleSidebar.java |  49 ++++++++
 ...rtHolder_updateReadOnlyPropertyWithChoices.java |  64 ++++++++++
 .../shorts/jdo/PrimitiveShortJdoEntities.java      |  26 +++++
 .../jdo/PrimitiveShortJdoEntity-description.adoc   |  30 +++++
 .../shorts/jdo/PrimitiveShortJdoEntity.java        |  67 +++++++++++
 .../shorts/jdo/PrimitiveShortJdoEntity.layout.xml  |  53 +++++++++
 .../jdo/PrimitiveShortJdoEntitySeedService.java    |  47 ++++++++
 .../vm/PrimitiveShortViewModel-description.adoc    |  36 ++++++
 .../shorts/vm/PrimitiveShortViewModel.java         |  71 ++++++++++++
 .../shorts/vm/PrimitiveShortViewModel.layout.xml   |  53 +++++++++
 138 files changed, 7337 insertions(+)

diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/booleans/PrimitiveBooleans-description.adoc b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/booleans/PrimitiveBooleans-description.adoc
new file mode 100644
index 0000000..b9b86e0
--- /dev/null
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/booleans/PrimitiveBooleans-description.adoc
@@ -0,0 +1,129 @@
+The framework has built-in support for all of the primitive data types, including `boolean`.
+
+From here you can:
+
+* navigate to an entity that uses the `boolean` datatype
+* open a view model that uses the `boolean` datatype
+
+Because `boolean` is a primitive value, the properties on these domain objects are mandatory.
+
+== Common interface
+
+These objects both implement a common interface, `PrimitiveBooleanHolder`:
+
+[source,java]
+----
+public interface PrimitiveBooleanHolder {
+
+    boolean getReadOnlyProperty();
+    void setReadOnlyProperty(boolean c);
+
+    boolean getReadOnlyProperty2();
+    void setReadOnlyProperty2(boolean c);
+
+    boolean getReadWriteProperty();
+    void setReadWriteProperty(boolean c);
+
+    @MemberOrder(name = "label-positions", sequence = "1")
+    @Property
+    @PropertyLayout(labelPosition = LabelPosition.LEFT, describedAs = "labelPosition=LEFT", hidden = Where.ALL_TABLES)
+    default boolean getReadOnlyPropertyDerivedLabelPositionLeft() { return getReadOnlyProperty(); }
+
+    @MemberOrder(name = "label-positions", sequence = "2")
+    @Property
+    @PropertyLayout(labelPosition = LabelPosition.TOP, describedAs = "labelPosition=TOP", hidden = Where.ALL_TABLES)
+    default boolean getReadOnlyPropertyDerivedLabelPositionTop() { return getReadOnlyProperty(); }
+
+    @MemberOrder(name = "label-positions", sequence = "3")
+    @Property
+    @PropertyLayout(labelPosition = LabelPosition.RIGHT, describedAs = "labelPosition=RIGHT", hidden = Where.ALL_TABLES)
+    default boolean getReadOnlyPropertyDerivedLabelPositionRight() { return getReadOnlyProperty(); }
+
+    @MemberOrder(name = "label-positions", sequence = "4")
+    @Property
+    @PropertyLayout(labelPosition = LabelPosition.NONE, describedAs = "labelPosition=NONE", hidden = Where.ALL_TABLES)
+    default boolean 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 `boolean` as a parameter and as a return type.
+For example:
+
+* the `updateReadOnlyProperty` action is:
++
+[source,java]
+----
+@Action(
+        semantics = SemanticsOf.IDEMPOTENT,
+        associateWith = "readOnlyProperty",
+        associateWithSequence = "1"
+)
+@RequiredArgsConstructor
+public class PrimitiveBooleanHolder_updateReadOnlyProperty {
+
+    private final PrimitiveBooleanHolder primitiveBooleanHolder;
+
+    public PrimitiveBooleanHolder act(boolean newValue) {
+        primitiveBooleanHolder.setReadOnlyProperty(newValue);
+        return primitiveBooleanHolder;
+    }
+    public boolean default0Act() {
+        return primitiveBooleanHolder.getReadOnlyProperty();
+    }
+}
+----
++
+There are a number of variants of this action, to demonstrate different prompt layouts.
+
+* the `actionReturning` action is:
++
+[source,java]
+----
+@Action(
+        semantics = SemanticsOf.SAFE,
+        associateWith = "readOnlyProperty",
+        associateWithSequence = "3"
+)
+@RequiredArgsConstructor
+public class PrimitiveBooleanHolder_actionReturning {
+
+    private final PrimitiveBooleanHolder primitiveBooleanHolder;
+
+    public boolean act() {
+        return primitiveBooleanHolder.getReadOnlyProperty();
+    }
+}
+----
+
+== 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 PrimitiveBooleanHolder_mixinPropertyWithCssClass {
+
+    private final PrimitiveBooleanHolder primitiveBooleanHolder;
+
+    @MemberOrder(name = "contributed", sequence = "1")
+    public boolean prop() {
+        return primitiveBooleanHolder.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/booleans/PrimitiveBooleans.java b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/booleans/PrimitiveBooleans.java
new file mode 100644
index 0000000..449cae5
--- /dev/null
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/booleans/PrimitiveBooleans.java
@@ -0,0 +1,76 @@
+/*
+ *  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 demoapp.dom.types.primitive.booleans;
+
+import java.util.List;
+
+import javax.inject.Inject;
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlRootElement;
+import javax.xml.bind.annotation.XmlTransient;
+import javax.xml.bind.annotation.XmlType;
+
+import org.apache.isis.applib.annotation.Action;
+import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.Collection;
+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.PromptStyle;
+import org.apache.isis.applib.annotation.SemanticsOf;
+
+import lombok.extern.log4j.Log4j2;
+
+import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
+import demoapp.dom.types.primitive.booleans.jdo.PrimitiveBooleanJdoEntities;
+import demoapp.dom.types.primitive.booleans.jdo.PrimitiveBooleanJdoEntity;
+import demoapp.dom.types.primitive.booleans.vm.PrimitiveBooleanViewModel;
+
+@XmlRootElement(name = "Demo")
+@XmlType
+@XmlAccessorType(XmlAccessType.FIELD)
+@DomainObject(nature=Nature.VIEW_MODEL, objectType = "demo.PrimitiveBooleans", editing=Editing.ENABLED)
+@Log4j2
+public class PrimitiveBooleans implements HasAsciiDocDescription {
+
+    public String title() {
+        return "boolean (primitive) data type";
+    }
+
+    @Action(semantics = SemanticsOf.SAFE)
+    @ActionLayout(promptStyle = PromptStyle.DIALOG_MODAL)
+    public PrimitiveBooleanViewModel openViewModel(boolean initialValue) {
+        return new PrimitiveBooleanViewModel(initialValue);
+    }
+    public boolean default0OpenViewModel() {
+        return true;
+    }
+
+    @Collection
+    public List<PrimitiveBooleanJdoEntity> getEntities() {
+        return entities.all();
+    }
+
+    @Inject
+    @XmlTransient
+    PrimitiveBooleanJdoEntities entities;
+
+
+}
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/booleans/PrimitiveBooleans.layout.xml b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/booleans/PrimitiveBooleans.layout.xml
new file mode 100644
index 0000000..55c5b87
--- /dev/null
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/booleans/PrimitiveBooleans.layout.xml
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<bs3:grid
+        xsi:schemaLocation="http://isis.apache.org/applib/layout/component http://isis.apache.org/applib/layout/component/component.xsd   http://isis.apache.org/applib/layout/grid/bootstrap3 http://isis.apache.org/applib/layout/grid/bootstrap3/bootstrap3.xsd"
+        xmlns:bs3="http://isis.apache.org/applib/layout/grid/bootstrap3"
+        xmlns:cpt="http://isis.apache.org/applib/layout/component"
+        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+
+	<bs3:row>
+		<bs3:col span="10" unreferencedActions="true">
+			<cpt:domainObject />
+			<cpt:action id="rebuildMetamodel"/>
+		</bs3:col>
+		<bs3:col span="2">
+			<cpt:fieldSet name="" id="sources" />
+		</bs3:col>
+	</bs3:row>
+
+	<bs3:row>
+		<bs3:col span="6">
+			<bs3:row>
+				<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>
+		<bs3:col span="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" />
+				<cpt:property id="description"/>
+			</cpt:fieldSet>
+		</bs3:col>
+	</bs3:row>
+	<bs3:row>
+		<bs3:col span="12" unreferencedCollections="true"/>
+	</bs3:row>
+
+</bs3:grid>
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/booleans/holder/PrimitiveBooleanHolder.java b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/booleans/holder/PrimitiveBooleanHolder.java
new file mode 100644
index 0000000..f63cd30
--- /dev/null
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/booleans/holder/PrimitiveBooleanHolder.java
@@ -0,0 +1,84 @@
+/*
+ *  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 demoapp.dom.types.primitive.booleans.holder;
+
+import javax.jdo.annotations.DatastoreIdentity;
+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.LabelPosition;
+import org.apache.isis.applib.annotation.MemberOrder;
+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.Setter;
+import lombok.extern.log4j.Log4j2;
+
+import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
+
+public interface PrimitiveBooleanHolder {
+
+    @MemberOrder(name = "action-prompt-styles", sequence = "1") // TODO: doesn't seem to get picked up
+    @Property
+    @PropertyLayout
+    boolean isReadOnlyProperty();
+    void setReadOnlyProperty(boolean c);
+
+    @MemberOrder(name = "action-prompt-styles", sequence = "1") // TODO: doesn't seem to get picked up
+    @Property
+    @PropertyLayout(describedAs = "associated action uses promptStyle=INLINE_AS_IF_EDIT", hidden = Where.ALL_TABLES) // TODO: doesn't seem to get picked up
+    boolean isReadOnlyProperty2();
+    void setReadOnlyProperty2(boolean c);
+
+    @MemberOrder(name = "editable-properties", sequence = "1") // TODO: doesn't seem to get picked up
+    @Property
+    @PropertyLayout
+    boolean isReadWriteProperty();
+    void setReadWriteProperty(boolean c);
+
+    @MemberOrder(name = "label-positions", sequence = "1")
+    @Property
+    @PropertyLayout(labelPosition = LabelPosition.LEFT, describedAs = "labelPosition=LEFT", hidden = Where.ALL_TABLES)
+    default boolean isReadOnlyPropertyDerivedLabelPositionLeft() { return isReadOnlyProperty(); }
+
+    @MemberOrder(name = "label-positions", sequence = "2")
+    @Property
+    @PropertyLayout(labelPosition = LabelPosition.TOP, describedAs = "labelPosition=TOP", hidden = Where.ALL_TABLES)
+    default boolean isReadOnlyPropertyDerivedLabelPositionTop() { return isReadOnlyProperty(); }
+
+    @MemberOrder(name = "label-positions", sequence = "3")
+    @Property
+    @PropertyLayout(labelPosition = LabelPosition.RIGHT, describedAs = "labelPosition=RIGHT", hidden = Where.ALL_TABLES)
+    default boolean isReadOnlyPropertyDerivedLabelPositionRight() { return isReadOnlyProperty(); }
+
+    @MemberOrder(name = "label-positions", sequence = "4")
+    @Property
+    @PropertyLayout(labelPosition = LabelPosition.NONE, describedAs = "labelPosition=NONE", hidden = Where.ALL_TABLES)
+    default boolean isReadOnlyPropertyDerivedLabelPositionNone() { return isReadOnlyProperty(); }
+
+}
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/booleans/holder/PrimitiveBooleanHolder_actionReturning.java b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/booleans/holder/PrimitiveBooleanHolder_actionReturning.java
new file mode 100644
index 0000000..c3e25a8
--- /dev/null
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/booleans/holder/PrimitiveBooleanHolder_actionReturning.java
@@ -0,0 +1,39 @@
+/*
+ *  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 demoapp.dom.types.primitive.booleans.holder;
+
+import org.apache.isis.applib.annotation.Action;
+import org.apache.isis.applib.annotation.SemanticsOf;
+
+import lombok.RequiredArgsConstructor;
+
+
+@Action(
+        semantics = SemanticsOf.SAFE
+)
+@RequiredArgsConstructor
+public class PrimitiveBooleanHolder_actionReturning {
+
+    private final PrimitiveBooleanHolder primitiveBooleanHolder;
+
+    public boolean act() {
+        return primitiveBooleanHolder.isReadOnlyProperty();
+    }
+
+}
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/booleans/holder/PrimitiveBooleanHolder_mixinPropertyNamedNotEscaped.java b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/booleans/holder/PrimitiveBooleanHolder_mixinPropertyNamedNotEscaped.java
new file mode 100644
index 0000000..b3cd075
--- /dev/null
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/booleans/holder/PrimitiveBooleanHolder_mixinPropertyNamedNotEscaped.java
@@ -0,0 +1,39 @@
+/*
+ *  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 demoapp.dom.types.primitive.booleans.holder;
+
+import org.apache.isis.applib.annotation.MemberOrder;
+
+import lombok.RequiredArgsConstructor;
+
+
+//@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 PrimitiveBooleanHolder_mixinPropertyNamedNotEscaped {
+
+    private final PrimitiveBooleanHolder primitiveBooleanHolder;
+
+    @MemberOrder(name = "contributed", sequence = "3")
+    public boolean prop() {
+        return primitiveBooleanHolder.isReadOnlyProperty();
+    }
+
+
+}
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/booleans/holder/PrimitiveBooleanHolder_mixinPropertyNavigable.java b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/booleans/holder/PrimitiveBooleanHolder_mixinPropertyNavigable.java
new file mode 100644
index 0000000..06ed849
--- /dev/null
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/booleans/holder/PrimitiveBooleanHolder_mixinPropertyNavigable.java
@@ -0,0 +1,39 @@
+/*
+ *  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 demoapp.dom.types.primitive.booleans.holder;
+
+import org.apache.isis.applib.annotation.MemberOrder;
+
+import lombok.RequiredArgsConstructor;
+
+
+//@Property()
+//@PropertyLayout( navigable = Navigable.PARENT, describedAs = "navigable=PARENT") // TODO: doesn't seem to do anything
+@RequiredArgsConstructor
+public class PrimitiveBooleanHolder_mixinPropertyNavigable {
+
+    private final PrimitiveBooleanHolder primitiveBooleanHolder;
+
+    @MemberOrder(name = "contributed", sequence = "1")
+    public boolean prop() {
+        return primitiveBooleanHolder.isReadOnlyProperty();
+    }
+
+
+}
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/booleans/holder/PrimitiveBooleanHolder_mixinPropertyWithCssClass.java b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/booleans/holder/PrimitiveBooleanHolder_mixinPropertyWithCssClass.java
new file mode 100644
index 0000000..3ab2167
--- /dev/null
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/booleans/holder/PrimitiveBooleanHolder_mixinPropertyWithCssClass.java
@@ -0,0 +1,40 @@
+/*
+ *  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 demoapp.dom.types.primitive.booleans.holder;
+
+import org.apache.isis.applib.annotation.MemberOrder;
+import org.apache.isis.applib.annotation.Property;
+import org.apache.isis.applib.annotation.PropertyLayout;
+import org.apache.isis.applib.annotation.Where;
+
+import lombok.RequiredArgsConstructor;
+
+
+@Property()
+@PropertyLayout(cssClass = "red", describedAs = "cssClass = \"red\" ", hidden = Where.ALL_TABLES)
+@RequiredArgsConstructor
+public class PrimitiveBooleanHolder_mixinPropertyWithCssClass {
+
+    private final PrimitiveBooleanHolder primitiveBooleanHolder;
+
+    @MemberOrder(name = "contributed", sequence = "1")
+    public boolean prop() {
+        return primitiveBooleanHolder.isReadOnlyProperty();
+    }
+}
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/booleans/holder/PrimitiveBooleanHolder_updateReadOnlyProperty2PromptInlineAsIfEdit.java b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/booleans/holder/PrimitiveBooleanHolder_updateReadOnlyProperty2PromptInlineAsIfEdit.java
new file mode 100644
index 0000000..8585511
--- /dev/null
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/booleans/holder/PrimitiveBooleanHolder_updateReadOnlyProperty2PromptInlineAsIfEdit.java
@@ -0,0 +1,49 @@
+/*
+ *  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 demoapp.dom.types.primitive.booleans.holder;
+
+import org.apache.isis.applib.annotation.Action;
+import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.PromptStyle;
+import org.apache.isis.applib.annotation.SemanticsOf;
+
+import lombok.RequiredArgsConstructor;
+
+
+@Action(
+        semantics = SemanticsOf.IDEMPOTENT,
+        associateWith = "readOnlyProperty2",
+        associateWithSequence = "1"
+)
+@ActionLayout(promptStyle = PromptStyle.INLINE_AS_IF_EDIT)
+@RequiredArgsConstructor
+public class PrimitiveBooleanHolder_updateReadOnlyProperty2PromptInlineAsIfEdit {
+
+    private final PrimitiveBooleanHolder primitiveBooleanHolder;
+
+    public PrimitiveBooleanHolder act(boolean newValue) {
+        primitiveBooleanHolder.setReadOnlyProperty2(newValue);
+        return primitiveBooleanHolder;
+    }
+    public boolean default0Act() {
+        return primitiveBooleanHolder.isReadOnlyProperty2();
+    }
+
+
+}
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/booleans/holder/PrimitiveBooleanHolder_updateReadOnlyPropertyPositionPanel.java b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/booleans/holder/PrimitiveBooleanHolder_updateReadOnlyPropertyPositionPanel.java
new file mode 100644
index 0000000..a85cfc4
--- /dev/null
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/booleans/holder/PrimitiveBooleanHolder_updateReadOnlyPropertyPositionPanel.java
@@ -0,0 +1,48 @@
+/*
+ *  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 demoapp.dom.types.primitive.booleans.holder;
+
+import org.apache.isis.applib.annotation.Action;
+import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.SemanticsOf;
+
+import lombok.RequiredArgsConstructor;
+
+
+@Action(
+        semantics = SemanticsOf.IDEMPOTENT,
+        associateWith = "readOnlyProperty",
+        associateWithSequence = "2"
+)
+@ActionLayout(position = ActionLayout.Position.PANEL, named = "Position in panel", describedAs = "position = PANEL")
+@RequiredArgsConstructor
+public class PrimitiveBooleanHolder_updateReadOnlyPropertyPositionPanel {
+
+    private final PrimitiveBooleanHolder primitiveBooleanHolder;
+
+    public PrimitiveBooleanHolder act(boolean newValue) {
+        primitiveBooleanHolder.setReadOnlyProperty(newValue);
+        return primitiveBooleanHolder;
+    }
+    public boolean default0Act() {
+        return primitiveBooleanHolder.isReadOnlyProperty();
+    }
+
+
+}
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/booleans/holder/PrimitiveBooleanHolder_updateReadOnlyPropertyPromptStyleInline.java b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/booleans/holder/PrimitiveBooleanHolder_updateReadOnlyPropertyPromptStyleInline.java
new file mode 100644
index 0000000..6d6fe54
--- /dev/null
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/booleans/holder/PrimitiveBooleanHolder_updateReadOnlyPropertyPromptStyleInline.java
@@ -0,0 +1,49 @@
+/*
+ *  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 demoapp.dom.types.primitive.booleans.holder;
+
+import org.apache.isis.applib.annotation.Action;
+import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.PromptStyle;
+import org.apache.isis.applib.annotation.SemanticsOf;
+
+import lombok.RequiredArgsConstructor;
+
+
+@Action(
+        semantics = SemanticsOf.IDEMPOTENT,
+        associateWith = "readOnlyProperty",
+        associateWithSequence = "1"
+)
+@ActionLayout(promptStyle = PromptStyle.INLINE, named = "Inline", describedAs = "promptStyle = INLINE")
+@RequiredArgsConstructor
+public class PrimitiveBooleanHolder_updateReadOnlyPropertyPromptStyleInline {
+
+    private final PrimitiveBooleanHolder primitiveBooleanHolder;
+
+    public PrimitiveBooleanHolder act(boolean newValue) {
+        primitiveBooleanHolder.setReadOnlyProperty(newValue);
+        return primitiveBooleanHolder;
+    }
+    public boolean default0Act() {
+        return primitiveBooleanHolder.isReadOnlyProperty();
+    }
+
+
+}
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/booleans/holder/PrimitiveBooleanHolder_updateReadOnlyPropertyPromptStyleModal.java b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/booleans/holder/PrimitiveBooleanHolder_updateReadOnlyPropertyPromptStyleModal.java
new file mode 100644
index 0000000..62c46a1
--- /dev/null
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/booleans/holder/PrimitiveBooleanHolder_updateReadOnlyPropertyPromptStyleModal.java
@@ -0,0 +1,49 @@
+/*
+ *  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 demoapp.dom.types.primitive.booleans.holder;
+
+import org.apache.isis.applib.annotation.Action;
+import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.PromptStyle;
+import org.apache.isis.applib.annotation.SemanticsOf;
+
+import lombok.RequiredArgsConstructor;
+
+
+@Action(
+        semantics = SemanticsOf.IDEMPOTENT,
+        associateWith = "readOnlyProperty",
+        associateWithSequence = "2"
+)
+@ActionLayout(promptStyle = PromptStyle.DIALOG_MODAL, named = "Modal", describedAs = "promptStyle = MODAL")
+@RequiredArgsConstructor
+public class PrimitiveBooleanHolder_updateReadOnlyPropertyPromptStyleModal {
+
+    private final PrimitiveBooleanHolder primitiveBooleanHolder;
+
+    public PrimitiveBooleanHolder act(boolean newValue) {
+        primitiveBooleanHolder.setReadOnlyProperty(newValue);
+        return primitiveBooleanHolder;
+    }
+    public boolean default0Act() {
+        return primitiveBooleanHolder.isReadOnlyProperty();
+    }
+
+
+}
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/booleans/holder/PrimitiveBooleanHolder_updateReadOnlyPropertyPromptStylePanelDropDown.java b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/booleans/holder/PrimitiveBooleanHolder_updateReadOnlyPropertyPromptStylePanelDropDown.java
new file mode 100644
index 0000000..0c59f63
--- /dev/null
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/booleans/holder/PrimitiveBooleanHolder_updateReadOnlyPropertyPromptStylePanelDropDown.java
@@ -0,0 +1,48 @@
+/*
+ *  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 demoapp.dom.types.primitive.booleans.holder;
+
+import org.apache.isis.applib.annotation.Action;
+import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.SemanticsOf;
+
+import lombok.RequiredArgsConstructor;
+
+
+@Action(
+        semantics = SemanticsOf.IDEMPOTENT,
+        associateWith = "readOnlyProperty",
+        associateWithSequence = "3"
+)
+@ActionLayout(position = ActionLayout.Position.PANEL_DROPDOWN, named = "Panel Dropdown", describedAs = "position = PANEL_DROPDOWN")
+@RequiredArgsConstructor
+public class PrimitiveBooleanHolder_updateReadOnlyPropertyPromptStylePanelDropDown {
+
+    private final PrimitiveBooleanHolder primitiveBooleanHolder;
+
+    public PrimitiveBooleanHolder act(boolean newValue) {
+        primitiveBooleanHolder.setReadOnlyProperty(newValue);
+        return primitiveBooleanHolder;
+    }
+    public boolean default0Act() {
+        return primitiveBooleanHolder.isReadOnlyProperty();
+    }
+
+
+}
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/booleans/holder/PrimitiveBooleanHolder_updateReadOnlyPropertyPromptStyleSidebar.java b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/booleans/holder/PrimitiveBooleanHolder_updateReadOnlyPropertyPromptStyleSidebar.java
new file mode 100644
index 0000000..09d536c
--- /dev/null
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/booleans/holder/PrimitiveBooleanHolder_updateReadOnlyPropertyPromptStyleSidebar.java
@@ -0,0 +1,49 @@
+/*
+ *  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 demoapp.dom.types.primitive.booleans.holder;
+
+import org.apache.isis.applib.annotation.Action;
+import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.PromptStyle;
+import org.apache.isis.applib.annotation.SemanticsOf;
+
+import lombok.RequiredArgsConstructor;
+
+
+@Action(
+        semantics = SemanticsOf.IDEMPOTENT,
+        associateWith = "readOnlyProperty",
+        associateWithSequence = "3"
+)
+@ActionLayout(promptStyle = PromptStyle.DIALOG_SIDEBAR, named = "sidebar", describedAs = "promptStyle = DIALOG_SIDEBAR")
+@RequiredArgsConstructor
+public class PrimitiveBooleanHolder_updateReadOnlyPropertyPromptStyleSidebar {
+
+    private final PrimitiveBooleanHolder primitiveBooleanHolder;
+
+    public PrimitiveBooleanHolder act(boolean newValue) {
+        primitiveBooleanHolder.setReadOnlyProperty(newValue);
+        return primitiveBooleanHolder;
+    }
+    public boolean default0Act() {
+        return primitiveBooleanHolder.isReadOnlyProperty();
+    }
+
+
+}
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/booleans/holder/PrimitiveBooleanHolder_updateReadOnlyPropertyWithChoices.java b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/booleans/holder/PrimitiveBooleanHolder_updateReadOnlyPropertyWithChoices.java
new file mode 100644
index 0000000..f7a6a77
--- /dev/null
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/booleans/holder/PrimitiveBooleanHolder_updateReadOnlyPropertyWithChoices.java
@@ -0,0 +1,58 @@
+/*
+ *  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 demoapp.dom.types.primitive.booleans.holder;
+
+import java.util.List;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+
+import org.apache.isis.applib.annotation.Action;
+import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.PromptStyle;
+import org.apache.isis.applib.annotation.SemanticsOf;
+
+import lombok.RequiredArgsConstructor;
+
+
+@Action(
+        semantics = SemanticsOf.IDEMPOTENT,
+        associateWith = "readOnlyProperty",
+        associateWithSequence = "4"
+)
+@ActionLayout(promptStyle = PromptStyle.AS_CONFIGURED, named = "with choices")
+@RequiredArgsConstructor
+public class PrimitiveBooleanHolder_updateReadOnlyPropertyWithChoices {
+
+    private final PrimitiveBooleanHolder primitiveBooleanHolder;
+
+    public PrimitiveBooleanHolder act(boolean newValue) {
+        primitiveBooleanHolder.setReadOnlyProperty(newValue);
+        return primitiveBooleanHolder;
+    }
+    public boolean default0Act() {
+        return primitiveBooleanHolder.isReadOnlyProperty();
+    }
+    public List<Boolean> choices0Act() {
+        return Stream.of(true,false).collect(Collectors.toList());
+    }
+    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/booleans/jdo/PrimitiveBooleanJdoEntities.java b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/booleans/jdo/PrimitiveBooleanJdoEntities.java
new file mode 100644
index 0000000..731e6b6
--- /dev/null
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/booleans/jdo/PrimitiveBooleanJdoEntities.java
@@ -0,0 +1,26 @@
+package demoapp.dom.types.primitive.booleans.jdo;
+
+import java.util.List;
+import java.util.Optional;
+
+import javax.inject.Inject;
+
+import org.springframework.stereotype.Service;
+
+import org.apache.isis.applib.services.repository.RepositoryService;
+
+@Service
+public class PrimitiveBooleanJdoEntities {
+
+    public Optional<PrimitiveBooleanJdoEntity> find(final boolean readOnlyProperty) {
+        return repositoryService.firstMatch(PrimitiveBooleanJdoEntity.class, x -> x.isReadOnlyProperty() == readOnlyProperty);
+    }
+
+    public List<PrimitiveBooleanJdoEntity> all() {
+        return repositoryService.allInstances(PrimitiveBooleanJdoEntity.class);
+    }
+
+    @Inject
+    RepositoryService repositoryService;
+
+}
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/booleans/jdo/PrimitiveBooleanJdoEntity-description.adoc b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/booleans/jdo/PrimitiveBooleanJdoEntity-description.adoc
new file mode 100644
index 0000000..e129c91
--- /dev/null
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/booleans/jdo/PrimitiveBooleanJdoEntity-description.adoc
@@ -0,0 +1,31 @@
+JDO package demoapp.dom.types.primitive.booleans
+`boolean` out-of-the-box, so no special annotations are required.
+
+[source,java]
+----
+@PersistenceCapable(identityType = IdentityType.DATASTORE, schema = "demo")
+@DatastoreIdentity(strategy = IdGeneratorStrategy.IDENTITY, column = "id")
+@DomainObject(
+        objectType = "demo.PrimitiveBooleanJdoEntity"
+)
+public class PrimitiveBooleanJdoEntity
+    implements HasAsciiDocDescription,   PrimitiveBooleanHolder {          // <.>
+
+    public PrimitiveBooleanJdoEntity(boolean initialValue) { ... }            // <.>
+
+    @Title(prepend = "boolean (primitive) JDO entity: ")
+    @Getter @Setter
+    private boolean readOnlyProperty;                                      // <.>
+
+    @Getter @Setter
+    private boolean readOnlyProperty2;
+
+    @Getter @Setter
+    @Property(editing = Editing.ENABLED)
+    private boolean readWriteProperty;
+
+}
+----
+<.> 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/booleans/jdo/PrimitiveBooleanJdoEntity.java b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/booleans/jdo/PrimitiveBooleanJdoEntity.java
new file mode 100644
index 0000000..d4dcf48
--- /dev/null
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/booleans/jdo/PrimitiveBooleanJdoEntity.java
@@ -0,0 +1,67 @@
+/*
+ *  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 demoapp.dom.types.primitive.booleans.jdo;
+
+import javax.jdo.annotations.DatastoreIdentity;
+import javax.jdo.annotations.IdGeneratorStrategy;
+import javax.jdo.annotations.IdentityType;
+import javax.jdo.annotations.PersistenceCapable;
+
+import org.apache.isis.applib.annotation.DomainObject;
+import org.apache.isis.applib.annotation.Editing;
+import org.apache.isis.applib.annotation.Property;
+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 demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
+import demoapp.dom.types.primitive.booleans.holder.PrimitiveBooleanHolder;
+
+@PersistenceCapable(identityType = IdentityType.DATASTORE, schema = "demo")
+@DatastoreIdentity(strategy = IdGeneratorStrategy.IDENTITY, column = "id")
+@DomainObject(
+        objectType = "demo.PrimitiveBooleanJdoEntity"
+)
+public class PrimitiveBooleanJdoEntity
+        implements HasAsciiDocDescription,
+        PrimitiveBooleanHolder {
+
+    public PrimitiveBooleanJdoEntity(boolean initialValue) {
+        this.readOnlyProperty = initialValue;
+        this.readOnlyProperty2 = initialValue;
+        this.readWriteProperty = initialValue;
+    }
+
+    @Title(prepend = "boolean (primitive) JDO entity: ")
+    @Getter @Setter
+    private boolean readOnlyProperty;
+
+    @Property
+    @PropertyLayout(hidden = Where.ALL_TABLES)
+    @Getter @Setter
+    private boolean readOnlyProperty2;
+
+    @Getter @Setter
+    @Property(editing = Editing.ENABLED)
+    private boolean readWriteProperty;
+
+}
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/booleans/jdo/PrimitiveBooleanJdoEntity.layout.xml b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/booleans/jdo/PrimitiveBooleanJdoEntity.layout.xml
new file mode 100644
index 0000000..ffa55a8
--- /dev/null
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/booleans/jdo/PrimitiveBooleanJdoEntity.layout.xml
@@ -0,0 +1,53 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<bs3:grid
+        xsi:schemaLocation="http://isis.apache.org/applib/layout/component http://isis.apache.org/applib/layout/component/component.xsd   http://isis.apache.org/applib/layout/grid/bootstrap3 http://isis.apache.org/applib/layout/grid/bootstrap3/bootstrap3.xsd"
+        xmlns:bs3="http://isis.apache.org/applib/layout/grid/bootstrap3"
+        xmlns:cpt="http://isis.apache.org/applib/layout/component"
+        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+
+	<bs3:row>
+		<bs3:col span="10" unreferencedActions="true">
+			<cpt:domainObject />
+			<cpt:action id="actionReturning"/>
+			<cpt:action id="rebuildMetamodel"/>
+		</bs3:col>
+		<bs3:col span="2">
+			<cpt:fieldSet name="" id="sources" />
+		</bs3:col>
+	</bs3:row>
+
+	<bs3:row>
+		<bs3:col span="6">
+			<cpt:fieldSet name="Action Prompt Styles" id="action-prompt-styles">
+				<cpt:property id="readOnlyProperty" />
+				<cpt:property id="readOnlyProperty2" >
+					<cpt:describedAs>
+						Associated action uses promptStyle=INLINE_AS_IF_EDIT
+					</cpt:describedAs>
+				</cpt:property>
+			</cpt:fieldSet>
+			<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">
+			<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="downloadJdoMetadata"  position="PANEL_DROPDOWN"/>
+				<cpt:action id="openRestApi" position="PANEL_DROPDOWN" />
+				<cpt:property id="description"/>
+			</cpt:fieldSet>
+		</bs3:col>
+	</bs3:row>
+	<bs3:row>
+		<bs3:col span="12" unreferencedCollections="true"/>
+	</bs3:row>
+
+</bs3:grid>
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/booleans/jdo/PrimitiveBooleanJdoEntitySeedService.java b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/booleans/jdo/PrimitiveBooleanJdoEntitySeedService.java
new file mode 100644
index 0000000..cef4f3a
--- /dev/null
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/booleans/jdo/PrimitiveBooleanJdoEntitySeedService.java
@@ -0,0 +1,42 @@
+package demoapp.dom.types.primitive.booleans.jdo;
+
+import java.util.stream.Stream;
+
+import javax.inject.Inject;
+
+import org.springframework.context.event.EventListener;
+import org.springframework.stereotype.Service;
+
+import org.apache.isis.applib.services.repository.RepositoryService;
+import org.apache.isis.core.runtime.events.app.AppLifecycleEvent;
+import org.apache.isis.testing.fixtures.applib.fixturescripts.FixtureScript;
+import org.apache.isis.testing.fixtures.applib.fixturescripts.FixtureScripts;
+
+@Service
+public class PrimitiveBooleanJdoEntitySeedService {
+
+    @EventListener(AppLifecycleEvent.class)
+    public void onAppLifecycleEvent(AppLifecycleEvent event) {
+
+        if (event.getEventType() == AppLifecycleEvent.EventType.appPostMetamodel) {
+            fixtureScripts.run(new PrimitiveBooleanJdoEntityFixture());
+        }
+    }
+
+    @Inject
+    FixtureScripts fixtureScripts;
+
+    static class PrimitiveBooleanJdoEntityFixture extends FixtureScript {
+
+        @Override
+        protected void execute(ExecutionContext executionContext) {
+            Stream.of(true,false)
+                    .map(PrimitiveBooleanJdoEntity::new)
+                    .forEach(repositoryService::persist);
+        }
+
+        @Inject
+        RepositoryService repositoryService;
+
+    }
+}
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/booleans/vm/PrimitiveBooleanViewModel-description.adoc b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/booleans/vm/PrimitiveBooleanViewModel-description.adoc
new file mode 100644
index 0000000..674f79b
--- /dev/null
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/booleans/vm/PrimitiveBooleanViewModel-description.adoc
@@ -0,0 +1,36 @@
+JAXB supports `boolean` out-of-the-box, so no special annotations are required.
+
+[source,java]
+----
+@XmlRootElement(name = "demo.PrimitiveBooleanViewModel")
+@XmlType
+@XmlAccessorType(XmlAccessType.FIELD)
+@DomainObject(
+        nature=Nature.VIEW_MODEL,
+        objectType = "demo.PrimitiveBooleanViewModel"
+)
+@lombok.NoArgsConstructor                               // <.>
+public class PrimitiveBooleanViewModel
+        implements HasAsciiDocDescription,
+                   PrimitiveBooleanHolder {
+
+    public PrimitiveBooleanViewModel(boolean initialValue) {  // <.>
+        // ...
+    }
+
+    @Title(prepend = "boolean (primitive) view model: ")
+    @Getter @Setter
+    private boolean readOnlyProperty;                      // <.>
+
+    @Getter @Setter
+    private boolean readOnlyProperty2;
+
+    @Getter @Setter
+    @Property(editing = Editing.ENABLED)
+    private boolean readWriteProperty;
+
+}
+----
+<.> a no-arg constructor is required by JAXB
+<.> 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/booleans/vm/PrimitiveBooleanViewModel.java b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/booleans/vm/PrimitiveBooleanViewModel.java
new file mode 100644
index 0000000..a67c506
--- /dev/null
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/booleans/vm/PrimitiveBooleanViewModel.java
@@ -0,0 +1,71 @@
+/*
+ *  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 demoapp.dom.types.primitive.booleans.vm;
+
+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.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.Title;
+import org.apache.isis.applib.annotation.Where;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
+import demoapp.dom.types.primitive.booleans.holder.PrimitiveBooleanHolder;
+
+@XmlRootElement(name = "demo.PrimitiveBooleanViewModel")
+@XmlType
+@XmlAccessorType(XmlAccessType.FIELD)
+@DomainObject(
+        nature=Nature.VIEW_MODEL,
+        objectType = "demo.PrimitiveBooleanViewModel"
+)
+@lombok.NoArgsConstructor
+public class PrimitiveBooleanViewModel
+        implements HasAsciiDocDescription,
+        PrimitiveBooleanHolder {
+
+    public PrimitiveBooleanViewModel(boolean initialValue) {
+        this.readOnlyProperty = initialValue;
+        this.readOnlyProperty2 = initialValue;
+        this.readWriteProperty = initialValue;
+    }
+
+    @Title(prepend = "boolean (primitive) view model: ")
+    @Getter @Setter
+    private boolean readOnlyProperty;
+
+    @Property
+    @PropertyLayout(hidden = Where.ALL_TABLES)
+    @Getter @Setter
+    private boolean readOnlyProperty2;
+
+    @Getter @Setter
+    @Property(editing = Editing.ENABLED)
+    private boolean readWriteProperty;
+
+}
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/booleans/vm/PrimitiveBooleanViewModel.layout.xml b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/booleans/vm/PrimitiveBooleanViewModel.layout.xml
new file mode 100644
index 0000000..ffa55a8
--- /dev/null
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/booleans/vm/PrimitiveBooleanViewModel.layout.xml
@@ -0,0 +1,53 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<bs3:grid
+        xsi:schemaLocation="http://isis.apache.org/applib/layout/component http://isis.apache.org/applib/layout/component/component.xsd   http://isis.apache.org/applib/layout/grid/bootstrap3 http://isis.apache.org/applib/layout/grid/bootstrap3/bootstrap3.xsd"
+        xmlns:bs3="http://isis.apache.org/applib/layout/grid/bootstrap3"
+        xmlns:cpt="http://isis.apache.org/applib/layout/component"
+        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+
+	<bs3:row>
+		<bs3:col span="10" unreferencedActions="true">
+			<cpt:domainObject />
+			<cpt:action id="actionReturning"/>
+			<cpt:action id="rebuildMetamodel"/>
+		</bs3:col>
+		<bs3:col span="2">
+			<cpt:fieldSet name="" id="sources" />
+		</bs3:col>
+	</bs3:row>
+
+	<bs3:row>
+		<bs3:col span="6">
+			<cpt:fieldSet name="Action Prompt Styles" id="action-prompt-styles">
+				<cpt:property id="readOnlyProperty" />
+				<cpt:property id="readOnlyProperty2" >
+					<cpt:describedAs>
+						Associated action uses promptStyle=INLINE_AS_IF_EDIT
+					</cpt:describedAs>
+				</cpt:property>
+			</cpt:fieldSet>
+			<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">
+			<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="downloadJdoMetadata"  position="PANEL_DROPDOWN"/>
+				<cpt:action id="openRestApi" position="PANEL_DROPDOWN" />
+				<cpt:property id="description"/>
+			</cpt:fieldSet>
+		</bs3:col>
+	</bs3:row>
+	<bs3:row>
+		<bs3:col span="12" unreferencedCollections="true"/>
+	</bs3:row>
+
+</bs3:grid>
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/doubles/PrimitiveDoubles-description.adoc b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/doubles/PrimitiveDoubles-description.adoc
new file mode 100644
index 0000000..5854c68
--- /dev/null
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/doubles/PrimitiveDoubles-description.adoc
@@ -0,0 +1,129 @@
+The framework has built-in support for all of the primitive data types, including `double`.
+
+From here you can:
+
+* navigate to an entity that uses the `double` datatype
+* open a view model that uses the `double` datatype
+
+Because `double` is a primitive value, the properties on these domain objects are mandatory.
+
+== Common interface
+
+These objects both implement a common interface, `PrimitiveCharHolder`:
+
+[source,java]
+----
+public interface PrimitiveDoubleHolder {
+
+    double getReadOnlyProperty();
+    void setReadOnlyProperty(double c);
+
+    double getReadOnlyProperty2();
+    void setReadOnlyProperty2(double c);
+
+    double getReadWriteProperty();
+    void setReadWriteProperty(double c);
+
+    @MemberOrder(name = "label-positions", sequence = "1")
+    @Property
+    @PropertyLayout(labelPosition = LabelPosition.LEFT, describedAs = "labelPosition=LEFT", hidden = Where.ALL_TABLES)
+    default double getReadOnlyPropertyDerivedLabelPositionLeft() { return getReadOnlyProperty(); }
+
+    @MemberOrder(name = "label-positions", sequence = "2")
+    @Property
+    @PropertyLayout(labelPosition = LabelPosition.TOP, describedAs = "labelPosition=TOP", hidden = Where.ALL_TABLES)
+    default double getReadOnlyPropertyDerivedLabelPositionTop() { return getReadOnlyProperty(); }
+
+    @MemberOrder(name = "label-positions", sequence = "3")
+    @Property
+    @PropertyLayout(labelPosition = LabelPosition.RIGHT, describedAs = "labelPosition=RIGHT", hidden = Where.ALL_TABLES)
+    default double getReadOnlyPropertyDerivedLabelPositionRight() { return getReadOnlyProperty(); }
+
+    @MemberOrder(name = "label-positions", sequence = "4")
+    @Property
+    @PropertyLayout(labelPosition = LabelPosition.NONE, describedAs = "labelPosition=NONE", hidden = Where.ALL_TABLES)
+    default double 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 `double` as a parameter and as a return type.
+For example:
+
+* the `updateReadOnlyProperty` action is:
++
+[source,java]
+----
+@Action(
+        semantics = SemanticsOf.IDEMPOTENT,
+        associateWith = "readOnlyProperty",
+        associateWithSequence = "1"
+)
+@RequiredArgsConstructor
+public class PrimitiveDoubleHolder_updateReadOnlyProperty {
+
+    private final PrimitiveDoubleHolder primitiveDoubleHolder;
+
+    public PrimitiveDoubleHolder act(double newValue) {
+        primitiveDoubleHolder.setReadOnlyProperty(newValue);
+        return primitiveDoubleHolder;
+    }
+    public double default0Act() {
+        return primitiveDoubleHolder.getReadOnlyProperty();
+    }
+}
+----
++
+There are a number of variants of this action, to demonstrate different prompt layouts.
+
+* the `actionReturning` action is:
++
+[source,java]
+----
+@Action(
+        semantics = SemanticsOf.SAFE,
+        associateWith = "readOnlyProperty",
+        associateWithSequence = "3"
+)
+@RequiredArgsConstructor
+public class PrimitiveDoubleHolder_actionReturning {
+
+    private final PrimitiveDoubleHolder primitiveDoubleHolder;
+
+    public double act() {
+        return primitiveDoubleHolder.getReadOnlyProperty();
+    }
+}
+----
+
+== 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 PrimitiveDoubleHolder_mixinPropertyWithCssClass {
+
+    private final PrimitiveDoubleHolder primitiveDoubleHolder;
+
+    @MemberOrder(name = "contributed", sequence = "1")
+    public double prop() {
+        return primitiveDoubleHolder.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/doubles/PrimitiveDoubles.java b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/doubles/PrimitiveDoubles.java
new file mode 100644
index 0000000..22e84b2
--- /dev/null
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/doubles/PrimitiveDoubles.java
@@ -0,0 +1,76 @@
+/*
+ *  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 demoapp.dom.types.primitive.doubles;
+
+import java.util.List;
+
+import javax.inject.Inject;
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlRootElement;
+import javax.xml.bind.annotation.XmlTransient;
+import javax.xml.bind.annotation.XmlType;
+
+import org.apache.isis.applib.annotation.Action;
+import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.Collection;
+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.PromptStyle;
+import org.apache.isis.applib.annotation.SemanticsOf;
+
+import lombok.extern.log4j.Log4j2;
+
+import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
+import demoapp.dom.types.primitive.doubles.jdo.PrimitiveDoubleJdoEntities;
+import demoapp.dom.types.primitive.doubles.jdo.PrimitiveDoubleJdoEntity;
+import demoapp.dom.types.primitive.doubles.vm.PrimitiveDoubleViewModel;
+
+@XmlRootElement(name = "Demo")
+@XmlType
+@XmlAccessorType(XmlAccessType.FIELD)
+@DomainObject(nature=Nature.VIEW_MODEL, objectType = "demo.PrimitiveDoubles", editing=Editing.ENABLED)
+@Log4j2
+public class PrimitiveDoubles implements HasAsciiDocDescription {
+
+    public String title() {
+        return "double (primitive) data type";
+    }
+
+    @Action(semantics = SemanticsOf.SAFE)
+    @ActionLayout(promptStyle = PromptStyle.DIALOG_MODAL)
+    public PrimitiveDoubleViewModel openViewModel(double initialValue) {
+        return new PrimitiveDoubleViewModel(initialValue);
+    }
+    public double default0OpenViewModel() {
+        return 1234.5678;
+    }
+
+    @Collection
+    public List<PrimitiveDoubleJdoEntity> getEntities() {
+        return entities.all();
+    }
+
+    @Inject
+    @XmlTransient
+    PrimitiveDoubleJdoEntities entities;
+
+
+}
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/doubles/PrimitiveDoubles.layout.xml b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/doubles/PrimitiveDoubles.layout.xml
new file mode 100644
index 0000000..55c5b87
--- /dev/null
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/doubles/PrimitiveDoubles.layout.xml
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<bs3:grid
+        xsi:schemaLocation="http://isis.apache.org/applib/layout/component http://isis.apache.org/applib/layout/component/component.xsd   http://isis.apache.org/applib/layout/grid/bootstrap3 http://isis.apache.org/applib/layout/grid/bootstrap3/bootstrap3.xsd"
+        xmlns:bs3="http://isis.apache.org/applib/layout/grid/bootstrap3"
+        xmlns:cpt="http://isis.apache.org/applib/layout/component"
+        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+
+	<bs3:row>
+		<bs3:col span="10" unreferencedActions="true">
+			<cpt:domainObject />
+			<cpt:action id="rebuildMetamodel"/>
+		</bs3:col>
+		<bs3:col span="2">
+			<cpt:fieldSet name="" id="sources" />
+		</bs3:col>
+	</bs3:row>
+
+	<bs3:row>
+		<bs3:col span="6">
+			<bs3:row>
+				<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>
+		<bs3:col span="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" />
+				<cpt:property id="description"/>
+			</cpt:fieldSet>
+		</bs3:col>
+	</bs3:row>
+	<bs3:row>
+		<bs3:col span="12" unreferencedCollections="true"/>
+	</bs3:row>
+
+</bs3:grid>
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/doubles/holder/PrimitiveDoubleHolder.java b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/doubles/holder/PrimitiveDoubleHolder.java
new file mode 100644
index 0000000..a9ffbbc
--- /dev/null
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/doubles/holder/PrimitiveDoubleHolder.java
@@ -0,0 +1,84 @@
+/*
+ *  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 demoapp.dom.types.primitive.doubles.holder;
+
+import javax.jdo.annotations.DatastoreIdentity;
+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.LabelPosition;
+import org.apache.isis.applib.annotation.MemberOrder;
+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.Setter;
+import lombok.extern.log4j.Log4j2;
+
+import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
+
+public interface PrimitiveDoubleHolder {
+
+    @MemberOrder(name = "action-prompt-styles", sequence = "1") // TODO: doesn't seem to get picked up
+    @Property
+    @PropertyLayout
+    double getReadOnlyProperty();
+    void setReadOnlyProperty(double c);
+
+    @MemberOrder(name = "action-prompt-styles", sequence = "1") // TODO: doesn't seem to get picked up
+    @Property
+    @PropertyLayout(describedAs = "associated action uses promptStyle=INLINE_AS_IF_EDIT", hidden = Where.ALL_TABLES) // TODO: doesn't seem to get picked up
+    double getReadOnlyProperty2();
+    void setReadOnlyProperty2(double c);
+
+    @MemberOrder(name = "editable-properties", sequence = "1") // TODO: doesn't seem to get picked up
+    @Property
+    @PropertyLayout
+    double getReadWriteProperty();
+    void setReadWriteProperty(double c);
+
+    @MemberOrder(name = "label-positions", sequence = "1")
+    @Property
+    @PropertyLayout(labelPosition = LabelPosition.LEFT, describedAs = "labelPosition=LEFT", hidden = Where.ALL_TABLES)
+    default double getReadOnlyPropertyDerivedLabelPositionLeft() { return getReadOnlyProperty(); }
+
+    @MemberOrder(name = "label-positions", sequence = "2")
+    @Property
+    @PropertyLayout(labelPosition = LabelPosition.TOP, describedAs = "labelPosition=TOP", hidden = Where.ALL_TABLES)
+    default double getReadOnlyPropertyDerivedLabelPositionTop() { return getReadOnlyProperty(); }
+
+    @MemberOrder(name = "label-positions", sequence = "3")
+    @Property
+    @PropertyLayout(labelPosition = LabelPosition.RIGHT, describedAs = "labelPosition=RIGHT", hidden = Where.ALL_TABLES)
+    default double getReadOnlyPropertyDerivedLabelPositionRight() { return getReadOnlyProperty(); }
+
+    @MemberOrder(name = "label-positions", sequence = "4")
+    @Property
+    @PropertyLayout(labelPosition = LabelPosition.NONE, describedAs = "labelPosition=NONE", hidden = Where.ALL_TABLES)
+    default double getReadOnlyPropertyDerivedLabelPositionNone() { return getReadOnlyProperty(); }
+
+}
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/doubles/holder/PrimitiveDoubleHolder_actionReturning.java b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/doubles/holder/PrimitiveDoubleHolder_actionReturning.java
new file mode 100644
index 0000000..d369719
--- /dev/null
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/doubles/holder/PrimitiveDoubleHolder_actionReturning.java
@@ -0,0 +1,41 @@
+/*
+ *  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 demoapp.dom.types.primitive.doubles.holder;
+
+import org.apache.isis.applib.annotation.Action;
+import org.apache.isis.applib.annotation.SemanticsOf;
+
+import lombok.RequiredArgsConstructor;
+
+import demoapp.dom.types.primitive.doubles.holder.PrimitiveDoubleHolder;
+
+
+@Action(
+        semantics = SemanticsOf.SAFE
+)
+@RequiredArgsConstructor
+public class PrimitiveDoubleHolder_actionReturning {
+
+    private final PrimitiveDoubleHolder primitiveDoubleHolder;
+
+    public double act() {
+        return primitiveDoubleHolder.getReadOnlyProperty();
+    }
+
+}
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/doubles/holder/PrimitiveDoubleHolder_mixinPropertyNamedNotEscaped.java b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/doubles/holder/PrimitiveDoubleHolder_mixinPropertyNamedNotEscaped.java
new file mode 100644
index 0000000..aa7d713
--- /dev/null
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/doubles/holder/PrimitiveDoubleHolder_mixinPropertyNamedNotEscaped.java
@@ -0,0 +1,41 @@
+/*
+ *  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 demoapp.dom.types.primitive.doubles.holder;
+
+import org.apache.isis.applib.annotation.MemberOrder;
+
+import lombok.RequiredArgsConstructor;
+
+import demoapp.dom.types.primitive.doubles.holder.PrimitiveDoubleHolder;
+
+
+//@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 PrimitiveDoubleHolder_mixinPropertyNamedNotEscaped {
+
+    private final PrimitiveDoubleHolder primitiveDoubleHolder;
+
+    @MemberOrder(name = "contributed", sequence = "3")
+    public double prop() {
+        return primitiveDoubleHolder.getReadOnlyProperty();
+    }
+
+
+}
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/doubles/holder/PrimitiveDoubleHolder_mixinPropertyNavigable.java b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/doubles/holder/PrimitiveDoubleHolder_mixinPropertyNavigable.java
new file mode 100644
index 0000000..f1a6faa
--- /dev/null
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/doubles/holder/PrimitiveDoubleHolder_mixinPropertyNavigable.java
@@ -0,0 +1,39 @@
+/*
+ *  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 demoapp.dom.types.primitive.doubles.holder;
+
+import org.apache.isis.applib.annotation.MemberOrder;
+
+import lombok.RequiredArgsConstructor;
+
+
+//@Property()
+//@PropertyLayout( navigable = Navigable.PARENT, describedAs = "navigable=PARENT") // TODO: doesn't seem to do anything
+@RequiredArgsConstructor
+public class PrimitiveDoubleHolder_mixinPropertyNavigable {
+
+    private final PrimitiveDoubleHolder primitiveDoubleHolder;
+
+    @MemberOrder(name = "contributed", sequence = "1")
+    public double prop() {
+        return primitiveDoubleHolder.getReadOnlyProperty();
+    }
+
+
+}
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/doubles/holder/PrimitiveDoubleHolder_mixinPropertyWithCssClass.java b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/doubles/holder/PrimitiveDoubleHolder_mixinPropertyWithCssClass.java
new file mode 100644
index 0000000..c63e0da
--- /dev/null
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/doubles/holder/PrimitiveDoubleHolder_mixinPropertyWithCssClass.java
@@ -0,0 +1,40 @@
+/*
+ *  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 demoapp.dom.types.primitive.doubles.holder;
+
+import org.apache.isis.applib.annotation.MemberOrder;
+import org.apache.isis.applib.annotation.Property;
+import org.apache.isis.applib.annotation.PropertyLayout;
+import org.apache.isis.applib.annotation.Where;
+
+import lombok.RequiredArgsConstructor;
+
+
+@Property()
+@PropertyLayout(cssClass = "red", describedAs = "cssClass = \"red\" ", hidden = Where.ALL_TABLES)
+@RequiredArgsConstructor
+public class PrimitiveDoubleHolder_mixinPropertyWithCssClass {
+
+    private final PrimitiveDoubleHolder primitiveDoubleHolder;
+
+    @MemberOrder(name = "contributed", sequence = "1")
+    public double prop() {
+        return primitiveDoubleHolder.getReadOnlyProperty();
+    }
+}
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/doubles/holder/PrimitiveDoubleHolder_updateReadOnlyProperty2PromptInlineAsIfEdit.java b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/doubles/holder/PrimitiveDoubleHolder_updateReadOnlyProperty2PromptInlineAsIfEdit.java
new file mode 100644
index 0000000..f5062fa
--- /dev/null
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/doubles/holder/PrimitiveDoubleHolder_updateReadOnlyProperty2PromptInlineAsIfEdit.java
@@ -0,0 +1,49 @@
+/*
+ *  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 demoapp.dom.types.primitive.doubles.holder;
+
+import org.apache.isis.applib.annotation.Action;
+import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.PromptStyle;
+import org.apache.isis.applib.annotation.SemanticsOf;
+
+import lombok.RequiredArgsConstructor;
+
+
+@Action(
+        semantics = SemanticsOf.IDEMPOTENT,
+        associateWith = "readOnlyProperty2",
+        associateWithSequence = "1"
+)
+@ActionLayout(promptStyle = PromptStyle.INLINE_AS_IF_EDIT)
+@RequiredArgsConstructor
+public class PrimitiveDoubleHolder_updateReadOnlyProperty2PromptInlineAsIfEdit {
+
+    private final PrimitiveDoubleHolder primitiveDoubleHolder;
+
+    public PrimitiveDoubleHolder act(double newValue) {
+        primitiveDoubleHolder.setReadOnlyProperty2(newValue);
+        return primitiveDoubleHolder;
+    }
+    public double default0Act() {
+        return primitiveDoubleHolder.getReadOnlyProperty2();
+    }
+
+
+}
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/doubles/holder/PrimitiveDoubleHolder_updateReadOnlyPropertyPositionPanel.java b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/doubles/holder/PrimitiveDoubleHolder_updateReadOnlyPropertyPositionPanel.java
new file mode 100644
index 0000000..c82dd85
--- /dev/null
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/doubles/holder/PrimitiveDoubleHolder_updateReadOnlyPropertyPositionPanel.java
@@ -0,0 +1,48 @@
+/*
+ *  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 demoapp.dom.types.primitive.doubles.holder;
+
+import org.apache.isis.applib.annotation.Action;
+import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.SemanticsOf;
+
+import lombok.RequiredArgsConstructor;
+
+
+@Action(
+        semantics = SemanticsOf.IDEMPOTENT,
+        associateWith = "readOnlyProperty",
+        associateWithSequence = "2"
+)
+@ActionLayout(position = ActionLayout.Position.PANEL, named = "Position in panel", describedAs = "position = PANEL")
+@RequiredArgsConstructor
+public class PrimitiveDoubleHolder_updateReadOnlyPropertyPositionPanel {
+
+    private final PrimitiveDoubleHolder primitiveDoubleHolder;
+
+    public PrimitiveDoubleHolder act(double newValue) {
+        primitiveDoubleHolder.setReadOnlyProperty(newValue);
+        return primitiveDoubleHolder;
+    }
+    public double default0Act() {
+        return primitiveDoubleHolder.getReadOnlyProperty();
+    }
+
+
+}
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/doubles/holder/PrimitiveDoubleHolder_updateReadOnlyPropertyPromptStyleInline.java b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/doubles/holder/PrimitiveDoubleHolder_updateReadOnlyPropertyPromptStyleInline.java
new file mode 100644
index 0000000..6970677
--- /dev/null
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/doubles/holder/PrimitiveDoubleHolder_updateReadOnlyPropertyPromptStyleInline.java
@@ -0,0 +1,49 @@
+/*
+ *  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 demoapp.dom.types.primitive.doubles.holder;
+
+import org.apache.isis.applib.annotation.Action;
+import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.PromptStyle;
+import org.apache.isis.applib.annotation.SemanticsOf;
+
+import lombok.RequiredArgsConstructor;
+
+
+@Action(
+        semantics = SemanticsOf.IDEMPOTENT,
+        associateWith = "readOnlyProperty",
+        associateWithSequence = "1"
+)
+@ActionLayout(promptStyle = PromptStyle.INLINE, named = "Inline", describedAs = "promptStyle = INLINE")
+@RequiredArgsConstructor
+public class PrimitiveDoubleHolder_updateReadOnlyPropertyPromptStyleInline {
+
+    private final PrimitiveDoubleHolder primitiveDoubleHolder;
+
+    public PrimitiveDoubleHolder act(double newValue) {
+        primitiveDoubleHolder.setReadOnlyProperty(newValue);
+        return primitiveDoubleHolder;
+    }
+    public double default0Act() {
+        return primitiveDoubleHolder.getReadOnlyProperty();
+    }
+
+
+}
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/doubles/holder/PrimitiveDoubleHolder_updateReadOnlyPropertyPromptStyleModal.java b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/doubles/holder/PrimitiveDoubleHolder_updateReadOnlyPropertyPromptStyleModal.java
new file mode 100644
index 0000000..6369b73
--- /dev/null
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/doubles/holder/PrimitiveDoubleHolder_updateReadOnlyPropertyPromptStyleModal.java
@@ -0,0 +1,49 @@
+/*
+ *  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 demoapp.dom.types.primitive.doubles.holder;
+
+import org.apache.isis.applib.annotation.Action;
+import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.PromptStyle;
+import org.apache.isis.applib.annotation.SemanticsOf;
+
+import lombok.RequiredArgsConstructor;
+
+
+@Action(
+        semantics = SemanticsOf.IDEMPOTENT,
+        associateWith = "readOnlyProperty",
+        associateWithSequence = "2"
+)
+@ActionLayout(promptStyle = PromptStyle.DIALOG_MODAL, named = "Modal", describedAs = "promptStyle = MODAL")
+@RequiredArgsConstructor
+public class PrimitiveDoubleHolder_updateReadOnlyPropertyPromptStyleModal {
+
+    private final PrimitiveDoubleHolder primitiveDoubleHolder;
+
+    public PrimitiveDoubleHolder act(double newValue) {
+        primitiveDoubleHolder.setReadOnlyProperty(newValue);
+        return primitiveDoubleHolder;
+    }
+    public double default0Act() {
+        return primitiveDoubleHolder.getReadOnlyProperty();
+    }
+
+
+}
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/doubles/holder/PrimitiveDoubleHolder_updateReadOnlyPropertyPromptStylePanelDropDown.java b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/doubles/holder/PrimitiveDoubleHolder_updateReadOnlyPropertyPromptStylePanelDropDown.java
new file mode 100644
index 0000000..4689338
--- /dev/null
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/doubles/holder/PrimitiveDoubleHolder_updateReadOnlyPropertyPromptStylePanelDropDown.java
@@ -0,0 +1,48 @@
+/*
+ *  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 demoapp.dom.types.primitive.doubles.holder;
+
+import org.apache.isis.applib.annotation.Action;
+import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.SemanticsOf;
+
+import lombok.RequiredArgsConstructor;
+
+
+@Action(
+        semantics = SemanticsOf.IDEMPOTENT,
+        associateWith = "readOnlyProperty",
+        associateWithSequence = "3"
+)
+@ActionLayout(position = ActionLayout.Position.PANEL_DROPDOWN, named = "Panel Dropdown", describedAs = "position = PANEL_DROPDOWN")
+@RequiredArgsConstructor
+public class PrimitiveDoubleHolder_updateReadOnlyPropertyPromptStylePanelDropDown {
+
+    private final PrimitiveDoubleHolder primitiveDoubleHolder;
+
+    public PrimitiveDoubleHolder act(double newValue) {
+        primitiveDoubleHolder.setReadOnlyProperty(newValue);
+        return primitiveDoubleHolder;
+    }
+    public double default0Act() {
+        return primitiveDoubleHolder.getReadOnlyProperty();
+    }
+
+
+}
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/doubles/holder/PrimitiveDoubleHolder_updateReadOnlyPropertyPromptStyleSidebar.java b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/doubles/holder/PrimitiveDoubleHolder_updateReadOnlyPropertyPromptStyleSidebar.java
new file mode 100644
index 0000000..7cc5573
--- /dev/null
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/doubles/holder/PrimitiveDoubleHolder_updateReadOnlyPropertyPromptStyleSidebar.java
@@ -0,0 +1,49 @@
+/*
+ *  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 demoapp.dom.types.primitive.doubles.holder;
+
+import org.apache.isis.applib.annotation.Action;
+import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.PromptStyle;
+import org.apache.isis.applib.annotation.SemanticsOf;
+
+import lombok.RequiredArgsConstructor;
+
+
+@Action(
+        semantics = SemanticsOf.IDEMPOTENT,
+        associateWith = "readOnlyProperty",
+        associateWithSequence = "3"
+)
+@ActionLayout(promptStyle = PromptStyle.DIALOG_SIDEBAR, named = "sidebar", describedAs = "promptStyle = DIALOG_SIDEBAR")
+@RequiredArgsConstructor
+public class PrimitiveDoubleHolder_updateReadOnlyPropertyPromptStyleSidebar {
+
+    private final PrimitiveDoubleHolder primitiveDoubleHolder;
+
+    public PrimitiveDoubleHolder act(double newValue) {
+        primitiveDoubleHolder.setReadOnlyProperty(newValue);
+        return primitiveDoubleHolder;
+    }
+    public double default0Act() {
+        return primitiveDoubleHolder.getReadOnlyProperty();
+    }
+
+
+}
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/doubles/holder/PrimitiveDoubleHolder_updateReadOnlyPropertyWithChoices.java b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/doubles/holder/PrimitiveDoubleHolder_updateReadOnlyPropertyWithChoices.java
new file mode 100644
index 0000000..a805934
--- /dev/null
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/doubles/holder/PrimitiveDoubleHolder_updateReadOnlyPropertyWithChoices.java
@@ -0,0 +1,58 @@
+/*
+ *  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 demoapp.dom.types.primitive.doubles.holder;
+
+import java.util.List;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+
+import org.apache.isis.applib.annotation.Action;
+import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.PromptStyle;
+import org.apache.isis.applib.annotation.SemanticsOf;
+
+import lombok.RequiredArgsConstructor;
+
+
+@Action(
+        semantics = SemanticsOf.IDEMPOTENT,
+        associateWith = "readOnlyProperty",
+        associateWithSequence = "4"
+)
+@ActionLayout(promptStyle = PromptStyle.AS_CONFIGURED, named = "with choices")
+@RequiredArgsConstructor
+public class PrimitiveDoubleHolder_updateReadOnlyPropertyWithChoices {
+
+    private final PrimitiveDoubleHolder primitiveDoubleHolder;
+
+    public PrimitiveDoubleHolder act(double newValue) {
+        primitiveDoubleHolder.setReadOnlyProperty(newValue);
+        return primitiveDoubleHolder;
+    }
+    public double default0Act() {
+        return primitiveDoubleHolder.getReadOnlyProperty();
+    }
+    public List<Double> choices0Act() {
+        return Stream.of(1.1, 2.2, 3.3, 4.0, -9.9, -8.8).collect(Collectors.toList());
+    }
+    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/doubles/jdo/PrimitiveDoubleJdoEntities.java b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/doubles/jdo/PrimitiveDoubleJdoEntities.java
new file mode 100644
index 0000000..dff7eae
--- /dev/null
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/doubles/jdo/PrimitiveDoubleJdoEntities.java
@@ -0,0 +1,26 @@
+package demoapp.dom.types.primitive.doubles.jdo;
+
+import java.util.List;
+import java.util.Optional;
+
+import javax.inject.Inject;
+
+import org.springframework.stereotype.Service;
+
+import org.apache.isis.applib.services.repository.RepositoryService;
+
+@Service
+public class PrimitiveDoubleJdoEntities {
+
+    public Optional<PrimitiveDoubleJdoEntity> find(final double readOnlyProperty) {
+        return repositoryService.firstMatch(PrimitiveDoubleJdoEntity.class, x -> x.getReadOnlyProperty() == readOnlyProperty);
+    }
+
+    public List<PrimitiveDoubleJdoEntity> all() {
+        return repositoryService.allInstances(PrimitiveDoubleJdoEntity.class);
+    }
+
+    @Inject
+    RepositoryService repositoryService;
+
+}
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/doubles/jdo/PrimitiveDoubleJdoEntity-description.adoc b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/doubles/jdo/PrimitiveDoubleJdoEntity-description.adoc
new file mode 100644
index 0000000..56c829a
--- /dev/null
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/doubles/jdo/PrimitiveDoubleJdoEntity-description.adoc
@@ -0,0 +1,30 @@
+JDO supports `double` out-of-the-box, so no special annotations are required.
+
+[source,java]
+----
+@PersistenceCapable(identityType = IdentityType.DATASTORE, schema = "demo")
+@DatastoreIdentity(strategy = IdGeneratorStrategy.IDENTITY, column = "id")
+@DomainObject(
+        objectType = "demo.PrimitiveDoubleJdoEntity"
+)
+public class PrimitiveDoubleJdoEntity
+    implements HasAsciiDocDescription,   PrimitiveDoubleHolder {          // <.>
+
+    public PrimitiveDoubleJdoEntity(double initialValue) { ... }            // <.>
+
+    @Title(prepend = "double (primitive) JDO entity: ")
+    @Getter @Setter
+    private double readOnlyProperty;                                      // <.>
+
+    @Getter @Setter
+    private double readOnlyProperty2;
+
+    @Getter @Setter
+    @Property(editing = Editing.ENABLED)
+    private double readWriteProperty;
+
+}
+----
+<.> 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/doubles/jdo/PrimitiveDoubleJdoEntity.java b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/doubles/jdo/PrimitiveDoubleJdoEntity.java
new file mode 100644
index 0000000..6698f78
--- /dev/null
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/doubles/jdo/PrimitiveDoubleJdoEntity.java
@@ -0,0 +1,67 @@
+/*
+ *  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 demoapp.dom.types.primitive.doubles.jdo;
+
+import javax.jdo.annotations.DatastoreIdentity;
+import javax.jdo.annotations.IdGeneratorStrategy;
+import javax.jdo.annotations.IdentityType;
+import javax.jdo.annotations.PersistenceCapable;
+
+import org.apache.isis.applib.annotation.DomainObject;
+import org.apache.isis.applib.annotation.Editing;
+import org.apache.isis.applib.annotation.Property;
+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 demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
+import demoapp.dom.types.primitive.doubles.holder.PrimitiveDoubleHolder;
+
+@PersistenceCapable(identityType = IdentityType.DATASTORE, schema = "demo")
+@DatastoreIdentity(strategy = IdGeneratorStrategy.IDENTITY, column = "id")
+@DomainObject(
+        objectType = "demo.PrimitiveDoubleJdoEntity"
+)
+public class PrimitiveDoubleJdoEntity
+        implements HasAsciiDocDescription,
+        PrimitiveDoubleHolder {
+
+    public PrimitiveDoubleJdoEntity(double initialValue) {
+        this.readOnlyProperty = initialValue;
+        this.readOnlyProperty2 = initialValue;
+        this.readWriteProperty = initialValue;
+    }
+
+    @Title(prepend = "double (primitive) JDO entity: ")
+    @Getter @Setter
+    private double readOnlyProperty;
+
+    @Property
+    @PropertyLayout(hidden = Where.ALL_TABLES)
+    @Getter @Setter
+    private double readOnlyProperty2;
+
+    @Getter @Setter
+    @Property(editing = Editing.ENABLED)
+    private double readWriteProperty;
+
+}
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/doubles/jdo/PrimitiveDoubleJdoEntity.layout.xml b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/doubles/jdo/PrimitiveDoubleJdoEntity.layout.xml
new file mode 100644
index 0000000..ffa55a8
--- /dev/null
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/doubles/jdo/PrimitiveDoubleJdoEntity.layout.xml
@@ -0,0 +1,53 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<bs3:grid
+        xsi:schemaLocation="http://isis.apache.org/applib/layout/component http://isis.apache.org/applib/layout/component/component.xsd   http://isis.apache.org/applib/layout/grid/bootstrap3 http://isis.apache.org/applib/layout/grid/bootstrap3/bootstrap3.xsd"
+        xmlns:bs3="http://isis.apache.org/applib/layout/grid/bootstrap3"
+        xmlns:cpt="http://isis.apache.org/applib/layout/component"
+        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+
+	<bs3:row>
+		<bs3:col span="10" unreferencedActions="true">
+			<cpt:domainObject />
+			<cpt:action id="actionReturning"/>
+			<cpt:action id="rebuildMetamodel"/>
+		</bs3:col>
+		<bs3:col span="2">
+			<cpt:fieldSet name="" id="sources" />
+		</bs3:col>
+	</bs3:row>
+
+	<bs3:row>
+		<bs3:col span="6">
+			<cpt:fieldSet name="Action Prompt Styles" id="action-prompt-styles">
+				<cpt:property id="readOnlyProperty" />
+				<cpt:property id="readOnlyProperty2" >
+					<cpt:describedAs>
+						Associated action uses promptStyle=INLINE_AS_IF_EDIT
+					</cpt:describedAs>
+				</cpt:property>
+			</cpt:fieldSet>
+			<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">
+			<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="downloadJdoMetadata"  position="PANEL_DROPDOWN"/>
+				<cpt:action id="openRestApi" position="PANEL_DROPDOWN" />
+				<cpt:property id="description"/>
+			</cpt:fieldSet>
+		</bs3:col>
+	</bs3:row>
+	<bs3:row>
+		<bs3:col span="12" unreferencedCollections="true"/>
+	</bs3:row>
+
+</bs3:grid>
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/doubles/jdo/PrimitiveDoubleJdoEntitySeedService.java b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/doubles/jdo/PrimitiveDoubleJdoEntitySeedService.java
new file mode 100644
index 0000000..9110e7e
--- /dev/null
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/doubles/jdo/PrimitiveDoubleJdoEntitySeedService.java
@@ -0,0 +1,42 @@
+package demoapp.dom.types.primitive.doubles.jdo;
+
+import java.util.stream.Stream;
+
+import javax.inject.Inject;
+
+import org.springframework.context.event.EventListener;
+import org.springframework.stereotype.Service;
+
+import org.apache.isis.applib.services.repository.RepositoryService;
+import org.apache.isis.core.runtime.events.app.AppLifecycleEvent;
+import org.apache.isis.testing.fixtures.applib.fixturescripts.FixtureScript;
+import org.apache.isis.testing.fixtures.applib.fixturescripts.FixtureScripts;
+
+@Service
+public class PrimitiveDoubleJdoEntitySeedService {
+
+    @EventListener(AppLifecycleEvent.class)
+    public void onAppLifecycleEvent(AppLifecycleEvent event) {
+
+        if (event.getEventType() == AppLifecycleEvent.EventType.appPostMetamodel) {
+            fixtureScripts.run(new PrimitiveDoubleJdoEntityFixture());
+        }
+    }
+
+    @Inject
+    FixtureScripts fixtureScripts;
+
+    static class PrimitiveDoubleJdoEntityFixture extends FixtureScript {
+
+        @Override
+        protected void execute(ExecutionContext executionContext) {
+            Stream.of(123.4567, 762.1234, 9.00, -12.1314)
+                    .map(PrimitiveDoubleJdoEntity::new)
+                    .forEach(repositoryService::persist);
+        }
+
+        @Inject
+        RepositoryService repositoryService;
+
+    }
+}
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/doubles/vm/PrimitiveDoubleViewModel-description.adoc b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/doubles/vm/PrimitiveDoubleViewModel-description.adoc
new file mode 100644
index 0000000..7c41db4
--- /dev/null
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/doubles/vm/PrimitiveDoubleViewModel-description.adoc
@@ -0,0 +1,36 @@
+JAXB supports `double` out-of-the-box, so no special annotations are required.
+
+[source,java]
+----
+@XmlRootElement(name = "demo.PrimitiveDoubleViewModel")
+@XmlType
+@XmlAccessorType(XmlAccessType.FIELD)
+@DomainObject(
+        nature=Nature.VIEW_MODEL,
+        objectType = "demo.PrimitiveDoubleViewModel"
+)
+@lombok.NoArgsConstructor                               // <.>
+public class PrimitiveDoubleViewModel
+        implements HasAsciiDocDescription,
+                   PrimitiveDoubleHolder {
+
+    public PrimitiveDoubleViewModel(double initialValue) {  // <.>
+        // ...
+    }
+
+    @Title(prepend = "double (primitive) view model: ")
+    @Getter @Setter
+    private double readOnlyProperty;                      // <.>
+
+    @Getter @Setter
+    private double readOnlyProperty2;
+
+    @Getter @Setter
+    @Property(editing = Editing.ENABLED)
+    private double readWriteProperty;
+
+}
+----
+<.> a no-arg constructor is required by JAXB
+<.> 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/doubles/vm/PrimitiveDoubleViewModel.java b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/doubles/vm/PrimitiveDoubleViewModel.java
new file mode 100644
index 0000000..1c118a9
--- /dev/null
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/doubles/vm/PrimitiveDoubleViewModel.java
@@ -0,0 +1,71 @@
+/*
+ *  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 demoapp.dom.types.primitive.doubles.vm;
+
+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.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.Title;
+import org.apache.isis.applib.annotation.Where;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
+import demoapp.dom.types.primitive.doubles.holder.PrimitiveDoubleHolder;
+
+@XmlRootElement(name = "demo.PrimitiveDoubleViewModel")
+@XmlType
+@XmlAccessorType(XmlAccessType.FIELD)
+@DomainObject(
+        nature=Nature.VIEW_MODEL,
+        objectType = "demo.PrimitiveDoubleViewModel"
+)
+@lombok.NoArgsConstructor
+public class PrimitiveDoubleViewModel
+        implements HasAsciiDocDescription,
+        PrimitiveDoubleHolder {
+
+    public PrimitiveDoubleViewModel(double initialValue) {
+        this.readOnlyProperty = initialValue;
+        this.readOnlyProperty2 = initialValue;
+        this.readWriteProperty = initialValue;
+    }
+
+    @Title(prepend = "double (primitive) view model: ")
+    @Getter @Setter
+    private double readOnlyProperty;
+
+    @Property
+    @PropertyLayout(hidden = Where.ALL_TABLES)
+    @Getter @Setter
+    private double readOnlyProperty2;
+
+    @Getter @Setter
+    @Property(editing = Editing.ENABLED)
+    private double readWriteProperty;
+
+}
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/doubles/vm/PrimitiveDoubleViewModel.layout.xml b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/doubles/vm/PrimitiveDoubleViewModel.layout.xml
new file mode 100644
index 0000000..ffa55a8
--- /dev/null
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/doubles/vm/PrimitiveDoubleViewModel.layout.xml
@@ -0,0 +1,53 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<bs3:grid
+        xsi:schemaLocation="http://isis.apache.org/applib/layout/component http://isis.apache.org/applib/layout/component/component.xsd   http://isis.apache.org/applib/layout/grid/bootstrap3 http://isis.apache.org/applib/layout/grid/bootstrap3/bootstrap3.xsd"
+        xmlns:bs3="http://isis.apache.org/applib/layout/grid/bootstrap3"
+        xmlns:cpt="http://isis.apache.org/applib/layout/component"
+        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+
+	<bs3:row>
+		<bs3:col span="10" unreferencedActions="true">
+			<cpt:domainObject />
+			<cpt:action id="actionReturning"/>
+			<cpt:action id="rebuildMetamodel"/>
+		</bs3:col>
+		<bs3:col span="2">
+			<cpt:fieldSet name="" id="sources" />
+		</bs3:col>
+	</bs3:row>
+
+	<bs3:row>
+		<bs3:col span="6">
+			<cpt:fieldSet name="Action Prompt Styles" id="action-prompt-styles">
+				<cpt:property id="readOnlyProperty" />
+				<cpt:property id="readOnlyProperty2" >
+					<cpt:describedAs>
+						Associated action uses promptStyle=INLINE_AS_IF_EDIT
+					</cpt:describedAs>
+				</cpt:property>
+			</cpt:fieldSet>
+			<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">
+			<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="downloadJdoMetadata"  position="PANEL_DROPDOWN"/>
+				<cpt:action id="openRestApi" position="PANEL_DROPDOWN" />
+				<cpt:property id="description"/>
+			</cpt:fieldSet>
+		</bs3:col>
+	</bs3:row>
+	<bs3:row>
+		<bs3:col span="12" unreferencedCollections="true"/>
+	</bs3:row>
+
+</bs3:grid>
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/floats/PrimitiveFloats-description.adoc b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/floats/PrimitiveFloats-description.adoc
new file mode 100644
index 0000000..1de3892
--- /dev/null
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/floats/PrimitiveFloats-description.adoc
@@ -0,0 +1,129 @@
+The framework has built-in support for all of the primitive data types, including `float`.
+
+From here you can:
+
+* navigate to an entity that uses the `float` datatype
+* open a view model that uses the `float` datatype
+
+Because `float` is a primitive value, the properties on these domain objects are mandatory.
+
+== Common interface
+
+These objects both implement a common interface, `PrimitiveFloatHolder`:
+
+[source,java]
+----
+public interface PrimitiveFloatHolder {
+
+    float getReadOnlyProperty();
+    void setReadOnlyProperty(float c);
+
+    float getReadOnlyProperty2();
+    void setReadOnlyProperty2(float c);
+
+    float getReadWriteProperty();
+    void setReadWriteProperty(float c);
+
+    @MemberOrder(name = "label-positions", sequence = "1")
+    @Property
+    @PropertyLayout(labelPosition = LabelPosition.LEFT, describedAs = "labelPosition=LEFT", hidden = Where.ALL_TABLES)
+    default float getReadOnlyPropertyDerivedLabelPositionLeft() { return getReadOnlyProperty(); }
+
+    @MemberOrder(name = "label-positions", sequence = "2")
+    @Property
+    @PropertyLayout(labelPosition = LabelPosition.TOP, describedAs = "labelPosition=TOP", hidden = Where.ALL_TABLES)
+    default float getReadOnlyPropertyDerivedLabelPositionTop() { return getReadOnlyProperty(); }
+
+    @MemberOrder(name = "label-positions", sequence = "3")
+    @Property
+    @PropertyLayout(labelPosition = LabelPosition.RIGHT, describedAs = "labelPosition=RIGHT", hidden = Where.ALL_TABLES)
+    default float getReadOnlyPropertyDerivedLabelPositionRight() { return getReadOnlyProperty(); }
+
+    @MemberOrder(name = "label-positions", sequence = "4")
+    @Property
+    @PropertyLayout(labelPosition = LabelPosition.NONE, describedAs = "labelPosition=NONE", hidden = Where.ALL_TABLES)
+    default float 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 `float` as a parameter and as a return type.
+For example:
+
+* the `updateReadOnlyProperty` action is:
++
+[source,java]
+----
+@Action(
+        semantics = SemanticsOf.IDEMPOTENT,
+        associateWith = "readOnlyProperty",
+        associateWithSequence = "1"
+)
+@RequiredArgsConstructor
+public class PrimitiveFloatHolder_updateReadOnlyProperty {
+
+    private final PrimitiveFloatHolder primitiveFloatHolder;
+
+    public PrimitiveFloatHolder act(float newValue) {
+        primitiveFloatHolder.setReadOnlyProperty(newValue);
+        return primitiveFloatHolder;
+    }
+    public float default0Act() {
+        return primitiveFloatHolder.getReadOnlyProperty();
+    }
+}
+----
++
+There are a number of variants of this action, to demonstrate different prompt layouts.
+
+* the `actionReturning` action is:
++
+[source,java]
+----
+@Action(
+        semantics = SemanticsOf.SAFE,
+        associateWith = "readOnlyProperty",
+        associateWithSequence = "3"
+)
+@RequiredArgsConstructor
+public class PrimitiveFloatHolder_actionReturning {
+
+    private final PrimitiveFloatHolder primitiveFloatHolder;
+
+    public float act() {
+        return primitiveFloatHolder.getReadOnlyProperty();
+    }
+}
+----
+
+== 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 PrimitiveFloatHolder_mixinPropertyWithCssClass {
+
+    private final PrimitiveFloatHolder primitiveFloatHolder;
+
+    @MemberOrder(name = "contributed", sequence = "1")
+    public float prop() {
+        return primitiveFloatHolder.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/floats/PrimitiveFloats.java b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/floats/PrimitiveFloats.java
new file mode 100644
index 0000000..8f5640e
--- /dev/null
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/floats/PrimitiveFloats.java
@@ -0,0 +1,76 @@
+/*
+ *  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 demoapp.dom.types.primitive.floats;
+
+import java.util.List;
+
+import javax.inject.Inject;
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlRootElement;
+import javax.xml.bind.annotation.XmlTransient;
+import javax.xml.bind.annotation.XmlType;
+
+import org.apache.isis.applib.annotation.Action;
+import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.Collection;
+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.PromptStyle;
+import org.apache.isis.applib.annotation.SemanticsOf;
+
+import lombok.extern.log4j.Log4j2;
+
+import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
+import demoapp.dom.types.primitive.floats.jdo.PrimitiveFloatJdoEntities;
+import demoapp.dom.types.primitive.floats.jdo.PrimitiveFloatJdoEntity;
+import demoapp.dom.types.primitive.floats.vm.PrimitiveFloatViewModel;
+
+@XmlRootElement(name = "Demo")
+@XmlType
+@XmlAccessorType(XmlAccessType.FIELD)
+@DomainObject(nature=Nature.VIEW_MODEL, objectType = "demo.PrimitiveFloats", editing=Editing.ENABLED)
+@Log4j2
+public class PrimitiveFloats implements HasAsciiDocDescription {
+
+    public String title() {
+        return "float (primitive) data type";
+    }
+
+    @Action(semantics = SemanticsOf.SAFE)
+    @ActionLayout(promptStyle = PromptStyle.DIALOG_MODAL)
+    public PrimitiveFloatViewModel openViewModel(float initialValue) {
+        return new PrimitiveFloatViewModel(initialValue);
+    }
+    public float default0OpenViewModel() {
+        return 1.23f;
+    }
+
+    @Collection
+    public List<PrimitiveFloatJdoEntity> getEntities() {
+        return entities.all();
+    }
+
+    @Inject
+    @XmlTransient
+    PrimitiveFloatJdoEntities entities;
+
+
+}
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/floats/PrimitiveFloats.layout.xml b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/floats/PrimitiveFloats.layout.xml
new file mode 100644
index 0000000..55c5b87
--- /dev/null
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/floats/PrimitiveFloats.layout.xml
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<bs3:grid
+        xsi:schemaLocation="http://isis.apache.org/applib/layout/component http://isis.apache.org/applib/layout/component/component.xsd   http://isis.apache.org/applib/layout/grid/bootstrap3 http://isis.apache.org/applib/layout/grid/bootstrap3/bootstrap3.xsd"
+        xmlns:bs3="http://isis.apache.org/applib/layout/grid/bootstrap3"
+        xmlns:cpt="http://isis.apache.org/applib/layout/component"
+        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+
+	<bs3:row>
+		<bs3:col span="10" unreferencedActions="true">
+			<cpt:domainObject />
+			<cpt:action id="rebuildMetamodel"/>
+		</bs3:col>
+		<bs3:col span="2">
+			<cpt:fieldSet name="" id="sources" />
+		</bs3:col>
+	</bs3:row>
+
+	<bs3:row>
+		<bs3:col span="6">
+			<bs3:row>
+				<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>
+		<bs3:col span="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" />
+				<cpt:property id="description"/>
+			</cpt:fieldSet>
+		</bs3:col>
+	</bs3:row>
+	<bs3:row>
+		<bs3:col span="12" unreferencedCollections="true"/>
+	</bs3:row>
+
+</bs3:grid>
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/floats/holder/PrimitiveFloatHolder.java b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/floats/holder/PrimitiveFloatHolder.java
new file mode 100644
index 0000000..9d80154
--- /dev/null
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/floats/holder/PrimitiveFloatHolder.java
@@ -0,0 +1,84 @@
+/*
+ *  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 demoapp.dom.types.primitive.floats.holder;
+
+import javax.jdo.annotations.DatastoreIdentity;
+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.LabelPosition;
+import org.apache.isis.applib.annotation.MemberOrder;
+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.Setter;
+import lombok.extern.log4j.Log4j2;
+
+import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
+
+public interface PrimitiveFloatHolder {
+
+    @MemberOrder(name = "action-prompt-styles", sequence = "1") // TODO: doesn't seem to get picked up
+    @Property
+    @PropertyLayout
+    float getReadOnlyProperty();
+    void setReadOnlyProperty(float c);
+
+    @MemberOrder(name = "action-prompt-styles", sequence = "1") // TODO: doesn't seem to get picked up
+    @Property
+    @PropertyLayout(describedAs = "associated action uses promptStyle=INLINE_AS_IF_EDIT", hidden = Where.ALL_TABLES) // TODO: doesn't seem to get picked up
+    float getReadOnlyProperty2();
+    void setReadOnlyProperty2(float c);
+
+    @MemberOrder(name = "editable-properties", sequence = "1") // TODO: doesn't seem to get picked up
+    @Property
+    @PropertyLayout
+    float getReadWriteProperty();
+    void setReadWriteProperty(float c);
+
+    @MemberOrder(name = "label-positions", sequence = "1")
+    @Property
+    @PropertyLayout(labelPosition = LabelPosition.LEFT, describedAs = "labelPosition=LEFT", hidden = Where.ALL_TABLES)
+    default float getReadOnlyPropertyDerivedLabelPositionLeft() { return getReadOnlyProperty(); }
+
+    @MemberOrder(name = "label-positions", sequence = "2")
+    @Property
+    @PropertyLayout(labelPosition = LabelPosition.TOP, describedAs = "labelPosition=TOP", hidden = Where.ALL_TABLES)
+    default float getReadOnlyPropertyDerivedLabelPositionTop() { return getReadOnlyProperty(); }
+
+    @MemberOrder(name = "label-positions", sequence = "3")
+    @Property
+    @PropertyLayout(labelPosition = LabelPosition.RIGHT, describedAs = "labelPosition=RIGHT", hidden = Where.ALL_TABLES)
+    default float getReadOnlyPropertyDerivedLabelPositionRight() { return getReadOnlyProperty(); }
+
+    @MemberOrder(name = "label-positions", sequence = "4")
+    @Property
+    @PropertyLayout(labelPosition = LabelPosition.NONE, describedAs = "labelPosition=NONE", hidden = Where.ALL_TABLES)
+    default float getReadOnlyPropertyDerivedLabelPositionNone() { return getReadOnlyProperty(); }
+
+}
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/floats/holder/PrimitiveFloatHolder_actionReturning.java b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/floats/holder/PrimitiveFloatHolder_actionReturning.java
new file mode 100644
index 0000000..594ff25
--- /dev/null
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/floats/holder/PrimitiveFloatHolder_actionReturning.java
@@ -0,0 +1,39 @@
+/*
+ *  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 demoapp.dom.types.primitive.floats.holder;
+
+import org.apache.isis.applib.annotation.Action;
+import org.apache.isis.applib.annotation.SemanticsOf;
+
+import lombok.RequiredArgsConstructor;
+
+
+@Action(
+        semantics = SemanticsOf.SAFE
+)
+@RequiredArgsConstructor
+public class PrimitiveFloatHolder_actionReturning {
+
+    private final PrimitiveFloatHolder primitiveFloatHolder;
+
+    public float act() {
+        return primitiveFloatHolder.getReadOnlyProperty();
+    }
+
+}
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/floats/holder/PrimitiveFloatHolder_mixinPropertyNamedNotEscaped.java b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/floats/holder/PrimitiveFloatHolder_mixinPropertyNamedNotEscaped.java
new file mode 100644
index 0000000..103f522
--- /dev/null
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/floats/holder/PrimitiveFloatHolder_mixinPropertyNamedNotEscaped.java
@@ -0,0 +1,39 @@
+/*
+ *  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 demoapp.dom.types.primitive.floats.holder;
+
+import org.apache.isis.applib.annotation.MemberOrder;
+
+import lombok.RequiredArgsConstructor;
+
+
+//@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 PrimitiveFloatHolder_mixinPropertyNamedNotEscaped {
+
+    private final demoapp.dom.types.primitive.floats.holder.PrimitiveFloatHolder primitiveFloatHolder;
+
+    @MemberOrder(name = "contributed", sequence = "3")
+    public float prop() {
+        return primitiveFloatHolder.getReadOnlyProperty();
+    }
+
+
+}
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/floats/holder/PrimitiveFloatHolder_mixinPropertyNavigable.java b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/floats/holder/PrimitiveFloatHolder_mixinPropertyNavigable.java
new file mode 100644
index 0000000..0765b3c
--- /dev/null
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/floats/holder/PrimitiveFloatHolder_mixinPropertyNavigable.java
@@ -0,0 +1,39 @@
+/*
+ *  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 demoapp.dom.types.primitive.floats.holder;
+
+import org.apache.isis.applib.annotation.MemberOrder;
+
+import lombok.RequiredArgsConstructor;
+
+
+//@Property()
+//@PropertyLayout( navigable = Navigable.PARENT, describedAs = "navigable=PARENT") // TODO: doesn't seem to do anything
+@RequiredArgsConstructor
+public class PrimitiveFloatHolder_mixinPropertyNavigable {
+
+    private final PrimitiveFloatHolder primitiveFloatHolder;
+
+    @MemberOrder(name = "contributed", sequence = "1")
+    public float prop() {
+        return primitiveFloatHolder.getReadOnlyProperty();
+    }
+
+
+}
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/floats/holder/PrimitiveFloatHolder_mixinPropertyWithCssClass.java b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/floats/holder/PrimitiveFloatHolder_mixinPropertyWithCssClass.java
new file mode 100644
index 0000000..c9721a9
--- /dev/null
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/floats/holder/PrimitiveFloatHolder_mixinPropertyWithCssClass.java
@@ -0,0 +1,40 @@
+/*
+ *  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 demoapp.dom.types.primitive.floats.holder;
+
+import org.apache.isis.applib.annotation.MemberOrder;
+import org.apache.isis.applib.annotation.Property;
+import org.apache.isis.applib.annotation.PropertyLayout;
+import org.apache.isis.applib.annotation.Where;
+
+import lombok.RequiredArgsConstructor;
+
+
+@Property()
+@PropertyLayout(cssClass = "red", describedAs = "cssClass = \"red\" ", hidden = Where.ALL_TABLES)
+@RequiredArgsConstructor
+public class PrimitiveFloatHolder_mixinPropertyWithCssClass {
+
+    private final PrimitiveFloatHolder primitiveFloatHolder;
+
+    @MemberOrder(name = "contributed", sequence = "1")
+    public float prop() {
+        return primitiveFloatHolder.getReadOnlyProperty();
+    }
+}
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/floats/holder/PrimitiveFloatHolder_updateReadOnlyProperty2PromptInlineAsIfEdit.java b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/floats/holder/PrimitiveFloatHolder_updateReadOnlyProperty2PromptInlineAsIfEdit.java
new file mode 100644
index 0000000..9a46343
--- /dev/null
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/floats/holder/PrimitiveFloatHolder_updateReadOnlyProperty2PromptInlineAsIfEdit.java
@@ -0,0 +1,49 @@
+/*
+ *  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 demoapp.dom.types.primitive.floats.holder;
+
+import org.apache.isis.applib.annotation.Action;
+import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.PromptStyle;
+import org.apache.isis.applib.annotation.SemanticsOf;
+
+import lombok.RequiredArgsConstructor;
+
+
+@Action(
+        semantics = SemanticsOf.IDEMPOTENT,
+        associateWith = "readOnlyProperty2",
+        associateWithSequence = "1"
+)
+@ActionLayout(promptStyle = PromptStyle.INLINE_AS_IF_EDIT)
+@RequiredArgsConstructor
+public class PrimitiveFloatHolder_updateReadOnlyProperty2PromptInlineAsIfEdit {
+
+    private final PrimitiveFloatHolder primitiveFloatHolder;
+
+    public PrimitiveFloatHolder act(float newValue) {
+        primitiveFloatHolder.setReadOnlyProperty2(newValue);
+        return primitiveFloatHolder;
+    }
+    public float default0Act() {
+        return primitiveFloatHolder.getReadOnlyProperty2();
+    }
+
+
+}
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/floats/holder/PrimitiveFloatHolder_updateReadOnlyPropertyPositionPanel.java b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/floats/holder/PrimitiveFloatHolder_updateReadOnlyPropertyPositionPanel.java
new file mode 100644
index 0000000..152685f
--- /dev/null
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/floats/holder/PrimitiveFloatHolder_updateReadOnlyPropertyPositionPanel.java
@@ -0,0 +1,48 @@
+/*
+ *  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 demoapp.dom.types.primitive.floats.holder;
+
+import org.apache.isis.applib.annotation.Action;
+import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.SemanticsOf;
+
+import lombok.RequiredArgsConstructor;
+
+
+@Action(
+        semantics = SemanticsOf.IDEMPOTENT,
+        associateWith = "readOnlyProperty",
+        associateWithSequence = "2"
+)
+@ActionLayout(position = ActionLayout.Position.PANEL, named = "Position in panel", describedAs = "position = PANEL")
+@RequiredArgsConstructor
+public class PrimitiveFloatHolder_updateReadOnlyPropertyPositionPanel {
+
+    private final PrimitiveFloatHolder primitiveFloatHolder;
+
+    public PrimitiveFloatHolder act(float newValue) {
+        primitiveFloatHolder.setReadOnlyProperty(newValue);
+        return primitiveFloatHolder;
+    }
+    public float default0Act() {
+        return primitiveFloatHolder.getReadOnlyProperty();
+    }
+
+
+}
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/floats/holder/PrimitiveFloatHolder_updateReadOnlyPropertyPromptStyleInline.java b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/floats/holder/PrimitiveFloatHolder_updateReadOnlyPropertyPromptStyleInline.java
new file mode 100644
index 0000000..587787b
--- /dev/null
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/floats/holder/PrimitiveFloatHolder_updateReadOnlyPropertyPromptStyleInline.java
@@ -0,0 +1,49 @@
+/*
+ *  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 demoapp.dom.types.primitive.floats.holder;
+
+import org.apache.isis.applib.annotation.Action;
+import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.PromptStyle;
+import org.apache.isis.applib.annotation.SemanticsOf;
+
+import lombok.RequiredArgsConstructor;
+
+
+@Action(
+        semantics = SemanticsOf.IDEMPOTENT,
+        associateWith = "readOnlyProperty",
+        associateWithSequence = "1"
+)
+@ActionLayout(promptStyle = PromptStyle.INLINE, named = "Inline", describedAs = "promptStyle = INLINE")
+@RequiredArgsConstructor
+public class PrimitiveFloatHolder_updateReadOnlyPropertyPromptStyleInline {
+
+    private final PrimitiveFloatHolder primitiveFloatHolder;
+
+    public PrimitiveFloatHolder act(float newValue) {
+        primitiveFloatHolder.setReadOnlyProperty(newValue);
+        return primitiveFloatHolder;
+    }
+    public float default0Act() {
+        return primitiveFloatHolder.getReadOnlyProperty();
+    }
+
+
+}
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/floats/holder/PrimitiveFloatHolder_updateReadOnlyPropertyPromptStyleModal.java b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/floats/holder/PrimitiveFloatHolder_updateReadOnlyPropertyPromptStyleModal.java
new file mode 100644
index 0000000..59fea4a
--- /dev/null
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/floats/holder/PrimitiveFloatHolder_updateReadOnlyPropertyPromptStyleModal.java
@@ -0,0 +1,49 @@
+/*
+ *  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 demoapp.dom.types.primitive.floats.holder;
+
+import org.apache.isis.applib.annotation.Action;
+import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.PromptStyle;
+import org.apache.isis.applib.annotation.SemanticsOf;
+
+import lombok.RequiredArgsConstructor;
+
+
+@Action(
+        semantics = SemanticsOf.IDEMPOTENT,
+        associateWith = "readOnlyProperty",
+        associateWithSequence = "2"
+)
+@ActionLayout(promptStyle = PromptStyle.DIALOG_MODAL, named = "Modal", describedAs = "promptStyle = MODAL")
+@RequiredArgsConstructor
+public class PrimitiveFloatHolder_updateReadOnlyPropertyPromptStyleModal {
+
+    private final PrimitiveFloatHolder primitiveFloatHolder;
+
+    public PrimitiveFloatHolder act(float newValue) {
+        primitiveFloatHolder.setReadOnlyProperty(newValue);
+        return primitiveFloatHolder;
+    }
+    public float default0Act() {
+        return primitiveFloatHolder.getReadOnlyProperty();
+    }
+
+
+}
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/floats/holder/PrimitiveFloatHolder_updateReadOnlyPropertyPromptStylePanelDropDown.java b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/floats/holder/PrimitiveFloatHolder_updateReadOnlyPropertyPromptStylePanelDropDown.java
new file mode 100644
index 0000000..62a5c0c
--- /dev/null
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/floats/holder/PrimitiveFloatHolder_updateReadOnlyPropertyPromptStylePanelDropDown.java
@@ -0,0 +1,48 @@
+/*
+ *  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 demoapp.dom.types.primitive.floats.holder;
+
+import org.apache.isis.applib.annotation.Action;
+import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.SemanticsOf;
+
+import lombok.RequiredArgsConstructor;
+
+
+@Action(
+        semantics = SemanticsOf.IDEMPOTENT,
+        associateWith = "readOnlyProperty",
+        associateWithSequence = "3"
+)
+@ActionLayout(position = ActionLayout.Position.PANEL_DROPDOWN, named = "Panel Dropdown", describedAs = "position = PANEL_DROPDOWN")
+@RequiredArgsConstructor
+public class PrimitiveFloatHolder_updateReadOnlyPropertyPromptStylePanelDropDown {
+
+    private final PrimitiveFloatHolder primitiveFloatHolder;
+
+    public PrimitiveFloatHolder act(float newValue) {
+        primitiveFloatHolder.setReadOnlyProperty(newValue);
+        return primitiveFloatHolder;
+    }
+    public float default0Act() {
+        return primitiveFloatHolder.getReadOnlyProperty();
+    }
+
+
+}
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/floats/holder/PrimitiveFloatHolder_updateReadOnlyPropertyPromptStyleSidebar.java b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/floats/holder/PrimitiveFloatHolder_updateReadOnlyPropertyPromptStyleSidebar.java
new file mode 100644
index 0000000..4646ed5
--- /dev/null
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/floats/holder/PrimitiveFloatHolder_updateReadOnlyPropertyPromptStyleSidebar.java
@@ -0,0 +1,49 @@
+/*
+ *  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 demoapp.dom.types.primitive.floats.holder;
+
+import org.apache.isis.applib.annotation.Action;
+import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.PromptStyle;
+import org.apache.isis.applib.annotation.SemanticsOf;
+
+import lombok.RequiredArgsConstructor;
+
+
+@Action(
+        semantics = SemanticsOf.IDEMPOTENT,
+        associateWith = "readOnlyProperty",
+        associateWithSequence = "3"
+)
+@ActionLayout(promptStyle = PromptStyle.DIALOG_SIDEBAR, named = "sidebar", describedAs = "promptStyle = DIALOG_SIDEBAR")
+@RequiredArgsConstructor
+public class PrimitiveFloatHolder_updateReadOnlyPropertyPromptStyleSidebar {
+
+    private final PrimitiveFloatHolder primitiveFloatHolder;
+
+    public PrimitiveFloatHolder act(float newValue) {
+        primitiveFloatHolder.setReadOnlyProperty(newValue);
+        return primitiveFloatHolder;
+    }
+    public float default0Act() {
+        return primitiveFloatHolder.getReadOnlyProperty();
+    }
+
+
+}
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/floats/holder/PrimitiveFloatHolder_updateReadOnlyPropertyWithChoices.java b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/floats/holder/PrimitiveFloatHolder_updateReadOnlyPropertyWithChoices.java
new file mode 100644
index 0000000..ee2f273
--- /dev/null
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/floats/holder/PrimitiveFloatHolder_updateReadOnlyPropertyWithChoices.java
@@ -0,0 +1,58 @@
+/*
+ *  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 demoapp.dom.types.primitive.floats.holder;
+
+import java.util.List;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+
+import org.apache.isis.applib.annotation.Action;
+import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.PromptStyle;
+import org.apache.isis.applib.annotation.SemanticsOf;
+
+import lombok.RequiredArgsConstructor;
+
+
+@Action(
+        semantics = SemanticsOf.IDEMPOTENT,
+        associateWith = "readOnlyProperty",
+        associateWithSequence = "4"
+)
+@ActionLayout(promptStyle = PromptStyle.AS_CONFIGURED, named = "with choices")
+@RequiredArgsConstructor
+public class PrimitiveFloatHolder_updateReadOnlyPropertyWithChoices {
+
+    private final PrimitiveFloatHolder primitiveFloatHolder;
+
+    public PrimitiveFloatHolder act(float newValue) {
+        primitiveFloatHolder.setReadOnlyProperty(newValue);
+        return primitiveFloatHolder;
+    }
+    public float default0Act() {
+        return primitiveFloatHolder.getReadOnlyProperty();
+    }
+    public List<Float> choices0Act() {
+        return Stream.of(1.1f, 2.2f, 3.3f, 4.0f, -9.9f, -8.8f).collect(Collectors.toList());
+    }
+    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/floats/jdo/PrimitiveFloatJdoEntities.java b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/floats/jdo/PrimitiveFloatJdoEntities.java
new file mode 100644
index 0000000..be9cd57
--- /dev/null
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/floats/jdo/PrimitiveFloatJdoEntities.java
@@ -0,0 +1,26 @@
+package demoapp.dom.types.primitive.floats.jdo;
+
+import java.util.List;
+import java.util.Optional;
+
+import javax.inject.Inject;
+
+import org.springframework.stereotype.Service;
+
+import org.apache.isis.applib.services.repository.RepositoryService;
+
+@Service
+public class PrimitiveFloatJdoEntities {
+
+    public Optional<PrimitiveFloatJdoEntity> find(final float readOnlyProperty) {
+        return repositoryService.firstMatch(PrimitiveFloatJdoEntity.class, x -> x.getReadOnlyProperty() == readOnlyProperty);
+    }
+
+    public List<PrimitiveFloatJdoEntity> all() {
+        return repositoryService.allInstances(PrimitiveFloatJdoEntity.class);
+    }
+
+    @Inject
+    RepositoryService repositoryService;
+
+}
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/floats/jdo/PrimitiveFloatJdoEntity-description.adoc b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/floats/jdo/PrimitiveFloatJdoEntity-description.adoc
new file mode 100644
index 0000000..bcee705
--- /dev/null
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/floats/jdo/PrimitiveFloatJdoEntity-description.adoc
@@ -0,0 +1,30 @@
+JDO supports `float` out-of-the-box, so no special annotations are required.
+
+[source,java]
+----
+@PersistenceCapable(identityType = IdentityType.DATASTORE, schema = "demo")
+@DatastoreIdentity(strategy = IdGeneratorStrategy.IDENTITY, column = "id")
+@DomainObject(
+        objectType = "demo.PrimitiveFloatJdoEntity"
+)
+public class PrimitiveFloatJdoEntity
+    implements HasAsciiDocDescription,   PrimitiveFloatHolder {          // <.>
+
+    public PrimitiveFloatJdoEntity(float initialValue) { ... }            // <.>
+
+    @Title(prepend = "float (primitive) JDO entity: ")
+    @Getter @Setter
+    private float readOnlyProperty;                                      // <.>
+
+    @Getter @Setter
+    private float readOnlyProperty2;
+
+    @Getter @Setter
+    @Property(editing = Editing.ENABLED)
+    private float readWriteProperty;
+
+}
+----
+<.> 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/floats/jdo/PrimitiveFloatJdoEntity.java b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/floats/jdo/PrimitiveFloatJdoEntity.java
new file mode 100644
index 0000000..cf6cd08
--- /dev/null
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/floats/jdo/PrimitiveFloatJdoEntity.java
@@ -0,0 +1,67 @@
+/*
+ *  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 demoapp.dom.types.primitive.floats.jdo;
+
+import javax.jdo.annotations.DatastoreIdentity;
+import javax.jdo.annotations.IdGeneratorStrategy;
+import javax.jdo.annotations.IdentityType;
+import javax.jdo.annotations.PersistenceCapable;
+
+import org.apache.isis.applib.annotation.DomainObject;
+import org.apache.isis.applib.annotation.Editing;
+import org.apache.isis.applib.annotation.Property;
+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 demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
+import demoapp.dom.types.primitive.floats.holder.PrimitiveFloatHolder;
+
+@PersistenceCapable(identityType = IdentityType.DATASTORE, schema = "demo")
+@DatastoreIdentity(strategy = IdGeneratorStrategy.IDENTITY, column = "id")
+@DomainObject(
+        objectType = "demo.PrimitiveFloatJdoEntity"
+)
+public class PrimitiveFloatJdoEntity
+        implements HasAsciiDocDescription,
+        PrimitiveFloatHolder {
+
+    public PrimitiveFloatJdoEntity(float initialValue) {
+        this.readOnlyProperty = initialValue;
+        this.readOnlyProperty2 = initialValue;
+        this.readWriteProperty = initialValue;
+    }
+
+    @Title(prepend = "float (primitive) JDO entity: ")
+    @Getter @Setter
+    private float readOnlyProperty;
+
+    @Property
+    @PropertyLayout(hidden = Where.ALL_TABLES)
+    @Getter @Setter
+    private float readOnlyProperty2;
+
+    @Getter @Setter
+    @Property(editing = Editing.ENABLED)
+    private float readWriteProperty;
+
+}
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/floats/jdo/PrimitiveFloatJdoEntity.layout.xml b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/floats/jdo/PrimitiveFloatJdoEntity.layout.xml
new file mode 100644
index 0000000..ffa55a8
--- /dev/null
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/floats/jdo/PrimitiveFloatJdoEntity.layout.xml
@@ -0,0 +1,53 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<bs3:grid
+        xsi:schemaLocation="http://isis.apache.org/applib/layout/component http://isis.apache.org/applib/layout/component/component.xsd   http://isis.apache.org/applib/layout/grid/bootstrap3 http://isis.apache.org/applib/layout/grid/bootstrap3/bootstrap3.xsd"
+        xmlns:bs3="http://isis.apache.org/applib/layout/grid/bootstrap3"
+        xmlns:cpt="http://isis.apache.org/applib/layout/component"
+        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+
+	<bs3:row>
+		<bs3:col span="10" unreferencedActions="true">
+			<cpt:domainObject />
+			<cpt:action id="actionReturning"/>
+			<cpt:action id="rebuildMetamodel"/>
+		</bs3:col>
+		<bs3:col span="2">
+			<cpt:fieldSet name="" id="sources" />
+		</bs3:col>
+	</bs3:row>
+
+	<bs3:row>
+		<bs3:col span="6">
+			<cpt:fieldSet name="Action Prompt Styles" id="action-prompt-styles">
+				<cpt:property id="readOnlyProperty" />
+				<cpt:property id="readOnlyProperty2" >
+					<cpt:describedAs>
+						Associated action uses promptStyle=INLINE_AS_IF_EDIT
+					</cpt:describedAs>
+				</cpt:property>
+			</cpt:fieldSet>
+			<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">
+			<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="downloadJdoMetadata"  position="PANEL_DROPDOWN"/>
+				<cpt:action id="openRestApi" position="PANEL_DROPDOWN" />
+				<cpt:property id="description"/>
+			</cpt:fieldSet>
+		</bs3:col>
+	</bs3:row>
+	<bs3:row>
+		<bs3:col span="12" unreferencedCollections="true"/>
+	</bs3:row>
+
+</bs3:grid>
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/floats/jdo/PrimitiveFloatJdoEntitySeedService.java b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/floats/jdo/PrimitiveFloatJdoEntitySeedService.java
new file mode 100644
index 0000000..5cc94c1
--- /dev/null
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/floats/jdo/PrimitiveFloatJdoEntitySeedService.java
@@ -0,0 +1,42 @@
+package demoapp.dom.types.primitive.floats.jdo;
+
+import java.util.stream.Stream;
+
+import javax.inject.Inject;
+
+import org.springframework.context.event.EventListener;
+import org.springframework.stereotype.Service;
+
+import org.apache.isis.applib.services.repository.RepositoryService;
+import org.apache.isis.core.runtime.events.app.AppLifecycleEvent;
+import org.apache.isis.testing.fixtures.applib.fixturescripts.FixtureScript;
+import org.apache.isis.testing.fixtures.applib.fixturescripts.FixtureScripts;
+
+@Service
+public class PrimitiveFloatJdoEntitySeedService {
+
+    @EventListener(AppLifecycleEvent.class)
+    public void onAppLifecycleEvent(AppLifecycleEvent event) {
+
+        if (event.getEventType() == AppLifecycleEvent.EventType.appPostMetamodel) {
+            fixtureScripts.run(new PrimitiveFloatJdoEntityFixture());
+        }
+    }
+
+    @Inject
+    FixtureScripts fixtureScripts;
+
+    static class PrimitiveFloatJdoEntityFixture extends FixtureScript {
+
+        @Override
+        protected void execute(ExecutionContext executionContext) {
+            Stream.of('a', 'b', 'c')
+                    .map(PrimitiveFloatJdoEntity::new)
+                    .forEach(repositoryService::persist);
+        }
+
+        @Inject
+        RepositoryService repositoryService;
+
+    }
+}
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/floats/vm/PrimitiveFloatViewModel-description.adoc b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/floats/vm/PrimitiveFloatViewModel-description.adoc
new file mode 100644
index 0000000..16c2ad3
--- /dev/null
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/floats/vm/PrimitiveFloatViewModel-description.adoc
@@ -0,0 +1,36 @@
+JAXB supports `float` out-of-the-box, so no special annotations are required.
+
+[source,java]
+----
+@XmlRootElement(name = "demo.PrimitiveFloatViewModel")
+@XmlType
+@XmlAccessorType(XmlAccessType.FIELD)
+@DomainObject(
+        nature=Nature.VIEW_MODEL,
+        objectType = "demo.PrimitiveFloatViewModel"
+)
+@lombok.NoArgsConstructor                               // <.>
+public class PrimitiveFloatViewModel
+        implements HasAsciiDocDescription,
+                   PrimitiveFloatHolder {
+
+    public PrimitiveFloatViewModel(float initialValue) {  // <.>
+        // ...
+    }
+
+    @Title(prepend = "float (primitive) view model: ")
+    @Getter @Setter
+    private float readOnlyProperty;                      // <.>
+
+    @Getter @Setter
+    private float readOnlyProperty2;
+
+    @Getter @Setter
+    @Property(editing = Editing.ENABLED)
+    private float readWriteProperty;
+
+}
+----
+<.> a no-arg constructor is required by JAXB
+<.> 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/floats/vm/PrimitiveFloatViewModel.java b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/floats/vm/PrimitiveFloatViewModel.java
new file mode 100644
index 0000000..03af7c6
--- /dev/null
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/floats/vm/PrimitiveFloatViewModel.java
@@ -0,0 +1,71 @@
+/*
+ *  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 demoapp.dom.types.primitive.floats.vm;
+
+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.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.Title;
+import org.apache.isis.applib.annotation.Where;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
+import demoapp.dom.types.primitive.floats.holder.PrimitiveFloatHolder;
+
+@XmlRootElement(name = "demo.PrimitiveFloatViewModel")
+@XmlType
+@XmlAccessorType(XmlAccessType.FIELD)
+@DomainObject(
+        nature=Nature.VIEW_MODEL,
+        objectType = "demo.PrimitiveFloatViewModel"
+)
+@lombok.NoArgsConstructor
+public class PrimitiveFloatViewModel
+        implements HasAsciiDocDescription,
+        PrimitiveFloatHolder {
+
+    public PrimitiveFloatViewModel(float initialValue) {
+        this.readOnlyProperty = initialValue;
+        this.readOnlyProperty2 = initialValue;
+        this.readWriteProperty = initialValue;
+    }
+
+    @Title(prepend = "float (primitive) view model: ")
+    @Getter @Setter
+    private float readOnlyProperty;
+
+    @Property
+    @PropertyLayout(hidden = Where.ALL_TABLES)
+    @Getter @Setter
+    private float readOnlyProperty2;
+
+    @Getter @Setter
+    @Property(editing = Editing.ENABLED)
+    private float readWriteProperty;
+
+}
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/floats/vm/PrimitiveFloatViewModel.layout.xml b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/floats/vm/PrimitiveFloatViewModel.layout.xml
new file mode 100644
index 0000000..ffa55a8
--- /dev/null
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/floats/vm/PrimitiveFloatViewModel.layout.xml
@@ -0,0 +1,53 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<bs3:grid
+        xsi:schemaLocation="http://isis.apache.org/applib/layout/component http://isis.apache.org/applib/layout/component/component.xsd   http://isis.apache.org/applib/layout/grid/bootstrap3 http://isis.apache.org/applib/layout/grid/bootstrap3/bootstrap3.xsd"
+        xmlns:bs3="http://isis.apache.org/applib/layout/grid/bootstrap3"
+        xmlns:cpt="http://isis.apache.org/applib/layout/component"
+        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+
+	<bs3:row>
+		<bs3:col span="10" unreferencedActions="true">
+			<cpt:domainObject />
+			<cpt:action id="actionReturning"/>
+			<cpt:action id="rebuildMetamodel"/>
+		</bs3:col>
+		<bs3:col span="2">
+			<cpt:fieldSet name="" id="sources" />
+		</bs3:col>
+	</bs3:row>
+
+	<bs3:row>
+		<bs3:col span="6">
+			<cpt:fieldSet name="Action Prompt Styles" id="action-prompt-styles">
+				<cpt:property id="readOnlyProperty" />
+				<cpt:property id="readOnlyProperty2" >
+					<cpt:describedAs>
+						Associated action uses promptStyle=INLINE_AS_IF_EDIT
+					</cpt:describedAs>
+				</cpt:property>
+			</cpt:fieldSet>
+			<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">
+			<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="downloadJdoMetadata"  position="PANEL_DROPDOWN"/>
+				<cpt:action id="openRestApi" position="PANEL_DROPDOWN" />
+				<cpt:property id="description"/>
+			</cpt:fieldSet>
+		</bs3:col>
+	</bs3:row>
+	<bs3:row>
+		<bs3:col span="12" unreferencedCollections="true"/>
+	</bs3:row>
+
+</bs3:grid>
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/ints/PrimitiveInts-description.adoc b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/ints/PrimitiveInts-description.adoc
new file mode 100644
index 0000000..e992064
--- /dev/null
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/ints/PrimitiveInts-description.adoc
@@ -0,0 +1,129 @@
+The framework has built-in support for all of the primitive data types, including `int`.
+
+From here you can:
+
+* navigate to an entity that uses the `int` datatype
+* open a view model that uses the `int` datatype
+
+Because `int` is a primitive value, the properties on these domain objects are mandatory.
+
+== Common interface
+
+These objects both implement a common interface, `PrimitiveIntHolder`:
+
+[source,java]
+----
+public interface PrimitiveIntHolder {
+
+    int getReadOnlyProperty();
+    void setReadOnlyProperty(int c);
+
+    int getReadOnlyProperty2();
+    void setReadOnlyProperty2(int c);
+
+    int getReadWriteProperty();
+    void setReadWriteProperty(int c);
+
+    @MemberOrder(name = "label-positions", sequence = "1")
+    @Property
+    @PropertyLayout(labelPosition = LabelPosition.LEFT, describedAs = "labelPosition=LEFT", hidden = Where.ALL_TABLES)
+    default int getReadOnlyPropertyDerivedLabelPositionLeft() { return getReadOnlyProperty(); }
+
+    @MemberOrder(name = "label-positions", sequence = "2")
+    @Property
+    @PropertyLayout(labelPosition = LabelPosition.TOP, describedAs = "labelPosition=TOP", hidden = Where.ALL_TABLES)
+    default int getReadOnlyPropertyDerivedLabelPositionTop() { return getReadOnlyProperty(); }
+
+    @MemberOrder(name = "label-positions", sequence = "3")
+    @Property
+    @PropertyLayout(labelPosition = LabelPosition.RIGHT, describedAs = "labelPosition=RIGHT", hidden = Where.ALL_TABLES)
+    default int getReadOnlyPropertyDerivedLabelPositionRight() { return getReadOnlyProperty(); }
+
+    @MemberOrder(name = "label-positions", sequence = "4")
+    @Property
+    @PropertyLayout(labelPosition = LabelPosition.NONE, describedAs = "labelPosition=NONE", hidden = Where.ALL_TABLES)
+    default int 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 `int` as a parameter and as a return type.
+For example:
+
+* the `updateReadOnlyProperty` action is:
++
+[source,java]
+----
+@Action(
+        semantics = SemanticsOf.IDEMPOTENT,
+        associateWith = "readOnlyProperty",
+        associateWithSequence = "1"
+)
+@RequiredArgsConstructor
+public class PrimitiveIntHolder_updateReadOnlyProperty {
+
+    private final PrimitiveIntHolder primitiveIntHolder;
+
+    public PrimitiveIntHolder act(int newValue) {
+        primitiveIntHolder.setReadOnlyProperty(newValue);
+        return primitiveIntHolder;
+    }
+    public int default0Act() {
+        return primitiveIntHolder.getReadOnlyProperty();
+    }
+}
+----
++
+There are a number of variants of this action, to demonstrate different prompt layouts.
+
+* the `actionReturning` action is:
++
+[source,java]
+----
+@Action(
+        semantics = SemanticsOf.SAFE,
+        associateWith = "readOnlyProperty",
+        associateWithSequence = "3"
+)
+@RequiredArgsConstructor
+public class PrimitiveIntHolder_actionReturning {
+
+    private final PrimitiveIntHolder primitiveIntHolder;
+
+    public int act() {
+        return primitiveIntHolder.getReadOnlyProperty();
+    }
+}
+----
+
+== 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 PrimitiveIntHolder_mixinPropertyWithCssClass {
+
+    private final PrimitiveIntHolder primitiveIntHolder;
+
+    @MemberOrder(name = "contributed", sequence = "1")
+    public int prop() {
+        return primitiveIntHolder.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/ints/PrimitiveInts.java b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/ints/PrimitiveInts.java
new file mode 100644
index 0000000..b0a6f3d
--- /dev/null
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/ints/PrimitiveInts.java
@@ -0,0 +1,76 @@
+/*
+ *  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 demoapp.dom.types.primitive.ints;
+
+import java.util.List;
+
+import javax.inject.Inject;
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlRootElement;
+import javax.xml.bind.annotation.XmlTransient;
+import javax.xml.bind.annotation.XmlType;
+
+import org.apache.isis.applib.annotation.Action;
+import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.Collection;
+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.PromptStyle;
+import org.apache.isis.applib.annotation.SemanticsOf;
+
+import lombok.extern.log4j.Log4j2;
+
+import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
+import demoapp.dom.types.primitive.ints.jdo.PrimitiveIntJdoEntities;
+import demoapp.dom.types.primitive.ints.jdo.PrimitiveIntJdoEntity;
+import demoapp.dom.types.primitive.ints.vm.PrimitiveIntViewModel;
+
+@XmlRootElement(name = "Demo")
+@XmlType
+@XmlAccessorType(XmlAccessType.FIELD)
+@DomainObject(nature=Nature.VIEW_MODEL, objectType = "demo.PrimitiveInts", editing=Editing.ENABLED)
+@Log4j2
+public class PrimitiveInts implements HasAsciiDocDescription {
+
+    public String title() {
+        return "int (primitive) data type";
+    }
+
+    @Action(semantics = SemanticsOf.SAFE)
+    @ActionLayout(promptStyle = PromptStyle.DIALOG_MODAL)
+    public PrimitiveIntViewModel openViewModel(int initialValue) {
+        return new PrimitiveIntViewModel(initialValue);
+    }
+    public int default0OpenViewModel() {
+        return 123456;
+    }
+
+    @Collection
+    public List<PrimitiveIntJdoEntity> getEntities() {
+        return entities.all();
+    }
+
+    @Inject
+    @XmlTransient
+    PrimitiveIntJdoEntities entities;
+
+
+}
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/ints/PrimitiveInts.layout.xml b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/ints/PrimitiveInts.layout.xml
new file mode 100644
index 0000000..55c5b87
--- /dev/null
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/ints/PrimitiveInts.layout.xml
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<bs3:grid
+        xsi:schemaLocation="http://isis.apache.org/applib/layout/component http://isis.apache.org/applib/layout/component/component.xsd   http://isis.apache.org/applib/layout/grid/bootstrap3 http://isis.apache.org/applib/layout/grid/bootstrap3/bootstrap3.xsd"
+        xmlns:bs3="http://isis.apache.org/applib/layout/grid/bootstrap3"
+        xmlns:cpt="http://isis.apache.org/applib/layout/component"
+        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+
+	<bs3:row>
+		<bs3:col span="10" unreferencedActions="true">
+			<cpt:domainObject />
+			<cpt:action id="rebuildMetamodel"/>
+		</bs3:col>
+		<bs3:col span="2">
+			<cpt:fieldSet name="" id="sources" />
+		</bs3:col>
+	</bs3:row>
+
+	<bs3:row>
+		<bs3:col span="6">
+			<bs3:row>
+				<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>
+		<bs3:col span="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" />
+				<cpt:property id="description"/>
+			</cpt:fieldSet>
+		</bs3:col>
+	</bs3:row>
+	<bs3:row>
+		<bs3:col span="12" unreferencedCollections="true"/>
+	</bs3:row>
+
+</bs3:grid>
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/ints/holder/PrimitiveIntHolder.java b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/ints/holder/PrimitiveIntHolder.java
new file mode 100644
index 0000000..a5dc5f4
--- /dev/null
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/ints/holder/PrimitiveIntHolder.java
@@ -0,0 +1,84 @@
+/*
+ *  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 demoapp.dom.types.primitive.ints.holder;
+
+import javax.jdo.annotations.DatastoreIdentity;
+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.LabelPosition;
+import org.apache.isis.applib.annotation.MemberOrder;
+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.Setter;
+import lombok.extern.log4j.Log4j2;
+
+import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
+
+public interface PrimitiveIntHolder {
+
+    @MemberOrder(name = "action-prompt-styles", sequence = "1") // TODO: doesn't seem to get picked up
+    @Property
+    @PropertyLayout
+    int getReadOnlyProperty();
+    void setReadOnlyProperty(int c);
+
+    @MemberOrder(name = "action-prompt-styles", sequence = "1") // TODO: doesn't seem to get picked up
+    @Property
+    @PropertyLayout(describedAs = "associated action uses promptStyle=INLINE_AS_IF_EDIT", hidden = Where.ALL_TABLES) // TODO: doesn't seem to get picked up
+    int getReadOnlyProperty2();
+    void setReadOnlyProperty2(int c);
+
+    @MemberOrder(name = "editable-properties", sequence = "1") // TODO: doesn't seem to get picked up
+    @Property
+    @PropertyLayout
+    int getReadWriteProperty();
+    void setReadWriteProperty(int c);
+
+    @MemberOrder(name = "label-positions", sequence = "1")
+    @Property
+    @PropertyLayout(labelPosition = LabelPosition.LEFT, describedAs = "labelPosition=LEFT", hidden = Where.ALL_TABLES)
+    default int getReadOnlyPropertyDerivedLabelPositionLeft() { return getReadOnlyProperty(); }
+
+    @MemberOrder(name = "label-positions", sequence = "2")
+    @Property
+    @PropertyLayout(labelPosition = LabelPosition.TOP, describedAs = "labelPosition=TOP", hidden = Where.ALL_TABLES)
+    default int getReadOnlyPropertyDerivedLabelPositionTop() { return getReadOnlyProperty(); }
+
+    @MemberOrder(name = "label-positions", sequence = "3")
+    @Property
+    @PropertyLayout(labelPosition = LabelPosition.RIGHT, describedAs = "labelPosition=RIGHT", hidden = Where.ALL_TABLES)
+    default int getReadOnlyPropertyDerivedLabelPositionRight() { return getReadOnlyProperty(); }
+
+    @MemberOrder(name = "label-positions", sequence = "4")
+    @Property
+    @PropertyLayout(labelPosition = LabelPosition.NONE, describedAs = "labelPosition=NONE", hidden = Where.ALL_TABLES)
+    default int getReadOnlyPropertyDerivedLabelPositionNone() { return getReadOnlyProperty(); }
+
+}
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/ints/holder/PrimitiveIntHolder_actionReturning.java b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/ints/holder/PrimitiveIntHolder_actionReturning.java
new file mode 100644
index 0000000..481e74f
--- /dev/null
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/ints/holder/PrimitiveIntHolder_actionReturning.java
@@ -0,0 +1,39 @@
+/*
+ *  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 demoapp.dom.types.primitive.ints.holder;
+
+import org.apache.isis.applib.annotation.Action;
+import org.apache.isis.applib.annotation.SemanticsOf;
+
+import lombok.RequiredArgsConstructor;
+
+
+@Action(
+        semantics = SemanticsOf.SAFE
+)
+@RequiredArgsConstructor
+public class PrimitiveIntHolder_actionReturning {
+
+    private final PrimitiveIntHolder primitiveIntHolder;
+
+    public int act() {
+        return primitiveIntHolder.getReadOnlyProperty();
+    }
+
+}
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/ints/holder/PrimitiveIntHolder_mixinPropertyNamedNotEscaped.java b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/ints/holder/PrimitiveIntHolder_mixinPropertyNamedNotEscaped.java
new file mode 100644
index 0000000..7641fe9
--- /dev/null
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/ints/holder/PrimitiveIntHolder_mixinPropertyNamedNotEscaped.java
@@ -0,0 +1,39 @@
+/*
+ *  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 demoapp.dom.types.primitive.ints.holder;
+
+import org.apache.isis.applib.annotation.MemberOrder;
+
+import lombok.RequiredArgsConstructor;
+
+
+//@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 PrimitiveIntHolder_mixinPropertyNamedNotEscaped {
+
+    private final PrimitiveIntHolder primitiveIntHolder;
+
+    @MemberOrder(name = "contributed", sequence = "3")
+    public int prop() {
+        return primitiveIntHolder.getReadOnlyProperty();
+    }
+
+
+}
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/ints/holder/PrimitiveIntHolder_mixinPropertyNavigable.java b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/ints/holder/PrimitiveIntHolder_mixinPropertyNavigable.java
new file mode 100644
index 0000000..6afdfdd
--- /dev/null
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/ints/holder/PrimitiveIntHolder_mixinPropertyNavigable.java
@@ -0,0 +1,39 @@
+/*
+ *  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 demoapp.dom.types.primitive.ints.holder;
+
+import org.apache.isis.applib.annotation.MemberOrder;
+
+import lombok.RequiredArgsConstructor;
+
+
+//@Property()
+//@PropertyLayout( navigable = Navigable.PARENT, describedAs = "navigable=PARENT") // TODO: doesn't seem to do anything
+@RequiredArgsConstructor
+public class PrimitiveIntHolder_mixinPropertyNavigable {
+
+    private final PrimitiveIntHolder primitiveIntHolder;
+
+    @MemberOrder(name = "contributed", sequence = "1")
+    public int prop() {
+        return primitiveIntHolder.getReadOnlyProperty();
+    }
+
+
+}
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/ints/holder/PrimitiveIntHolder_mixinPropertyWithCssClass.java b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/ints/holder/PrimitiveIntHolder_mixinPropertyWithCssClass.java
new file mode 100644
index 0000000..d0f487d
--- /dev/null
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/ints/holder/PrimitiveIntHolder_mixinPropertyWithCssClass.java
@@ -0,0 +1,40 @@
+/*
+ *  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 demoapp.dom.types.primitive.ints.holder;
+
+import org.apache.isis.applib.annotation.MemberOrder;
+import org.apache.isis.applib.annotation.Property;
+import org.apache.isis.applib.annotation.PropertyLayout;
+import org.apache.isis.applib.annotation.Where;
+
+import lombok.RequiredArgsConstructor;
+
+
+@Property()
+@PropertyLayout(cssClass = "red", describedAs = "cssClass = \"red\" ", hidden = Where.ALL_TABLES)
+@RequiredArgsConstructor
+public class PrimitiveIntHolder_mixinPropertyWithCssClass {
+
+    private final PrimitiveIntHolder primitiveIntHolder;
+
+    @MemberOrder(name = "contributed", sequence = "1")
+    public int prop() {
+        return primitiveIntHolder.getReadOnlyProperty();
+    }
+}
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/ints/holder/PrimitiveIntHolder_updateReadOnlyProperty2PromptInlineAsIfEdit.java b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/ints/holder/PrimitiveIntHolder_updateReadOnlyProperty2PromptInlineAsIfEdit.java
new file mode 100644
index 0000000..62e1f2e
--- /dev/null
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/ints/holder/PrimitiveIntHolder_updateReadOnlyProperty2PromptInlineAsIfEdit.java
@@ -0,0 +1,49 @@
+/*
+ *  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 demoapp.dom.types.primitive.ints.holder;
+
+import org.apache.isis.applib.annotation.Action;
+import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.PromptStyle;
+import org.apache.isis.applib.annotation.SemanticsOf;
+
+import lombok.RequiredArgsConstructor;
+
+
+@Action(
+        semantics = SemanticsOf.IDEMPOTENT,
+        associateWith = "readOnlyProperty2",
+        associateWithSequence = "1"
+)
+@ActionLayout(promptStyle = PromptStyle.INLINE_AS_IF_EDIT)
+@RequiredArgsConstructor
+public class PrimitiveIntHolder_updateReadOnlyProperty2PromptInlineAsIfEdit {
+
+    private final PrimitiveIntHolder primitiveIntHolder;
+
+    public PrimitiveIntHolder act(int newValue) {
+        primitiveIntHolder.setReadOnlyProperty2(newValue);
+        return primitiveIntHolder;
+    }
+    public int default0Act() {
+        return primitiveIntHolder.getReadOnlyProperty2();
+    }
+
+
+}
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/ints/holder/PrimitiveIntHolder_updateReadOnlyPropertyPositionPanel.java b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/ints/holder/PrimitiveIntHolder_updateReadOnlyPropertyPositionPanel.java
new file mode 100644
index 0000000..4535937
--- /dev/null
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/ints/holder/PrimitiveIntHolder_updateReadOnlyPropertyPositionPanel.java
@@ -0,0 +1,48 @@
+/*
+ *  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 demoapp.dom.types.primitive.ints.holder;
+
+import org.apache.isis.applib.annotation.Action;
+import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.SemanticsOf;
+
+import lombok.RequiredArgsConstructor;
+
+
+@Action(
+        semantics = SemanticsOf.IDEMPOTENT,
+        associateWith = "readOnlyProperty",
+        associateWithSequence = "2"
+)
+@ActionLayout(position = ActionLayout.Position.PANEL, named = "Position in panel", describedAs = "position = PANEL")
+@RequiredArgsConstructor
+public class PrimitiveIntHolder_updateReadOnlyPropertyPositionPanel {
+
+    private final PrimitiveIntHolder primitiveIntHolder;
+
+    public PrimitiveIntHolder act(int newValue) {
+        primitiveIntHolder.setReadOnlyProperty(newValue);
+        return primitiveIntHolder;
+    }
+    public int default0Act() {
+        return primitiveIntHolder.getReadOnlyProperty();
+    }
+
+
+}
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/ints/holder/PrimitiveIntHolder_updateReadOnlyPropertyPromptStyleInline.java b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/ints/holder/PrimitiveIntHolder_updateReadOnlyPropertyPromptStyleInline.java
new file mode 100644
index 0000000..a982cdf
--- /dev/null
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/ints/holder/PrimitiveIntHolder_updateReadOnlyPropertyPromptStyleInline.java
@@ -0,0 +1,49 @@
+/*
+ *  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 demoapp.dom.types.primitive.ints.holder;
+
+import org.apache.isis.applib.annotation.Action;
+import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.PromptStyle;
+import org.apache.isis.applib.annotation.SemanticsOf;
+
+import lombok.RequiredArgsConstructor;
+
+
+@Action(
+        semantics = SemanticsOf.IDEMPOTENT,
+        associateWith = "readOnlyProperty",
+        associateWithSequence = "1"
+)
+@ActionLayout(promptStyle = PromptStyle.INLINE, named = "Inline", describedAs = "promptStyle = INLINE")
+@RequiredArgsConstructor
+public class PrimitiveIntHolder_updateReadOnlyPropertyPromptStyleInline {
+
+    private final PrimitiveIntHolder primitiveIntHolder;
+
+    public PrimitiveIntHolder act(int newValue) {
+        primitiveIntHolder.setReadOnlyProperty(newValue);
+        return primitiveIntHolder;
+    }
+    public int default0Act() {
+        return primitiveIntHolder.getReadOnlyProperty();
+    }
+
+
+}
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/ints/holder/PrimitiveIntHolder_updateReadOnlyPropertyPromptStyleModal.java b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/ints/holder/PrimitiveIntHolder_updateReadOnlyPropertyPromptStyleModal.java
new file mode 100644
index 0000000..c1d7d3a
--- /dev/null
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/ints/holder/PrimitiveIntHolder_updateReadOnlyPropertyPromptStyleModal.java
@@ -0,0 +1,49 @@
+/*
+ *  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 demoapp.dom.types.primitive.ints.holder;
+
+import org.apache.isis.applib.annotation.Action;
+import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.PromptStyle;
+import org.apache.isis.applib.annotation.SemanticsOf;
+
+import lombok.RequiredArgsConstructor;
+
+
+@Action(
+        semantics = SemanticsOf.IDEMPOTENT,
+        associateWith = "readOnlyProperty",
+        associateWithSequence = "2"
+)
+@ActionLayout(promptStyle = PromptStyle.DIALOG_MODAL, named = "Modal", describedAs = "promptStyle = MODAL")
+@RequiredArgsConstructor
+public class PrimitiveIntHolder_updateReadOnlyPropertyPromptStyleModal {
+
+    private final PrimitiveIntHolder primitiveIntHolder;
+
+    public PrimitiveIntHolder act(int newValue) {
+        primitiveIntHolder.setReadOnlyProperty(newValue);
+        return primitiveIntHolder;
+    }
+    public int default0Act() {
+        return primitiveIntHolder.getReadOnlyProperty();
+    }
+
+
+}
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/ints/holder/PrimitiveIntHolder_updateReadOnlyPropertyPromptStylePanelDropDown.java b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/ints/holder/PrimitiveIntHolder_updateReadOnlyPropertyPromptStylePanelDropDown.java
new file mode 100644
index 0000000..a5703b6
--- /dev/null
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/ints/holder/PrimitiveIntHolder_updateReadOnlyPropertyPromptStylePanelDropDown.java
@@ -0,0 +1,48 @@
+/*
+ *  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 demoapp.dom.types.primitive.ints.holder;
+
+import org.apache.isis.applib.annotation.Action;
+import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.SemanticsOf;
+
+import lombok.RequiredArgsConstructor;
+
+
+@Action(
+        semantics = SemanticsOf.IDEMPOTENT,
+        associateWith = "readOnlyProperty",
+        associateWithSequence = "3"
+)
+@ActionLayout(position = ActionLayout.Position.PANEL_DROPDOWN, named = "Panel Dropdown", describedAs = "position = PANEL_DROPDOWN")
+@RequiredArgsConstructor
+public class PrimitiveIntHolder_updateReadOnlyPropertyPromptStylePanelDropDown {
+
+    private final PrimitiveIntHolder primitiveIntHolder;
+
+    public PrimitiveIntHolder act(int newValue) {
+        primitiveIntHolder.setReadOnlyProperty(newValue);
+        return primitiveIntHolder;
+    }
+    public int default0Act() {
+        return primitiveIntHolder.getReadOnlyProperty();
+    }
+
+
+}
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/ints/holder/PrimitiveIntHolder_updateReadOnlyPropertyPromptStyleSidebar.java b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/ints/holder/PrimitiveIntHolder_updateReadOnlyPropertyPromptStyleSidebar.java
new file mode 100644
index 0000000..921f7eb
--- /dev/null
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/ints/holder/PrimitiveIntHolder_updateReadOnlyPropertyPromptStyleSidebar.java
@@ -0,0 +1,49 @@
+/*
+ *  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 demoapp.dom.types.primitive.ints.holder;
+
+import org.apache.isis.applib.annotation.Action;
+import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.PromptStyle;
+import org.apache.isis.applib.annotation.SemanticsOf;
+
+import lombok.RequiredArgsConstructor;
+
+
+@Action(
+        semantics = SemanticsOf.IDEMPOTENT,
+        associateWith = "readOnlyProperty",
+        associateWithSequence = "3"
+)
+@ActionLayout(promptStyle = PromptStyle.DIALOG_SIDEBAR, named = "sidebar", describedAs = "promptStyle = DIALOG_SIDEBAR")
+@RequiredArgsConstructor
+public class PrimitiveIntHolder_updateReadOnlyPropertyPromptStyleSidebar {
+
+    private final PrimitiveIntHolder primitiveIntHolder;
+
+    public PrimitiveIntHolder act(int newValue) {
+        primitiveIntHolder.setReadOnlyProperty(newValue);
+        return primitiveIntHolder;
+    }
+    public int default0Act() {
+        return primitiveIntHolder.getReadOnlyProperty();
+    }
+
+
+}
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/ints/holder/PrimitiveIntHolder_updateReadOnlyPropertyWithChoices.java b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/ints/holder/PrimitiveIntHolder_updateReadOnlyPropertyWithChoices.java
new file mode 100644
index 0000000..31196a8
--- /dev/null
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/ints/holder/PrimitiveIntHolder_updateReadOnlyPropertyWithChoices.java
@@ -0,0 +1,58 @@
+/*
+ *  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 demoapp.dom.types.primitive.ints.holder;
+
+import java.util.List;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+
+import org.apache.isis.applib.annotation.Action;
+import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.PromptStyle;
+import org.apache.isis.applib.annotation.SemanticsOf;
+
+import lombok.RequiredArgsConstructor;
+
+
+@Action(
+        semantics = SemanticsOf.IDEMPOTENT,
+        associateWith = "readOnlyProperty",
+        associateWithSequence = "4"
+)
+@ActionLayout(promptStyle = PromptStyle.AS_CONFIGURED, named = "with choices")
+@RequiredArgsConstructor
+public class PrimitiveIntHolder_updateReadOnlyPropertyWithChoices {
+
+    private final PrimitiveIntHolder primitiveIntHolder;
+
+    public PrimitiveIntHolder act(int newValue) {
+        primitiveIntHolder.setReadOnlyProperty(newValue);
+        return primitiveIntHolder;
+    }
+    public int default0Act() {
+        return primitiveIntHolder.getReadOnlyProperty();
+    }
+    public List<Integer> choices0Act() {
+        return Stream.of(1,2,3,-1,-2,-3).collect(Collectors.toList());
+    }
+    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/ints/jdo/PrimitiveIntJdoEntities.java b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/ints/jdo/PrimitiveIntJdoEntities.java
new file mode 100644
index 0000000..dc7c679
--- /dev/null
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/ints/jdo/PrimitiveIntJdoEntities.java
@@ -0,0 +1,26 @@
+package demoapp.dom.types.primitive.ints.jdo;
+
+import java.util.List;
+import java.util.Optional;
+
+import javax.inject.Inject;
+
+import org.springframework.stereotype.Service;
+
+import org.apache.isis.applib.services.repository.RepositoryService;
+
+@Service
+public class PrimitiveIntJdoEntities {
+
+    public Optional<PrimitiveIntJdoEntity> find(final int readOnlyProperty) {
+        return repositoryService.firstMatch(PrimitiveIntJdoEntity.class, x -> x.getReadOnlyProperty() == readOnlyProperty);
+    }
+
+    public List<PrimitiveIntJdoEntity> all() {
+        return repositoryService.allInstances(PrimitiveIntJdoEntity.class);
+    }
+
+    @Inject
+    RepositoryService repositoryService;
+
+}
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/ints/jdo/PrimitiveIntJdoEntity-description.adoc b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/ints/jdo/PrimitiveIntJdoEntity-description.adoc
new file mode 100644
index 0000000..39fcfc8
--- /dev/null
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/ints/jdo/PrimitiveIntJdoEntity-description.adoc
@@ -0,0 +1,30 @@
+JDO supports `int` out-of-the-box, so no special annotations are required.
+
+[source,java]
+----
+@PersistenceCapable(identityType = IdentityType.DATASTORE, schema = "demo")
+@DatastoreIdentity(strategy = IdGeneratorStrategy.IDENTITY, column = "id")
+@DomainObject(
+        objectType = "demo.PrimitiveIntJdoEntity"
+)
+public class PrimitiveIntJdoEntity
+    implements HasAsciiDocDescription,   PrimitiveIntHolder {          // <.>
+
+    public PrimitiveIntJdoEntity(int initialValue) { ... }            // <.>
+
+    @Title(prepend = "int (primitive) JDO entity: ")
+    @Getter @Setter
+    private int readOnlyProperty;                                      // <.>
+
+    @Getter @Setter
+    private int readOnlyProperty2;
+
+    @Getter @Setter
+    @Property(editing = Editing.ENABLED)
+    private int readWriteProperty;
+
+}
+----
+<.> 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/ints/jdo/PrimitiveIntJdoEntity.java b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/ints/jdo/PrimitiveIntJdoEntity.java
new file mode 100644
index 0000000..44458e1
--- /dev/null
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/ints/jdo/PrimitiveIntJdoEntity.java
@@ -0,0 +1,67 @@
+/*
+ *  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 demoapp.dom.types.primitive.ints.jdo;
+
+import javax.jdo.annotations.DatastoreIdentity;
+import javax.jdo.annotations.IdGeneratorStrategy;
+import javax.jdo.annotations.IdentityType;
+import javax.jdo.annotations.PersistenceCapable;
+
+import org.apache.isis.applib.annotation.DomainObject;
+import org.apache.isis.applib.annotation.Editing;
+import org.apache.isis.applib.annotation.Property;
+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 demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
+import demoapp.dom.types.primitive.ints.holder.PrimitiveIntHolder;
+
+@PersistenceCapable(identityType = IdentityType.DATASTORE, schema = "demo")
+@DatastoreIdentity(strategy = IdGeneratorStrategy.IDENTITY, column = "id")
+@DomainObject(
+        objectType = "demo.PrimitiveIntJdoEntity"
+)
+public class PrimitiveIntJdoEntity
+        implements HasAsciiDocDescription,
+        PrimitiveIntHolder {
+
+    public PrimitiveIntJdoEntity(int initialValue) {
+        this.readOnlyProperty = initialValue;
+        this.readOnlyProperty2 = initialValue;
+        this.readWriteProperty = initialValue;
+    }
+
+    @Title(prepend = "int (primitive) JDO entity: ")
+    @Getter @Setter
+    private int readOnlyProperty;
+
+    @Property
+    @PropertyLayout(hidden = Where.ALL_TABLES)
+    @Getter @Setter
+    private int readOnlyProperty2;
+
+    @Getter @Setter
+    @Property(editing = Editing.ENABLED)
+    private int readWriteProperty;
+
+}
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/ints/jdo/PrimitiveIntJdoEntity.layout.xml b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/ints/jdo/PrimitiveIntJdoEntity.layout.xml
new file mode 100644
index 0000000..ffa55a8
--- /dev/null
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/ints/jdo/PrimitiveIntJdoEntity.layout.xml
@@ -0,0 +1,53 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<bs3:grid
+        xsi:schemaLocation="http://isis.apache.org/applib/layout/component http://isis.apache.org/applib/layout/component/component.xsd   http://isis.apache.org/applib/layout/grid/bootstrap3 http://isis.apache.org/applib/layout/grid/bootstrap3/bootstrap3.xsd"
+        xmlns:bs3="http://isis.apache.org/applib/layout/grid/bootstrap3"
+        xmlns:cpt="http://isis.apache.org/applib/layout/component"
+        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+
+	<bs3:row>
+		<bs3:col span="10" unreferencedActions="true">
+			<cpt:domainObject />
+			<cpt:action id="actionReturning"/>
+			<cpt:action id="rebuildMetamodel"/>
+		</bs3:col>
+		<bs3:col span="2">
+			<cpt:fieldSet name="" id="sources" />
+		</bs3:col>
+	</bs3:row>
+
+	<bs3:row>
+		<bs3:col span="6">
+			<cpt:fieldSet name="Action Prompt Styles" id="action-prompt-styles">
+				<cpt:property id="readOnlyProperty" />
+				<cpt:property id="readOnlyProperty2" >
+					<cpt:describedAs>
+						Associated action uses promptStyle=INLINE_AS_IF_EDIT
+					</cpt:describedAs>
+				</cpt:property>
+			</cpt:fieldSet>
+			<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">
+			<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="downloadJdoMetadata"  position="PANEL_DROPDOWN"/>
+				<cpt:action id="openRestApi" position="PANEL_DROPDOWN" />
+				<cpt:property id="description"/>
+			</cpt:fieldSet>
+		</bs3:col>
+	</bs3:row>
+	<bs3:row>
+		<bs3:col span="12" unreferencedCollections="true"/>
+	</bs3:row>
+
+</bs3:grid>
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/ints/jdo/PrimitiveIntJdoEntitySeedService.java b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/ints/jdo/PrimitiveIntJdoEntitySeedService.java
new file mode 100644
index 0000000..5b782cf
--- /dev/null
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/ints/jdo/PrimitiveIntJdoEntitySeedService.java
@@ -0,0 +1,42 @@
+package demoapp.dom.types.primitive.ints.jdo;
+
+import java.util.stream.Stream;
+
+import javax.inject.Inject;
+
+import org.springframework.context.event.EventListener;
+import org.springframework.stereotype.Service;
+
+import org.apache.isis.applib.services.repository.RepositoryService;
+import org.apache.isis.core.runtime.events.app.AppLifecycleEvent;
+import org.apache.isis.testing.fixtures.applib.fixturescripts.FixtureScript;
+import org.apache.isis.testing.fixtures.applib.fixturescripts.FixtureScripts;
+
+@Service
+public class PrimitiveIntJdoEntitySeedService {
+
+    @EventListener(AppLifecycleEvent.class)
+    public void onAppLifecycleEvent(AppLifecycleEvent event) {
+
+        if (event.getEventType() == AppLifecycleEvent.EventType.appPostMetamodel) {
+            fixtureScripts.run(new PrimitiveIntJdoEntityFixture());
+        }
+    }
+
+    @Inject
+    FixtureScripts fixtureScripts;
+
+    static class PrimitiveIntJdoEntityFixture extends FixtureScript {
+
+        @Override
+        protected void execute(ExecutionContext executionContext) {
+            Stream.of('a', 'b', 'c')
+                    .map(PrimitiveIntJdoEntity::new)
+                    .forEach(repositoryService::persist);
+        }
+
+        @Inject
+        RepositoryService repositoryService;
+
+    }
+}
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/ints/vm/PrimitiveIntViewModel-description.adoc b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/ints/vm/PrimitiveIntViewModel-description.adoc
new file mode 100644
index 0000000..720ce53
--- /dev/null
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/ints/vm/PrimitiveIntViewModel-description.adoc
@@ -0,0 +1,36 @@
+JAXB supports `int` out-of-the-box, so no special annotations are required.
+
+[source,java]
+----
+@XmlRootElement(name = "demo.PrimitiveIntViewModel")
+@XmlType
+@XmlAccessorType(XmlAccessType.FIELD)
+@DomainObject(
+        nature=Nature.VIEW_MODEL,
+        objectType = "demo.PrimitiveIntViewModel"
+)
+@lombok.NoArgsConstructor                               // <.>
+public class PrimitiveIntViewModel
+        implements HasAsciiDocDescription,
+                   PrimitiveIntHolder {
+
+    public PrimitiveIntViewModel(int initialValue) {  // <.>
+        // ...
+    }
+
+    @Title(prepend = "int (primitive) view model: ")
+    @Getter @Setter
+    private int readOnlyProperty;                      // <.>
+
+    @Getter @Setter
+    private int readOnlyProperty2;
+
+    @Getter @Setter
+    @Property(editing = Editing.ENABLED)
+    private int readWriteProperty;
+
+}
+----
+<.> a no-arg constructor is required by JAXB
+<.> 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/ints/vm/PrimitiveIntViewModel.java b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/ints/vm/PrimitiveIntViewModel.java
new file mode 100644
index 0000000..3e53ef8
--- /dev/null
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/ints/vm/PrimitiveIntViewModel.java
@@ -0,0 +1,71 @@
+/*
+ *  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 demoapp.dom.types.primitive.ints.vm;
+
+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.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.Title;
+import org.apache.isis.applib.annotation.Where;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
+import demoapp.dom.types.primitive.ints.holder.PrimitiveIntHolder;
+
+@XmlRootElement(name = "demo.PrimitiveIntViewModel")
+@XmlType
+@XmlAccessorType(XmlAccessType.FIELD)
+@DomainObject(
+        nature=Nature.VIEW_MODEL,
+        objectType = "demo.PrimitiveIntViewModel"
+)
+@lombok.NoArgsConstructor
+public class PrimitiveIntViewModel
+        implements HasAsciiDocDescription,
+        PrimitiveIntHolder {
+
+    public PrimitiveIntViewModel(int initialValue) {
+        this.readOnlyProperty = initialValue;
+        this.readOnlyProperty2 = initialValue;
+        this.readWriteProperty = initialValue;
+    }
+
+    @Title(prepend = "int (primitive) view model: ")
+    @Getter @Setter
+    private int readOnlyProperty;
+
+    @Property
+    @PropertyLayout(hidden = Where.ALL_TABLES)
+    @Getter @Setter
+    private int readOnlyProperty2;
+
+    @Getter @Setter
+    @Property(editing = Editing.ENABLED)
+    private int readWriteProperty;
+
+}
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/ints/vm/PrimitiveIntViewModel.layout.xml b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/ints/vm/PrimitiveIntViewModel.layout.xml
new file mode 100644
index 0000000..ffa55a8
--- /dev/null
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/ints/vm/PrimitiveIntViewModel.layout.xml
@@ -0,0 +1,53 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<bs3:grid
+        xsi:schemaLocation="http://isis.apache.org/applib/layout/component http://isis.apache.org/applib/layout/component/component.xsd   http://isis.apache.org/applib/layout/grid/bootstrap3 http://isis.apache.org/applib/layout/grid/bootstrap3/bootstrap3.xsd"
+        xmlns:bs3="http://isis.apache.org/applib/layout/grid/bootstrap3"
+        xmlns:cpt="http://isis.apache.org/applib/layout/component"
+        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+
+	<bs3:row>
+		<bs3:col span="10" unreferencedActions="true">
+			<cpt:domainObject />
+			<cpt:action id="actionReturning"/>
+			<cpt:action id="rebuildMetamodel"/>
+		</bs3:col>
+		<bs3:col span="2">
+			<cpt:fieldSet name="" id="sources" />
+		</bs3:col>
+	</bs3:row>
+
+	<bs3:row>
+		<bs3:col span="6">
+			<cpt:fieldSet name="Action Prompt Styles" id="action-prompt-styles">
+				<cpt:property id="readOnlyProperty" />
+				<cpt:property id="readOnlyProperty2" >
+					<cpt:describedAs>
+						Associated action uses promptStyle=INLINE_AS_IF_EDIT
+					</cpt:describedAs>
+				</cpt:property>
+			</cpt:fieldSet>
+			<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">
+			<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="downloadJdoMetadata"  position="PANEL_DROPDOWN"/>
+				<cpt:action id="openRestApi" position="PANEL_DROPDOWN" />
+				<cpt:property id="description"/>
+			</cpt:fieldSet>
+		</bs3:col>
+	</bs3:row>
+	<bs3:row>
+		<bs3:col span="12" unreferencedCollections="true"/>
+	</bs3:row>
+
+</bs3:grid>
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/longs/PrimitiveLongs-description.adoc b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/longs/PrimitiveLongs-description.adoc
new file mode 100644
index 0000000..4689b05
--- /dev/null
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/longs/PrimitiveLongs-description.adoc
@@ -0,0 +1,129 @@
+The framework has built-in support for all of the primitive data types, including `long`.
+
+From here you can:
+
+* navigate to an entity that uses the `long` datatype
+* open a view model that uses the `long` datatype
+
+Because `long` is a primitive value, the properties on these domain objects are mandatory.
+
+== Common interface
+
+These objects both implement a common interface, `PrimitiveLongHolder`:
+
+[source,java]
+----
+public interface PrimitiveLongHolder {
+
+    long getReadOnlyProperty();
+    void setReadOnlyProperty(long c);
+
+    long getReadOnlyProperty2();
+    void setReadOnlyProperty2(long c);
+
+    long getReadWriteProperty();
+    void setReadWriteProperty(long c);
+
+    @MemberOrder(name = "label-positions", sequence = "1")
+    @Property
+    @PropertyLayout(labelPosition = LabelPosition.LEFT, describedAs = "labelPosition=LEFT", hidden = Where.ALL_TABLES)
+    default long getReadOnlyPropertyDerivedLabelPositionLeft() { return getReadOnlyProperty(); }
+
+    @MemberOrder(name = "label-positions", sequence = "2")
+    @Property
+    @PropertyLayout(labelPosition = LabelPosition.TOP, describedAs = "labelPosition=TOP", hidden = Where.ALL_TABLES)
+    default long getReadOnlyPropertyDerivedLabelPositionTop() { return getReadOnlyProperty(); }
+
+    @MemberOrder(name = "label-positions", sequence = "3")
+    @Property
+    @PropertyLayout(labelPosition = LabelPosition.RIGHT, describedAs = "labelPosition=RIGHT", hidden = Where.ALL_TABLES)
+    default long getReadOnlyPropertyDerivedLabelPositionRight() { return getReadOnlyProperty(); }
+
+    @MemberOrder(name = "label-positions", sequence = "4")
+    @Property
+    @PropertyLayout(labelPosition = LabelPosition.NONE, describedAs = "labelPosition=NONE", hidden = Where.ALL_TABLES)
+    default long 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 `long` as a parameter and as a return type.
+For example:
+
+* the `updateReadOnlyProperty` action is:
++
+[source,java]
+----
+@Action(
+        semantics = SemanticsOf.IDEMPOTENT,
+        associateWith = "readOnlyProperty",
+        associateWithSequence = "1"
+)
+@RequiredArgsConstructor
+public class PrimitiveLongHolder_updateReadOnlyProperty {
+
+    private final PrimitiveLongHolder primitiveLongHolder;
+
+    public PrimitiveLongHolder act(long newValue) {
+        primitiveLongHolder.setReadOnlyProperty(newValue);
+        return primitiveLongHolder;
+    }
+    public long default0Act() {
+        return primitiveLongHolder.getReadOnlyProperty();
+    }
+}
+----
++
+There are a number of variants of this action, to demonstrate different prompt layouts.
+
+* the `actionReturning` action is:
++
+[source,java]
+----
+@Action(
+        semantics = SemanticsOf.SAFE,
+        associateWith = "readOnlyProperty",
+        associateWithSequence = "3"
+)
+@RequiredArgsConstructor
+public class PrimitiveLongHolder_actionReturning {
+
+    private final PrimitiveLongHolder primitiveLongHolder;
+
+    public long act() {
+        return primitiveLongHolder.getReadOnlyProperty();
+    }
+}
+----
+
+== 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 PrimitiveLongHolder_mixinPropertyWithCssClass {
+
+    private final PrimitiveLongHolder primitiveLongHolder;
+
+    @MemberOrder(name = "contributed", sequence = "1")
+    public long prop() {
+        return primitiveLongHolder.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/longs/PrimitiveLongs.java b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/longs/PrimitiveLongs.java
new file mode 100644
index 0000000..1be0e67
--- /dev/null
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/longs/PrimitiveLongs.java
@@ -0,0 +1,76 @@
+/*
+ *  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 demoapp.dom.types.primitive.longs;
+
+import java.util.List;
+
+import javax.inject.Inject;
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlRootElement;
+import javax.xml.bind.annotation.XmlTransient;
+import javax.xml.bind.annotation.XmlType;
+
+import org.apache.isis.applib.annotation.Action;
+import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.Collection;
+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.PromptStyle;
+import org.apache.isis.applib.annotation.SemanticsOf;
+
+import lombok.extern.log4j.Log4j2;
+
+import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
+import demoapp.dom.types.primitive.longs.jdo.PrimitiveLongJdoEntities;
+import demoapp.dom.types.primitive.longs.jdo.PrimitiveLongJdoEntity;
+import demoapp.dom.types.primitive.longs.vm.PrimitiveLongViewModel;
+
+@XmlRootElement(name = "Demo")
+@XmlType
+@XmlAccessorType(XmlAccessType.FIELD)
+@DomainObject(nature=Nature.VIEW_MODEL, objectType = "demo.PrimitiveLongs", editing=Editing.ENABLED)
+@Log4j2
+public class PrimitiveLongs implements HasAsciiDocDescription {
+
+    public String title() {
+        return "long (primitive) data type";
+    }
+
+    @Action(semantics = SemanticsOf.SAFE)
+    @ActionLayout(promptStyle = PromptStyle.DIALOG_MODAL)
+    public PrimitiveLongViewModel openViewModel(long initialValue) {
+        return new PrimitiveLongViewModel(initialValue);
+    }
+    public long default0OpenViewModel() {
+        return 123_456_789_012L;
+    }
+
+    @Collection
+    public List<PrimitiveLongJdoEntity> getEntities() {
+        return entities.all();
+    }
+
+    @Inject
+    @XmlTransient
+    PrimitiveLongJdoEntities entities;
+
+
+}
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/longs/PrimitiveLongs.layout.xml b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/longs/PrimitiveLongs.layout.xml
new file mode 100644
index 0000000..55c5b87
--- /dev/null
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/longs/PrimitiveLongs.layout.xml
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<bs3:grid
+        xsi:schemaLocation="http://isis.apache.org/applib/layout/component http://isis.apache.org/applib/layout/component/component.xsd   http://isis.apache.org/applib/layout/grid/bootstrap3 http://isis.apache.org/applib/layout/grid/bootstrap3/bootstrap3.xsd"
+        xmlns:bs3="http://isis.apache.org/applib/layout/grid/bootstrap3"
+        xmlns:cpt="http://isis.apache.org/applib/layout/component"
+        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+
+	<bs3:row>
+		<bs3:col span="10" unreferencedActions="true">
+			<cpt:domainObject />
+			<cpt:action id="rebuildMetamodel"/>
+		</bs3:col>
+		<bs3:col span="2">
+			<cpt:fieldSet name="" id="sources" />
+		</bs3:col>
+	</bs3:row>
+
+	<bs3:row>
+		<bs3:col span="6">
+			<bs3:row>
+				<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>
+		<bs3:col span="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" />
+				<cpt:property id="description"/>
+			</cpt:fieldSet>
+		</bs3:col>
+	</bs3:row>
+	<bs3:row>
+		<bs3:col span="12" unreferencedCollections="true"/>
+	</bs3:row>
+
+</bs3:grid>
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/longs/holder/PrimitiveLongHolder.java b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/longs/holder/PrimitiveLongHolder.java
new file mode 100644
index 0000000..ebba3a0
--- /dev/null
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/longs/holder/PrimitiveLongHolder.java
@@ -0,0 +1,84 @@
+/*
+ *  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 demoapp.dom.types.primitive.longs.holder;
+
+import javax.jdo.annotations.DatastoreIdentity;
+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.LabelPosition;
+import org.apache.isis.applib.annotation.MemberOrder;
+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.Setter;
+import lombok.extern.log4j.Log4j2;
+
+import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
+
+public interface PrimitiveLongHolder {
+
+    @MemberOrder(name = "action-prompt-styles", sequence = "1") // TODO: doesn't seem to get picked up
+    @Property
+    @PropertyLayout
+    long getReadOnlyProperty();
+    void setReadOnlyProperty(long c);
+
+    @MemberOrder(name = "action-prompt-styles", sequence = "1") // TODO: doesn't seem to get picked up
+    @Property
+    @PropertyLayout(describedAs = "associated action uses promptStyle=INLINE_AS_IF_EDIT", hidden = Where.ALL_TABLES) // TODO: doesn't seem to get picked up
+    long getReadOnlyProperty2();
+    void setReadOnlyProperty2(long c);
+
+    @MemberOrder(name = "editable-properties", sequence = "1") // TODO: doesn't seem to get picked up
+    @Property
+    @PropertyLayout
+    long getReadWriteProperty();
+    void setReadWriteProperty(long c);
+
+    @MemberOrder(name = "label-positions", sequence = "1")
+    @Property
+    @PropertyLayout(labelPosition = LabelPosition.LEFT, describedAs = "labelPosition=LEFT", hidden = Where.ALL_TABLES)
+    default long getReadOnlyPropertyDerivedLabelPositionLeft() { return getReadOnlyProperty(); }
+
+    @MemberOrder(name = "label-positions", sequence = "2")
+    @Property
+    @PropertyLayout(labelPosition = LabelPosition.TOP, describedAs = "labelPosition=TOP", hidden = Where.ALL_TABLES)
+    default long getReadOnlyPropertyDerivedLabelPositionTop() { return getReadOnlyProperty(); }
+
+    @MemberOrder(name = "label-positions", sequence = "3")
+    @Property
+    @PropertyLayout(labelPosition = LabelPosition.RIGHT, describedAs = "labelPosition=RIGHT", hidden = Where.ALL_TABLES)
+    default long getReadOnlyPropertyDerivedLabelPositionRight() { return getReadOnlyProperty(); }
+
+    @MemberOrder(name = "label-positions", sequence = "4")
+    @Property
+    @PropertyLayout(labelPosition = LabelPosition.NONE, describedAs = "labelPosition=NONE", hidden = Where.ALL_TABLES)
+    default long getReadOnlyPropertyDerivedLabelPositionNone() { return getReadOnlyProperty(); }
+
+}
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/longs/holder/PrimitiveLongHolder_actionReturning.java b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/longs/holder/PrimitiveLongHolder_actionReturning.java
new file mode 100644
index 0000000..38cd4c1
--- /dev/null
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/longs/holder/PrimitiveLongHolder_actionReturning.java
@@ -0,0 +1,39 @@
+/*
+ *  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 demoapp.dom.types.primitive.longs.holder;
+
+import org.apache.isis.applib.annotation.Action;
+import org.apache.isis.applib.annotation.SemanticsOf;
+
+import lombok.RequiredArgsConstructor;
+
+
+@Action(
+        semantics = SemanticsOf.SAFE
+)
+@RequiredArgsConstructor
+public class PrimitiveLongHolder_actionReturning {
+
+    private final PrimitiveLongHolder primitiveLongHolder;
+
+    public long act() {
+        return primitiveLongHolder.getReadOnlyProperty();
+    }
+
+}
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/longs/holder/PrimitiveLongHolder_mixinPropertyNamedNotEscaped.java b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/longs/holder/PrimitiveLongHolder_mixinPropertyNamedNotEscaped.java
new file mode 100644
index 0000000..e83d6fd
--- /dev/null
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/longs/holder/PrimitiveLongHolder_mixinPropertyNamedNotEscaped.java
@@ -0,0 +1,39 @@
+/*
+ *  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 demoapp.dom.types.primitive.longs.holder;
+
+import org.apache.isis.applib.annotation.MemberOrder;
+
+import lombok.RequiredArgsConstructor;
+
+
+//@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 PrimitiveLongHolder_mixinPropertyNamedNotEscaped {
+
+    private final PrimitiveLongHolder primitiveLongHolder;
+
+    @MemberOrder(name = "contributed", sequence = "3")
+    public long prop() {
+        return primitiveLongHolder.getReadOnlyProperty();
+    }
+
+
+}
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/longs/holder/PrimitiveLongHolder_mixinPropertyNavigable.java b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/longs/holder/PrimitiveLongHolder_mixinPropertyNavigable.java
new file mode 100644
index 0000000..7596b10
--- /dev/null
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/longs/holder/PrimitiveLongHolder_mixinPropertyNavigable.java
@@ -0,0 +1,39 @@
+/*
+ *  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 demoapp.dom.types.primitive.longs.holder;
+
+import org.apache.isis.applib.annotation.MemberOrder;
+
+import lombok.RequiredArgsConstructor;
+
+
+//@Property()
+//@PropertyLayout( navigable = Navigable.PARENT, describedAs = "navigable=PARENT") // TODO: doesn't seem to do anything
+@RequiredArgsConstructor
+public class PrimitiveLongHolder_mixinPropertyNavigable {
+
+    private final PrimitiveLongHolder primitiveLongHolder;
+
+    @MemberOrder(name = "contributed", sequence = "1")
+    public long prop() {
+        return primitiveLongHolder.getReadOnlyProperty();
+    }
+
+
+}
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/longs/holder/PrimitiveLongHolder_mixinPropertyWithCssClass.java b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/longs/holder/PrimitiveLongHolder_mixinPropertyWithCssClass.java
new file mode 100644
index 0000000..a6f2478
--- /dev/null
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/longs/holder/PrimitiveLongHolder_mixinPropertyWithCssClass.java
@@ -0,0 +1,40 @@
+/*
+ *  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 demoapp.dom.types.primitive.longs.holder;
+
+import org.apache.isis.applib.annotation.MemberOrder;
+import org.apache.isis.applib.annotation.Property;
+import org.apache.isis.applib.annotation.PropertyLayout;
+import org.apache.isis.applib.annotation.Where;
+
+import lombok.RequiredArgsConstructor;
+
+
+@Property()
+@PropertyLayout(cssClass = "red", describedAs = "cssClass = \"red\" ", hidden = Where.ALL_TABLES)
+@RequiredArgsConstructor
+public class PrimitiveLongHolder_mixinPropertyWithCssClass {
+
+    private final PrimitiveLongHolder primitiveLongHolder;
+
+    @MemberOrder(name = "contributed", sequence = "1")
+    public long prop() {
+        return primitiveLongHolder.getReadOnlyProperty();
+    }
+}
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/longs/holder/PrimitiveLongHolder_updateReadOnlyProperty2PromptInlineAsIfEdit.java b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/longs/holder/PrimitiveLongHolder_updateReadOnlyProperty2PromptInlineAsIfEdit.java
new file mode 100644
index 0000000..8fc7daa
--- /dev/null
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/longs/holder/PrimitiveLongHolder_updateReadOnlyProperty2PromptInlineAsIfEdit.java
@@ -0,0 +1,49 @@
+/*
+ *  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 demoapp.dom.types.primitive.longs.holder;
+
+import org.apache.isis.applib.annotation.Action;
+import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.PromptStyle;
+import org.apache.isis.applib.annotation.SemanticsOf;
+
+import lombok.RequiredArgsConstructor;
+
+
+@Action(
+        semantics = SemanticsOf.IDEMPOTENT,
+        associateWith = "readOnlyProperty2",
+        associateWithSequence = "1"
+)
+@ActionLayout(promptStyle = PromptStyle.INLINE_AS_IF_EDIT)
+@RequiredArgsConstructor
+public class PrimitiveLongHolder_updateReadOnlyProperty2PromptInlineAsIfEdit {
+
+    private final PrimitiveLongHolder primitiveLongHolder;
+
+    public PrimitiveLongHolder act(long newValue) {
+        primitiveLongHolder.setReadOnlyProperty2(newValue);
+        return primitiveLongHolder;
+    }
+    public long default0Act() {
+        return primitiveLongHolder.getReadOnlyProperty2();
+    }
+
+
+}
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/longs/holder/PrimitiveLongHolder_updateReadOnlyPropertyPositionPanel.java b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/longs/holder/PrimitiveLongHolder_updateReadOnlyPropertyPositionPanel.java
new file mode 100644
index 0000000..697fbbb
--- /dev/null
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/longs/holder/PrimitiveLongHolder_updateReadOnlyPropertyPositionPanel.java
@@ -0,0 +1,48 @@
+/*
+ *  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 demoapp.dom.types.primitive.longs.holder;
+
+import org.apache.isis.applib.annotation.Action;
+import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.SemanticsOf;
+
+import lombok.RequiredArgsConstructor;
+
+
+@Action(
+        semantics = SemanticsOf.IDEMPOTENT,
+        associateWith = "readOnlyProperty",
+        associateWithSequence = "2"
+)
+@ActionLayout(position = ActionLayout.Position.PANEL, named = "Position in panel", describedAs = "position = PANEL")
+@RequiredArgsConstructor
+public class PrimitiveLongHolder_updateReadOnlyPropertyPositionPanel {
+
+    private final PrimitiveLongHolder primitiveLongHolder;
+
+    public PrimitiveLongHolder act(long newValue) {
+        primitiveLongHolder.setReadOnlyProperty(newValue);
+        return primitiveLongHolder;
+    }
+    public long default0Act() {
+        return primitiveLongHolder.getReadOnlyProperty();
+    }
+
+
+}
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/longs/holder/PrimitiveLongHolder_updateReadOnlyPropertyPromptStyleInline.java b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/longs/holder/PrimitiveLongHolder_updateReadOnlyPropertyPromptStyleInline.java
new file mode 100644
index 0000000..2589c17
--- /dev/null
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/longs/holder/PrimitiveLongHolder_updateReadOnlyPropertyPromptStyleInline.java
@@ -0,0 +1,49 @@
+/*
+ *  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 demoapp.dom.types.primitive.longs.holder;
+
+import org.apache.isis.applib.annotation.Action;
+import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.PromptStyle;
+import org.apache.isis.applib.annotation.SemanticsOf;
+
+import lombok.RequiredArgsConstructor;
+
+
+@Action(
+        semantics = SemanticsOf.IDEMPOTENT,
+        associateWith = "readOnlyProperty",
+        associateWithSequence = "1"
+)
+@ActionLayout(promptStyle = PromptStyle.INLINE, named = "Inline", describedAs = "promptStyle = INLINE")
+@RequiredArgsConstructor
+public class PrimitiveLongHolder_updateReadOnlyPropertyPromptStyleInline {
+
+    private final PrimitiveLongHolder primitiveLongHolder;
+
+    public PrimitiveLongHolder act(long newValue) {
+        primitiveLongHolder.setReadOnlyProperty(newValue);
+        return primitiveLongHolder;
+    }
+    public long default0Act() {
+        return primitiveLongHolder.getReadOnlyProperty();
+    }
+
+
+}
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/longs/holder/PrimitiveLongHolder_updateReadOnlyPropertyPromptStyleModal.java b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/longs/holder/PrimitiveLongHolder_updateReadOnlyPropertyPromptStyleModal.java
new file mode 100644
index 0000000..df791ab
--- /dev/null
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/longs/holder/PrimitiveLongHolder_updateReadOnlyPropertyPromptStyleModal.java
@@ -0,0 +1,49 @@
+/*
+ *  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 demoapp.dom.types.primitive.longs.holder;
+
+import org.apache.isis.applib.annotation.Action;
+import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.PromptStyle;
+import org.apache.isis.applib.annotation.SemanticsOf;
+
+import lombok.RequiredArgsConstructor;
+
+
+@Action(
+        semantics = SemanticsOf.IDEMPOTENT,
+        associateWith = "readOnlyProperty",
+        associateWithSequence = "2"
+)
+@ActionLayout(promptStyle = PromptStyle.DIALOG_MODAL, named = "Modal", describedAs = "promptStyle = MODAL")
+@RequiredArgsConstructor
+public class PrimitiveLongHolder_updateReadOnlyPropertyPromptStyleModal {
+
+    private final PrimitiveLongHolder primitiveLongHolder;
+
+    public PrimitiveLongHolder act(long newValue) {
+        primitiveLongHolder.setReadOnlyProperty(newValue);
+        return primitiveLongHolder;
+    }
+    public long default0Act() {
+        return primitiveLongHolder.getReadOnlyProperty();
+    }
+
+
+}
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/longs/holder/PrimitiveLongHolder_updateReadOnlyPropertyPromptStylePanelDropDown.java b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/longs/holder/PrimitiveLongHolder_updateReadOnlyPropertyPromptStylePanelDropDown.java
new file mode 100644
index 0000000..8860e40
--- /dev/null
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/longs/holder/PrimitiveLongHolder_updateReadOnlyPropertyPromptStylePanelDropDown.java
@@ -0,0 +1,48 @@
+/*
+ *  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 demoapp.dom.types.primitive.longs.holder;
+
+import org.apache.isis.applib.annotation.Action;
+import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.SemanticsOf;
+
+import lombok.RequiredArgsConstructor;
+
+
+@Action(
+        semantics = SemanticsOf.IDEMPOTENT,
+        associateWith = "readOnlyProperty",
+        associateWithSequence = "3"
+)
+@ActionLayout(position = ActionLayout.Position.PANEL_DROPDOWN, named = "Panel Dropdown", describedAs = "position = PANEL_DROPDOWN")
+@RequiredArgsConstructor
+public class PrimitiveLongHolder_updateReadOnlyPropertyPromptStylePanelDropDown {
+
+    private final PrimitiveLongHolder primitiveLongHolder;
+
+    public PrimitiveLongHolder act(long newValue) {
+        primitiveLongHolder.setReadOnlyProperty(newValue);
+        return primitiveLongHolder;
+    }
+    public long default0Act() {
+        return primitiveLongHolder.getReadOnlyProperty();
+    }
+
+
+}
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/longs/holder/PrimitiveLongHolder_updateReadOnlyPropertyPromptStyleSidebar.java b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/longs/holder/PrimitiveLongHolder_updateReadOnlyPropertyPromptStyleSidebar.java
new file mode 100644
index 0000000..1e31921
--- /dev/null
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/longs/holder/PrimitiveLongHolder_updateReadOnlyPropertyPromptStyleSidebar.java
@@ -0,0 +1,49 @@
+/*
+ *  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 demoapp.dom.types.primitive.longs.holder;
+
+import org.apache.isis.applib.annotation.Action;
+import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.PromptStyle;
+import org.apache.isis.applib.annotation.SemanticsOf;
+
+import lombok.RequiredArgsConstructor;
+
+
+@Action(
+        semantics = SemanticsOf.IDEMPOTENT,
+        associateWith = "readOnlyProperty",
+        associateWithSequence = "3"
+)
+@ActionLayout(promptStyle = PromptStyle.DIALOG_SIDEBAR, named = "sidebar", describedAs = "promptStyle = DIALOG_SIDEBAR")
+@RequiredArgsConstructor
+public class PrimitiveLongHolder_updateReadOnlyPropertyPromptStyleSidebar {
+
+    private final PrimitiveLongHolder primitiveLongHolder;
+
+    public PrimitiveLongHolder act(long newValue) {
+        primitiveLongHolder.setReadOnlyProperty(newValue);
+        return primitiveLongHolder;
+    }
+    public long default0Act() {
+        return primitiveLongHolder.getReadOnlyProperty();
+    }
+
+
+}
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/longs/holder/PrimitiveLongHolder_updateReadOnlyPropertyWithChoices.java b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/longs/holder/PrimitiveLongHolder_updateReadOnlyPropertyWithChoices.java
new file mode 100644
index 0000000..1c27ca6
--- /dev/null
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/longs/holder/PrimitiveLongHolder_updateReadOnlyPropertyWithChoices.java
@@ -0,0 +1,59 @@
+/*
+ *  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 demoapp.dom.types.primitive.longs.holder;
+
+import java.util.List;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+
+import org.apache.isis.applib.annotation.Action;
+import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.PromptStyle;
+import org.apache.isis.applib.annotation.SemanticsOf;
+
+import lombok.RequiredArgsConstructor;
+
+
+@Action(
+        semantics = SemanticsOf.IDEMPOTENT,
+        associateWith = "readOnlyProperty",
+        associateWithSequence = "4"
+)
+@ActionLayout(promptStyle = PromptStyle.AS_CONFIGURED, named = "with choices")
+@RequiredArgsConstructor
+public class PrimitiveLongHolder_updateReadOnlyPropertyWithChoices {
+
+    private final PrimitiveLongHolder primitiveLongHolder;
+
+    public PrimitiveLongHolder act(long newValue) {
+        primitiveLongHolder.setReadOnlyProperty(newValue);
+        return primitiveLongHolder;
+    }
+    public long default0Act() {
+        return primitiveLongHolder.getReadOnlyProperty();
+    }
+    public List<Long> choices0Act() {
+        return Stream.of(121_212_121_212L,2L,-300_000_000_000L,4L).collect(Collectors.toList());
+    }
+
+    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/longs/jdo/PrimitiveLongJdoEntities.java b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/longs/jdo/PrimitiveLongJdoEntities.java
new file mode 100644
index 0000000..3fd6aac
--- /dev/null
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/longs/jdo/PrimitiveLongJdoEntities.java
@@ -0,0 +1,26 @@
+package demoapp.dom.types.primitive.longs.jdo;
+
+import java.util.List;
+import java.util.Optional;
+
+import javax.inject.Inject;
+
+import org.springframework.stereotype.Service;
+
+import org.apache.isis.applib.services.repository.RepositoryService;
+
+@Service
+public class PrimitiveLongJdoEntities {
+
+    public Optional<PrimitiveLongJdoEntity> find(final long readOnlyProperty) {
+        return repositoryService.firstMatch(PrimitiveLongJdoEntity.class, x -> x.getReadOnlyProperty() == readOnlyProperty);
+    }
+
+    public List<PrimitiveLongJdoEntity> all() {
+        return repositoryService.allInstances(PrimitiveLongJdoEntity.class);
+    }
+
+    @Inject
+    RepositoryService repositoryService;
+
+}
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/longs/jdo/PrimitiveLongJdoEntity-description.adoc b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/longs/jdo/PrimitiveLongJdoEntity-description.adoc
new file mode 100644
index 0000000..439860d
--- /dev/null
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/longs/jdo/PrimitiveLongJdoEntity-description.adoc
@@ -0,0 +1,30 @@
+JDO supports `long` out-of-the-box, so no special annotations are required.
+
+[source,java]
+----
+@PersistenceCapable(identityType = IdentityType.DATASTORE, schema = "demo")
+@DatastoreIdentity(strategy = IdGeneratorStrategy.IDENTITY, column = "id")
+@DomainObject(
+        objectType = "demo.PrimitiveLongJdoEntity"
+)
+public class PrimitiveLongJdoEntity
+    implements HasAsciiDocDescription,   PrimitiveLongHolder {          // <.>
+
+    public PrimitiveLongJdoEntity(long initialValue) { ... }            // <.>
+
+    @Title(prepend = "long (primitive) JDO entity: ")
+    @Getter @Setter
+    private long readOnlyProperty;                                      // <.>
+
+    @Getter @Setter
+    private long readOnlyProperty2;
+
+    @Getter @Setter
+    @Property(editing = Editing.ENABLED)
+    private long readWriteProperty;
+
+}
+----
+<.> 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/longs/jdo/PrimitiveLongJdoEntity.java b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/longs/jdo/PrimitiveLongJdoEntity.java
new file mode 100644
index 0000000..c5c3e92
--- /dev/null
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/longs/jdo/PrimitiveLongJdoEntity.java
@@ -0,0 +1,67 @@
+/*
+ *  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 demoapp.dom.types.primitive.longs.jdo;
+
+import javax.jdo.annotations.DatastoreIdentity;
+import javax.jdo.annotations.IdGeneratorStrategy;
+import javax.jdo.annotations.IdentityType;
+import javax.jdo.annotations.PersistenceCapable;
+
+import org.apache.isis.applib.annotation.DomainObject;
+import org.apache.isis.applib.annotation.Editing;
+import org.apache.isis.applib.annotation.Property;
+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 demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
+import demoapp.dom.types.primitive.longs.holder.PrimitiveLongHolder;
+
+@PersistenceCapable(identityType = IdentityType.DATASTORE, schema = "demo")
+@DatastoreIdentity(strategy = IdGeneratorStrategy.IDENTITY, column = "id")
+@DomainObject(
+        objectType = "demo.PrimitiveLongJdoEntity"
+)
+public class PrimitiveLongJdoEntity
+        implements HasAsciiDocDescription,
+        PrimitiveLongHolder {
+
+    public PrimitiveLongJdoEntity(long initialValue) {
+        this.readOnlyProperty = initialValue;
+        this.readOnlyProperty2 = initialValue;
+        this.readWriteProperty = initialValue;
+    }
+
+    @Title(prepend = "long (primitive) JDO entity: ")
+    @Getter @Setter
+    private long readOnlyProperty;
+
+    @Property
+    @PropertyLayout(hidden = Where.ALL_TABLES)
+    @Getter @Setter
+    private long readOnlyProperty2;
+
+    @Getter @Setter
+    @Property(editing = Editing.ENABLED)
+    private long readWriteProperty;
+
+}
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/longs/jdo/PrimitiveLongJdoEntity.layout.xml b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/longs/jdo/PrimitiveLongJdoEntity.layout.xml
new file mode 100644
index 0000000..ffa55a8
--- /dev/null
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/longs/jdo/PrimitiveLongJdoEntity.layout.xml
@@ -0,0 +1,53 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<bs3:grid
+        xsi:schemaLocation="http://isis.apache.org/applib/layout/component http://isis.apache.org/applib/layout/component/component.xsd   http://isis.apache.org/applib/layout/grid/bootstrap3 http://isis.apache.org/applib/layout/grid/bootstrap3/bootstrap3.xsd"
+        xmlns:bs3="http://isis.apache.org/applib/layout/grid/bootstrap3"
+        xmlns:cpt="http://isis.apache.org/applib/layout/component"
+        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+
+	<bs3:row>
+		<bs3:col span="10" unreferencedActions="true">
+			<cpt:domainObject />
+			<cpt:action id="actionReturning"/>
+			<cpt:action id="rebuildMetamodel"/>
+		</bs3:col>
+		<bs3:col span="2">
+			<cpt:fieldSet name="" id="sources" />
+		</bs3:col>
+	</bs3:row>
+
+	<bs3:row>
+		<bs3:col span="6">
+			<cpt:fieldSet name="Action Prompt Styles" id="action-prompt-styles">
+				<cpt:property id="readOnlyProperty" />
+				<cpt:property id="readOnlyProperty2" >
+					<cpt:describedAs>
+						Associated action uses promptStyle=INLINE_AS_IF_EDIT
+					</cpt:describedAs>
+				</cpt:property>
+			</cpt:fieldSet>
+			<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">
+			<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="downloadJdoMetadata"  position="PANEL_DROPDOWN"/>
+				<cpt:action id="openRestApi" position="PANEL_DROPDOWN" />
+				<cpt:property id="description"/>
+			</cpt:fieldSet>
+		</bs3:col>
+	</bs3:row>
+	<bs3:row>
+		<bs3:col span="12" unreferencedCollections="true"/>
+	</bs3:row>
+
+</bs3:grid>
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/longs/jdo/PrimitiveLongJdoEntitySeedService.java b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/longs/jdo/PrimitiveLongJdoEntitySeedService.java
new file mode 100644
index 0000000..1fc8283
--- /dev/null
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/longs/jdo/PrimitiveLongJdoEntitySeedService.java
@@ -0,0 +1,42 @@
+package demoapp.dom.types.primitive.longs.jdo;
+
+import java.util.stream.Stream;
+
+import javax.inject.Inject;
+
+import org.springframework.context.event.EventListener;
+import org.springframework.stereotype.Service;
+
+import org.apache.isis.applib.services.repository.RepositoryService;
+import org.apache.isis.core.runtime.events.app.AppLifecycleEvent;
+import org.apache.isis.testing.fixtures.applib.fixturescripts.FixtureScript;
+import org.apache.isis.testing.fixtures.applib.fixturescripts.FixtureScripts;
+
+@Service
+public class PrimitiveLongJdoEntitySeedService {
+
+    @EventListener(AppLifecycleEvent.class)
+    public void onAppLifecycleEvent(AppLifecycleEvent event) {
+
+        if (event.getEventType() == AppLifecycleEvent.EventType.appPostMetamodel) {
+            fixtureScripts.run(new PrimitiveLongJdoEntityFixture());
+        }
+    }
+
+    @Inject
+    FixtureScripts fixtureScripts;
+
+    static class PrimitiveLongJdoEntityFixture extends FixtureScript {
+
+        @Override
+        protected void execute(ExecutionContext executionContext) {
+            Stream.of('a', 'b', 'c')
+                    .map(PrimitiveLongJdoEntity::new)
+                    .forEach(repositoryService::persist);
+        }
+
+        @Inject
+        RepositoryService repositoryService;
+
+    }
+}
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/longs/vm/PrimitiveLongViewModel-description.adoc b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/longs/vm/PrimitiveLongViewModel-description.adoc
new file mode 100644
index 0000000..8cb40b8
--- /dev/null
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/longs/vm/PrimitiveLongViewModel-description.adoc
@@ -0,0 +1,36 @@
+JAXB supports `long` out-of-the-box, so no special annotations are required.
+
+[source,java]
+----
+@XmlRootElement(name = "demo.PrimitiveLongViewModel")
+@XmlType
+@XmlAccessorType(XmlAccessType.FIELD)
+@DomainObject(
+        nature=Nature.VIEW_MODEL,
+        objectType = "demo.PrimitiveLongViewModel"
+)
+@lombok.NoArgsConstructor                               // <.>
+public class PrimitiveLongViewModel
+        implements HasAsciiDocDescription,
+                   PrimitiveLongHolder {
+
+    public PrimitiveLongViewModel(long initialValue) {  // <.>
+        // ...
+    }
+
+    @Title(prepend = "long (primitive) view model: ")
+    @Getter @Setter
+    private long readOnlyProperty;                      // <.>
+
+    @Getter @Setter
+    private long readOnlyProperty2;
+
+    @Getter @Setter
+    @Property(editing = Editing.ENABLED)
+    private long readWriteProperty;
+
+}
+----
+<.> a no-arg constructor is required by JAXB
+<.> 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/longs/vm/PrimitiveLongViewModel.java b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/longs/vm/PrimitiveLongViewModel.java
new file mode 100644
index 0000000..69c773b
--- /dev/null
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/longs/vm/PrimitiveLongViewModel.java
@@ -0,0 +1,71 @@
+/*
+ *  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 demoapp.dom.types.primitive.longs.vm;
+
+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.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.Title;
+import org.apache.isis.applib.annotation.Where;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
+import demoapp.dom.types.primitive.longs.holder.PrimitiveLongHolder;
+
+@XmlRootElement(name = "demo.PrimitiveLongViewModel")
+@XmlType
+@XmlAccessorType(XmlAccessType.FIELD)
+@DomainObject(
+        nature=Nature.VIEW_MODEL,
+        objectType = "demo.PrimitiveLongViewModel"
+)
+@lombok.NoArgsConstructor
+public class PrimitiveLongViewModel
+        implements HasAsciiDocDescription,
+        PrimitiveLongHolder {
+
+    public PrimitiveLongViewModel(long initialValue) {
+        this.readOnlyProperty = initialValue;
+        this.readOnlyProperty2 = initialValue;
+        this.readWriteProperty = initialValue;
+    }
+
+    @Title(prepend = "long (primitive) view model: ")
+    @Getter @Setter
+    private long readOnlyProperty;
+
+    @Property
+    @PropertyLayout(hidden = Where.ALL_TABLES)
+    @Getter @Setter
+    private long readOnlyProperty2;
+
+    @Getter @Setter
+    @Property(editing = Editing.ENABLED)
+    private long readWriteProperty;
+
+}
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/longs/vm/PrimitiveLongViewModel.layout.xml b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/longs/vm/PrimitiveLongViewModel.layout.xml
new file mode 100644
index 0000000..ffa55a8
--- /dev/null
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/longs/vm/PrimitiveLongViewModel.layout.xml
@@ -0,0 +1,53 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<bs3:grid
+        xsi:schemaLocation="http://isis.apache.org/applib/layout/component http://isis.apache.org/applib/layout/component/component.xsd   http://isis.apache.org/applib/layout/grid/bootstrap3 http://isis.apache.org/applib/layout/grid/bootstrap3/bootstrap3.xsd"
+        xmlns:bs3="http://isis.apache.org/applib/layout/grid/bootstrap3"
+        xmlns:cpt="http://isis.apache.org/applib/layout/component"
+        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+
+	<bs3:row>
+		<bs3:col span="10" unreferencedActions="true">
+			<cpt:domainObject />
+			<cpt:action id="actionReturning"/>
+			<cpt:action id="rebuildMetamodel"/>
+		</bs3:col>
+		<bs3:col span="2">
+			<cpt:fieldSet name="" id="sources" />
+		</bs3:col>
+	</bs3:row>
+
+	<bs3:row>
+		<bs3:col span="6">
+			<cpt:fieldSet name="Action Prompt Styles" id="action-prompt-styles">
+				<cpt:property id="readOnlyProperty" />
+				<cpt:property id="readOnlyProperty2" >
+					<cpt:describedAs>
+						Associated action uses promptStyle=INLINE_AS_IF_EDIT
+					</cpt:describedAs>
+				</cpt:property>
+			</cpt:fieldSet>
+			<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">
+			<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="downloadJdoMetadata"  position="PANEL_DROPDOWN"/>
+				<cpt:action id="openRestApi" position="PANEL_DROPDOWN" />
+				<cpt:property id="description"/>
+			</cpt:fieldSet>
+		</bs3:col>
+	</bs3:row>
+	<bs3:row>
+		<bs3:col span="12" unreferencedCollections="true"/>
+	</bs3:row>
+
+</bs3:grid>
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/shorts/PrimitiveShorts-description.adoc b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/shorts/PrimitiveShorts-description.adoc
new file mode 100644
index 0000000..c881c5a
--- /dev/null
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/shorts/PrimitiveShorts-description.adoc
@@ -0,0 +1,129 @@
+The framework has built-in support for all of the primitive data types, including `short`.
+
+From here you can:
+
+* navigate to an entity that uses the `short` datatype
+* open a view model that uses the `short` datatype
+
+Because `short` is a primitive value, the properties on these domain objects are mandatory.
+
+== Common interface
+
+These objects both implement a common interface, `PrimitiveShortHolder`:
+
+[source,java]
+----
+public interface PrimitiveShortHolder {
+
+    short getReadOnlyProperty();
+    void setReadOnlyProperty(short c);
+
+    short getReadOnlyProperty2();
+    void setReadOnlyProperty2(short c);
+
+    short getReadWriteProperty();
+    void setReadWriteProperty(short c);
+
+    @MemberOrder(name = "label-positions", sequence = "1")
+    @Property
+    @PropertyLayout(labelPosition = LabelPosition.LEFT, describedAs = "labelPosition=LEFT", hidden = Where.ALL_TABLES)
+    default short getReadOnlyPropertyDerivedLabelPositionLeft() { return getReadOnlyProperty(); }
+
+    @MemberOrder(name = "label-positions", sequence = "2")
+    @Property
+    @PropertyLayout(labelPosition = LabelPosition.TOP, describedAs = "labelPosition=TOP", hidden = Where.ALL_TABLES)
+    default short getReadOnlyPropertyDerivedLabelPositionTop() { return getReadOnlyProperty(); }
+
+    @MemberOrder(name = "label-positions", sequence = "3")
+    @Property
+    @PropertyLayout(labelPosition = LabelPosition.RIGHT, describedAs = "labelPosition=RIGHT", hidden = Where.ALL_TABLES)
+    default short getReadOnlyPropertyDerivedLabelPositionRight() { return getReadOnlyProperty(); }
+
+    @MemberOrder(name = "label-positions", sequence = "4")
+    @Property
+    @PropertyLayout(labelPosition = LabelPosition.NONE, describedAs = "labelPosition=NONE", hidden = Where.ALL_TABLES)
+    default short 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 `short` as a parameter and as a return type.
+For example:
+
+* the `updateReadOnlyProperty` action is:
++
+[source,java]
+----
+@Action(
+        semantics = SemanticsOf.IDEMPOTENT,
+        associateWith = "readOnlyProperty",
+        associateWithSequence = "1"
+)
+@RequiredArgsConstructor
+public class PrimitiveShortHolder_updateReadOnlyProperty {
+
+    private final PrimitiveShortHolder primitiveShortHolder;
+
+    public PrimitiveShortHolder act(short newValue) {
+        primitiveShortHolder.setReadOnlyProperty(newValue);
+        return primitiveShortHolder;
+    }
+    public short default0Act() {
+        return primitiveShortHolder.getReadOnlyProperty();
+    }
+}
+----
++
+There are a number of variants of this action, to demonstrate different prompt layouts.
+
+* the `actionReturning` action is:
++
+[source,java]
+----
+@Action(
+        semantics = SemanticsOf.SAFE,
+        associateWith = "readOnlyProperty",
+        associateWithSequence = "3"
+)
+@RequiredArgsConstructor
+public class PrimitiveShortHolder_actionReturning {
+
+    private final PrimitiveShortHolder primitiveShortHolder;
+
+    public short act() {
+        return primitiveShortHolder.getReadOnlyProperty();
+    }
+}
+----
+
+== 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 PrimitiveShortHolder_mixinPropertyWithCssClass {
+
+    private final PrimitiveShortHolder primitiveShortHolder;
+
+    @MemberOrder(name = "contributed", sequence = "1")
+    public short prop() {
+        return primitiveShortHolder.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/shorts/PrimitiveShorts.java b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/shorts/PrimitiveShorts.java
new file mode 100644
index 0000000..b368e91
--- /dev/null
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/shorts/PrimitiveShorts.java
@@ -0,0 +1,76 @@
+/*
+ *  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 demoapp.dom.types.primitive.shorts;
+
+import java.util.List;
+
+import javax.inject.Inject;
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlRootElement;
+import javax.xml.bind.annotation.XmlTransient;
+import javax.xml.bind.annotation.XmlType;
+
+import org.apache.isis.applib.annotation.Action;
+import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.Collection;
+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.PromptStyle;
+import org.apache.isis.applib.annotation.SemanticsOf;
+
+import lombok.extern.log4j.Log4j2;
+
+import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
+import demoapp.dom.types.primitive.shorts.jdo.PrimitiveShortJdoEntities;
+import demoapp.dom.types.primitive.shorts.jdo.PrimitiveShortJdoEntity;
+import demoapp.dom.types.primitive.shorts.vm.PrimitiveShortViewModel;
+
+@XmlRootElement(name = "Demo")
+@XmlType
+@XmlAccessorType(XmlAccessType.FIELD)
+@DomainObject(nature=Nature.VIEW_MODEL, objectType = "demo.PrimitiveShorts", editing=Editing.ENABLED)
+@Log4j2
+public class PrimitiveShorts implements HasAsciiDocDescription {
+
+    public String title() {
+        return "short (primitive) data type";
+    }
+
+    @Action(semantics = SemanticsOf.SAFE)
+    @ActionLayout(promptStyle = PromptStyle.DIALOG_MODAL)
+    public PrimitiveShortViewModel openViewModel(short initialValue) {
+        return new PrimitiveShortViewModel(initialValue);
+    }
+    public short default0OpenViewModel() {
+        return 12345;
+    }
+
+    @Collection
+    public List<PrimitiveShortJdoEntity> getEntities() {
+        return entities.all();
+    }
+
+    @Inject
+    @XmlTransient
+    PrimitiveShortJdoEntities entities;
+
+
+}
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/shorts/PrimitiveShorts.layout.xml b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/shorts/PrimitiveShorts.layout.xml
new file mode 100644
index 0000000..55c5b87
--- /dev/null
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/shorts/PrimitiveShorts.layout.xml
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<bs3:grid
+        xsi:schemaLocation="http://isis.apache.org/applib/layout/component http://isis.apache.org/applib/layout/component/component.xsd   http://isis.apache.org/applib/layout/grid/bootstrap3 http://isis.apache.org/applib/layout/grid/bootstrap3/bootstrap3.xsd"
+        xmlns:bs3="http://isis.apache.org/applib/layout/grid/bootstrap3"
+        xmlns:cpt="http://isis.apache.org/applib/layout/component"
+        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+
+	<bs3:row>
+		<bs3:col span="10" unreferencedActions="true">
+			<cpt:domainObject />
+			<cpt:action id="rebuildMetamodel"/>
+		</bs3:col>
+		<bs3:col span="2">
+			<cpt:fieldSet name="" id="sources" />
+		</bs3:col>
+	</bs3:row>
+
+	<bs3:row>
+		<bs3:col span="6">
+			<bs3:row>
+				<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>
+		<bs3:col span="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" />
+				<cpt:property id="description"/>
+			</cpt:fieldSet>
+		</bs3:col>
+	</bs3:row>
+	<bs3:row>
+		<bs3:col span="12" unreferencedCollections="true"/>
+	</bs3:row>
+
+</bs3:grid>
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/shorts/holder/PrimitiveShortHolder.java b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/shorts/holder/PrimitiveShortHolder.java
new file mode 100644
index 0000000..aeea47b
--- /dev/null
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/shorts/holder/PrimitiveShortHolder.java
@@ -0,0 +1,84 @@
+/*
+ *  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 demoapp.dom.types.primitive.shorts.holder;
+
+import javax.jdo.annotations.DatastoreIdentity;
+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.LabelPosition;
+import org.apache.isis.applib.annotation.MemberOrder;
+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.Setter;
+import lombok.extern.log4j.Log4j2;
+
+import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
+
+public interface PrimitiveShortHolder {
+
+    @MemberOrder(name = "action-prompt-styles", sequence = "1") // TODO: doesn't seem to get picked up
+    @Property
+    @PropertyLayout
+    short getReadOnlyProperty();
+    void setReadOnlyProperty(short c);
+
+    @MemberOrder(name = "action-prompt-styles", sequence = "1") // TODO: doesn't seem to get picked up
+    @Property
+    @PropertyLayout(describedAs = "associated action uses promptStyle=INLINE_AS_IF_EDIT", hidden = Where.ALL_TABLES) // TODO: doesn't seem to get picked up
+    short getReadOnlyProperty2();
+    void setReadOnlyProperty2(short c);
+
+    @MemberOrder(name = "editable-properties", sequence = "1") // TODO: doesn't seem to get picked up
+    @Property
+    @PropertyLayout
+    short getReadWriteProperty();
+    void setReadWriteProperty(short c);
+
+    @MemberOrder(name = "label-positions", sequence = "1")
+    @Property
+    @PropertyLayout(labelPosition = LabelPosition.LEFT, describedAs = "labelPosition=LEFT", hidden = Where.ALL_TABLES)
+    default short getReadOnlyPropertyDerivedLabelPositionLeft() { return getReadOnlyProperty(); }
+
+    @MemberOrder(name = "label-positions", sequence = "2")
+    @Property
+    @PropertyLayout(labelPosition = LabelPosition.TOP, describedAs = "labelPosition=TOP", hidden = Where.ALL_TABLES)
+    default short getReadOnlyPropertyDerivedLabelPositionTop() { return getReadOnlyProperty(); }
+
+    @MemberOrder(name = "label-positions", sequence = "3")
+    @Property
+    @PropertyLayout(labelPosition = LabelPosition.RIGHT, describedAs = "labelPosition=RIGHT", hidden = Where.ALL_TABLES)
+    default short getReadOnlyPropertyDerivedLabelPositionRight() { return getReadOnlyProperty(); }
+
+    @MemberOrder(name = "label-positions", sequence = "4")
+    @Property
+    @PropertyLayout(labelPosition = LabelPosition.NONE, describedAs = "labelPosition=NONE", hidden = Where.ALL_TABLES)
+    default short getReadOnlyPropertyDerivedLabelPositionNone() { return getReadOnlyProperty(); }
+
+}
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/shorts/holder/PrimitiveShortHolder_actionReturning.java b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/shorts/holder/PrimitiveShortHolder_actionReturning.java
new file mode 100644
index 0000000..d7f0831
--- /dev/null
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/shorts/holder/PrimitiveShortHolder_actionReturning.java
@@ -0,0 +1,39 @@
+/*
+ *  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 demoapp.dom.types.primitive.shorts.holder;
+
+import org.apache.isis.applib.annotation.Action;
+import org.apache.isis.applib.annotation.SemanticsOf;
+
+import lombok.RequiredArgsConstructor;
+
+
+@Action(
+        semantics = SemanticsOf.SAFE
+)
+@RequiredArgsConstructor
+public class PrimitiveShortHolder_actionReturning {
+
+    private final PrimitiveShortHolder primitiveShortHolder;
+
+    public short act() {
+        return primitiveShortHolder.getReadOnlyProperty();
+    }
+
+}
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/shorts/holder/PrimitiveShortHolder_mixinPropertyNamedNotEscaped.java b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/shorts/holder/PrimitiveShortHolder_mixinPropertyNamedNotEscaped.java
new file mode 100644
index 0000000..618f494
--- /dev/null
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/shorts/holder/PrimitiveShortHolder_mixinPropertyNamedNotEscaped.java
@@ -0,0 +1,39 @@
+/*
+ *  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 demoapp.dom.types.primitive.shorts.holder;
+
+import org.apache.isis.applib.annotation.MemberOrder;
+
+import lombok.RequiredArgsConstructor;
+
+
+//@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 PrimitiveShortHolder_mixinPropertyNamedNotEscaped {
+
+    private final PrimitiveShortHolder primitiveShortHolder;
+
+    @MemberOrder(name = "contributed", sequence = "3")
+    public short prop() {
+        return primitiveShortHolder.getReadOnlyProperty();
+    }
+
+
+}
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/shorts/holder/PrimitiveShortHolder_mixinPropertyNavigable.java b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/shorts/holder/PrimitiveShortHolder_mixinPropertyNavigable.java
new file mode 100644
index 0000000..3ed0dab
--- /dev/null
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/shorts/holder/PrimitiveShortHolder_mixinPropertyNavigable.java
@@ -0,0 +1,39 @@
+/*
+ *  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 demoapp.dom.types.primitive.shorts.holder;
+
+import org.apache.isis.applib.annotation.MemberOrder;
+
+import lombok.RequiredArgsConstructor;
+
+
+//@Property()
+//@PropertyLayout( navigable = Navigable.PARENT, describedAs = "navigable=PARENT") // TODO: doesn't seem to do anything
+@RequiredArgsConstructor
+public class PrimitiveShortHolder_mixinPropertyNavigable {
+
+    private final PrimitiveShortHolder primitiveShortHolder;
+
+    @MemberOrder(name = "contributed", sequence = "1")
+    public short prop() {
+        return primitiveShortHolder.getReadOnlyProperty();
+    }
+
+
+}
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/shorts/holder/PrimitiveShortHolder_mixinPropertyWithCssClass.java b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/shorts/holder/PrimitiveShortHolder_mixinPropertyWithCssClass.java
new file mode 100644
index 0000000..cbb625e
--- /dev/null
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/shorts/holder/PrimitiveShortHolder_mixinPropertyWithCssClass.java
@@ -0,0 +1,40 @@
+/*
+ *  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 demoapp.dom.types.primitive.shorts.holder;
+
+import org.apache.isis.applib.annotation.MemberOrder;
+import org.apache.isis.applib.annotation.Property;
+import org.apache.isis.applib.annotation.PropertyLayout;
+import org.apache.isis.applib.annotation.Where;
+
+import lombok.RequiredArgsConstructor;
+
+
+@Property()
+@PropertyLayout(cssClass = "red", describedAs = "cssClass = \"red\" ", hidden = Where.ALL_TABLES)
+@RequiredArgsConstructor
+public class PrimitiveShortHolder_mixinPropertyWithCssClass {
+
+    private final PrimitiveShortHolder primitiveShortHolder;
+
+    @MemberOrder(name = "contributed", sequence = "1")
+    public short prop() {
+        return primitiveShortHolder.getReadOnlyProperty();
+    }
+}
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/shorts/holder/PrimitiveShortHolder_updateReadOnlyProperty2PromptInlineAsIfEdit.java b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/shorts/holder/PrimitiveShortHolder_updateReadOnlyProperty2PromptInlineAsIfEdit.java
new file mode 100644
index 0000000..b89cf11
--- /dev/null
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/shorts/holder/PrimitiveShortHolder_updateReadOnlyProperty2PromptInlineAsIfEdit.java
@@ -0,0 +1,49 @@
+/*
+ *  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 demoapp.dom.types.primitive.shorts.holder;
+
+import org.apache.isis.applib.annotation.Action;
+import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.PromptStyle;
+import org.apache.isis.applib.annotation.SemanticsOf;
+
+import lombok.RequiredArgsConstructor;
+
+
+@Action(
+        semantics = SemanticsOf.IDEMPOTENT,
+        associateWith = "readOnlyProperty2",
+        associateWithSequence = "1"
+)
+@ActionLayout(promptStyle = PromptStyle.INLINE_AS_IF_EDIT)
+@RequiredArgsConstructor
+public class PrimitiveShortHolder_updateReadOnlyProperty2PromptInlineAsIfEdit {
+
+    private final PrimitiveShortHolder primitiveShortHolder;
+
+    public PrimitiveShortHolder act(short newValue) {
+        primitiveShortHolder.setReadOnlyProperty2(newValue);
+        return primitiveShortHolder;
+    }
+    public short default0Act() {
+        return primitiveShortHolder.getReadOnlyProperty2();
+    }
+
+
+}
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/shorts/holder/PrimitiveShortHolder_updateReadOnlyPropertyPositionPanel.java b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/shorts/holder/PrimitiveShortHolder_updateReadOnlyPropertyPositionPanel.java
new file mode 100644
index 0000000..92716ba
--- /dev/null
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/shorts/holder/PrimitiveShortHolder_updateReadOnlyPropertyPositionPanel.java
@@ -0,0 +1,48 @@
+/*
+ *  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 demoapp.dom.types.primitive.shorts.holder;
+
+import org.apache.isis.applib.annotation.Action;
+import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.SemanticsOf;
+
+import lombok.RequiredArgsConstructor;
+
+
+@Action(
+        semantics = SemanticsOf.IDEMPOTENT,
+        associateWith = "readOnlyProperty",
+        associateWithSequence = "2"
+)
+@ActionLayout(position = ActionLayout.Position.PANEL, named = "Position in panel", describedAs = "position = PANEL")
+@RequiredArgsConstructor
+public class PrimitiveShortHolder_updateReadOnlyPropertyPositionPanel {
+
+    private final PrimitiveShortHolder primitiveShortHolder;
+
+    public PrimitiveShortHolder act(short newValue) {
+        primitiveShortHolder.setReadOnlyProperty(newValue);
+        return primitiveShortHolder;
+    }
+    public short default0Act() {
+        return primitiveShortHolder.getReadOnlyProperty();
+    }
+
+
+}
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/shorts/holder/PrimitiveShortHolder_updateReadOnlyPropertyPromptStyleInline.java b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/shorts/holder/PrimitiveShortHolder_updateReadOnlyPropertyPromptStyleInline.java
new file mode 100644
index 0000000..628d5fb
--- /dev/null
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/shorts/holder/PrimitiveShortHolder_updateReadOnlyPropertyPromptStyleInline.java
@@ -0,0 +1,49 @@
+/*
+ *  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 demoapp.dom.types.primitive.shorts.holder;
+
+import org.apache.isis.applib.annotation.Action;
+import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.PromptStyle;
+import org.apache.isis.applib.annotation.SemanticsOf;
+
+import lombok.RequiredArgsConstructor;
+
+
+@Action(
+        semantics = SemanticsOf.IDEMPOTENT,
+        associateWith = "readOnlyProperty",
+        associateWithSequence = "1"
+)
+@ActionLayout(promptStyle = PromptStyle.INLINE, named = "Inline", describedAs = "promptStyle = INLINE")
+@RequiredArgsConstructor
+public class PrimitiveShortHolder_updateReadOnlyPropertyPromptStyleInline {
+
+    private final PrimitiveShortHolder primitiveShortHolder;
+
+    public PrimitiveShortHolder act(short newValue) {
+        primitiveShortHolder.setReadOnlyProperty(newValue);
+        return primitiveShortHolder;
+    }
+    public short default0Act() {
+        return primitiveShortHolder.getReadOnlyProperty();
+    }
+
+
+}
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/shorts/holder/PrimitiveShortHolder_updateReadOnlyPropertyPromptStyleModal.java b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/shorts/holder/PrimitiveShortHolder_updateReadOnlyPropertyPromptStyleModal.java
new file mode 100644
index 0000000..fee29f5
--- /dev/null
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/shorts/holder/PrimitiveShortHolder_updateReadOnlyPropertyPromptStyleModal.java
@@ -0,0 +1,49 @@
+/*
+ *  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 demoapp.dom.types.primitive.shorts.holder;
+
+import org.apache.isis.applib.annotation.Action;
+import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.PromptStyle;
+import org.apache.isis.applib.annotation.SemanticsOf;
+
+import lombok.RequiredArgsConstructor;
+
+
+@Action(
+        semantics = SemanticsOf.IDEMPOTENT,
+        associateWith = "readOnlyProperty",
+        associateWithSequence = "2"
+)
+@ActionLayout(promptStyle = PromptStyle.DIALOG_MODAL, named = "Modal", describedAs = "promptStyle = MODAL")
+@RequiredArgsConstructor
+public class PrimitiveShortHolder_updateReadOnlyPropertyPromptStyleModal {
+
+    private final PrimitiveShortHolder primitiveShortHolder;
+
+    public PrimitiveShortHolder act(short newValue) {
+        primitiveShortHolder.setReadOnlyProperty(newValue);
+        return primitiveShortHolder;
+    }
+    public short default0Act() {
+        return primitiveShortHolder.getReadOnlyProperty();
+    }
+
+
+}
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/shorts/holder/PrimitiveShortHolder_updateReadOnlyPropertyPromptStylePanelDropDown.java b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/shorts/holder/PrimitiveShortHolder_updateReadOnlyPropertyPromptStylePanelDropDown.java
new file mode 100644
index 0000000..d74d248
--- /dev/null
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/shorts/holder/PrimitiveShortHolder_updateReadOnlyPropertyPromptStylePanelDropDown.java
@@ -0,0 +1,48 @@
+/*
+ *  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 demoapp.dom.types.primitive.shorts.holder;
+
+import org.apache.isis.applib.annotation.Action;
+import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.SemanticsOf;
+
+import lombok.RequiredArgsConstructor;
+
+
+@Action(
+        semantics = SemanticsOf.IDEMPOTENT,
+        associateWith = "readOnlyProperty",
+        associateWithSequence = "3"
+)
+@ActionLayout(position = ActionLayout.Position.PANEL_DROPDOWN, named = "Panel Dropdown", describedAs = "position = PANEL_DROPDOWN")
+@RequiredArgsConstructor
+public class PrimitiveShortHolder_updateReadOnlyPropertyPromptStylePanelDropDown {
+
+    private final PrimitiveShortHolder primitiveShortHolder;
+
+    public PrimitiveShortHolder act(short newValue) {
+        primitiveShortHolder.setReadOnlyProperty(newValue);
+        return primitiveShortHolder;
+    }
+    public short default0Act() {
+        return primitiveShortHolder.getReadOnlyProperty();
+    }
+
+
+}
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/shorts/holder/PrimitiveShortHolder_updateReadOnlyPropertyPromptStyleSidebar.java b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/shorts/holder/PrimitiveShortHolder_updateReadOnlyPropertyPromptStyleSidebar.java
new file mode 100644
index 0000000..d881d86
--- /dev/null
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/shorts/holder/PrimitiveShortHolder_updateReadOnlyPropertyPromptStyleSidebar.java
@@ -0,0 +1,49 @@
+/*
+ *  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 demoapp.dom.types.primitive.shorts.holder;
+
+import org.apache.isis.applib.annotation.Action;
+import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.PromptStyle;
+import org.apache.isis.applib.annotation.SemanticsOf;
+
+import lombok.RequiredArgsConstructor;
+
+
+@Action(
+        semantics = SemanticsOf.IDEMPOTENT,
+        associateWith = "readOnlyProperty",
+        associateWithSequence = "3"
+)
+@ActionLayout(promptStyle = PromptStyle.DIALOG_SIDEBAR, named = "sidebar", describedAs = "promptStyle = DIALOG_SIDEBAR")
+@RequiredArgsConstructor
+public class PrimitiveShortHolder_updateReadOnlyPropertyPromptStyleSidebar {
+
+    private final PrimitiveShortHolder primitiveShortHolder;
+
+    public PrimitiveShortHolder act(short newValue) {
+        primitiveShortHolder.setReadOnlyProperty(newValue);
+        return primitiveShortHolder;
+    }
+    public short default0Act() {
+        return primitiveShortHolder.getReadOnlyProperty();
+    }
+
+
+}
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/shorts/holder/PrimitiveShortHolder_updateReadOnlyPropertyWithChoices.java b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/shorts/holder/PrimitiveShortHolder_updateReadOnlyPropertyWithChoices.java
new file mode 100644
index 0000000..f08af54
--- /dev/null
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/shorts/holder/PrimitiveShortHolder_updateReadOnlyPropertyWithChoices.java
@@ -0,0 +1,64 @@
+/*
+ *  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 demoapp.dom.types.primitive.shorts.holder;
+
+import java.util.List;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+
+import org.apache.isis.applib.annotation.Action;
+import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.PromptStyle;
+import org.apache.isis.applib.annotation.SemanticsOf;
+
+import lombok.RequiredArgsConstructor;
+
+
+@Action(
+        semantics = SemanticsOf.IDEMPOTENT,
+        associateWith = "readOnlyProperty",
+        associateWithSequence = "4"
+)
+@ActionLayout(promptStyle = PromptStyle.AS_CONFIGURED, named = "with choices")
+@RequiredArgsConstructor
+public class PrimitiveShortHolder_updateReadOnlyPropertyWithChoices {
+
+    private final PrimitiveShortHolder primitiveShortHolder;
+
+    public PrimitiveShortHolder act(short newValue) {
+        primitiveShortHolder.setReadOnlyProperty(newValue);
+        return primitiveShortHolder;
+    }
+    public short default0Act() {
+        return primitiveShortHolder.getReadOnlyProperty();
+    }
+    public List<Short> choices0Act() {
+        return Stream.of(123, -123, 3000, 400)
+                .map(x -> asShort(x))
+                .collect(Collectors.toList());
+    }
+    public boolean hideAct() {
+        return true;
+    } // TODO: choices doesn't seem to work for this datatype
+
+    private static short asShort(int x) {
+        return (short) x;
+    }
+
+}
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/shorts/jdo/PrimitiveShortJdoEntities.java b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/shorts/jdo/PrimitiveShortJdoEntities.java
new file mode 100644
index 0000000..58cfdab
--- /dev/null
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/shorts/jdo/PrimitiveShortJdoEntities.java
@@ -0,0 +1,26 @@
+package demoapp.dom.types.primitive.shorts.jdo;
+
+import java.util.List;
+import java.util.Optional;
+
+import javax.inject.Inject;
+
+import org.springframework.stereotype.Service;
+
+import org.apache.isis.applib.services.repository.RepositoryService;
+
+@Service
+public class PrimitiveShortJdoEntities {
+
+    public Optional<PrimitiveShortJdoEntity> find(final short readOnlyProperty) {
+        return repositoryService.firstMatch(PrimitiveShortJdoEntity.class, x -> x.getReadOnlyProperty() == readOnlyProperty);
+    }
+
+    public List<PrimitiveShortJdoEntity> all() {
+        return repositoryService.allInstances(PrimitiveShortJdoEntity.class);
+    }
+
+    @Inject
+    RepositoryService repositoryService;
+
+}
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/shorts/jdo/PrimitiveShortJdoEntity-description.adoc b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/shorts/jdo/PrimitiveShortJdoEntity-description.adoc
new file mode 100644
index 0000000..fe4e6f8
--- /dev/null
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/shorts/jdo/PrimitiveShortJdoEntity-description.adoc
@@ -0,0 +1,30 @@
+JDO supports `short` out-of-the-box, so no special annotations are required.
+
+[source,java]
+----
+@PersistenceCapable(identityType = IdentityType.DATASTORE, schema = "demo")
+@DatastoreIdentity(strategy = IdGeneratorStrategy.IDENTITY, column = "id")
+@DomainObject(
+        objectType = "demo.PrimitiveShortJdoEntity"
+)
+public class PrimitiveShortJdoEntity
+    implements HasAsciiDocDescription,   PrimitiveShortHolder {          // <.>
+
+    public PrimitiveShortJdoEntity(short initialValue) { ... }            // <.>
+
+    @Title(prepend = "short (primitive) JDO entity: ")
+    @Getter @Setter
+    private short readOnlyProperty;                                      // <.>
+
+    @Getter @Setter
+    private short readOnlyProperty2;
+
+    @Getter @Setter
+    @Property(editing = Editing.ENABLED)
+    private short readWriteProperty;
+
+}
+----
+<.> 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/shorts/jdo/PrimitiveShortJdoEntity.java b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/shorts/jdo/PrimitiveShortJdoEntity.java
new file mode 100644
index 0000000..437fdf1
--- /dev/null
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/shorts/jdo/PrimitiveShortJdoEntity.java
@@ -0,0 +1,67 @@
+/*
+ *  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 demoapp.dom.types.primitive.shorts.jdo;
+
+import javax.jdo.annotations.DatastoreIdentity;
+import javax.jdo.annotations.IdGeneratorStrategy;
+import javax.jdo.annotations.IdentityType;
+import javax.jdo.annotations.PersistenceCapable;
+
+import org.apache.isis.applib.annotation.DomainObject;
+import org.apache.isis.applib.annotation.Editing;
+import org.apache.isis.applib.annotation.Property;
+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 demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
+import demoapp.dom.types.primitive.shorts.holder.PrimitiveShortHolder;
+
+@PersistenceCapable(identityType = IdentityType.DATASTORE, schema = "demo")
+@DatastoreIdentity(strategy = IdGeneratorStrategy.IDENTITY, column = "id")
+@DomainObject(
+        objectType = "demo.PrimitiveShortJdoEntity"
+)
+public class PrimitiveShortJdoEntity
+        implements HasAsciiDocDescription,
+        PrimitiveShortHolder {
+
+    public PrimitiveShortJdoEntity(short initialValue) {
+        this.readOnlyProperty = initialValue;
+        this.readOnlyProperty2 = initialValue;
+        this.readWriteProperty = initialValue;
+    }
+
+    @Title(prepend = "short (primitive) JDO entity: ")
+    @Getter @Setter
+    private short readOnlyProperty;
+
+    @Property
+    @PropertyLayout(hidden = Where.ALL_TABLES)
+    @Getter @Setter
+    private short readOnlyProperty2;
+
+    @Getter @Setter
+    @Property(editing = Editing.ENABLED)
+    private short readWriteProperty;
+
+}
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/shorts/jdo/PrimitiveShortJdoEntity.layout.xml b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/shorts/jdo/PrimitiveShortJdoEntity.layout.xml
new file mode 100644
index 0000000..ffa55a8
--- /dev/null
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/shorts/jdo/PrimitiveShortJdoEntity.layout.xml
@@ -0,0 +1,53 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<bs3:grid
+        xsi:schemaLocation="http://isis.apache.org/applib/layout/component http://isis.apache.org/applib/layout/component/component.xsd   http://isis.apache.org/applib/layout/grid/bootstrap3 http://isis.apache.org/applib/layout/grid/bootstrap3/bootstrap3.xsd"
+        xmlns:bs3="http://isis.apache.org/applib/layout/grid/bootstrap3"
+        xmlns:cpt="http://isis.apache.org/applib/layout/component"
+        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+
+	<bs3:row>
+		<bs3:col span="10" unreferencedActions="true">
+			<cpt:domainObject />
+			<cpt:action id="actionReturning"/>
+			<cpt:action id="rebuildMetamodel"/>
+		</bs3:col>
+		<bs3:col span="2">
+			<cpt:fieldSet name="" id="sources" />
+		</bs3:col>
+	</bs3:row>
+
+	<bs3:row>
+		<bs3:col span="6">
+			<cpt:fieldSet name="Action Prompt Styles" id="action-prompt-styles">
+				<cpt:property id="readOnlyProperty" />
+				<cpt:property id="readOnlyProperty2" >
+					<cpt:describedAs>
+						Associated action uses promptStyle=INLINE_AS_IF_EDIT
+					</cpt:describedAs>
+				</cpt:property>
+			</cpt:fieldSet>
+			<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">
+			<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="downloadJdoMetadata"  position="PANEL_DROPDOWN"/>
+				<cpt:action id="openRestApi" position="PANEL_DROPDOWN" />
+				<cpt:property id="description"/>
+			</cpt:fieldSet>
+		</bs3:col>
+	</bs3:row>
+	<bs3:row>
+		<bs3:col span="12" unreferencedCollections="true"/>
+	</bs3:row>
+
+</bs3:grid>
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/shorts/jdo/PrimitiveShortJdoEntitySeedService.java b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/shorts/jdo/PrimitiveShortJdoEntitySeedService.java
new file mode 100644
index 0000000..59d7391
--- /dev/null
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/shorts/jdo/PrimitiveShortJdoEntitySeedService.java
@@ -0,0 +1,47 @@
+package demoapp.dom.types.primitive.shorts.jdo;
+
+import java.util.stream.Stream;
+
+import javax.inject.Inject;
+
+import org.springframework.context.event.EventListener;
+import org.springframework.stereotype.Service;
+
+import org.apache.isis.applib.services.repository.RepositoryService;
+import org.apache.isis.core.runtime.events.app.AppLifecycleEvent;
+import org.apache.isis.testing.fixtures.applib.fixturescripts.FixtureScript;
+import org.apache.isis.testing.fixtures.applib.fixturescripts.FixtureScripts;
+
+@Service
+public class PrimitiveShortJdoEntitySeedService {
+
+    @EventListener(AppLifecycleEvent.class)
+    public void onAppLifecycleEvent(AppLifecycleEvent event) {
+
+        if (event.getEventType() == AppLifecycleEvent.EventType.appPostMetamodel) {
+            fixtureScripts.run(new PrimitiveShortJdoEntityFixture());
+        }
+    }
+
+    @Inject
+    FixtureScripts fixtureScripts;
+
+    static class PrimitiveShortJdoEntityFixture extends FixtureScript {
+
+        @Override
+        protected void execute(ExecutionContext executionContext) {
+            Stream.of(1,2,3,4)
+                    .map(x -> asShort(x))
+                    .map(PrimitiveShortJdoEntity::new)
+                    .forEach(repositoryService::persist);
+        }
+
+        private static short asShort(int x) {
+            return (short) x;
+        }
+
+        @Inject
+        RepositoryService repositoryService;
+
+    }
+}
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/shorts/vm/PrimitiveShortViewModel-description.adoc b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/shorts/vm/PrimitiveShortViewModel-description.adoc
new file mode 100644
index 0000000..8a3ca71
--- /dev/null
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/shorts/vm/PrimitiveShortViewModel-description.adoc
@@ -0,0 +1,36 @@
+JAXB supports `short` out-of-the-box, so no special annotations are required.
+
+[source,java]
+----
+@XmlRootElement(name = "demo.PrimitiveShortViewModel")
+@XmlType
+@XmlAccessorType(XmlAccessType.FIELD)
+@DomainObject(
+        nature=Nature.VIEW_MODEL,
+        objectType = "demo.PrimitiveShortViewModel"
+)
+@lombok.NoArgsConstructor                               // <.>
+public class PrimitiveShortViewModel
+        implements HasAsciiDocDescription,
+                   PrimitiveShortHolder {
+
+    public PrimitiveShortViewModel(short initialValue) {  // <.>
+        // ...
+    }
+
+    @Title(prepend = "short (primitive) view model: ")
+    @Getter @Setter
+    private short readOnlyProperty;                      // <.>
+
+    @Getter @Setter
+    private short readOnlyProperty2;
+
+    @Getter @Setter
+    @Property(editing = Editing.ENABLED)
+    private short readWriteProperty;
+
+}
+----
+<.> a no-arg constructor is required by JAXB
+<.> 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/shorts/vm/PrimitiveShortViewModel.java b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/shorts/vm/PrimitiveShortViewModel.java
new file mode 100644
index 0000000..2c34f44
--- /dev/null
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/shorts/vm/PrimitiveShortViewModel.java
@@ -0,0 +1,71 @@
+/*
+ *  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 demoapp.dom.types.primitive.shorts.vm;
+
+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.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.Title;
+import org.apache.isis.applib.annotation.Where;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
+import demoapp.dom.types.primitive.shorts.holder.PrimitiveShortHolder;
+
+@XmlRootElement(name = "demo.PrimitiveShortViewModel")
+@XmlType
+@XmlAccessorType(XmlAccessType.FIELD)
+@DomainObject(
+        nature=Nature.VIEW_MODEL,
+        objectType = "demo.PrimitiveShortViewModel"
+)
+@lombok.NoArgsConstructor
+public class PrimitiveShortViewModel
+        implements HasAsciiDocDescription,
+        PrimitiveShortHolder {
+
+    public PrimitiveShortViewModel(short initialValue) {
+        this.readOnlyProperty = initialValue;
+        this.readOnlyProperty2 = initialValue;
+        this.readWriteProperty = initialValue;
+    }
+
+    @Title(prepend = "short (primitive) view model: ")
+    @Getter @Setter
+    private short readOnlyProperty;
+
+    @Property
+    @PropertyLayout(hidden = Where.ALL_TABLES)
+    @Getter @Setter
+    private short readOnlyProperty2;
+
+    @Getter @Setter
+    @Property(editing = Editing.ENABLED)
+    private short readWriteProperty;
+
+}
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/shorts/vm/PrimitiveShortViewModel.layout.xml b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/shorts/vm/PrimitiveShortViewModel.layout.xml
new file mode 100644
index 0000000..ffa55a8
--- /dev/null
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/shorts/vm/PrimitiveShortViewModel.layout.xml
@@ -0,0 +1,53 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<bs3:grid
+        xsi:schemaLocation="http://isis.apache.org/applib/layout/component http://isis.apache.org/applib/layout/component/component.xsd   http://isis.apache.org/applib/layout/grid/bootstrap3 http://isis.apache.org/applib/layout/grid/bootstrap3/bootstrap3.xsd"
+        xmlns:bs3="http://isis.apache.org/applib/layout/grid/bootstrap3"
+        xmlns:cpt="http://isis.apache.org/applib/layout/component"
+        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+
+	<bs3:row>
+		<bs3:col span="10" unreferencedActions="true">
+			<cpt:domainObject />
+			<cpt:action id="actionReturning"/>
+			<cpt:action id="rebuildMetamodel"/>
+		</bs3:col>
+		<bs3:col span="2">
+			<cpt:fieldSet name="" id="sources" />
+		</bs3:col>
+	</bs3:row>
+
+	<bs3:row>
+		<bs3:col span="6">
+			<cpt:fieldSet name="Action Prompt Styles" id="action-prompt-styles">
+				<cpt:property id="readOnlyProperty" />
+				<cpt:property id="readOnlyProperty2" >
+					<cpt:describedAs>
+						Associated action uses promptStyle=INLINE_AS_IF_EDIT
+					</cpt:describedAs>
+				</cpt:property>
+			</cpt:fieldSet>
+			<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">
+			<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="downloadJdoMetadata"  position="PANEL_DROPDOWN"/>
+				<cpt:action id="openRestApi" position="PANEL_DROPDOWN" />
+				<cpt:property id="description"/>
+			</cpt:fieldSet>
+		</bs3:col>
+	</bs3:row>
+	<bs3:row>
+		<bs3:col span="12" unreferencedCollections="true"/>
+	</bs3:row>
+
+</bs3:grid>