You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by ah...@apache.org on 2022/08/16 12:52:06 UTC
[isis] branch master updated: ISIS-3123: templates: add generatedFileNotice
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 c2a2934f77 ISIS-3123: templates: add generatedFileNotice
c2a2934f77 is described below
commit c2a2934f773f8205d6b626584fa78c0f4a41c33f
Author: andi-huber <ah...@apache.org>
AuthorDate: Tue Aug 16 14:51:58 2022 +0200
ISIS-3123: templates: add generatedFileNotice
---
.../demoshowcases/value/ValueTypeGenTemplate.java | 58 ++++++++++++++++++----
tooling/metaprog/src/main/resources/Templates.java | 1 +
.../src/main/resources/holder/TemplateHolder.java | 1 +
.../src/main/resources/holder/TemplateHolder2.java | 1 +
.../holder/TemplateHolder_actionReturning.java | 2 +-
.../TemplateHolder_actionReturningCollection.java | 2 +-
.../holder/TemplateHolder_mixinProperty.java | 2 +-
...plateHolder_updateReadOnlyOptionalProperty.java | 1 +
.../TemplateHolder_updateReadOnlyProperty.java | 1 +
...teHolder_updateReadOnlyPropertyWithChoices.java | 1 +
.../src/main/resources/jdo/TemplateJdo.java | 1 +
.../main/resources/jdo/TemplateJdoEntities.java | 1 +
.../src/main/resources/jpa/TemplateJpa.java | 1 +
.../main/resources/jpa/TemplateJpaEntities.java | 1 +
.../main/resources/persistence/TemplateEntity.java | 1 +
.../resources/persistence/TemplateSeeding.java | 1 +
.../main/resources/samples/TemplateSamples.java | 1 +
.../metaprog/src/main/resources/vm/TemplateVm.java | 1 +
.../value/ValueTypeGenTemplateTest.java | 42 +++++++++++-----
19 files changed, 95 insertions(+), 25 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 cc06eff6f0..33be5d8987 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
@@ -43,16 +43,39 @@ public class ValueTypeGenTemplate {
public static class Config {
final File outputRootDir;
final String showcaseName;
+ final String showcaseValueType;
+ final String showcaseValueSemantics;
final String javaPackage;
- @Singular final Map<String, String> templateVariables = new HashMap<>();
+ final boolean suppressGeneratedFileNotice;
+ @Builder.Default
+ final String generatedFileNotice = "This file was generated by the showcase generator (tooling). Do NOT edit!";
+ @Singular
+ final Map<String, String> templateVariables = new HashMap<>();
}
@RequiredArgsConstructor
enum Generator {
- DOC(".adoc"),
- JAVA(".java"),
- LAYOUT(".layout.xml");
+ DOC(".adoc"){
+ @Override String formatAsComment(final String text) {
+ return "//// " + text + " ////"; }
+ @Override String formatAsTemplateVar(final String text) {
+ return "////${" + text + "}////"; }
+ },
+ JAVA(".java"){
+ @Override String formatAsComment(final String text) {
+ return "/* " + text + " */"; }
+ @Override String formatAsTemplateVar(final String text) {
+ return "/*${" + text + "}*/"; }
+ },
+ LAYOUT(".layout.xml"){
+ @Override String formatAsComment(final String text) {
+ return "<!-- " + text + " -->"; }
+ @Override String formatAsTemplateVar(final String text) {
+ return "<!--${" + text + "}-->"; }
+ };
final String fileSuffix;
+ abstract String formatAsComment(String text);
+ abstract String formatAsTemplateVar(String key);
}
@RequiredArgsConstructor
@@ -108,6 +131,20 @@ public class ValueTypeGenTemplate {
}
}
+ @RequiredArgsConstructor
+ static class TemplateVars extends HashMap<String, String> {
+ private static final long serialVersionUID = 1L;
+ private final Generator generator;
+ @Override
+ public String put(final String key, final String value) {
+ return super.put(generator.formatAsTemplateVar(key), value);
+ }
+ @Override
+ public void putAll(final Map<? extends String, ? extends String> other) {
+ other.forEach((key, value)->put(key, value));
+ }
+ }
+
final Config config;
public void generate(final Consumer<File> onSourceGenerated) {
@@ -119,13 +156,16 @@ public class ValueTypeGenTemplate {
val genTarget = source.file(config);
- val templateVars = new HashMap<String, String>();
+ val templateVars = new TemplateVars(source.generator);
templateVars.putAll(config.templateVariables);
templateVars.put("java-package", source.javaPackage(config));
templateVars.put("showcase-name", config.showcaseName);
- templateVars.put("showcase-type", "java.util.UUID");
- templateVars.put("showcase-value-semantics-provider",
- "org.apache.isis.core.metamodel.valuesemantics.UUIDValueSemantics");
+ templateVars.put("showcase-type", config.showcaseValueType);
+ templateVars.put("showcase-value-semantics-provider", config.showcaseValueSemantics);
+
+ templateVars.put("before-class-declaration", config.suppressGeneratedFileNotice
+ ? ""
+ : source.generator.formatAsComment(config.generatedFileNotice));
generateFromTemplate(templateVars, template, genTarget);
onSourceGenerated.accept(genTarget);
@@ -147,7 +187,7 @@ public class ValueTypeGenTemplate {
private String templateProcessor(final Map<String, String> templateVars, final String line) {
val lineRef = _Refs.stringRef(line);
templateVars.forEach((key, value)->{
- lineRef.update(s->s.replace("/*${" + key + "}*/", value));
+ lineRef.update(s->s.replace(key, value));
});
return lineRef.getValue();
}
diff --git a/tooling/metaprog/src/main/resources/Templates.java b/tooling/metaprog/src/main/resources/Templates.java
index 54103e0347..aaeb33773f 100644
--- a/tooling/metaprog/src/main/resources/Templates.java
+++ b/tooling/metaprog/src/main/resources/Templates.java
@@ -45,6 +45,7 @@ import demoapp.dom.types.Samples;
import demoapp.dom.types.javautil.uuids.persistence./*${showcase-name}*/Entity;
import demoapp.dom.types.javautil.uuids.vm./*${showcase-name}*/Vm;
+/*${before-class-declaration}*/
@XmlRootElement(name = "Demo")
@XmlType
@XmlAccessorType(XmlAccessType.FIELD)
diff --git a/tooling/metaprog/src/main/resources/holder/TemplateHolder.java b/tooling/metaprog/src/main/resources/holder/TemplateHolder.java
index 43b39f954e..5f6ab82f77 100644
--- a/tooling/metaprog/src/main/resources/holder/TemplateHolder.java
+++ b/tooling/metaprog/src/main/resources/holder/TemplateHolder.java
@@ -20,6 +20,7 @@ package /*${java-package}*/;
import javax.inject.Named;
+/*${before-class-declaration}*/
@Named("demo./*${showcase-name}*/Holder")
//tag::class[]
public interface /*${showcase-name}*/Holder {
diff --git a/tooling/metaprog/src/main/resources/holder/TemplateHolder2.java b/tooling/metaprog/src/main/resources/holder/TemplateHolder2.java
index 067f4b8951..78c2a51d22 100644
--- a/tooling/metaprog/src/main/resources/holder/TemplateHolder2.java
+++ b/tooling/metaprog/src/main/resources/holder/TemplateHolder2.java
@@ -23,6 +23,7 @@ import org.apache.isis.applib.annotation.Property;
import org.apache.isis.applib.annotation.PropertyLayout;
import org.apache.isis.applib.annotation.Where;
+/*${before-class-declaration}*/
//tag::class[]
public interface /*${showcase-name}*/Holder2 extends /*${showcase-name}*/Holder {
diff --git a/tooling/metaprog/src/main/resources/holder/TemplateHolder_actionReturning.java b/tooling/metaprog/src/main/resources/holder/TemplateHolder_actionReturning.java
index 8b2ad29136..a40291a31e 100644
--- a/tooling/metaprog/src/main/resources/holder/TemplateHolder_actionReturning.java
+++ b/tooling/metaprog/src/main/resources/holder/TemplateHolder_actionReturning.java
@@ -23,7 +23,7 @@ import org.apache.isis.applib.annotation.SemanticsOf;
import lombok.RequiredArgsConstructor;
-
+/*${before-class-declaration}*/
//tag::class[]
@Action(semantics = SemanticsOf.SAFE)
@RequiredArgsConstructor
diff --git a/tooling/metaprog/src/main/resources/holder/TemplateHolder_actionReturningCollection.java b/tooling/metaprog/src/main/resources/holder/TemplateHolder_actionReturningCollection.java
index 2c76bde3d9..ae37fe1bc8 100644
--- a/tooling/metaprog/src/main/resources/holder/TemplateHolder_actionReturningCollection.java
+++ b/tooling/metaprog/src/main/resources/holder/TemplateHolder_actionReturningCollection.java
@@ -29,7 +29,7 @@ import org.apache.isis.applib.annotation.SemanticsOf;
import demoapp.dom.types.Samples;
import lombok.RequiredArgsConstructor;
-
+/*${before-class-declaration}*/
//tag::class[]
@Action(semantics = SemanticsOf.SAFE)
@RequiredArgsConstructor
diff --git a/tooling/metaprog/src/main/resources/holder/TemplateHolder_mixinProperty.java b/tooling/metaprog/src/main/resources/holder/TemplateHolder_mixinProperty.java
index 4f0accfcec..20a177e73a 100644
--- a/tooling/metaprog/src/main/resources/holder/TemplateHolder_mixinProperty.java
+++ b/tooling/metaprog/src/main/resources/holder/TemplateHolder_mixinProperty.java
@@ -24,7 +24,7 @@ import org.apache.isis.applib.annotation.Where;
import lombok.RequiredArgsConstructor;
-
+/*${before-class-declaration}*/
//tag::class[]
@Property()
@PropertyLayout(hidden = Where.ALL_TABLES, fieldSetId = "contributed", sequence = "1")
diff --git a/tooling/metaprog/src/main/resources/holder/TemplateHolder_updateReadOnlyOptionalProperty.java b/tooling/metaprog/src/main/resources/holder/TemplateHolder_updateReadOnlyOptionalProperty.java
index 03501c85e3..5040ccb107 100644
--- a/tooling/metaprog/src/main/resources/holder/TemplateHolder_updateReadOnlyOptionalProperty.java
+++ b/tooling/metaprog/src/main/resources/holder/TemplateHolder_updateReadOnlyOptionalProperty.java
@@ -28,6 +28,7 @@ import org.apache.isis.applib.annotation.SemanticsOf;
import lombok.RequiredArgsConstructor;
+/*${before-class-declaration}*/
//tag::class[]
@Action(
semantics = SemanticsOf.IDEMPOTENT
diff --git a/tooling/metaprog/src/main/resources/holder/TemplateHolder_updateReadOnlyProperty.java b/tooling/metaprog/src/main/resources/holder/TemplateHolder_updateReadOnlyProperty.java
index e356ec28fa..4854912adb 100644
--- a/tooling/metaprog/src/main/resources/holder/TemplateHolder_updateReadOnlyProperty.java
+++ b/tooling/metaprog/src/main/resources/holder/TemplateHolder_updateReadOnlyProperty.java
@@ -26,6 +26,7 @@ import org.apache.isis.applib.annotation.SemanticsOf;
import lombok.RequiredArgsConstructor;
+/*${before-class-declaration}*/
//tag::class[]
@Action(
semantics = SemanticsOf.IDEMPOTENT
diff --git a/tooling/metaprog/src/main/resources/holder/TemplateHolder_updateReadOnlyPropertyWithChoices.java b/tooling/metaprog/src/main/resources/holder/TemplateHolder_updateReadOnlyPropertyWithChoices.java
index 1fb93e843c..ca12731a4d 100644
--- a/tooling/metaprog/src/main/resources/holder/TemplateHolder_updateReadOnlyPropertyWithChoices.java
+++ b/tooling/metaprog/src/main/resources/holder/TemplateHolder_updateReadOnlyPropertyWithChoices.java
@@ -32,6 +32,7 @@ import org.apache.isis.applib.annotation.SemanticsOf;
import demoapp.dom.types.Samples;
import lombok.RequiredArgsConstructor;
+/*${before-class-declaration}*/
//tag::class[]
@Action(
semantics = SemanticsOf.IDEMPOTENT
diff --git a/tooling/metaprog/src/main/resources/jdo/TemplateJdo.java b/tooling/metaprog/src/main/resources/jdo/TemplateJdo.java
index 1ef187ebc8..8e7787ad76 100644
--- a/tooling/metaprog/src/main/resources/jdo/TemplateJdo.java
+++ b/tooling/metaprog/src/main/resources/jdo/TemplateJdo.java
@@ -39,6 +39,7 @@ import lombok.Setter;
import demoapp.dom.types.javautil.uuids.persistence./*${showcase-name}*/Entity;
+/*${before-class-declaration}*/
@Profile("demo-jdo")
//tag::class[]
@PersistenceCapable(identityType = IdentityType.DATASTORE, schema = "demo")
diff --git a/tooling/metaprog/src/main/resources/jdo/TemplateJdoEntities.java b/tooling/metaprog/src/main/resources/jdo/TemplateJdoEntities.java
index f5124655a6..08d19471e3 100644
--- a/tooling/metaprog/src/main/resources/jdo/TemplateJdoEntities.java
+++ b/tooling/metaprog/src/main/resources/jdo/TemplateJdoEntities.java
@@ -23,6 +23,7 @@ import org.springframework.stereotype.Service;
import demoapp.dom._infra.values.ValueHolderRepository;
+/*${before-class-declaration}*/
@Profile("demo-jdo")
@Service
public class /*${showcase-name}*/JdoEntities
diff --git a/tooling/metaprog/src/main/resources/jpa/TemplateJpa.java b/tooling/metaprog/src/main/resources/jpa/TemplateJpa.java
index d1c079d1b5..c87fc4d86b 100644
--- a/tooling/metaprog/src/main/resources/jpa/TemplateJpa.java
+++ b/tooling/metaprog/src/main/resources/jpa/TemplateJpa.java
@@ -42,6 +42,7 @@ import lombok.Setter;
import demoapp.dom.types.javautil.uuids.persistence./*${showcase-name}*/Entity;
+/*${before-class-declaration}*/
@Profile("demo-jpa")
//tag::class[]
@Entity
diff --git a/tooling/metaprog/src/main/resources/jpa/TemplateJpaEntities.java b/tooling/metaprog/src/main/resources/jpa/TemplateJpaEntities.java
index a49020496c..db90e059a8 100644
--- a/tooling/metaprog/src/main/resources/jpa/TemplateJpaEntities.java
+++ b/tooling/metaprog/src/main/resources/jpa/TemplateJpaEntities.java
@@ -23,6 +23,7 @@ import org.springframework.stereotype.Service;
import demoapp.dom._infra.values.ValueHolderRepository;
+/*${before-class-declaration}*/
@Profile("demo-jpa")
@Service
public class /*${showcase-name}*/JpaEntities
diff --git a/tooling/metaprog/src/main/resources/persistence/TemplateEntity.java b/tooling/metaprog/src/main/resources/persistence/TemplateEntity.java
index aa3c175a47..c7b05ae8c4 100644
--- a/tooling/metaprog/src/main/resources/persistence/TemplateEntity.java
+++ b/tooling/metaprog/src/main/resources/persistence/TemplateEntity.java
@@ -26,6 +26,7 @@ import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
import demoapp.dom._infra.values.ValueHolder;
import demoapp.dom.types.javautil.uuids.holder./*${showcase-name}*/Holder2;
+/*${before-class-declaration}*/
@Named("demo./*${showcase-name}*/Entity") // shared permissions with concrete sub class
@DomainObject
public abstract class /*${showcase-name}*/Entity
diff --git a/tooling/metaprog/src/main/resources/persistence/TemplateSeeding.java b/tooling/metaprog/src/main/resources/persistence/TemplateSeeding.java
index a278021e18..2f7d123c3e 100644
--- a/tooling/metaprog/src/main/resources/persistence/TemplateSeeding.java
+++ b/tooling/metaprog/src/main/resources/persistence/TemplateSeeding.java
@@ -25,6 +25,7 @@ import org.springframework.stereotype.Service;
import demoapp.dom._infra.seed.SeedServiceAbstract;
import demoapp.dom._infra.values.ValueHolderRepository;
+/*${before-class-declaration}*/
@Service
public class /*${showcase-name}*/Seeding
extends SeedServiceAbstract {
diff --git a/tooling/metaprog/src/main/resources/samples/TemplateSamples.java b/tooling/metaprog/src/main/resources/samples/TemplateSamples.java
index 492a6e4fce..d97f99905d 100644
--- a/tooling/metaprog/src/main/resources/samples/TemplateSamples.java
+++ b/tooling/metaprog/src/main/resources/samples/TemplateSamples.java
@@ -24,6 +24,7 @@ import org.springframework.stereotype.Service;
import demoapp.dom.types.Samples;
+/*${before-class-declaration}*/
@Service
public class /*${showcase-name}*/Samples implements Samples</*${showcase-type}*/> {
diff --git a/tooling/metaprog/src/main/resources/vm/TemplateVm.java b/tooling/metaprog/src/main/resources/vm/TemplateVm.java
index fa151a3f71..681aff5424 100644
--- a/tooling/metaprog/src/main/resources/vm/TemplateVm.java
+++ b/tooling/metaprog/src/main/resources/vm/TemplateVm.java
@@ -39,6 +39,7 @@ import lombok.Setter;
import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
import demoapp.dom.types.javautil.uuids.holder./*${showcase-name}*/Holder2;
+/*${before-class-declaration}*/
//tag::class[]
@XmlRootElement(name = "root")
@XmlType
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 a9b2a55302..f9536aa0c3 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
@@ -47,6 +47,9 @@ class ValueTypeGenTemplateTest {
.outputRootDir(outputRootDir)
.showcaseName("JavaUtilUuid")
.javaPackage("demoapp.dom.types.javautil.uuids")
+ .showcaseValueType("java.util.UUID")
+ .showcaseValueSemantics("org.apache.isis.core.metamodel.valuesemantics.UUIDValueSemantics")
+ .suppressGeneratedFileNotice(true)
.build());
val generatedFiles = _Sets.<File>newLinkedHashSet();
@@ -77,24 +80,37 @@ class ValueTypeGenTemplateTest {
val sortedA = Can.ofCollection(filesA).sorted(Comparator.naturalOrder());
val sortedB = Can.ofCollection(filesB).sorted(Comparator.naturalOrder());
- val failedFiles = sortedA
- .zipMap(sortedB, (a, b)->
- Objects.equals(
- _Text.readLinesFromFile(a, StandardCharsets.UTF_8),
- _Text.readLinesFromFile(b, StandardCharsets.UTF_8))
- ? null
- : b)
- .map(failedFile->failedFile.getName());
+ val failedFileComparisons = sortedA
+ .zipMap(sortedB, (a, b)->{
+
+ var linesA = _Text.normalize(
+ _Text.readLinesFromFile(a, StandardCharsets.UTF_8));
+ var linesB = _Text.normalize(
+ _Text.readLinesFromFile(b, StandardCharsets.UTF_8));
+ return Objects.equals(linesA, linesB)
+ ? null
+ : String.format("non equal line in file %s: %s",
+ a.getName(),
+ firstLineNotEqual(linesA, linesB));
+ });
- failedFiles.forEach(failedFile->{
- System.err.printf("failed comparision: %s%n", failedFile);
- });
+ failedFileComparisons.forEach(msg->System.err.printf("%s%n", msg));
- if(failedFiles.isNotEmpty()) {
- fail(String.format("some file contents are not equal %s", failedFiles));
+ if(failedFileComparisons.isNotEmpty()) {
+ fail(String.format("some file contents are not equal %s", failedFileComparisons));
}
+ }
+ private String firstLineNotEqual(final Can<String> linesA, final Can<String> linesB) {
+ int lineIndex = 0;
+ for(val lineA : linesA) {
+ val lineB = linesB.get(lineIndex++).orElse(null);
+ if(!lineA.equals(lineB)) {
+ return String.format("%s <-> %s", lineA, lineB);
+ }
+ }
+ return "";
}
}