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

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


The following commit(s) were added to refs/heads/master by this push:
     new 076a76bf2b ISIS-3123: working on templates for primitives
076a76bf2b is described below

commit 076a76bf2b8850f2a933f47a683bab5c9176ed89
Author: andi-huber <[email protected]>
AuthorDate: Wed Aug 17 10:18:09 2022 +0200

    ISIS-3123: working on templates for primitives
---
 .../demoshowcases/value/ValueTypeGenTemplate.java  | 40 ++++++++++++++++------
 .../metaprog/src/main/resources/$Templates.java    |  4 +--
 .../$TemplateHolder_actionReturningArray.java}     | 30 +++++++++++-----
 .../resources/persistence/$TemplateEntity.java     |  4 +--
 .../resources/persistence/$TemplateSeeding.java    |  2 +-
 .../value/ValueTypeGenTemplateTest.java            | 24 +++++++++++--
 6 files changed, 78 insertions(+), 26 deletions(-)

diff --git 
a/tooling/metaprog/src/main/java/org/apache/isis/tooling/metaprog/demoshowcases/value/ValueTypeGenTemplate.java
 
b/tooling/metaprog/src/main/java/org/apache/isis/tooling/metaprog/demoshowcases/value/ValueTypeGenTemplate.java
index 373bfe947a..8018ceae54 100644
--- 
a/tooling/metaprog/src/main/java/org/apache/isis/tooling/metaprog/demoshowcases/value/ValueTypeGenTemplate.java
+++ 
b/tooling/metaprog/src/main/java/org/apache/isis/tooling/metaprog/demoshowcases/value/ValueTypeGenTemplate.java
@@ -24,6 +24,9 @@ import java.util.HashMap;
 import java.util.Map;
 import java.util.Optional;
 import java.util.function.Consumer;
+import java.util.function.Predicate;
+
+import org.springframework.util.ClassUtils;
 
 import org.apache.isis.commons.internal.assertions._Assert;
 import org.apache.isis.commons.internal.base._Files;
@@ -61,6 +64,12 @@ public class ValueTypeGenTemplate {
         final String generatedFileNotice = "This file was GENERATED by the 
showcase generator (tooling). Do NOT edit!";
         @Singular
         final Map<String, String> templateVariables = new HashMap<>();
+        @Builder.Default
+        final Predicate<Template> templatePredicate = template->template != 
Template.HOLDER_ACTION_RETURNING_ARRAY;
+
+        final boolean accepts(final Template template) {
+            return templatePredicate.test(template);
+        }
     }
 
     @RequiredArgsConstructor
@@ -92,10 +101,11 @@ public class ValueTypeGenTemplate {
     }
 
     @RequiredArgsConstructor
