You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@causeway.apache.org by ah...@apache.org on 2026/04/13 16:47:07 UTC
(causeway-app-referenceapp) branch master updated: rewrites codegen as CLI
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/causeway-app-referenceapp.git
The following commit(s) were added to refs/heads/master by this push:
new de6d383 rewrites codegen as CLI
de6d383 is described below
commit de6d3839e431a96945f6bbf2a2ebefa17c6c3697
Author: andi-huber <ah...@apache.org>
AuthorDate: Mon Apr 13 18:46:57 2026 +0200
rewrites codegen as CLI
---
codegen/pom.xml | 14 --
.../main/java/demoapp/codegen/DemoCodegenCli.java | 66 +++++++
codegen/src/main/java/demoapp/codegen/Emitter.java | 48 +++++
.../src/main/java/demoapp/codegen/NamedPath.java | 206 +++++++++++++++++++++
.../main/java/demoapp/codegen/ResourceFolder.java | 114 ++++++++++++
.../codegen/demoshowcases/value/ValueShowCase.java | 83 +++++----
.../demoshowcases/value/ValueTypeGenTemplate.java | 15 +-
codegen/src/main/resources/$Templates.java | 8 +-
.../src/main/resources/$Templates~primitive.java | 8 +-
.../src/main/resources/holder/$TemplateHolder.java | 3 +
.../main/resources/holder/$TemplateHolder2.java | 4 +
.../holder/$TemplateHolder2~primitive.java | 4 +
.../holder/$TemplateHolder_actionReturning.java | 4 +
.../$TemplateHolder_actionReturningArray.java | 3 +
...plateHolder_actionReturningArray~primitive.java | 3 +
.../$TemplateHolder_actionReturningCollection.java | 3 +
...Holder_actionReturningCollection~primitive.java | 3 +
.../$TemplateHolder_actionReturning~primitive.java | 4 +
.../holder/$TemplateHolder_mixinProperty.java | 4 +
.../$TemplateHolder_mixinProperty~primitive.java | 4 +
...plateHolder_updateReadOnlyOptionalProperty.java | 4 +
..._updateReadOnlyOptionalPropertyWithChoices.java | 3 +
.../$TemplateHolder_updateReadOnlyProperty.java | 4 +
...teHolder_updateReadOnlyPropertyWithChoices.java | 3 +
...pdateReadOnlyPropertyWithChoices~primitive.java | 3 +
...ateHolder_updateReadOnlyProperty~primitive.java | 4 +
.../holder/$TemplateHolder~primitive.java | 3 +
codegen/src/main/resources/jpa/$TemplateJpa.java | 7 +-
.../main/resources/jpa/$TemplateJpaEntities.java | 4 +
.../jpa/$TemplateJpaEntities~primitive.java | 4 +
.../src/main/resources/jpa/$TemplateJpa~lob.java | 7 +-
.../main/resources/jpa/$TemplateJpa~primitive.java | 7 +-
.../resources/persistence/$TemplateEntity.java | 8 +-
.../persistence/$TemplateEntity~primitive.java | 7 +-
.../resources/persistence/$TemplateSeeding.java | 6 +-
.../persistence/$TemplateSeeding~primitive.java | 5 +-
.../main/resources/samples/$TemplateSamples.java | 6 +-
.../samples/$TemplateSamples~primitive.java | 5 +-
codegen/src/main/resources/vm/$TemplateVm.java | 10 +-
.../main/resources/vm/$TemplateVm~primitive.java | 9 +-
.../value/ValueTypeGenTemplateTest.java | 186 -------------------
.../src/test/resources/junit-platform.properties | 37 ----
codegen/src/test/resources/log4j2-test.xml | 56 ------
43 files changed, 613 insertions(+), 376 deletions(-)
diff --git a/codegen/pom.xml b/codegen/pom.xml
index 562a444..5e086f8 100644
--- a/codegen/pom.xml
+++ b/codegen/pom.xml
@@ -56,20 +56,6 @@
<version>${javapoet.version}</version>
</dependency>
- <dependency>
- <groupId>org.apache.logging.log4j</groupId>
- <artifactId>log4j-core</artifactId>
- <scope>test</scope>
- </dependency>
-
- <!-- TESTING -->
-
- <dependency>
- <groupId>org.apache.causeway.core</groupId>
- <artifactId>causeway-core-internaltestsupport</artifactId>
- <scope>test</scope>
- </dependency>
-
</dependencies>
</project>
diff --git a/codegen/src/main/java/demoapp/codegen/DemoCodegenCli.java b/codegen/src/main/java/demoapp/codegen/DemoCodegenCli.java
new file mode 100644
index 0000000..310a7ed
--- /dev/null
+++ b/codegen/src/main/java/demoapp/codegen/DemoCodegenCli.java
@@ -0,0 +1,66 @@
+/*
+ * 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.codegen;
+
+import java.util.HashMap;
+
+import org.apache.causeway.commons.collections.Can;
+import org.apache.causeway.commons.internal.base._Strings;
+
+import demoapp.codegen.demoshowcases.value.ValueShowCase;
+
+public class DemoCodegenCli {
+
+ public static void main(final String[] args) {
+ var argsModel = ArgsModel.parse(args);
+ new Emitter(argsModel.projectRoot).emit(ValueShowCase.WSHORT);
+ }
+
+ // -- HELPER
+
+ private record ArgsModel(ResourceFolder projectRoot) {
+
+ static ArgsModel parse(final String[] args) {
+ if(args.length==0) {
+ printUsageAndExit();
+ return null;
+ }
+ var map = new HashMap<String, ResourceFolder>();
+ Can.ofArray(args).stream()
+ .map(kv->_Strings.parseKeyValuePair(kv, '=').orElseThrow())
+ .forEach(kvp->map.put(kvp.key(), ResourceFolder.ofFileName(kvp.value()) ));
+ var projectRoot = map.get("projectRoot");
+ if(projectRoot==null) {
+ printUsageAndExit();
+ return null;
+ }
+ return new ArgsModel(map.get("projectRoot"));
+ }
+
+ static void printUsageAndExit() {
+ System.err.println(
+ """
+ please provide the project root directory as input parameter like e.g.
+ projectRoot=/path/to/project
+ """);
+ System.exit(1);
+ }
+ }
+
+}
diff --git a/codegen/src/main/java/demoapp/codegen/Emitter.java b/codegen/src/main/java/demoapp/codegen/Emitter.java
new file mode 100644
index 0000000..dd08a39
--- /dev/null
+++ b/codegen/src/main/java/demoapp/codegen/Emitter.java
@@ -0,0 +1,48 @@
+package demoapp.codegen;
+
+import java.io.File;
+import java.util.LinkedHashSet;
+import java.util.stream.Stream;
+
+import org.springframework.util.Assert;
+
+import demoapp.codegen.demoshowcases.value.ValueShowCase;
+import demoapp.codegen.demoshowcases.value.ValueTypeGenTemplate;
+import demoapp.codegen.demoshowcases.value.ValueTypeGenTemplate.Config;
+
+record Emitter(ResourceFolder projectRoot) {
+
+ void emitAll() {
+ Stream.of(ValueShowCase.values())
+ .forEach(this::emit);
+ }
+
+ void emit(final ValueShowCase valueShowCase) {
+ var preconfig = valueShowCase.getConfigBuilder()
+ .build();
+ var config = valueShowCase.getConfigBuilder()
+ .outputRootDir(outputDir(preconfig))
+ .build();
+
+ var generator = new ValueTypeGenTemplate(config);
+ var generatedFiles = new LinkedHashSet<File>();
+ generator.generate(generatedFiles::add);
+
+ generatedFiles.forEach(genFile->{
+ System.out.println("generated: %s".formatted(generatedFiles));
+ });
+
+ }
+
+ // -- HELPER
+
+ private File outputDir(final Config preconfig) {
+ var targetFolder = projectRoot.relativeFile(
+ "domain/src/main/java/" + preconfig.getJavaPackage().replace('.', '/'));
+ Assert.isTrue(targetFolder.exists(), ()->"this is implemented as update only, "
+ + "package folder %s is expected to already exist"
+ .formatted(preconfig.getJavaPackage()));
+ return targetFolder;
+ }
+
+}
diff --git a/codegen/src/main/java/demoapp/codegen/NamedPath.java b/codegen/src/main/java/demoapp/codegen/NamedPath.java
new file mode 100644
index 0000000..a989950
--- /dev/null
+++ b/codegen/src/main/java/demoapp/codegen/NamedPath.java
@@ -0,0 +1,206 @@
+/*
+ * 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.codegen;
+
+import java.io.File;
+import java.io.Serializable;
+import java.util.Comparator;
+import java.util.Iterator;
+import java.util.Optional;
+import java.util.stream.Collectors;
+import java.util.stream.IntStream;
+import java.util.stream.Stream;
+
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
+
+import org.apache.causeway.commons.collections.Can;
+import org.apache.causeway.commons.internal.assertions._Assert;
+import org.apache.causeway.commons.internal.base._Strings;
+import org.apache.causeway.commons.internal.exceptions._Exceptions;
+
+/**
+ * Wraps a collection of non-null {@link String}(s) which represents the names of a (general purpose) path.
+ */
+record NamedPath(@NonNull Can<String> names) implements Iterable<String>, Serializable {
+
+ // -- FACTORIES
+
+ public static NamedPath empty() {
+ return new NamedPath(Can.empty());
+ }
+
+ public static NamedPath of(final @Nullable String ... names) {
+ return new NamedPath(Can.ofArray(names));
+ }
+
+ public static NamedPath of(final java.nio.file.@Nullable Path path) {
+ if(path==null
+ || path.getNameCount()==0)
+ return empty();
+ var normalized = path.normalize();
+ var names = IntStream.range(0, normalized.getNameCount())
+ .mapToObj(normalized::getName)
+ .map(java.nio.file.Path::toString)
+ .collect(Can.toCan());
+ return new NamedPath(names);
+ }
+
+ public static NamedPath of(final @Nullable File file) {
+ return file!=null
+ ? of(file.toPath())
+ : empty();
+ }
+
+ public static NamedPath parse(final @Nullable String stringified, final @NonNull String delimiter) {
+ return new NamedPath(parseAsCan(stringified, delimiter));
+ }
+
+ // -- CONSTRUCTOR
+
+ public NamedPath(final @Nullable Can<String> names) {
+ this.names = names != null
+ ? names.filter(_Strings::isNotEmpty)
+ : Can.empty();
+ }
+
+ // -- TRANSFORMATION
+
+ public NamedPath add(final String name) {
+ return new NamedPath(names.add(name));
+ }
+
+ public NamedPath add(final @Nullable NamedPath other) {
+ if(other==null
+ || other.isEmpty())
+ return this;
+ return new NamedPath(names.addAll(other.names()));
+ }
+
+ public Optional<NamedPath> parent() {
+ return isEmpty()
+ ? Optional.empty()
+ : Optional.of(new NamedPath(names.subCan(0, -1)));
+ }
+ public NamedPath parentElseFail() {
+ return parent().orElseThrow(()->
+ _Exceptions.unsupportedOperation("empty path has no parent"));
+ }
+
+ /**
+ * Strips all the other names from the start of this path.
+ * Assert this path starts with all names of the other, otherwise throws.
+ * @param other - nullable
+ */
+ public NamedPath toRelativePath(final @Nullable NamedPath other) {
+ if(other==null
+ || other.isEmpty())
+ return this;
+ if(this.isEmpty())
+ return other;
+ // assert this path starts with all names of the other
+ other.names().zip(this.names(), (o, t)->{
+ _Assert.assertEquals(o, t);
+ });
+ return this.nameCount() == other.nameCount()
+ ? empty()
+ : subPath(other.nameCount());
+ }
+
+ public NamedPath subPath(final int fromIndex) {
+ return new NamedPath(names.subCan(fromIndex));
+ }
+
+ public NamedPath subPath(final int fromIndex, final int toIndexExclusive) {
+ return new NamedPath(names.subCan(fromIndex, toIndexExclusive));
+ }
+
+ // -- SHORTCUTS
+
+ public int nameCount() {
+ return names().size();
+ }
+
+ public boolean isEmpty() {
+ return names().isEmpty();
+ }
+
+ public String getName(final int index) {
+ return names().getElseFail(index);
+ }
+
+ public Optional<String> lastName() {
+ return names().getLast();
+ }
+
+ public String lastNameElseFail() {
+ return names().getLastElseFail();
+ }
+
+ public Stream<String> streamNames() {
+ return names().stream();
+ }
+
+ @Override
+ public Iterator<String> iterator() {
+ return names().iterator();
+ }
+
+ // -- UTILITY
+
+ public String toString(final @NonNull String delimiter) {
+ return streamNames()
+ .collect(Collectors.joining(delimiter));
+ }
+
+ // -- PREDICATES
+
+ public boolean startsWith(final @Nullable NamedPath other) {
+ if(other==null
+ || other.isEmpty())
+ return true;
+ return this.names().startsWith(other.names());
+ }
+
+ // -- COMPARISON
+
+ public static Comparator<NamedPath> comparator() {
+ return comparator(String::compareTo);
+ }
+
+ public static Comparator<NamedPath> comparator(final @NonNull Comparator<String> nameComparator) {
+ return Comparator.comparingInt(NamedPath::nameCount)
+ .thenComparing((a, b)->{
+ for (int i = 0; i < a.nameCount(); i++) {
+ int c = nameComparator.compare(a.getName(i), b.getName(i));
+ if(c!=0) return c;
+ }
+ return 0;
+ });
+ }
+
+ // -- HELPER
+
+ private static Can<String> parseAsCan(final String stringified, final String delimiter) {
+ return _Strings.splitThenStream(stringified, delimiter)
+ .collect(Can.toCan());
+ }
+
+}
+
diff --git a/codegen/src/main/java/demoapp/codegen/ResourceFolder.java b/codegen/src/main/java/demoapp/codegen/ResourceFolder.java
new file mode 100644
index 0000000..36e89ce
--- /dev/null
+++ b/codegen/src/main/java/demoapp/codegen/ResourceFolder.java
@@ -0,0 +1,114 @@
+/*
+ * 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.codegen;
+
+import java.io.File;
+import java.util.Optional;
+import java.util.function.Predicate;
+import java.util.stream.Stream;
+
+import org.jspecify.annotations.NonNull;
+
+import org.apache.causeway.commons.internal.base._NullSafe;
+import org.apache.causeway.commons.internal.exceptions._Exceptions;
+import org.apache.causeway.commons.internal.functions._Predicates;
+import org.apache.causeway.commons.io.FileUtils;
+
+import lombok.SneakyThrows;
+
+record ResourceFolder(File root) {
+
+ // -- FACTORIES
+
+ public static ResourceFolder projectRoot() {
+ return new ResourceFolder(new File("").getAbsoluteFile());
+ }
+ public static ResourceFolder resourceRoot() {
+ return new ResourceFolder(projectRoot().relativeFile("src/main/resources"));
+ }
+ public static ResourceFolder testResourceRoot() {
+ return new ResourceFolder(projectRoot().relativeFile("src/test/resources"));
+ }
+ public static ResourceFolder moduleRoot(final Class<?> anyClassInModule) {
+ int nesting = 3 + (int) anyClassInModule.getPackageName().chars().filter(c->c=='.').count();
+ var moduleRoot = new File(anyClassInModule.getResource("").getFile());
+ for (int i = 0; i < nesting; i++) {
+ moduleRoot = moduleRoot.getParentFile();
+ }
+ return new ResourceFolder(moduleRoot);
+ }
+ public static ResourceFolder testResourceRoot(final Class<?> anyClassInModule) {
+ return new ResourceFolder(moduleRoot(anyClassInModule).relativeFile("src/test/resources"));
+ }
+ public static ResourceFolder ofFileName(final String fileName) {
+ return ofFile(new File(fileName));
+ }
+ public static ResourceFolder ofFile(final File rootDir) {
+ return new ResourceFolder(FileUtils.existingDirectoryElseFail(rootDir));
+ }
+
+ // -- UTILITIES
+
+ /**
+ * Returns a (non-recursive) {@link Stream} of (immediate) sub-folder names.
+ */
+ public Stream<String> streamSubFolderNames() {
+ return _NullSafe.stream(root.listFiles())
+ .filter(File::isDirectory)
+ .map(File::getName);
+ }
+
+ public Optional<ResourceFolder> relative(final String relativeFolderName) {
+ return FileUtils.existingDirectory(relativeFile(relativeFolderName))
+ .map(ResourceFolder::ofFile);
+ }
+
+ public Optional<ResourceFolder> relative(final NamedPath relativePath) {
+ return relative(relativePath.toString("/"));
+ }
+
+ public File relativeFile(final String relativeFileName) {
+ return new File(root, relativeFileName);
+ }
+
+ public File relativeFile(final String relativeFileNameTemplate, final String arg) {
+ return new File(root, String.format(relativeFileNameTemplate, arg));
+ }
+
+ public File relativeFile(final NamedPath relativePath) {
+ return new File(root, relativePath.toString("/"));
+ }
+
+ public ResourceFolder makeDir(final NamedPath relativePath) {
+ FileUtils.makeDir(relativeFile(relativePath));
+ return relative(relativePath).orElseThrow(()->
+ _Exceptions.illegalState("failed to mkdir %s", relativePath));
+ }
+
+ @SneakyThrows
+ public void purgeFiles() {
+ purgeFiles(file->false);
+ }
+
+ @SneakyThrows
+ public void purgeFiles(final @NonNull Predicate<File> keep) {
+ FileUtils.searchFiles(root, dir->true, _Predicates.not(keep), FileUtils::deleteFile);
+ }
+
+}
diff --git a/codegen/src/main/java/demoapp/codegen/demoshowcases/value/ValueShowCase.java b/codegen/src/main/java/demoapp/codegen/demoshowcases/value/ValueShowCase.java
index 258fbda..4d7b154 100644
--- a/codegen/src/main/java/demoapp/codegen/demoshowcases/value/ValueShowCase.java
+++ b/codegen/src/main/java/demoapp/codegen/demoshowcases/value/ValueShowCase.java
@@ -82,7 +82,7 @@ public enum ValueShowCase {
// .templateVariant(TemplateVariant.DEFAULT)),
CALENDAREVENT(Config.builder()
.showcaseName("CausewayCalendarEvent")
- .javaPackage("demoapp.dom.types.causewayext.cal")
+ .javaPackage("demoapp.dom.featured.causewayext.cal")
.showcaseValueFullyQualifiedType("org.apache.causeway.extensions.fullcalendar.applib.value.CalendarEvent")
.showcaseValueSemantics("org.apache.causeway.extensions.fullcalendar.applib.value.CalendarEventSemantics")
.preamble(
@@ -208,46 +208,47 @@ public enum ValueShowCase {
.frameworkSupportForJaxb(true)
.templateVariant(TemplateVariant.DEFAULT)
),
- JODADATETIME(Config.builder()
- .showcaseName("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.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.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.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)
- ),
+//no longer supported
+// JODADATETIME(Config.builder()
+// .showcaseName("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.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.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.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()
.showcaseName("CausewayMarkup")
.javaPackage("demoapp.dom.types.causeway.markups")
diff --git a/codegen/src/main/java/demoapp/codegen/demoshowcases/value/ValueTypeGenTemplate.java b/codegen/src/main/java/demoapp/codegen/demoshowcases/value/ValueTypeGenTemplate.java
index 6a7cfd8..892bd85 100644
--- a/codegen/src/main/java/demoapp/codegen/demoshowcases/value/ValueTypeGenTemplate.java
+++ b/codegen/src/main/java/demoapp/codegen/demoshowcases/value/ValueTypeGenTemplate.java
@@ -196,9 +196,10 @@ public class ValueTypeGenTemplate {
HOLDER_UPDATE_RO_PROPERTY_WITH_CHOICES("holder/%sHolder_updateReadOnlyPropertyWithChoices", Generator.JAVA),
HOLDER_UPDATE_ROO_PROPERTY_WITH_CHOICES("holder/%sHolder_updateReadOnlyOptionalPropertyWithChoices", Generator.JAVA),
- JDO("jdo/%sJdo", Generator.JAVA),
- JDO_ENTITIES("jdo/%sJdoEntities", Generator.JAVA),
- JDO_DESCRIPTION("jdo/%sJdo-description", Generator.DOC),
+// no longer supported
+// JDO("jdo/%sJdo", Generator.JAVA),
+// JDO_ENTITIES("jdo/%sJdoEntities", Generator.JAVA),
+// JDO_DESCRIPTION("jdo/%sJdo-description", Generator.DOC),
JPA("jpa/%sJpa", Generator.JAVA),
JPA_ENTITIES("jpa/%sJpaEntities", Generator.JAVA),
@@ -227,9 +228,11 @@ public class ValueTypeGenTemplate {
.remove(JPA)
.remove(JPA_DESCRIPTION)
.remove(JPA_ENTITIES)
- .remove(JDO)
- .remove(JDO_DESCRIPTION)
- .remove(JDO_ENTITIES);
+// no longer supported
+// .remove(JDO)
+// .remove(JDO_DESCRIPTION)
+// .remove(JDO_ENTITIES)
+ ;
public static Can<Template> NO_VIEWMODEL_SET = REGULAR_SET
.remove(VIEWMODEL)
diff --git a/codegen/src/main/resources/$Templates.java b/codegen/src/main/resources/$Templates.java
index e1c343a..30a700c 100644
--- a/codegen/src/main/resources/$Templates.java
+++ b/codegen/src/main/resources/$Templates.java
@@ -20,6 +20,7 @@ package /*${java-package}*/;
import java.util.List;
+import jakarta.annotation.Generated;
import jakarta.inject.Inject;
import jakarta.inject.Named;
import jakarta.xml.bind.annotation.XmlAccessType;
@@ -47,12 +48,13 @@ import demoapp.dom.types.Samples;
import /*${showcase-java-package}*/.persistence./*${showcase-name}*/Entity;
import /*${showcase-java-package}*/.vm./*${showcase-name}*/Vm;
+@Generated("generated by demoapp.codegen.DemoCodegenCli")
+
+@DomainObject(nature=Nature.VIEW_MODEL, editing=Editing.ENABLED)
+@Named("demo./*${showcase-name}*/s")
@XmlRootElement(name = "Demo")
@XmlType
@XmlAccessorType(XmlAccessType.FIELD)
-@Named("demo./*${showcase-name}*/s")
-@DomainObject(nature=Nature.VIEW_MODEL, editing=Editing.ENABLED)
-//@Log4j2
public class /*${showcase-name}*/s implements HasAsciiDocDescription {
@ObjectSupport public String title() {
diff --git a/codegen/src/main/resources/$Templates~primitive.java b/codegen/src/main/resources/$Templates~primitive.java
index 20feb33..2d36a7a 100644
--- a/codegen/src/main/resources/$Templates~primitive.java
+++ b/codegen/src/main/resources/$Templates~primitive.java
@@ -20,6 +20,7 @@ package /*${java-package}*/;
import java.util.List;
+import jakarta.annotation.Generated;
import jakarta.inject.Inject;
import jakarta.inject.Named;
import jakarta.xml.bind.annotation.XmlAccessType;
@@ -45,12 +46,13 @@ import demoapp.dom.types.Samples;
import /*${showcase-java-package}*/.persistence./*${showcase-name}*/Entity;
import /*${showcase-java-package}*/.vm./*${showcase-name}*/Vm;
+@Generated("generated by demoapp.codegen.DemoCodegenCli")
+
+@DomainObject(nature=Nature.VIEW_MODEL, editing=Editing.ENABLED)
+@Named("demo./*${showcase-name}*/s")
@XmlRootElement(name = "Demo")
@XmlType
@XmlAccessorType(XmlAccessType.FIELD)
-@Named("demo./*${showcase-name}*/s")
-@DomainObject(nature=Nature.VIEW_MODEL, editing=Editing.ENABLED)
-//@Log4j2
public class /*${showcase-name}*/s implements HasAsciiDocDescription {
@ObjectSupport public String title() {
diff --git a/codegen/src/main/resources/holder/$TemplateHolder.java b/codegen/src/main/resources/holder/$TemplateHolder.java
index 2cd7603..9160825 100644
--- a/codegen/src/main/resources/holder/$TemplateHolder.java
+++ b/codegen/src/main/resources/holder/$TemplateHolder.java
@@ -18,10 +18,13 @@
*/
package /*${java-package}*/;
+import jakarta.annotation.Generated;
import jakarta.inject.Named;
import /*${showcase-fully-qualified-type}*/;
+@Generated("generated by demoapp.codegen.DemoCodegenCli")
+
@Named("demo./*${showcase-name}*/Holder")
//tag::class[]
public interface /*${showcase-name}*/Holder {
diff --git a/codegen/src/main/resources/holder/$TemplateHolder2.java b/codegen/src/main/resources/holder/$TemplateHolder2.java
index 162e691..89dc6d3 100644
--- a/codegen/src/main/resources/holder/$TemplateHolder2.java
+++ b/codegen/src/main/resources/holder/$TemplateHolder2.java
@@ -18,12 +18,16 @@
*/
package /*${java-package}*/;
+import jakarta.annotation.Generated;
+
import org.apache.causeway.applib.annotation.LabelPosition;
import org.apache.causeway.applib.annotation.Property;
import org.apache.causeway.applib.annotation.PropertyLayout;
import org.apache.causeway.applib.annotation.Where;
import /*${showcase-fully-qualified-type}*/;
+@Generated("generated by demoapp.codegen.DemoCodegenCli")
+
//tag::class[]
public interface /*${showcase-name}*/Holder2 extends /*${showcase-name}*/Holder {
diff --git a/codegen/src/main/resources/holder/$TemplateHolder2~primitive.java b/codegen/src/main/resources/holder/$TemplateHolder2~primitive.java
index 1b0ab38..0b01094 100644
--- a/codegen/src/main/resources/holder/$TemplateHolder2~primitive.java
+++ b/codegen/src/main/resources/holder/$TemplateHolder2~primitive.java
@@ -18,11 +18,15 @@
*/
package /*${java-package}*/;
+import jakarta.annotation.Generated;
+
import org.apache.causeway.applib.annotation.LabelPosition;
import org.apache.causeway.applib.annotation.Property;
import org.apache.causeway.applib.annotation.PropertyLayout;
import org.apache.causeway.applib.annotation.Where;
+@Generated("generated by demoapp.codegen.DemoCodegenCli")
+
//tag::class[]
public interface /*${showcase-name}*/Holder2 extends /*${showcase-name}*/Holder {
diff --git a/codegen/src/main/resources/holder/$TemplateHolder_actionReturning.java b/codegen/src/main/resources/holder/$TemplateHolder_actionReturning.java
index 42d7882..f66c271 100644
--- a/codegen/src/main/resources/holder/$TemplateHolder_actionReturning.java
+++ b/codegen/src/main/resources/holder/$TemplateHolder_actionReturning.java
@@ -18,6 +18,8 @@
*/
package /*${java-package}*/;
+import jakarta.annotation.Generated;
+
import org.apache.causeway.applib.annotation.Action;
import org.apache.causeway.applib.annotation.SemanticsOf;
@@ -25,6 +27,8 @@ import /*${showcase-fully-qualified-type}*/;
import lombok.RequiredArgsConstructor;
+@Generated("generated by demoapp.codegen.DemoCodegenCli")
+
//tag::class[]
@Action(semantics = SemanticsOf.SAFE)
@RequiredArgsConstructor
diff --git a/codegen/src/main/resources/holder/$TemplateHolder_actionReturningArray.java b/codegen/src/main/resources/holder/$TemplateHolder_actionReturningArray.java
index 8212dfe..cca58af 100644
--- a/codegen/src/main/resources/holder/$TemplateHolder_actionReturningArray.java
+++ b/codegen/src/main/resources/holder/$TemplateHolder_actionReturningArray.java
@@ -18,6 +18,7 @@
*/
package /*${java-package}*/;
+import jakarta.annotation.Generated;
import jakarta.inject.Inject;
import org.apache.causeway.applib.annotation.Action;
@@ -30,6 +31,8 @@ import lombok.RequiredArgsConstructor;
import demoapp.dom.types.Samples;
+@Generated("generated by demoapp.codegen.DemoCodegenCli")
+
//tag::class[]
@Action(semantics = SemanticsOf.SAFE)
@RequiredArgsConstructor
diff --git a/codegen/src/main/resources/holder/$TemplateHolder_actionReturningArray~primitive.java b/codegen/src/main/resources/holder/$TemplateHolder_actionReturningArray~primitive.java
index c845415..1da534f 100644
--- a/codegen/src/main/resources/holder/$TemplateHolder_actionReturningArray~primitive.java
+++ b/codegen/src/main/resources/holder/$TemplateHolder_actionReturningArray~primitive.java
@@ -18,6 +18,7 @@
*/
package /*${java-package}*/;
+import jakarta.annotation.Generated;
import jakarta.inject.Inject;
import org.apache.causeway.applib.annotation.Action;
@@ -28,6 +29,8 @@ import lombok.RequiredArgsConstructor;
import demoapp.dom.types.Samples;
+@Generated("generated by demoapp.codegen.DemoCodegenCli")
+
//tag::class[]
@Action(semantics = SemanticsOf.SAFE)
@RequiredArgsConstructor
diff --git a/codegen/src/main/resources/holder/$TemplateHolder_actionReturningCollection.java b/codegen/src/main/resources/holder/$TemplateHolder_actionReturningCollection.java
index 26a57e8..00c36e7 100644
--- a/codegen/src/main/resources/holder/$TemplateHolder_actionReturningCollection.java
+++ b/codegen/src/main/resources/holder/$TemplateHolder_actionReturningCollection.java
@@ -21,6 +21,7 @@ package /*${java-package}*/;
import java.util.Collection;
import java.util.stream.Collectors;
+import jakarta.annotation.Generated;
import jakarta.inject.Inject;
import org.apache.causeway.applib.annotation.Action;
@@ -32,6 +33,8 @@ import lombok.RequiredArgsConstructor;
import demoapp.dom.types.Samples;
+@Generated("generated by demoapp.codegen.DemoCodegenCli")
+
//tag::class[]
@Action(semantics = SemanticsOf.SAFE)
@RequiredArgsConstructor
diff --git a/codegen/src/main/resources/holder/$TemplateHolder_actionReturningCollection~primitive.java b/codegen/src/main/resources/holder/$TemplateHolder_actionReturningCollection~primitive.java
index 908f1fb..1403a6a 100644
--- a/codegen/src/main/resources/holder/$TemplateHolder_actionReturningCollection~primitive.java
+++ b/codegen/src/main/resources/holder/$TemplateHolder_actionReturningCollection~primitive.java
@@ -21,6 +21,7 @@ package /*${java-package}*/;
import java.util.Collection;
import java.util.stream.Collectors;
+import jakarta.annotation.Generated;
import jakarta.inject.Inject;
import org.apache.causeway.applib.annotation.Action;
@@ -30,6 +31,8 @@ import lombok.RequiredArgsConstructor;
import demoapp.dom.types.Samples;
+@Generated("generated by demoapp.codegen.DemoCodegenCli")
+
//tag::class[]
@Action(semantics = SemanticsOf.SAFE)
@RequiredArgsConstructor
diff --git a/codegen/src/main/resources/holder/$TemplateHolder_actionReturning~primitive.java b/codegen/src/main/resources/holder/$TemplateHolder_actionReturning~primitive.java
index 00f048b..75542bb 100644
--- a/codegen/src/main/resources/holder/$TemplateHolder_actionReturning~primitive.java
+++ b/codegen/src/main/resources/holder/$TemplateHolder_actionReturning~primitive.java
@@ -18,11 +18,15 @@
*/
package /*${java-package}*/;
+import jakarta.annotation.Generated;
+
import org.apache.causeway.applib.annotation.Action;
import org.apache.causeway.applib.annotation.SemanticsOf;
import lombok.RequiredArgsConstructor;
+@Generated("generated by demoapp.codegen.DemoCodegenCli")
+
//tag::class[]
@Action(semantics = SemanticsOf.SAFE)
@RequiredArgsConstructor
diff --git a/codegen/src/main/resources/holder/$TemplateHolder_mixinProperty.java b/codegen/src/main/resources/holder/$TemplateHolder_mixinProperty.java
index 9cfe467..de36730 100644
--- a/codegen/src/main/resources/holder/$TemplateHolder_mixinProperty.java
+++ b/codegen/src/main/resources/holder/$TemplateHolder_mixinProperty.java
@@ -18,6 +18,8 @@
*/
package /*${java-package}*/;
+import jakarta.annotation.Generated;
+
import org.apache.causeway.applib.annotation.Property;
import org.apache.causeway.applib.annotation.PropertyLayout;
import org.apache.causeway.applib.annotation.Where;
@@ -26,6 +28,8 @@ import /*${showcase-fully-qualified-type}*/;
import lombok.RequiredArgsConstructor;
+@Generated("generated by demoapp.codegen.DemoCodegenCli")
+
//tag::class[]
@Property()
@PropertyLayout(hidden = Where.ALL_TABLES, fieldSetId = "contributed", sequence = "1")
diff --git a/codegen/src/main/resources/holder/$TemplateHolder_mixinProperty~primitive.java b/codegen/src/main/resources/holder/$TemplateHolder_mixinProperty~primitive.java
index 5679a4c..c768ba3 100644
--- a/codegen/src/main/resources/holder/$TemplateHolder_mixinProperty~primitive.java
+++ b/codegen/src/main/resources/holder/$TemplateHolder_mixinProperty~primitive.java
@@ -18,12 +18,16 @@
*/
package /*${java-package}*/;
+import jakarta.annotation.Generated;
+
import org.apache.causeway.applib.annotation.Property;
import org.apache.causeway.applib.annotation.PropertyLayout;
import org.apache.causeway.applib.annotation.Where;
import lombok.RequiredArgsConstructor;
+@Generated("generated by demoapp.codegen.DemoCodegenCli")
+
//tag::class[]
@Property()
@PropertyLayout(hidden = Where.ALL_TABLES, fieldSetId = "contributed", sequence = "1")
diff --git a/codegen/src/main/resources/holder/$TemplateHolder_updateReadOnlyOptionalProperty.java b/codegen/src/main/resources/holder/$TemplateHolder_updateReadOnlyOptionalProperty.java
index 642a42d..33cae5e 100644
--- a/codegen/src/main/resources/holder/$TemplateHolder_updateReadOnlyOptionalProperty.java
+++ b/codegen/src/main/resources/holder/$TemplateHolder_updateReadOnlyOptionalProperty.java
@@ -18,6 +18,8 @@
*/
package /*${java-package}*/;
+import jakarta.annotation.Generated;
+
import org.apache.causeway.applib.annotation.Action;
import org.apache.causeway.applib.annotation.ActionLayout;
import org.apache.causeway.applib.annotation.MemberSupport;
@@ -30,6 +32,8 @@ import /*${showcase-fully-qualified-type}*/;
import lombok.RequiredArgsConstructor;
+@Generated("generated by demoapp.codegen.DemoCodegenCli")
+
//tag::class[]
@Action(
semantics = SemanticsOf.IDEMPOTENT
diff --git a/codegen/src/main/resources/holder/$TemplateHolder_updateReadOnlyOptionalPropertyWithChoices.java b/codegen/src/main/resources/holder/$TemplateHolder_updateReadOnlyOptionalPropertyWithChoices.java
index f6d516d..6ade46a 100644
--- a/codegen/src/main/resources/holder/$TemplateHolder_updateReadOnlyOptionalPropertyWithChoices.java
+++ b/codegen/src/main/resources/holder/$TemplateHolder_updateReadOnlyOptionalPropertyWithChoices.java
@@ -21,6 +21,7 @@ package /*${java-package}*/;
import java.util.List;
import java.util.stream.Collectors;
+import jakarta.annotation.Generated;
import jakarta.inject.Inject;
import org.apache.causeway.applib.annotation.Action;
@@ -37,6 +38,8 @@ import lombok.RequiredArgsConstructor;
import demoapp.dom.types.Samples;
+@Generated("generated by demoapp.codegen.DemoCodegenCli")
+
//tag::class[]
@Action(
semantics = SemanticsOf.IDEMPOTENT
diff --git a/codegen/src/main/resources/holder/$TemplateHolder_updateReadOnlyProperty.java b/codegen/src/main/resources/holder/$TemplateHolder_updateReadOnlyProperty.java
index 6002eeb..b1ad3e0 100644
--- a/codegen/src/main/resources/holder/$TemplateHolder_updateReadOnlyProperty.java
+++ b/codegen/src/main/resources/holder/$TemplateHolder_updateReadOnlyProperty.java
@@ -18,6 +18,8 @@
*/
package /*${java-package}*/;
+import jakarta.annotation.Generated;
+
import org.apache.causeway.applib.annotation.Action;
import org.apache.causeway.applib.annotation.ActionLayout;
import org.apache.causeway.applib.annotation.MemberSupport;
@@ -28,6 +30,8 @@ import /*${showcase-fully-qualified-type}*/;
import lombok.RequiredArgsConstructor;
+@Generated("generated by demoapp.codegen.DemoCodegenCli")
+
//tag::class[]
@Action(
semantics = SemanticsOf.IDEMPOTENT
diff --git a/codegen/src/main/resources/holder/$TemplateHolder_updateReadOnlyPropertyWithChoices.java b/codegen/src/main/resources/holder/$TemplateHolder_updateReadOnlyPropertyWithChoices.java
index 04690a8..1658da2 100644
--- a/codegen/src/main/resources/holder/$TemplateHolder_updateReadOnlyPropertyWithChoices.java
+++ b/codegen/src/main/resources/holder/$TemplateHolder_updateReadOnlyPropertyWithChoices.java
@@ -21,6 +21,7 @@ package /*${java-package}*/;
import java.util.List;
import java.util.stream.Collectors;
+import jakarta.annotation.Generated;
import jakarta.inject.Inject;
import org.apache.causeway.applib.annotation.Action;
@@ -35,6 +36,8 @@ import lombok.RequiredArgsConstructor;
import demoapp.dom.types.Samples;
+@Generated("generated by demoapp.codegen.DemoCodegenCli")
+
//tag::class[]
@Action(
semantics = SemanticsOf.IDEMPOTENT
diff --git a/codegen/src/main/resources/holder/$TemplateHolder_updateReadOnlyPropertyWithChoices~primitive.java b/codegen/src/main/resources/holder/$TemplateHolder_updateReadOnlyPropertyWithChoices~primitive.java
index 9e70fac..fda0538 100644
--- a/codegen/src/main/resources/holder/$TemplateHolder_updateReadOnlyPropertyWithChoices~primitive.java
+++ b/codegen/src/main/resources/holder/$TemplateHolder_updateReadOnlyPropertyWithChoices~primitive.java
@@ -21,6 +21,7 @@ package /*${java-package}*/;
import java.util.List;
import java.util.stream.Collectors;
+import jakarta.annotation.Generated;
import jakarta.inject.Inject;
import org.apache.causeway.applib.annotation.Action;
@@ -33,6 +34,8 @@ import lombok.RequiredArgsConstructor;
import demoapp.dom.types.Samples;
+@Generated("generated by demoapp.codegen.DemoCodegenCli")
+
//tag::class[]
@Action(
semantics = SemanticsOf.IDEMPOTENT
diff --git a/codegen/src/main/resources/holder/$TemplateHolder_updateReadOnlyProperty~primitive.java b/codegen/src/main/resources/holder/$TemplateHolder_updateReadOnlyProperty~primitive.java
index ec9e1bb..59d41aa 100644
--- a/codegen/src/main/resources/holder/$TemplateHolder_updateReadOnlyProperty~primitive.java
+++ b/codegen/src/main/resources/holder/$TemplateHolder_updateReadOnlyProperty~primitive.java
@@ -18,6 +18,8 @@
*/
package /*${java-package}*/;
+import jakarta.annotation.Generated;
+
import org.apache.causeway.applib.annotation.Action;
import org.apache.causeway.applib.annotation.ActionLayout;
import org.apache.causeway.applib.annotation.MemberSupport;
@@ -26,6 +28,8 @@ import org.apache.causeway.applib.annotation.SemanticsOf;
import lombok.RequiredArgsConstructor;
+@Generated("generated by demoapp.codegen.DemoCodegenCli")
+
//tag::class[]
@Action(
semantics = SemanticsOf.IDEMPOTENT
diff --git a/codegen/src/main/resources/holder/$TemplateHolder~primitive.java b/codegen/src/main/resources/holder/$TemplateHolder~primitive.java
index 04e0b40..ab3542d 100644
--- a/codegen/src/main/resources/holder/$TemplateHolder~primitive.java
+++ b/codegen/src/main/resources/holder/$TemplateHolder~primitive.java
@@ -18,8 +18,11 @@
*/
package /*${java-package}*/;
+import jakarta.annotation.Generated;
import jakarta.inject.Named;
+@Generated("generated by demoapp.codegen.DemoCodegenCli")
+
@Named("demo./*${showcase-name}*/Holder")
//tag::class[]
public interface /*${showcase-name}*/Holder {
diff --git a/codegen/src/main/resources/jpa/$TemplateJpa.java b/codegen/src/main/resources/jpa/$TemplateJpa.java
index 41c5baa..618049d 100644
--- a/codegen/src/main/resources/jpa/$TemplateJpa.java
+++ b/codegen/src/main/resources/jpa/$TemplateJpa.java
@@ -18,6 +18,7 @@
*/
package /*${java-package}*/;
+import jakarta.annotation.Generated;
import jakarta.inject.Named;
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
@@ -44,16 +45,18 @@ import lombok.Setter;
import /*${showcase-java-package}*/.persistence./*${showcase-name}*/Entity;
+@Generated("generated by demoapp.codegen.DemoCodegenCli")
+
@Profile("demo-jpa")
//tag::class[]
+@DomainObject
+@Named("demo./*${showcase-name}*/Entity")
@Entity
@Table(
schema = "demo",
name = "/*${showcase-name}*/Jpa"
)
@EntityListeners(CausewayEntityListener.class)
-@Named("demo./*${showcase-name}*/Entity")
-@DomainObject
@NoArgsConstructor // <.>
public class /*${showcase-name}*/Jpa
extends /*${showcase-name}*/Entity {
diff --git a/codegen/src/main/resources/jpa/$TemplateJpaEntities.java b/codegen/src/main/resources/jpa/$TemplateJpaEntities.java
index b33f959..3c1f399 100644
--- a/codegen/src/main/resources/jpa/$TemplateJpaEntities.java
+++ b/codegen/src/main/resources/jpa/$TemplateJpaEntities.java
@@ -18,6 +18,8 @@
*/
package /*${java-package}*/;
+import jakarta.annotation.Generated;
+
import org.springframework.context.annotation.Profile;
import org.springframework.stereotype.Service;
@@ -25,6 +27,8 @@ import /*${showcase-fully-qualified-type}*/;
import demoapp.dom._infra.values.ValueHolderRepository;
+@Generated("generated by demoapp.codegen.DemoCodegenCli")
+
@Profile("demo-jpa")
@Service
public class /*${showcase-name}*/JpaEntities
diff --git a/codegen/src/main/resources/jpa/$TemplateJpaEntities~primitive.java b/codegen/src/main/resources/jpa/$TemplateJpaEntities~primitive.java
index 016b69e..33b68ce 100644
--- a/codegen/src/main/resources/jpa/$TemplateJpaEntities~primitive.java
+++ b/codegen/src/main/resources/jpa/$TemplateJpaEntities~primitive.java
@@ -18,11 +18,15 @@
*/
package /*${java-package}*/;
+import jakarta.annotation.Generated;
+
import org.springframework.context.annotation.Profile;
import org.springframework.stereotype.Service;
import demoapp.dom._infra.values.ValueHolderRepository;
+@Generated("generated by demoapp.codegen.DemoCodegenCli")
+
@Profile("demo-jpa")
@Service
public class /*${showcase-name}*/JpaEntities
diff --git a/codegen/src/main/resources/jpa/$TemplateJpa~lob.java b/codegen/src/main/resources/jpa/$TemplateJpa~lob.java
index fc4b362..74594ce 100644
--- a/codegen/src/main/resources/jpa/$TemplateJpa~lob.java
+++ b/codegen/src/main/resources/jpa/$TemplateJpa~lob.java
@@ -18,6 +18,7 @@
*/
package /*${java-package}*/;
+import jakarta.annotation.Generated;
import jakarta.inject.Named;
import jakarta.persistence.Basic;
import jakarta.persistence.Column;
@@ -48,16 +49,18 @@ import lombok.Setter;
import /*${showcase-java-package}*/.persistence./*${showcase-name}*/Entity;
+@Generated("generated by demoapp.codegen.DemoCodegenCli")
+
@Profile("demo-jpa")
//tag::class[]
+@DomainObject
+@Named("demo./*${showcase-name}*/Entity")
@Entity
@Table(
schema = "demo",
name = "/*${showcase-name}*/Jpa"
)
@EntityListeners(CausewayEntityListener.class)
-@Named("demo./*${showcase-name}*/Entity")
-@DomainObject
@NoArgsConstructor // <.>
public class /*${showcase-name}*/Jpa
extends /*${showcase-name}*/Entity {
diff --git a/codegen/src/main/resources/jpa/$TemplateJpa~primitive.java b/codegen/src/main/resources/jpa/$TemplateJpa~primitive.java
index 3e03b91..798ebd0 100644
--- a/codegen/src/main/resources/jpa/$TemplateJpa~primitive.java
+++ b/codegen/src/main/resources/jpa/$TemplateJpa~primitive.java
@@ -18,6 +18,7 @@
*/
package /*${java-package}*/;
+import jakarta.annotation.Generated;
import jakarta.inject.Named;
import jakarta.persistence.Entity;
import jakarta.persistence.EntityListeners;
@@ -40,16 +41,18 @@ import lombok.Setter;
import /*${showcase-java-package}*/.persistence./*${showcase-name}*/Entity;
+@Generated("generated by demoapp.codegen.DemoCodegenCli")
+
@Profile("demo-jpa")
//tag::class[]
+@DomainObject
+@Named("demo./*${showcase-name}*/Entity")
@Entity
@Table(
schema = "demo",
name = "/*${showcase-name}*/Jpa"
)
@EntityListeners(CausewayEntityListener.class)
-@Named("demo./*${showcase-name}*/Entity")
-@DomainObject
@NoArgsConstructor // <.>
public class /*${showcase-name}*/Jpa
extends /*${showcase-name}*/Entity {
diff --git a/codegen/src/main/resources/persistence/$TemplateEntity.java b/codegen/src/main/resources/persistence/$TemplateEntity.java
index 633cb63..89037c2 100644
--- a/codegen/src/main/resources/persistence/$TemplateEntity.java
+++ b/codegen/src/main/resources/persistence/$TemplateEntity.java
@@ -18,18 +18,18 @@
*/
package /*${java-package}*/;
+import jakarta.annotation.Generated;
import jakarta.inject.Named;
-
import org.apache.causeway.applib.annotation.DomainObject;
-
import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
import demoapp.dom._infra.values.ValueHolder;
import /*${showcase-java-package}*/.holder./*${showcase-name}*/Holder2;
-
import /*${showcase-fully-qualified-type}*/;
-@Named("demo./*${showcase-name}*/Entity") // shared permissions with concrete sub class
+@Generated("generated by demoapp.codegen.DemoCodegenCli")
+
@DomainObject
+@Named("demo./*${showcase-name}*/Entity") // shared permissions with concrete sub class
public abstract class /*${showcase-name}*/Entity
implements
HasAsciiDocDescription,
diff --git a/codegen/src/main/resources/persistence/$TemplateEntity~primitive.java b/codegen/src/main/resources/persistence/$TemplateEntity~primitive.java
index 1777d85..67681ed 100644
--- a/codegen/src/main/resources/persistence/$TemplateEntity~primitive.java
+++ b/codegen/src/main/resources/persistence/$TemplateEntity~primitive.java
@@ -18,16 +18,17 @@
*/
package /*${java-package}*/;
+import jakarta.annotation.Generated;
import jakarta.inject.Named;
-
import org.apache.causeway.applib.annotation.DomainObject;
-
import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
import demoapp.dom._infra.values.ValueHolder;
import /*${showcase-java-package}*/.holder./*${showcase-name}*/Holder2;
-@Named("demo./*${showcase-name}*/Entity") // shared permissions with concrete sub class
+@Generated("generated by demoapp.codegen.DemoCodegenCli")
+
@DomainObject
+@Named("demo./*${showcase-name}*/Entity") // shared permissions with concrete sub class
public abstract class /*${showcase-name}*/Entity
implements
HasAsciiDocDescription,
diff --git a/codegen/src/main/resources/persistence/$TemplateSeeding.java b/codegen/src/main/resources/persistence/$TemplateSeeding.java
index 162ae51..07b61ee 100644
--- a/codegen/src/main/resources/persistence/$TemplateSeeding.java
+++ b/codegen/src/main/resources/persistence/$TemplateSeeding.java
@@ -18,15 +18,15 @@
*/
package /*${java-package}*/;
+import jakarta.annotation.Generated;
import jakarta.inject.Inject;
-
import org.springframework.stereotype.Service;
-
import /*${showcase-fully-qualified-type}*/;
-
import demoapp.dom._infra.seed.SeedServiceAbstract;
import demoapp.dom._infra.values.ValueHolderRepository;
+@Generated("generated by demoapp.codegen.DemoCodegenCli")
+
@Service
public class /*${showcase-name}*/Seeding
extends SeedServiceAbstract {
diff --git a/codegen/src/main/resources/persistence/$TemplateSeeding~primitive.java b/codegen/src/main/resources/persistence/$TemplateSeeding~primitive.java
index 8688b37..8882644 100644
--- a/codegen/src/main/resources/persistence/$TemplateSeeding~primitive.java
+++ b/codegen/src/main/resources/persistence/$TemplateSeeding~primitive.java
@@ -18,13 +18,14 @@
*/
package /*${java-package}*/;
+import jakarta.annotation.Generated;
import jakarta.inject.Inject;
-
import org.springframework.stereotype.Service;
-
import demoapp.dom._infra.seed.SeedServiceAbstract;
import demoapp.dom._infra.values.ValueHolderRepository;
+@Generated("generated by demoapp.codegen.DemoCodegenCli")
+
@Service
public class /*${showcase-name}*/Seeding
extends SeedServiceAbstract {
diff --git a/codegen/src/main/resources/samples/$TemplateSamples.java b/codegen/src/main/resources/samples/$TemplateSamples.java
index d8db1ce..2d1855f 100644
--- a/codegen/src/main/resources/samples/$TemplateSamples.java
+++ b/codegen/src/main/resources/samples/$TemplateSamples.java
@@ -19,13 +19,13 @@
package /*${java-package}*/;
import java.util.stream.Stream;
-
+import jakarta.annotation.Generated;
import org.springframework.stereotype.Service;
-
import /*${showcase-fully-qualified-type}*/;
-
import demoapp.dom.types.Samples;
+@Generated("generated by demoapp.codegen.DemoCodegenCli")
+
@Service
public class /*${showcase-name}*/Samples implements Samples</*${showcase-simple-type}*/> {
diff --git a/codegen/src/main/resources/samples/$TemplateSamples~primitive.java b/codegen/src/main/resources/samples/$TemplateSamples~primitive.java
index c20ae9c..30c825c 100644
--- a/codegen/src/main/resources/samples/$TemplateSamples~primitive.java
+++ b/codegen/src/main/resources/samples/$TemplateSamples~primitive.java
@@ -19,11 +19,12 @@
package /*${java-package}*/;
import java.util.stream.Stream;
-
+import jakarta.annotation.Generated;
import org.springframework.stereotype.Service;
-
import demoapp.dom.types.Samples;
+@Generated("generated by demoapp.codegen.DemoCodegenCli")
+
@Service
public class /*${showcase-name}*/Samples implements Samples</*${showcase-simple-type}*/> {
diff --git a/codegen/src/main/resources/vm/$TemplateVm.java b/codegen/src/main/resources/vm/$TemplateVm.java
index b757a00..f75aff2 100644
--- a/codegen/src/main/resources/vm/$TemplateVm.java
+++ b/codegen/src/main/resources/vm/$TemplateVm.java
@@ -18,13 +18,13 @@
*/
package /*${java-package}*/;
+import jakarta.annotation.Generated;
import jakarta.inject.Named;
import jakarta.xml.bind.annotation.XmlAccessType;
import jakarta.xml.bind.annotation.XmlAccessorType;
import jakarta.xml.bind.annotation.XmlElement;
import jakarta.xml.bind.annotation.XmlRootElement;
import jakarta.xml.bind.annotation.XmlType;
-import jakarta.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
import org.apache.causeway.applib.annotation.DomainObject;
import org.apache.causeway.applib.annotation.Editing;
@@ -42,13 +42,15 @@ import lombok.Setter;
import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
import /*${showcase-java-package}*/.holder./*${showcase-name}*/Holder2;
+@Generated("generated by demoapp.codegen.DemoCodegenCli")
+
//tag::class[]
+@DomainObject(
+ nature=Nature.VIEW_MODEL)
+@Named("demo./*${showcase-name}*/Vm")
@XmlRootElement(name = "root")
@XmlType
@XmlAccessorType(XmlAccessType.FIELD)
-@Named("demo./*${showcase-name}*/Vm")
-@DomainObject(
- nature=Nature.VIEW_MODEL)
@lombok.NoArgsConstructor // <.>
public class /*${showcase-name}*/Vm
implements HasAsciiDocDescription, /*${showcase-name}*/Holder2 {
diff --git a/codegen/src/main/resources/vm/$TemplateVm~primitive.java b/codegen/src/main/resources/vm/$TemplateVm~primitive.java
index 7c6a108..68ab3e2 100644
--- a/codegen/src/main/resources/vm/$TemplateVm~primitive.java
+++ b/codegen/src/main/resources/vm/$TemplateVm~primitive.java
@@ -18,6 +18,7 @@
*/
package /*${java-package}*/;
+import jakarta.annotation.Generated;
import jakarta.inject.Named;
import jakarta.xml.bind.annotation.XmlAccessType;
import jakarta.xml.bind.annotation.XmlAccessorType;
@@ -37,13 +38,15 @@ import lombok.Setter;
import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
import /*${showcase-java-package}*/.holder./*${showcase-name}*/Holder2;
+@Generated("generated by demoapp.codegen.DemoCodegenCli")
+
//tag::class[]
+@DomainObject(
+ nature=Nature.VIEW_MODEL)
+@Named("demo./*${showcase-name}*/Vm")
@XmlRootElement(name = "root")
@XmlType
@XmlAccessorType(XmlAccessType.FIELD)
-@Named("demo./*${showcase-name}*/Vm")
-@DomainObject(
- nature=Nature.VIEW_MODEL)
@lombok.NoArgsConstructor // <.>
public class /*${showcase-name}*/Vm
implements HasAsciiDocDescription, /*${showcase-name}*/Holder2 {
diff --git a/codegen/src/test/java/demoapp/codegen/demoshowcases/value/ValueTypeGenTemplateTest.java b/codegen/src/test/java/demoapp/codegen/demoshowcases/value/ValueTypeGenTemplateTest.java
deleted file mode 100644
index ed07b7a..0000000
--- a/codegen/src/test/java/demoapp/codegen/demoshowcases/value/ValueTypeGenTemplateTest.java
+++ /dev/null
@@ -1,186 +0,0 @@
-/*
- * 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.codegen.demoshowcases.value;
-
-import java.io.File;
-import java.nio.charset.StandardCharsets;
-import java.util.Collection;
-import java.util.Comparator;
-import java.util.Objects;
-
-import org.jspecify.annotations.NonNull;
-import org.junit.jupiter.api.BeforeAll;
-import org.junit.jupiter.params.ParameterizedTest;
-import org.junit.jupiter.params.provider.EnumSource;
-
-import static org.junit.jupiter.api.Assertions.fail;
-
-import org.apache.causeway.commons.collections.Can;
-import org.apache.causeway.commons.internal.base._Text;
-import org.apache.causeway.commons.internal.collections._Sets;
-import org.apache.causeway.commons.internal.functions._Predicates;
-import org.apache.causeway.commons.io.FileUtils;
-import org.apache.causeway.commons.io.TextUtils;
-
-import lombok.SneakyThrows;
-import lombok.val;
-import lombok.extern.log4j.Log4j2;
-
-@SuppressWarnings("unused")
-@Log4j2
-class ValueTypeGenTemplateTest {
-
- @ParameterizedTest
- @EnumSource(ValueShowCase.class)
- void test(final ValueShowCase valueShowCase) {
- testShowcase(valueShowCase.getConfigBuilder()
- .outputRootDir(outputDir(valueShowCase.name().toLowerCase()))
- .build());
- }
-
- // -- HELPER
-
- @SneakyThrows
- void testShowcase(final ValueTypeGenTemplate.Config config) {
-
- var frameWorkRoot = new File(".").getAbsoluteFile().getParentFile().getParentFile().getParentFile();
-
- // hack for Dan's PC; write out to a different git worktree
- frameWorkRoot = new File(frameWorkRoot.getParentFile(), "demo");
-
- var demoDomainRoot = new File(frameWorkRoot, "examples/demo/domain/src/main/java");
- var demoDomainShowCase = new File(demoDomainRoot, config.getJavaPackage().replace('.', '/'));
-
- // list reference source files
- var refShowcaseFiles = FileUtils.searchFiles(demoDomainShowCase, _Predicates.alwaysTrue(), file->
- file.getName().endsWith(".java")
- || file.getName().endsWith(".xml")
- || file.getName().endsWith(".adoc")
- );
-
- var generator = new ValueTypeGenTemplate(config);
-
- var generatedFiles = _Sets.<File>newLinkedHashSet();
- generator.generate(generatedFiles::add);
-
- // override origin
- copyFiles(generatedFiles, config.getOutputRootDir(), demoDomainShowCase);
- copyMissingFiles(generatedFiles, config.getOutputRootDir(), demoDomainShowCase);
-
-// assertFileSetEquals(refShowcaseFiles, demoDomainShowCase, generatedFiles, config.getOutputRootDir());
-// assertFileContentEquals(refShowcaseFiles, generatedFiles);
-
- }
-
- static File outputRootDir;
-
- @BeforeAll
- static void setup() {
- outputRootDir = FileUtils.tempDir("causeway-tooling-showcases");
- log.info("tmp dir created in {}", outputRootDir);
- }
-
- private File outputDir(final String subfolder) {
- return new File(outputRootDir, subfolder);
- }
-
- /* not used
- private void assertFileSetEquals(
- final Set<File> setA, final File rootA,
- final Set<File> setB, final File rootB) {
- assertEquals(
- Can.ofCollection(setA)
- .map(FileUtils.realtiveFileName(rootA))
- .sorted(Comparator.naturalOrder()),
- Can.ofCollection(setB)
- .map(FileUtils.realtiveFileName(rootB))
- .sorted(Comparator.naturalOrder()));
- }*/
-
- private void copyFiles(final Collection<File> generatedFiles, final File sourceRoot, final File destinationRoot) {
- generatedFiles.forEach(src->{
- val dest = new File(destinationRoot, FileUtils.realtiveFileName(sourceRoot, src));
- FileUtils.makeDir(dest.getParentFile());
- copyWithCrlf(src, dest);
-// FileUtils.copy(src, dest);
- });
- }
-
- private void copyMissingFiles(final Collection<File> generatedFiles, final File sourceRoot, final File destinationRoot) {
- generatedFiles.forEach(src->{
- val dest = new File(destinationRoot, FileUtils.realtiveFileName(sourceRoot, src));
- if(!dest.exists()) {
- FileUtils.makeDir(dest.getParentFile());
- copyWithCrlf(src, dest);
-// FileUtils.copy(src, dest);
- }
- });
- }
-
- private void assertFileContentEquals(final Collection<File> filesA, final Collection<File> filesB) {
-
- val sortedA = Can.ofCollection(filesA).sorted(Comparator.naturalOrder());
- val sortedB = Can.ofCollection(filesB).sorted(Comparator.naturalOrder());
-
- val failedFileComparisons = sortedA
- .zipMap(sortedB, (a, b)->{
-
- var linesA = _Text.normalize(
- TextUtils.readLinesFromFile(a, StandardCharsets.UTF_8))
- .map(this::normalizeForComparision);
- var linesB = _Text.normalize(
- TextUtils.readLinesFromFile(b, StandardCharsets.UTF_8))
- .map(this::normalizeForComparision);
-
- return Objects.equals(linesA, linesB)
- ? null
- : String.format("non equal line in file %s: %s",
- a.getName(),
- firstLineNotEqual(linesA, linesB));
- });
-
- failedFileComparisons.forEach(msg->System.err.printf("%s%n", msg));
-
- if(failedFileComparisons.isNotEmpty()) {
- fail(String.format("some file contents are not equal %s", failedFileComparisons));
- }
- }
-
- private String normalizeForComparision(final String line) {
- return line;//.replace("java.lang.Long", "Long");
- }
-
- 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 "";
- }
-
- private void copyWithCrlf(final @NonNull File from, final @NonNull File to) {
- // Appends CR before the LF line ending to each line
- FileUtils.copyLines(from, to, StandardCharsets.UTF_8, line->line + "\r");
- }
-
-}
diff --git a/codegen/src/test/resources/junit-platform.properties b/codegen/src/test/resources/junit-platform.properties
deleted file mode 100644
index 87f4e41..0000000
--- a/codegen/src/test/resources/junit-platform.properties
+++ /dev/null
@@ -1,37 +0,0 @@
-#
-# 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.
-#
-#
-
-# as per https://github.com/cucumber/cucumber-jvm/tree/master/junit-platform-engine#configuration-options
-cucumber.publish.quiet=true
-cucumber.filter.tags=not @backlog and not @ignore
-#we are using @Cucumber annotated classes and restrict classpath search to
-cucumber.glue=org.apache.causeway.testdomain.cucumber
-#we are using built-in reporting plugins
-cucumber.plugin=pretty, html:target/cucumber-reports/cucumber-report.html
-
-# WARNING:
-#
-# cucumber.plugin=..., json:target/cucumber-reports/cucumber-report.json, ...
-#
-# will cause an empty file to be created when running from mvn.
-#
-# this is why the maven configuration to execute cucumber using the CLI (antrun:run@cucumber-cli)
-# is configured to use --plugins json:target/cucumber-no-clobber.json
-#
diff --git a/codegen/src/test/resources/log4j2-test.xml b/codegen/src/test/resources/log4j2-test.xml
deleted file mode 100644
index ec24be9..0000000
--- a/codegen/src/test/resources/log4j2-test.xml
+++ /dev/null
@@ -1,56 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-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.
--->
-<Configuration status="WARN">
- <Properties>
- <Property name="PID">????</Property>
- <Property name="LOG_EXCEPTION_CONVERSION_WORD">%xwEx</Property>
- <Property name="LOG_LEVEL_PATTERN">%5p</Property>
- <Property name="LOG_DATEFORMAT_PATTERN">yyyy-MM-dd HH:mm:ss.SSS</Property>
- <Property name="CONSOLE_LOG_PATTERN">%clr{%d{${LOG_DATEFORMAT_PATTERN}}}{faint} %clr{${LOG_LEVEL_PATTERN}} %clr{${sys:PID}}{magenta} %clr{---}{faint} %clr{[%15.15t]}{faint} %clr{%-40.40c{1.}}{cyan} %clr{:}{faint} %m%n${sys:LOG_EXCEPTION_CONVERSION_WORD}</Property>
- <Property name="FILE_LOG_PATTERN">%d{${LOG_DATEFORMAT_PATTERN}} ${LOG_LEVEL_PATTERN} ${sys:PID} --- [%t] %-40.40c{1.} : %m%n${sys:LOG_EXCEPTION_CONVERSION_WORD}</Property>
- </Properties>
- <Appenders>
- <Console name="Console" target="SYSTEM_OUT" follow="true">
- <PatternLayout pattern="${sys:CONSOLE_LOG_PATTERN}" />
- </Console>
- </Appenders>
- <Loggers>
- <Logger name="org.apache.catalina.startup.DigesterFactory" level="error" />
- <Logger name="org.apache.catalina.util.LifecycleBase" level="error" />
- <Logger name="org.apache.coyote.http11.Http11NioProtocol" level="warn" />
- <logger name="org.apache.sshd.common.util.SecurityUtils" level="warn"/>
- <Logger name="org.apache.tomcat.util.net.NioSelectorPool" level="warn" />
- <Logger name="org.eclipse.jetty.util.component.AbstractLifeCycle" level="error" />
- <Logger name="org.hibernate.validator.internal.util.Version" level="warn" />
- <logger name="org.springframework.boot.actuate.endpoint.jmx" level="warn"/>
-
- <logger name="org.apache.directory" level="warn"/>
- <logger name="org.apache.directory.api.ldap.model.entry.Value" level="off"/>
-
- <logger name="DataNucleus.Persistence" level="info"/>
- <logger name="DataNucleus.Transaction" level="info"/>
- <logger name="DataNucleus.Datastore.Schema" level="info"/>
- <logger name="DataNucleus.Datastore.Native" level="info"/>
-
- <Root level="info">
- <AppenderRef ref="Console" />
- </Root>
- </Loggers>
-</Configuration>