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

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

commit ebbf7aa6ee6f7ab0662e1804628e0aeb723a82d4
Author: danhaywood <[email protected]>
AuthorDate: Thu May 18 14:12:28 2023 +0100

    CAUSEWAY-2845: further fixes for demo showcase value type templates
---
 .../valuesemantics/BigDecimalValueSemantics.java   |  8 ++++++-
 .../valuesemantics/BigIntegerValueSemantics.java   |  9 +++++++-
 .../valuesemantics/URLValueSemantics.java          |  5 +++--
 .../demoshowcases/value/ValueShowCase.java         | 25 ++++++++++++++++------
 .../demoshowcases/value/ValueTypeGenTemplate.java  | 13 ++++++-----
 .../src/main/resources/vm/$TemplateVm.java         |  9 ++++----
 6 files changed, 50 insertions(+), 19 deletions(-)

diff --git 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/valuesemantics/BigDecimalValueSemantics.java
 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/valuesemantics/BigDecimalValueSemantics.java
index 4b8e51a32b..7a1e791ade 100644
--- 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/valuesemantics/BigDecimalValueSemantics.java
+++ 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/valuesemantics/BigDecimalValueSemantics.java
@@ -21,6 +21,7 @@ package org.apache.causeway.core.metamodel.valuesemantics;
 import java.math.BigDecimal;
 import java.text.DecimalFormat;
 import java.util.function.UnaryOperator;
+import java.util.stream.Stream;
 
 import javax.annotation.Priority;
 import javax.inject.Inject;
@@ -166,7 +167,12 @@ implements
                 new BigDecimal("1001"),
                 new BigDecimal("-63.1"),
                 new BigDecimal("0.001"),
-                BigDecimal.ZERO);
+                BigDecimal.ZERO,
+                BigDecimal.ONE,
+                BigDecimal.TEN,
+                BigDecimal.valueOf(123_456_789_012L),
+                BigDecimal.valueOf(1234567.8890f),
+                BigDecimal.valueOf(123_456_789_012L, 3));
     }
 
 }
diff --git 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/valuesemantics/BigIntegerValueSemantics.java
 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/valuesemantics/BigIntegerValueSemantics.java
index 483468846f..bbea83b61b 100644
--- 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/valuesemantics/BigIntegerValueSemantics.java
+++ 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/valuesemantics/BigIntegerValueSemantics.java
@@ -125,7 +125,14 @@ implements
 
     @Override
     public Can<BigInteger> getExamples() {
-        return Can.of(BigInteger.valueOf(-63L), BigInteger.ZERO);
+        return Can.of(
+                BigInteger.valueOf(42L),
+                BigInteger.valueOf(-63L),
+                BigInteger.ZERO,
+                BigInteger.ONE,
+                BigInteger.TEN,
+                BigInteger.valueOf(123_456_789_012L)
+                );
     }
 
 }
diff --git 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/valuesemantics/URLValueSemantics.java
 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/valuesemantics/URLValueSemantics.java
index 5886cf335f..e458ea5801 100644
--- 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/valuesemantics/URLValueSemantics.java
+++ 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/valuesemantics/URLValueSemantics.java
@@ -128,8 +128,9 @@ implements
     @Override
     public Can<URL> getExamples() {
         return Can.of(
-                new URL("https://a.b.c";),
-                new URL("https://b.c.d";));
+                new URL("https://maps.google.com";),
+                new URL("https://en.wikipedia.org/wiki/Domain-driven_design";)
+        );
     }
 
 }
diff --git 
a/tooling/metaprog/src/main/java/org/apache/causeway/tooling/metaprog/demoshowcases/value/ValueShowCase.java
 