-    enum Sources {
+    enum Template {
         HOLDER("holder/%sHolder", Generator.JAVA),
         HOLDER2("holder/%sHolder2", Generator.JAVA),
         HOLDER_ACTION_RETURNING("holder/%sHolder_actionReturning", 
Generator.JAVA),
+        HOLDER_ACTION_RETURNING_ARRAY("holder/%sHolder_actionReturningArray", 
Generator.JAVA),
         
HOLDER_ACTION_RETURNING_COLLECTION("holder/%sHolder_actionReturningCollection", 
Generator.JAVA),
         HOLDER_MIXIN_PROPERTY("holder/%sHolder_mixinProperty", Generator.JAVA),
         
HOLDER_UPDATE_READONLY_OPTIONAL_PROPERTY("holder/%sHolder_updateReadOnlyOptionalProperty",
 Generator.JAVA),
@@ -165,21 +175,31 @@ public class ValueTypeGenTemplate {
 
     public void generate(final Consumer<File> onSourceGenerated) {
 
-        for(var source: Sources.values()) {
-            val template = source.template(config);
+        for(var template: Template.values()) {
+            if(!config.accepts(template)) {
+                continue;
+            }
+
+            val templateFile = template.template(config);
 
-            _Assert.assertTrue(template.exists(), ()->String.format("template 
%s not found", template));
+            _Assert.assertTrue(templateFile.exists(), 
()->String.format("template %s not found", templateFile));
 
-            val genTarget = source.file(config);
+            val genTarget = template.file(config);
 
-            val templateVars = new TemplateVars(source.generator);
+            val templateVars = new TemplateVars(template.generator);
             templateVars.putAll(config.templateVariables);
-            templateVars.put("java-package", source.javaPackage(config));
+            templateVars.put("java-package", template.javaPackage(config));
             templateVars.put("showcase-name", config.showcaseName);
             templateVars.put("showcase-type", config.showcaseValueType);
+            templateVars.put("showcase-type-boxed",
+                    
Optional.ofNullable(ClassUtils.resolvePrimitiveClassName(config.showcaseValueType))
+                    .map(ClassUtils::resolvePrimitiveIfNecessary)
+                    .map(Class::getName)
+                    .orElse(config.showcaseValueType));
+
             templateVars.put("showcase-java-package", config.javaPackage);
             templateVars.put("showcase-value-semantics-provider", 
config.showcaseValueSemantics);
-            templateVars.put("generated-file-notice", 
source.generator.formatAsComment(config.generatedFileNotice));
+            templateVars.put("generated-file-notice", 
template.generator.formatAsComment(config.generatedFileNotice));
 
             templateVars.put("jdo-type-support-notice", 
config.jdoTypeSupportNotice);
             templateVars.put("jpa-type-support-notice", 
config.jpaTypeSupportNotice);
@@ -188,11 +208,11 @@ public class ValueTypeGenTemplate {
 
             // allow for ADOC IDE tools, to properly resolve include 
statements,
             // that is referenced (template) files should exist
-            if(source.generator.isDoc()) {
+            if(template.generator.isDoc()) {
                 templateVars.putRaw("$Template", config.showcaseName);
             }
 
-            generateFromTemplate(templateVars, template, genTarget);
+            generateFromTemplate(templateVars, templateFile, genTarget);
             onSourceGenerated.accept(genTarget);
         }
 
diff --git a/tooling/metaprog/src/main/resources/$Templates.java 
b/tooling/metaprog/src/main/resources/$Templates.java
index 6deee437a4..1ada81fd86 100644
--- a/tooling/metaprog/src/main/resources/$Templates.java
+++ b/tooling/metaprog/src/main/resources/$Templates.java
@@ -74,10 +74,10 @@ public class /*${showcase-name}*/s implements 
HasAsciiDocDescription {
 
     @Inject
     @XmlTransient
-    ValueHolderRepository</*${showcase-type}*/, ? extends 
/*${showcase-name}*/Entity> entities;
+    ValueHolderRepository</*${showcase-type-boxed}*/, ? extends 
/*${showcase-name}*/Entity> entities;
 
     @Inject
     @XmlTransient
-    Samples</*${showcase-type}*/> samples;
+    Samples</*${showcase-type-boxed}*/> samples;
 
 }
diff --git 
a/tooling/metaprog/src/main/resources/persistence/$TemplateSeeding.java 
b/tooling/metaprog/src/main/resources/holder/$TemplateHolder_actionReturningArray.java
similarity index 55%
copy from tooling/metaprog/src/main/resources/persistence/$TemplateSeeding.java
copy to 
tooling/metaprog/src/main/resources/holder/$TemplateHolder_actionReturningArray.java
index a2347caa49..8b8f156181 100644
--- a/tooling/metaprog/src/main/resources/persistence/$TemplateSeeding.java
+++ 
b/tooling/metaprog/src/main/resources/holder/$TemplateHolder_actionReturningArray.java
@@ -20,19 +20,31 @@ package /*${java-package}*/;
 
 import javax.inject.Inject;
 
-import org.springframework.stereotype.Service;
+import org.apache.isis.applib.annotation.Action;
+import org.apache.isis.applib.annotation.SemanticsOf;
+import org.apache.isis.commons.functional.IndexedConsumer;
 
-import demoapp.dom._infra.seed.SeedServiceAbstract;
-import demoapp.dom._infra.values.ValueHolderRepository;
+import demoapp.dom.types.Samples;
+import lombok.RequiredArgsConstructor;
+import lombok.val;
 
 /*${generated-file-notice}*/
-@Service
-public class /*${showcase-name}*/Seeding
-extends SeedServiceAbstract {
+//tag::class[]
+@Action(semantics = SemanticsOf.SAFE)
+@RequiredArgsConstructor
+public class /*${showcase-name}*/Holder_actionReturningArray {
 
-    @Inject
-    public 
/*${showcase-name}*/Seeding(ValueHolderRepository</*${showcase-type}*/, ? 
extends /*${showcase-name}*/Entity> entities) {
-        super(entities);
+    private final /*${showcase-name}*/Holder holder;
+
+    public /*${showcase-type}*/[] act() {
+        val array = new long[(int)samples.stream().count()];
+        samples.stream()
+            .forEach(IndexedConsumer.zeroBased((index, value)->array[index] = 
value));
+        return array;
     }
 
+    @Inject
+    Samples</*${showcase-type-boxed}*/> samples;
+
 }
+//end::class[]
diff --git 
a/tooling/metaprog/src/main/resources/persistence/$TemplateEntity.java 
b/tooling/metaprog/src/main/resources/persistence/$TemplateEntity.java
index fe10031c76..1f01474ae3 100644
--- a/tooling/metaprog/src/main/resources/persistence/$TemplateEntity.java
+++ b/tooling/metaprog/src/main/resources/persistence/$TemplateEntity.java
@@ -33,10 +33,10 @@ public abstract class /*${showcase-name}*/Entity
 implements
     HasAsciiDocDescription,
     /*${showcase-name}*/Holder2,
-    ValueHolder</*${showcase-type}*/> {
+    ValueHolder</*${showcase-type-boxed}*/> {
 
     @Override
-    public /*${showcase-type}*/ value() {
+    public /*${showcase-type-boxed}*/ value() {
         return getReadOnlyProperty();
     }
 
diff --git 
a/tooling/metaprog/src/main/resources/persistence/$TemplateSeeding.java 
b/tooling/metaprog/src/main/resources/persistence/$TemplateSeeding.java
index a2347caa49..d52d492e5c 100644
--- a/tooling/metaprog/src/main/resources/persistence/$TemplateSeeding.java
+++ b/tooling/metaprog/src/main/resources/persistence/$TemplateSeeding.java
@@ -31,7 +31,7 @@ public class /*${showcase-name}*/Seeding
 extends SeedServiceAbstract {
 
     @Inject
-    public 
/*${showcase-name}*/Seeding(ValueHolderRepository</*${showcase-type}*/, ? 
extends /*${showcase-name}*/Entity> entities) {
+    public 
/*${showcase-name}*/Seeding(ValueHolderRepository</*${showcase-type-boxed}*/, ? 
extends /*${showcase-name}*/Entity> entities) {
         super(entities);
     }
 
diff --git 
a/tooling/metaprog/src/test/java/org/apache/isis/tooling/metaprog/demoshowcases/value/ValueTypeGenTemplateTest.java
 
b/tooling/metaprog/src/test/java/org/apache/isis/tooling/metaprog/demoshowcases/value/ValueTypeGenTemplateTest.java
index 0fa698f200..fe9f31de5a 100644
--- 
a/tooling/metaprog/src/test/java/org/apache/isis/tooling/metaprog/demoshowcases/value/ValueTypeGenTemplateTest.java
+++ 
b/tooling/metaprog/src/test/java/org/apache/isis/tooling/metaprog/demoshowcases/value/ValueTypeGenTemplateTest.java
@@ -9,6 +9,7 @@ import java.util.Objects;
 import java.util.Set;
 
 import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.Disabled;
 import org.junit.jupiter.api.Test;
 
 import org.apache.isis.commons.collections.Can;
@@ -18,6 +19,7 @@ import org.apache.isis.commons.internal.collections._Sets;
 import org.apache.isis.commons.internal.functions._Predicates;
 import 
org.apache.isis.tooling.metaprog.demoshowcases.value.ValueTypeGenTemplate.Config;
 import 
org.apache.isis.tooling.metaprog.demoshowcases.value.ValueTypeGenTemplate.Config.ConfigBuilder;
+import 
org.apache.isis.tooling.metaprog.demoshowcases.value.ValueTypeGenTemplate.Template;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.fail;
@@ -57,6 +59,24 @@ class ValueTypeGenTemplateTest {
         testShowcase(config);
     }
 
+    @Test @Disabled("WIP")
+    void testPLong() throws IOException {
+
+        val config = fundamentalTypeSupportNotice()
+                .outputRootDir(outputDir("plong"))
+                .showcaseName("PrimitiveLong")
+                .javaPackage("demoapp.dom.types.primitive.longs")
+                .showcaseValueType("long")
+                
.showcaseValueSemantics("org.apache.isis.core.metamodel.valuesemantics.LongValueSemantics")
+                .templatePredicate(template->
+                    template != 
Template.HOLDER_UPDATE_READONLY_OPTIONAL_PROPERTY
+                    && template != Template.HOLDER_ACTION_RETURNING_COLLECTION
+                    && template != Template.SAMPLES)
+                .build();
+
+        testShowcase(config);
+    }
+
     @Test
     void testWInt() throws IOException {
 
@@ -178,7 +198,7 @@ class ValueTypeGenTemplateTest {
 
     }
 
-    static boolean PERSIST = false;
+    static boolean PERSIST = true;
     static File outputRootDir;
 
     @BeforeAll
@@ -237,7 +257,7 @@ class ValueTypeGenTemplateTest {
     }
 
     private String normalizeForComparision(final String line) {
-        return line.replace("java.lang.Long", "Long");
+        return line;//.replace("java.lang.Long", "Long");
     }
 
     private String firstLineNotEqual(final Can<String> linesA, final 
Can<String> linesB) {

Reply via email to