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) {