b/tooling/metaprog/src/main/java/org/apache/causeway/tooling/metaprog/demoshowcases/value/ValueShowCase.java
index a198bfaca6..5d00f1f420 100644
--- 
a/tooling/metaprog/src/main/java/org/apache/causeway/tooling/metaprog/demoshowcases/value/ValueShowCase.java
+++ 
b/tooling/metaprog/src/main/java/org/apache/causeway/tooling/metaprog/demoshowcases/value/ValueShowCase.java
@@ -35,7 +35,7 @@ public enum ValueShowCase {
             
.showcaseValueSemantics("org.apache.causeway.core.metamodel.valuesemantics.BlobValueSemantics")
             .descriptionIfNoPreamble("binary large objects")
             .causewaySpecific(true)
-            .templates(Template.NO_ORM_SET)
+            .templates(Template.NO_ORM_SET.remove(Template.SAMPLES))
             .templateVariant(TemplateVariant.LOB)
     ),
     CLOB(Config.builder()
@@ -45,7 +45,7 @@ public enum ValueShowCase {
             
.showcaseValueSemantics("org.apache.causeway.core.metamodel.valuesemantics.ClobValueSemantics")
             .descriptionIfNoPreamble("character large objects")
             .causewaySpecific(true)
-            .templates(Template.NO_ORM_SET)
+            .templates(Template.NO_ORM_SET.remove(Template.SAMPLES))
             .templateVariant(TemplateVariant.LOB)
     ),
     LOCALRESOURCEPATH(Config.builder()
@@ -58,6 +58,7 @@ public enum ValueShowCase {
                     "When an action returns an instance of this type, then 
this is rendered as a redirect request to the browser to that resource.\n" +
                     "In this way you could for example return a link to a PDF 
or image (to be rendered by the web browser itself), or provide access to 
dynamic content by redirecting to a servlet.\n")
             .causewaySpecific(true)
+            .templates(Template.REGULAR_SET_NO_SAMPLES)
             .templateVariant(TemplateVariant.DEFAULT)
     ),
     PASSWORD(Config.builder()
@@ -99,6 +100,7 @@ public enum ValueShowCase {
             .frameworkSupportForJpa(true)
             .frameworkSupportForJdo(true)
             .frameworkSupportForJaxb(true)
+            .templates(Template.REGULAR_SET_NO_SAMPLES)
             .templateVariant(TemplateVariant.DEFAULT)
     ),
     JAVAMATHBIGDECIMAL(Config.builder()
@@ -138,6 +140,7 @@ public enum ValueShowCase {
             
.showcaseValueSemantics("org.apache.causeway.core.metamodel.valuesemantics.temporal.legacy.JavaSqlTimeStampValueSemantics")
             .preamble("The framework has built-in support for a number of 
temporal types, including `java.sql.Timestamp`.")
             .caveat("Rather than use this data type, consider using a more 
modern class such as `java.time.OffsetDateTime`")
+            
.jaxbAdapter("org.apache.causeway.applib.jaxb.JavaSqlJaxbAdapters.TimestampToStringAdapter")
             .templateVariant(TemplateVariant.DEFAULT)
     ),
     JAVATIMELOCALDATE(Config.builder()
@@ -146,6 +149,7 @@ public enum ValueShowCase {
             .showcaseValueFullyQualifiedType("java.time.LocalDate")
             
.showcaseValueSemantics("org.apache.causeway.core.metamodel.valuesemantics.temporal.LocalDateValueSemantics")
             .preamble("The framework has built-in support for a number of 
temporal types, including `java.time.LocalDate`.")
+            
.jaxbAdapter("org.apache.causeway.applib.jaxb.JavaTimeJaxbAdapters.LocalDateToStringAdapter")
             .templateVariant(TemplateVariant.DEFAULT)
     ),
     JAVATIMELOCALDATETIME(Config.builder()
@@ -154,6 +158,7 @@ public enum ValueShowCase {
             .showcaseValueFullyQualifiedType("java.time.LocalDateTime")
             
.showcaseValueSemantics("org.apache.causeway.core.metamodel.valuesemantics.temporal.LocalDateTimeValueSemantics")
             .preamble("The framework has built-in support for a number of 
temporal types, including `java.time.LocalDateTime`.")
+            
.jaxbAdapter("org.apache.causeway.applib.jaxb.JavaTimeJaxbAdapters.LocalDateTimeToStringAdapter")
             .templateVariant(TemplateVariant.DEFAULT)
     ),
     JAVATIMELOCALTIME(Config.builder()
@@ -162,6 +167,7 @@ public enum ValueShowCase {
             .showcaseValueFullyQualifiedType("java.time.LocalTime")
             
.showcaseValueSemantics("org.apache.causeway.core.metamodel.valuesemantics.temporal.LocalTimeValueSemantics")
             .preamble("The framework has built-in support for a number of 
temporal types, including `java.time.LocalTime`.")
+            
.jaxbAdapter("org.apache.causeway.applib.jaxb.JavaTimeJaxbAdapters.LocalTimeToStringAdapter")
             .templateVariant(TemplateVariant.DEFAULT)
     ),
     JAVATIMEOFFSETDATETIME(Config.builder()
@@ -170,6 +176,7 @@ public enum ValueShowCase {
             .showcaseValueFullyQualifiedType("java.time.OffsetDateTime")
             
.showcaseValueSemantics("org.apache.causeway.core.metamodel.valuesemantics.temporal.OffsetDateTimeValueSemantics")
             .preamble("The framework has built-in support for a number of 
temporal types, including `java.time.OffsetDateTime`.")
+            
.jaxbAdapter("org.apache.causeway.applib.jaxb.JavaTimeJaxbAdapters.OffsetDateTimeToStringAdapter")
             .templateVariant(TemplateVariant.DEFAULT)
     ),
     JAVATIMEOFFSETTIME(Config.builder()
@@ -178,6 +185,7 @@ public enum ValueShowCase {
             .showcaseValueFullyQualifiedType("java.time.OffsetTime")
             
.showcaseValueSemantics("org.apache.causeway.core.metamodel.valuesemantics.temporal.OffsetTimeValueSemantics")
             .preamble("The framework has built-in support for a number of 
temporal types, including `java.time.OffsetTime`.")
+            
.jaxbAdapter("org.apache.causeway.applib.jaxb.JavaTimeJaxbAdapters.OffsetTimeAdapter")
             .templateVariant(TemplateVariant.DEFAULT)
     ),
     JAVATIMEZONEDDATETIME(Config.builder()
@@ -186,6 +194,7 @@ public enum ValueShowCase {
             .showcaseValueFullyQualifiedType("java.time.ZonedDateTime")
             
.showcaseValueSemantics("org.apache.causeway.core.metamodel.valuesemantics.temporal.ZonedDateTimeValueSemantics")
             .preamble("The framework has built-in support for a number of 
temporal types, including `java.time.ZonedDateTime`.")
+            
.jaxbAdapter("org.apache.causeway.applib.jaxb.JavaTimeJaxbAdapters.ZonedDateTimeAdapter")
             .templateVariant(TemplateVariant.DEFAULT)
     ),
     JAVAUTILDATE(Config.builder()
@@ -200,38 +209,42 @@ public enum ValueShowCase {
     ),
     JODADATETIME(Config.builder()
             .showcaseName("JodaDateTime")
-            .javaPackage("demoapp.dom.types.javatime.jodadatetime")
+            .javaPackage("demoapp.dom.types.jodatime.jodadatetime")
             .showcaseValueFullyQualifiedType("org.joda.time.DateTime")
             
.showcaseValueSemantics("org.apache.causeway.valuetypes.jodatime.integration.valuesemantics.JodaDateTimeValueSemantics")
             .preamble("The framework has built-in support for a number of 
temporal types, including `org.joda.time.DateTime`.")
             .caveat("Rather than use this data type, consider using a more 
modern class such as `java.time.OffsetDateTime`.")
+            
.jaxbAdapter("org.apache.causeway.valuetypes.jodatime.applib.jaxb.JodaTimeJaxbAdapters.DateTimeToStringAdapter")
             .templateVariant(TemplateVariant.DEFAULT)
     ),
     JODALOCALDATE(Config.builder()
             .showcaseName("JodaLocalDate")
-            .javaPackage("demoapp.dom.types.javatime.jodalocaldate")
+            .javaPackage("demoapp.dom.types.jodatime.jodalocaldate")
             .showcaseValueFullyQualifiedType("org.joda.time.LocalDate")
             
.showcaseValueSemantics("org.apache.causeway.valuetypes.jodatime.integration.valuesemantics.JodaLocalDateValueSemantics")
             .preamble("The framework has built-in support for a number of 
temporal types, including `org.joda.time.LocalDate`")
             .caveat("Rather than use this data type, consider using a more 
modern class such as `java.time.LocalDate`.")
+            
.jaxbAdapter("org.apache.causeway.valuetypes.jodatime.applib.jaxb.JodaTimeJaxbAdapters.LocalDateToStringAdapter")
             .templateVariant(TemplateVariant.DEFAULT)
     ),
     JODALOCALDATETIME(Config.builder()
             .showcaseName("JodaLocalDateTime")
-            .javaPackage("demoapp.dom.types.javatime.jodalocaldatetime")
+            .javaPackage("demoapp.dom.types.jodatime.jodalocaldatetime")
             .showcaseValueFullyQualifiedType("org.joda.time.LocalDateTime")
             
.showcaseValueSemantics("org.apache.causeway.valuetypes.jodatime.integration.valuesemantics.JodaLocalDateTimeValueSemantics")
             .preamble("The framework has built-in support for a number of 
temporal types, including `org.joda.time.LocalDateTime`.")
             .caveat("Rather than use this data type, consider using a more 
modern class such as `java.time.LocalDateTime`.")
+            
.jaxbAdapter("org.apache.causeway.valuetypes.jodatime.applib.jaxb.JodaTimeJaxbAdapters.LocalDateTimeToStringAdapter")
             .templateVariant(TemplateVariant.DEFAULT)
     ),
     JODALOCALTIME(Config.builder()
             .showcaseName("JodaLocalTime")
-            .javaPackage("demoapp.dom.types.javatime.jodalocaltime")
+            .javaPackage("demoapp.dom.types.jodatime.jodalocaltime")
             .showcaseValueFullyQualifiedType("org.joda.time.LocalTime")
             
.showcaseValueSemantics("org.apache.causeway.valuetypes.jodatime.integration.valuesemantics.JodaLocalTimeValueSemantics")
             .preamble("The framework has built-in support for a number of 
temporal types, including `org.joda.time.LocalTime`.")
             .caveat("Rather than use this data type, consider using a more 
modern class such as `java.time.LocalTime`.")
+            
.jaxbAdapter("org.apache.causeway.valuetypes.jodatime.applib.jaxb.JodaTimeJaxbAdapters.LocalTimeToStringAdapter")
             .templateVariant(TemplateVariant.DEFAULT)
     ),
     MARKUP(Config.builder()
diff --git 
a/tooling/metaprog/src/main/java/org/apache/causeway/tooling/metaprog/demoshowcases/value/ValueTypeGenTemplate.java
 
b/tooling/metaprog/src/main/java/org/apache/causeway/tooling/metaprog/demoshowcases/value/ValueTypeGenTemplate.java
index e2ad87d441..138da90ca7 100644
--- 
a/tooling/metaprog/src/main/java/org/apache/causeway/tooling/metaprog/demoshowcases/value/ValueTypeGenTemplate.java
+++ 
b/tooling/metaprog/src/main/java/org/apache/causeway/tooling/metaprog/demoshowcases/value/ValueTypeGenTemplate.java
@@ -119,10 +119,10 @@ public class ValueTypeGenTemplate {
 
         final boolean frameworkSupportForJaxb;
         /**
-         * Implied by {@link #isCausewaySpecific()}, if present then indicates 
that the framework has added support for JAXB serialization for certain data 
types.
+         * Implied by {@link #isCausewaySpecific()} or a non-null {@link 
#getJaxbAdapter()}, if present then indicates that the framework has added 
support for JAXB serialization for certain data types.
          */
         private boolean isFrameworkSupportForJaxb() {
-            return causewaySpecific || frameworkSupportForJaxb;
+            return causewaySpecific || frameworkSupportForJaxb || jaxbAdapter 
!= null;
         }
         public String getJaxbTypeSupportNotice() {
             return isFrameworkSupportForJaxb()
@@ -130,7 +130,10 @@ public class ValueTypeGenTemplate {
                     : "JAXB supports `" + getShowcaseValueSimpleType() + "` 
out-of-the-box, so no special annotations are required.\nSee 
link:https://docs.oracle.com/cd/E12840_01/wls/docs103/webserv/data_types.html#wp223908[Oracle]";;
         }
 
-
+        /**
+         * If specified, then used to annotate properties of JAXB view models.
+         */
+        final String jaxbAdapter;
         final String javaPackage;
         @Builder.Default
         final String fileNamePlaceholderForShowcaseName = "$Template";
@@ -235,8 +238,7 @@ public class ValueTypeGenTemplate {
                 .remove(VIEWMODEL_DESCRIPTION)
                 .remove(VIEWMODEL_LAYOUT);
 
-        public static Can<Template> REGULAR_SET_NO_SAMPLES = 
Can.ofArray(Template.values())
-                .remove(HOLDER_ACTION_RETURNING_ARRAY)
+        public static Can<Template> REGULAR_SET_NO_SAMPLES = REGULAR_SET
                 .remove(SAMPLES);
 
         public static Can<Template> PRIMITIVE_SET = 
Can.ofArray(Template.values())
@@ -326,6 +328,7 @@ public class ValueTypeGenTemplate {
                     .map(cls->boolean.class.equals(cls) ? "is" : "get")
                     .orElse("get"));
 
+            templateVars.put("showcase-jaxb-adapter-type", 
(config.getJaxbAdapter() != null ? "@XmlJavaTypeAdapter(" + 
config.getJaxbAdapter() + ".class)\n    " : "" ));
             templateVars.put("showcase-java-package", config.javaPackage);
             templateVars.put("showcase-value-semantics-provider", 
config.showcaseValueSemantics);
             templateVars.put("generated-file-notice", 
template.generator.formatAsComment(config.generatedFileNotice));
diff --git a/tooling/metaprog/src/main/resources/vm/$TemplateVm.java 
b/tooling/metaprog/src/main/resources/vm/$TemplateVm.java
index be220ad1b7..8545d39e4f 100644
--- a/tooling/metaprog/src/main/resources/vm/$TemplateVm.java
+++ b/tooling/metaprog/src/main/resources/vm/$TemplateVm.java
@@ -24,6 +24,7 @@ import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlElement;
 import javax.xml.bind.annotation.XmlRootElement;
 import javax.xml.bind.annotation.XmlType;
+import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
 
 import org.apache.causeway.applib.annotation.DomainObject;
 import org.apache.causeway.applib.annotation.Editing;
@@ -61,24 +62,24 @@ public class /*${showcase-name}*/Vm
 //tag::class[]
     @Title(prepend = "/*${showcase-simple-type}*/ view model: ")
     @PropertyLayout(fieldSetId = "read-only-properties", sequence = "1")
-    @XmlElement(required = true)                                               
 // <.>
+    /*${showcase-jaxb-adapter-type}*/@XmlElement(required = true)              
                                  // <.>
     @Getter @Setter
     private /*${showcase-simple-type}*/ readOnlyProperty;
 
     @Property(editing = Editing.ENABLED)                                       
 // <.>
     @PropertyLayout(fieldSetId = "editable-properties", sequence = "1")
-    @XmlElement(required = true)
+    /*${showcase-jaxb-adapter-type}*/@XmlElement(required = true)
     @Getter @Setter
     private /*${showcase-simple-type}*/ readWriteProperty;
 
     @Property(optionality = Optionality.OPTIONAL)                              
 // <.>
     @PropertyLayout(fieldSetId = "optional-properties", sequence = "1")
-    @Getter @Setter
+    /*${showcase-jaxb-adapter-type}*/@Getter @Setter
     private /*${showcase-simple-type}*/ readOnlyOptionalProperty;
 
     @Property(editing = Editing.ENABLED, optionality = Optionality.OPTIONAL)
     @PropertyLayout(fieldSetId = "optional-properties", sequence = "2")
-    @Getter @Setter
+    /*${showcase-jaxb-adapter-type}*/@Getter @Setter
     private /*${showcase-simple-type}*/ readWriteOptionalProperty;
 
 }

Reply via email to