This is an automated email from the ASF dual-hosted git repository.
jdaugherty pushed a commit to branch feat/addHibernate7ForgeFeature
in repository https://gitbox.apache.org/repos/asf/grails-core.git
The following commit(s) were added to refs/heads/feat/addHibernate7ForgeFeature
by this push:
new 23b485c643 updating command switches, renaming Gorm => Grails Data, &
renaming Hibernate => Hibernate5
23b485c643 is described below
commit 23b485c643672fcb8493680af9c4912ea2000499
Author: James Daugherty <[email protected]>
AuthorDate: Thu Jul 9 10:50:54 2026 -0400
updating command switches, renaming Gorm => Grails Data, & renaming
Hibernate => Hibernate5
---
.../src/en/guide/commandLine/creatingProject.adoc | 24 ++++----
.../commandLine/gradleBuild/gradlePlugins.adoc | 2 +-
.../src/en/guide/commandLine/interactiveMode.adoc | 6 +-
grails-doc/src/en/ref/Command Line/create-app.adoc | 10 ++--
.../src/en/ref/Command Line/create-plugin.adoc | 4 +-
.../src/en/ref/Command Line/create-restapi.adoc | 2 +-
.../src/en/ref/Command Line/create-web-plugin.adoc | 2 +-
grails-doc/src/en/ref/Command Line/help.adoc | 6 +-
.../java/org/grails/forge/api/GormImplDTO.java | 6 +-
.../org/grails/forge/api/SelectOptionsDTO.java | 2 +-
.../java/org/grails/forge/api/ServletImplDTO.java | 2 +-
.../grails/forge/cli/command/CreateCommand.java | 2 +-
.../forge/cli/command/GormImplConverter.java | 12 ++--
.../forge/cli/command/CreateAppCommandSpec.groovy | 67 +++++++++++++++++++++-
.../java/org/grails/forge/analytics/Generated.java | 2 +-
.../feature/database/GrailsDataHibernate5.java | 6 +-
.../feature/database/GrailsDataHibernate7.java | 4 +-
.../database/GrailsDataHibernateValidator.java | 2 +-
.../forge/feature/database/GrailsDataMongoDB.java | 4 +-
.../grails/forge/feature/database/GraphqlGorm.java | 4 +-
.../java/org/grails/forge/feature/database/H2.java | 2 +-
.../java/org/grails/forge/options/GormImpl.java | 32 ++++++++++-
.../{GormImpl.java => GormImplTypeConverter.java} | 36 +++++-------
.../database/GrailsDataHibernate7Spec.groovy | 2 +-
.../org/grails/forge/options/GormImplSpec.groovy} | 42 +++++++-------
25 files changed, 182 insertions(+), 101 deletions(-)
diff --git a/grails-doc/src/en/guide/commandLine/creatingProject.adoc
b/grails-doc/src/en/guide/commandLine/creatingProject.adoc
index 7bd657235b..87b058a304 100644
--- a/grails-doc/src/en/guide/commandLine/creatingProject.adoc
+++ b/grails-doc/src/en/guide/commandLine/creatingProject.adoc
@@ -51,7 +51,7 @@ After generating a project with Forge, switch to the created
directory and use t
[none]
* -jdk, --java-version
* -s, --servlet
-* -g, --gorm
+* -d, --data (-g, --gorm are legacy aliases)
* -t, --test
* -f, --features
* -i, --inplace
@@ -61,7 +61,7 @@ After generating a project with Forge, switch to the created
directory and use t
./grails -t forge create-app \
--servlet=tomcat \
--jdk=11 \
- --gorm=hibernate \
+ --data=hibernate5 \
--test=spock \
--features=github-workflow-java-ci \
com.example.demo
@@ -73,7 +73,7 @@ After generating a project with Forge, switch to the created
directory and use t
[none]
* -jdk, --java-version
* -s, --servlet
-* -g, --gorm
+* -d, --data (-g, --gorm are legacy aliases)
* -t, --test
* -f, --features
* -i, --inplace
@@ -83,7 +83,7 @@ After generating a project with Forge, switch to the created
directory and use t
./grails -t forge create-restapi \
--servlet=tomcat \
--jdk=11 \
- --gorm=hibernate \
+ --data=hibernate5 \
--test=spock \
--features=github-workflow-java-ci \
com.example.demo
@@ -95,7 +95,7 @@ After generating a project with Forge, switch to the created
directory and use t
[none]
* -jdk, --java-version
* -s, --servlet
-* -g, --gorm
+* -d, --data (-g, --gorm are legacy aliases)
* -t, --test
* -f, --features
* -i, --inplace
@@ -105,7 +105,7 @@ After generating a project with Forge, switch to the
created directory and use t
./grails -t forge create-plugin \
--servlet=tomcat \
--jdk=11 \
- --gorm=hibernate \
+ --data=hibernate5 \
--test=spock \
--features=github-workflow-java-ci \
com.example.demo
@@ -117,7 +117,7 @@ After generating a project with Forge, switch to the
created directory and use t
[none]
* -jdk, --java-version
* -s, --servlet
-* -g, --gorm
+* -d, --data (-g, --gorm are legacy aliases)
* -t, --test
* -f, --features
* -i, --inplace
@@ -127,7 +127,7 @@ After generating a project with Forge, switch to the
created directory and use t
./grails -t forge create-web-plugin \
--servlet=tomcat \
--jdk=11 \
- --gorm=hibernate \
+ --data=hibernate5 \
--test=spock \
--features=github-workflow-java-ci \
com.example.demo
@@ -136,7 +136,7 @@ After generating a project with Forge, switch to the
created directory and use t
=== The `create-` command flags
-The "create-*" commands are used to produce a fundamental Grails project,
allowing for the inclusion of optional flags to select additional features, to
customize GORM settings, an embedded servlet, the test framework, and the Java
version.
+The "create-*" commands are used to produce a fundamental Grails project,
allowing for the inclusion of optional flags to select additional features, to
customize Grails Data settings, an embedded servlet, the test framework, and
the Java version.
[cols="4,8,6a"]
|===
@@ -158,12 +158,12 @@ The "create-*" commands are used to produce a fundamental
Grails project, allowi
--servlet=tomcat
----
-| -g, --gorm
-| Which GORM Implementation to configure. Possible values: hibernate,
hibernate7, mongodb.
+| -d, --data (-g, --gorm are legacy aliases)
+| Which Grails Data implementation to configure. Possible values: hibernate5,
hibernate7, mongodb. The value hibernate is accepted as a legacy alias for
hibernate5.
|
[source,shell]
----
---gorm hibernate
+--data hibernate5
----
| -t, --test
diff --git a/grails-doc/src/en/guide/commandLine/gradleBuild/gradlePlugins.adoc
b/grails-doc/src/en/guide/commandLine/gradleBuild/gradlePlugins.adoc
index 8ee5c8672f..4c55b7b081 100644
--- a/grails-doc/src/en/guide/commandLine/gradleBuild/gradlePlugins.adoc
+++ b/grails-doc/src/en/guide/commandLine/gradleBuild/gradlePlugins.adoc
@@ -20,7 +20,7 @@ under the License.
The `create-app` command is available in both the Grails Shell CLI and the
Forge CLI.
- Use `grails create-app myapp` to generate a default project using the Grails
Shell CLI. This is the most common usage.
-- Use `grails -t forge create-app myapp` to access advanced application
generation options such as `--jdk`, `--gorm`, and other Forge-only flags.
+- Use `grails -t forge create-app myapp` to access advanced application
generation options such as `--jdk`, `--data`, and other Forge-only flags.
The example below assumes you are using the Forge CLI, which is solely
intended for **application generation**. It does not support running, building,
or managing a Grails application.
diff --git a/grails-doc/src/en/guide/commandLine/interactiveMode.adoc
b/grails-doc/src/en/guide/commandLine/interactiveMode.adoc
index e111e0f25d..706fc91a96 100644
--- a/grails-doc/src/en/guide/commandLine/interactiveMode.adoc
+++ b/grails-doc/src/en/guide/commandLine/interactiveMode.adoc
@@ -75,9 +75,9 @@ Creates an application
grails-console, views-markup, asset-pipeline-grails,
views-json,
gorm-neo4j, asciidoctor, grails-web-console,
logbackGroovy, mongo-sync, shade, geb, properties
- -g, --gorm=GORM Implementation
- Which GORM Implementation to configure. Possible
values: hibernate,
- mongodb, neo4j.
+ -d, --data, -g, --gorm=Grails Data Implementation
+ Which Grails Data implementation to configure (-g,
--gorm are legacy
+ aliases). Possible values: hibernate5, hibernate7,
mongodb.
-h, --help Show this help message and exit.
-i, --inplace Create a service using the current directory
--jdk, --java-version=<javaVersion>
diff --git a/grails-doc/src/en/ref/Command Line/create-app.adoc
b/grails-doc/src/en/ref/Command Line/create-app.adoc
index a12deccbf3..8fec687d53 100644
--- a/grails-doc/src/en/ref/Command Line/create-app.adoc
+++ b/grails-doc/src/en/ref/Command Line/create-app.adoc
@@ -29,7 +29,7 @@ In Grails {grailsMajorVersion}, `create-app` is available in
both the **Grails S
- Most users should use the **Grails Shell CLI** by default (`grails
create-app bookstore`). This version supports core development commands and
project lifecycle management, and includes basic `create-*` flags like
`--inplace`, `--features`, and `--profile`.
-- The **Forge CLI** (`grails -t forge create-app bookstore`) is intended
solely for **application generation** with extended configuration flags such as
`--jdk`, `--gorm`, and `--servlet`.
+- The **Forge CLI** (`grails -t forge create-app bookstore`) is intended
solely for **application generation** with extended configuration flags such as
`--jdk`, `--data`, and `--servlet`.
Forge-specific flags will result in an error if used with the Shell CLI.
====
@@ -50,7 +50,7 @@ This uses the **Forge CLI** to generate an application with
extended configurati
----
$ grails -t forge create-app bookstore \
--jdk=17 \
- --gorm=hibernate \
+ --data=hibernate5 \
--servlet=tomcat \
--test=spock \
--features=asciidoctor,github-workflow-java-ci
@@ -62,7 +62,7 @@ These options are available only when using `grails -t forge`:
- `NAME`: The desired name for the application.
- `-f, --features=FEATURE[,FEATURE...]`: Enable features like
`gorm-hibernate5`, `postgres`, `asciidoctor`, `grails-gsp`, etc.
-- `-g, --gorm=GORM Implementation`: Choose GORM implementation: `hibernate`,
`mongodb`, `neo4j`.
+- `-d, --data=Grails Data Implementation` (`-g`, `--gorm` are legacy aliases):
Choose the Grails Data implementation: `hibernate5`, `hibernate7`, `mongodb`.
- `--jdk=<javaVersion>`: Target JDK version (e.g., 11 or 17).
- `-s, --servlet=Servlet Implementation`: Choose embedded servlet: `tomcat`,
`jetty`, `undertow`, `none`.
- `-t, --test=TEST`: Select test framework: `spock`, `junit`.
@@ -83,7 +83,7 @@ Available flags:
- `--features` _(limited support depending on profile)_
- `--profile`
-Forge-only options such as `--jdk`, `--gorm`, or `--servlet` are **not
supported** in the Shell CLI.
+Forge-only options such as `--jdk`, `--data`, or `--servlet` are **not
supported** in the Shell CLI.
=== Examples
@@ -101,7 +101,7 @@ $ cd bookstore
----
$ grails -t forge create-app bookstore \
--jdk=17 \
- --gorm=hibernate \
+ --data=hibernate5 \
--features=asciidoctor,grails-gsp
----
diff --git a/grails-doc/src/en/ref/Command Line/create-plugin.adoc
b/grails-doc/src/en/ref/Command Line/create-plugin.adoc
index ee9f88f044..d4561a6c4d 100644
--- a/grails-doc/src/en/ref/Command Line/create-plugin.adoc
+++ b/grails-doc/src/en/ref/Command Line/create-plugin.adoc
@@ -71,7 +71,7 @@ Options include specifying features, configuring the GORM
implementation, select
Here are the available options for the create-plugin command:
- -f, --features=FEATURE[,FEATURE...]: Specifies the features to include in
the plugin. Available options include h2, gorm-hibernate5,
spring-boot-starter-jetty, micronaut-http-client, cache-ehcache,
hibernate-validator, postgres, mysql, cache, database-migration, grails-gsp,
hamcrest, gorm-mongodb, assertj, mockito, spring-boot-starter-undertow,
github-workflow-java-ci, jrebel, testcontainers, sqlserver, grails-console,
views-markup, views-json, gorm-neo4j, asciidoctor, grails-web-cons [...]
-- -g, --gorm=GORM Implementation: Specifies the GORM Implementation to
configure for the plugin. Possible values are hibernate, mongodb, neo4j.
+- -d, --data=Grails Data Implementation (-g, --gorm are legacy aliases):
Specifies the Grails Data implementation to configure for the plugin. Possible
values are hibernate5, hibernate7, mongodb.
- -h, --help: Displays the help message and exits.
- -i, --inplace: Creates a service within the current directory.
- --jdk=<javaVersion>: Specifies the JDK version the project should target.
@@ -106,7 +106,7 @@ This command will create a Grails plugin project named
"minimal-plugin" with the
+
[source,shell]
----
-grails create-plugin mongodb-plugin --gorm=mongodb
+grails create-plugin mongodb-plugin --data=mongodb
----
+
This command will generate a Grails plugin project named "mongodb-plugin"
configured to use MongoDB as the GORM implementation.
diff --git a/grails-doc/src/en/ref/Command Line/create-restapi.adoc
b/grails-doc/src/en/ref/Command Line/create-restapi.adoc
index 69c47c943c..ceef4c809c 100644
--- a/grails-doc/src/en/ref/Command Line/create-restapi.adoc
+++ b/grails-doc/src/en/ref/Command Line/create-restapi.adoc
@@ -42,7 +42,7 @@ The `create-restapi` command accepts the following options:
- `-f, --features=FEATURE[,FEATURE...]`: Specifies the features to include.
Available options include h2, scaffolding, gorm-hibernate5,
spring-boot-starter-jetty, spring-boot-starter-tomcat, micronaut-http-client,
cache-ehcache, hibernate-validator, postgres, mysql, cache, database-migration,
grails-gsp, hamcrest, gorm-mongodb, assertj, mockito,
spring-boot-starter-undertow, github-workflow-java-ci, jrebel, testcontainers,
sqlserver, grails-console, views-markup, asset-pipeline-grails, v [...]
-- `-g, --gorm=GORM Implementation`: Specifies the GORM Implementation to
configure, with options like hibernate, mongodb, neo4j.
+- `-d, --data=Grails Data Implementation` (`-g`, `--gorm` are legacy aliases):
Specifies the Grails Data implementation to configure, with options hibernate5,
hibernate7, mongodb.
- `-h, --help`: Displays the help message and exits.
diff --git a/grails-doc/src/en/ref/Command Line/create-web-plugin.adoc
b/grails-doc/src/en/ref/Command Line/create-web-plugin.adoc
index 02d3a48c91..51a72ec191 100644
--- a/grails-doc/src/en/ref/Command Line/create-web-plugin.adoc
+++ b/grails-doc/src/en/ref/Command Line/create-web-plugin.adoc
@@ -40,7 +40,7 @@ Here are the available options for the `create-web-plugin`
command:
- `-f, --features=FEATURE[,FEATURE...]`: Specifies the features to include in
the plugin. Available options include h2, gorm-hibernate5,
spring-boot-starter-jetty, micronaut-http-client, cache-ehcache,
hibernate-validator, postgres, mysql, cache, database-migration, grails-gsp,
hamcrest, gorm-mongodb, assertj, mockito, spring-boot-starter-undertow,
github-workflow-java-ci, jrebel, testcontainers, sqlserver, grails-console,
views-markup, views-json, gorm-neo4j, asciidoctor, grails-web-con [...]
-- `-g, --gorm=GORM Implementation`: Specifies the GORM Implementation to
configure for the plugin. Possible values are hibernate, mongodb, neo4j.
+- `-d, --data=Grails Data Implementation` (`-g`, `--gorm` are legacy aliases):
Specifies the Grails Data implementation to configure for the plugin. Possible
values are hibernate5, hibernate7, mongodb.
- `-h, --help`: Displays the help message and exits.
diff --git a/grails-doc/src/en/ref/Command Line/help.adoc
b/grails-doc/src/en/ref/Command Line/help.adoc
index d4290d21ce..de78f61431 100644
--- a/grails-doc/src/en/ref/Command Line/help.adoc
+++ b/grails-doc/src/en/ref/Command Line/help.adoc
@@ -148,9 +148,9 @@ Creates an application
grails-console, views-markup, asset-pipeline-grails,
views-json,
gorm-neo4j, asciidoctor, grails-web-console,
logbackGroovy, mongo-sync, shade, geb, properties
- -g, --gorm=GORM Implementation
- Which GORM Implementation to configure. Possible
values: hibernate,
- mongodb, neo4j.
+ -d, --data, -g, --gorm=Grails Data Implementation
+ Which Grails Data implementation to configure (-g,
--gorm are legacy
+ aliases). Possible values: hibernate5, hibernate7,
mongodb.
-h, --help Show this help message and exit.
-i, --inplace Create a service using the current directory
--jdk, --java-version=<javaVersion>
diff --git
a/grails-forge/grails-forge-api/src/main/java/org/grails/forge/api/GormImplDTO.java
b/grails-forge/grails-forge-api/src/main/java/org/grails/forge/api/GormImplDTO.java
index af0e8a9a34..7cfd1c299c 100644
---
a/grails-forge/grails-forge-api/src/main/java/org/grails/forge/api/GormImplDTO.java
+++
b/grails-forge/grails-forge-api/src/main/java/org/grails/forge/api/GormImplDTO.java
@@ -85,7 +85,7 @@ public class GormImplDTO extends Linkable implements Named,
Described, Selectabl
@NonNull
@Override
- @Schema(description = "A description of the GORM Implementation")
+ @Schema(description = "A description of the Grails Data implementation")
public String getDescription() {
return description;
}
@@ -98,13 +98,13 @@ public class GormImplDTO extends Linkable implements Named,
Described, Selectabl
}
@Override
- @Schema(description = "The value of the GORM Implementation for select
options")
+ @Schema(description = "The value of the Grails Data implementation for
select options")
public GormImpl getValue() {
return value;
}
@Override
- @Schema(description = "The label of the GORM Implementation for select
options")
+ @Schema(description = "The label of the Grails Data implementation for
select options")
public String getLabel() {
return value.getLabel();
}
diff --git
a/grails-forge/grails-forge-api/src/main/java/org/grails/forge/api/SelectOptionsDTO.java
b/grails-forge/grails-forge-api/src/main/java/org/grails/forge/api/SelectOptionsDTO.java
index f25ee04940..319a9dfd01 100644
---
a/grails-forge/grails-forge-api/src/main/java/org/grails/forge/api/SelectOptionsDTO.java
+++
b/grails-forge/grails-forge-api/src/main/java/org/grails/forge/api/SelectOptionsDTO.java
@@ -90,7 +90,7 @@ public class SelectOptionsDTO {
return reloading;
}
- @Schema(description = "supported options for GORM Implementation")
+ @Schema(description = "supported options for the Grails Data
implementation")
public GormImplSelectOptions getGorm() {
return gorm;
}
diff --git
a/grails-forge/grails-forge-api/src/main/java/org/grails/forge/api/ServletImplDTO.java
b/grails-forge/grails-forge-api/src/main/java/org/grails/forge/api/ServletImplDTO.java
index f1c72e6c59..3af07892ef 100644
---
a/grails-forge/grails-forge-api/src/main/java/org/grails/forge/api/ServletImplDTO.java
+++
b/grails-forge/grails-forge-api/src/main/java/org/grails/forge/api/ServletImplDTO.java
@@ -74,7 +74,7 @@ public class ServletImplDTO extends Linkable implements
Named, Described, Select
@NonNull
@Override
- @Schema(description = "A description of the GORM Implementation")
+ @Schema(description = "A description of the Servlet implementation")
public String getDescription() {
return description;
}
diff --git
a/grails-forge/grails-forge-cli/src/main/java/org/grails/forge/cli/command/CreateCommand.java
b/grails-forge/grails-forge-cli/src/main/java/org/grails/forge/cli/command/CreateCommand.java
index aa478ae674..a65722da2c 100644
---
a/grails-forge/grails-forge-cli/src/main/java/org/grails/forge/cli/command/CreateCommand.java
+++
b/grails-forge/grails-forge-cli/src/main/java/org/grails/forge/cli/command/CreateCommand.java
@@ -50,7 +50,7 @@ public abstract class CreateCommand extends BaseCommand
implements Callable<Inte
DevelopmentReloading reloading;
@ReflectiveAccess
- @CommandLine.Option(names = {"-g", "--gorm"}, paramLabel = "GORM
Implementation", description = "Which GORM Implementation to configure.
Possible values: ${COMPLETION-CANDIDATES}.", completionCandidates =
GormImplCandidates.class, converter = GormImplConverter.class)
+ @CommandLine.Option(names = {"-d", "--data", "-g", "--gorm"}, paramLabel =
"Grails Data Implementation", description = "Which Grails Data implementation
to configure (-g, --gorm are legacy aliases). Possible values:
${COMPLETION-CANDIDATES}.", completionCandidates = GormImplCandidates.class,
converter = GormImplConverter.class)
GormImpl gormImpl;
@ReflectiveAccess
diff --git
a/grails-forge/grails-forge-cli/src/main/java/org/grails/forge/cli/command/GormImplConverter.java
b/grails-forge/grails-forge-cli/src/main/java/org/grails/forge/cli/command/GormImplConverter.java
index 5b802d3b38..7dbbcd48a7 100644
---
a/grails-forge/grails-forge-cli/src/main/java/org/grails/forge/cli/command/GormImplConverter.java
+++
b/grails-forge/grails-forge-cli/src/main/java/org/grails/forge/cli/command/GormImplConverter.java
@@ -29,13 +29,11 @@ public class GormImplConverter implements
CommandLine.ITypeConverter<GormImpl> {
public GormImpl convert(String value) throws Exception {
if (value == null) {
return GormImpl.DEFAULT_OPTION;
- } else {
- for (GormImpl impl : GormImpl.values()) {
- if (value.equalsIgnoreCase(impl.toString())) {
- return impl;
- }
- }
}
- throw new CommandLine.TypeConversionException("Invalid GORM
implementation selection: " + value);
+ GormImpl impl = GormImpl.parse(value);
+ if (impl != null) {
+ return impl;
+ }
+ throw new CommandLine.TypeConversionException("Invalid Grails Data
implementation selection: " + value);
}
}
diff --git
a/grails-forge/grails-forge-cli/src/test/groovy/org/grails/forge/cli/command/CreateAppCommandSpec.groovy
b/grails-forge/grails-forge-cli/src/test/groovy/org/grails/forge/cli/command/CreateAppCommandSpec.groovy
index 23f7adc642..7aceef2214 100644
---
a/grails-forge/grails-forge-cli/src/test/groovy/org/grails/forge/cli/command/CreateAppCommandSpec.groovy
+++
b/grails-forge/grails-forge-cli/src/test/groovy/org/grails/forge/cli/command/CreateAppCommandSpec.groovy
@@ -64,7 +64,72 @@ class CreateAppCommandSpec extends CommandSpec implements
CommandFixture {
then:
noExceptionThrown()
- baos.toString().contains("Invalid GORM implementation selection: xyz")
+ baos.toString().contains("Invalid Grails Data implementation
selection: xyz")
+ }
+
+ void "test creating a project with the data switch"() {
+ given:
+ ByteArrayOutputStream out = new ByteArrayOutputStream()
+ System.setOut(new PrintStream(out))
+
+ when:
+ PicocliRunner.run(CreateAppCommand, ctx, "dataswitch", "--data",
"hibernate7")
+
+ then:
+ noExceptionThrown()
+ out.toString().contains("Application created")
+ }
+
+ void "test creating a project with the -d short alias"() {
+ given:
+ ByteArrayOutputStream out = new ByteArrayOutputStream()
+ System.setOut(new PrintStream(out))
+
+ when:
+ PicocliRunner.run(CreateAppCommand, ctx, "dshort", "-d", "hibernate7")
+
+ then:
+ noExceptionThrown()
+ out.toString().contains("Application created")
+ }
+
+ void "test creating a project with the legacy -g short alias"() {
+ given:
+ ByteArrayOutputStream out = new ByteArrayOutputStream()
+ System.setOut(new PrintStream(out))
+
+ when:
+ PicocliRunner.run(CreateAppCommand, ctx, "gshort", "-g", "hibernate5")
+
+ then:
+ noExceptionThrown()
+ out.toString().contains("Application created")
+ }
+
+ void "test creating a project with the legacy hibernate gorm value"() {
+ given:
+ ByteArrayOutputStream out = new ByteArrayOutputStream()
+ System.setOut(new PrintStream(out))
+
+ when:
+ PicocliRunner.run(CreateAppCommand, ctx, "legacygorm", "--gorm",
"hibernate")
+
+ then:
+ noExceptionThrown()
+ out.toString().contains("Application created")
+ }
+
+ void "test creating a project with the hibernate5 gorm value"() {
+ given:
+ ByteArrayOutputStream out = new ByteArrayOutputStream()
+ System.setOut(new PrintStream(out))
+
+ when:
+ PicocliRunner.run(CreateAppCommand, ctx, "hib5gorm", "--gorm",
"hibernate5")
+
+ then:
+ noExceptionThrown()
+ out.toString().contains("Application created")
}
void "community and preview features are labelled as such"() {
diff --git
a/grails-forge/grails-forge-core/src/main/java/org/grails/forge/analytics/Generated.java
b/grails-forge/grails-forge-core/src/main/java/org/grails/forge/analytics/Generated.java
index 408933655a..e37e2431f0 100644
---
a/grails-forge/grails-forge-core/src/main/java/org/grails/forge/analytics/Generated.java
+++
b/grails-forge/grails-forge-core/src/main/java/org/grails/forge/analytics/Generated.java
@@ -47,7 +47,7 @@ public class Generated {
@NonNull DevelopmentReloading reloading,
@NonNull JdkVersion jdkVersion) {
this.type = Objects.requireNonNull(type, "Type cannot be null");
- this.gorm = Objects.requireNonNull(gorm, "GORM cannot be null");
+ this.gorm = Objects.requireNonNull(gorm, "Grails Data implementation
cannot be null");
this.servlet = Objects.requireNonNull(servlet, "Embedded Servlet
cannot be null");
this.reloading = Objects.requireNonNull(reloading, "Development
reloading cannot be null");
this.jdkVersion = Objects.requireNonNull(jdkVersion, "JDK version
cannot be null");
diff --git
a/grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/database/GrailsDataHibernate5.java
b/grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/database/GrailsDataHibernate5.java
index 280fb3d9b8..f592f4d4ae 100644
---
a/grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/database/GrailsDataHibernate5.java
+++
b/grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/database/GrailsDataHibernate5.java
@@ -55,12 +55,12 @@ public class GrailsDataHibernate5 extends GormFeature
implements DatabaseDriverC
@Override
public String getTitle() {
- return "GORM for Hibernate 5";
+ return "Grails Data - Hibernate 5";
}
@Override
public String getDescription() {
- return "Configure GORM for using Hibernate 5.";
+ return "Configure Grails Data for using Hibernate 5.";
}
@Override
@@ -124,7 +124,7 @@ public class GrailsDataHibernate5 extends GormFeature
implements DatabaseDriverC
@Override
public boolean shouldApply(ApplicationType applicationType, Options
options, Set<Feature> selectedFeatures) {
return selectedFeatures.stream().anyMatch(f -> f instanceof
GrailsDataHibernate5)
- || (options.getGormImpl() == GormImpl.HIBERNATE
+ || (options.getGormImpl() == GormImpl.HIBERNATE5
&&
selectedFeatures.stream().noneMatch(GrailsDataHibernate7.class::isInstance));
}
}
diff --git
a/grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/database/GrailsDataHibernate7.java
b/grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/database/GrailsDataHibernate7.java
index 43f7c0a4b7..073f2aee71 100644
---
a/grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/database/GrailsDataHibernate7.java
+++
b/grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/database/GrailsDataHibernate7.java
@@ -53,12 +53,12 @@ public class GrailsDataHibernate7 extends GormFeature
implements DatabaseDriverC
@Override
public String getTitle() {
- return "GORM for Hibernate 7";
+ return "Grails Data - Hibernate 7";
}
@Override
public String getDescription() {
- return "Configure GORM for using Hibernate 7.";
+ return "Configure Grails Data for using Hibernate 7.";
}
@Override
diff --git
a/grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/database/GrailsDataHibernateValidator.java
b/grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/database/GrailsDataHibernateValidator.java
index 912e163c49..f69ce47e0e 100644
---
a/grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/database/GrailsDataHibernateValidator.java
+++
b/grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/database/GrailsDataHibernateValidator.java
@@ -34,7 +34,7 @@ public class GrailsDataHibernateValidator implements
FeatureValidator {
public void validatePreProcessing(Options options, ApplicationType
applicationType, Set<Feature> features) {
if (features.stream().anyMatch(GrailsDataHibernate5.class::isInstance)
&&
features.stream().anyMatch(GrailsDataHibernate7.class::isInstance)) {
- throw new IllegalArgumentException("Only one GORM for Hibernate
implementation can be selected: gorm-hibernate5 or gorm-hibernate7");
+ throw new IllegalArgumentException("Only one Grails Data for
Hibernate implementation can be selected: gorm-hibernate5 or gorm-hibernate7");
}
}
diff --git
a/grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/database/GrailsDataMongoDB.java
b/grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/database/GrailsDataMongoDB.java
index 94df495e9f..254863aac7 100644
---
a/grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/database/GrailsDataMongoDB.java
+++
b/grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/database/GrailsDataMongoDB.java
@@ -47,12 +47,12 @@ public class GrailsDataMongoDB extends GormOneOfFeature {
@Override
public String getTitle() {
- return "GORM for MongoDB";
+ return "Grails Data for MongoDB";
}
@Override
public String getDescription() {
- return "Configure GORM for using MongoDB.";
+ return "Configure Grails Data for using MongoDB.";
}
@Override
diff --git
a/grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/database/GraphqlGorm.java
b/grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/database/GraphqlGorm.java
index 1e06d0975f..81650a688f 100644
---
a/grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/database/GraphqlGorm.java
+++
b/grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/database/GraphqlGorm.java
@@ -52,12 +52,12 @@ public class GraphqlGorm implements Feature {
@Override
public String getTitle() {
- return "GORM for GraphQL";
+ return "Grails Data for GraphQL";
}
@Override
public String getDescription() {
- return "Generates a GraphQL schema based on entities in GORM.";
+ return "Generates a GraphQL schema based on entities in Grails Data.";
}
@Override
diff --git
a/grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/database/H2.java
b/grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/database/H2.java
index 19be11c6bd..5cf1b5ac16 100644
---
a/grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/database/H2.java
+++
b/grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/database/H2.java
@@ -100,7 +100,7 @@ public class H2 extends DatabaseDriverFeature implements
DefaultFeature {
@Override
public boolean shouldApply(ApplicationType applicationType, Options
options, Set<Feature> selectedFeatures) {
- return (options.getGormImpl() == GormImpl.HIBERNATE ||
options.getGormImpl() == GormImpl.HIBERNATE7) &&
+ return (options.getGormImpl() == GormImpl.HIBERNATE5 ||
options.getGormImpl() == GormImpl.HIBERNATE7) &&
selectedFeatures.stream().noneMatch(f -> f instanceof
DatabaseDriverFeature);
}
}
diff --git
a/grails-forge/grails-forge-core/src/main/java/org/grails/forge/options/GormImpl.java
b/grails-forge/grails-forge-core/src/main/java/org/grails/forge/options/GormImpl.java
index 1c53118c8e..1f071e35d5 100644
---
a/grails-forge/grails-forge-core/src/main/java/org/grails/forge/options/GormImpl.java
+++
b/grails-forge/grails-forge-core/src/main/java/org/grails/forge/options/GormImpl.java
@@ -19,14 +19,19 @@
package org.grails.forge.options;
import io.micronaut.core.annotation.NonNull;
+import io.micronaut.core.annotation.Nullable;
public enum GormImpl {
- HIBERNATE("gorm-hibernate5", "Hibernate 5"),
+ HIBERNATE5("gorm-hibernate5", "Hibernate 5"),
HIBERNATE7("gorm-hibernate7", "Hibernate 7"),
MONGODB("gorm-mongodb", "MongoDB");
- public static final GormImpl DEFAULT_OPTION = HIBERNATE;
+ public static final GormImpl DEFAULT_OPTION = HIBERNATE5;
+
+ // Selection value accepted before HIBERNATE5 replaced the HIBERNATE
constant
+ private static final String LEGACY_HIBERNATE_VALUE = "hibernate";
+
private final String featureName;
private final String label;
@@ -45,4 +50,27 @@ public enum GormImpl {
return label;
}
+ /**
+ * Resolves a user-supplied selection value to a {@link GormImpl}.
+ *
+ * @param value the selection value (case-insensitive), e.g. {@code
hibernate5};
+ * the legacy value {@code hibernate} resolves to {@link
#HIBERNATE5}
+ * @return the matching implementation, or {@code null} when the value is
unknown
+ */
+ @Nullable
+ public static GormImpl parse(@Nullable String value) {
+ if (value == null) {
+ return null;
+ }
+ if (LEGACY_HIBERNATE_VALUE.equalsIgnoreCase(value)) {
+ return HIBERNATE5;
+ }
+ for (GormImpl impl : values()) {
+ if (value.equalsIgnoreCase(impl.name())) {
+ return impl;
+ }
+ }
+ return null;
+ }
+
}
diff --git
a/grails-forge/grails-forge-core/src/main/java/org/grails/forge/options/GormImpl.java
b/grails-forge/grails-forge-core/src/main/java/org/grails/forge/options/GormImplTypeConverter.java
similarity index 58%
copy from
grails-forge/grails-forge-core/src/main/java/org/grails/forge/options/GormImpl.java
copy to
grails-forge/grails-forge-core/src/main/java/org/grails/forge/options/GormImplTypeConverter.java
index 1c53118c8e..eb8624fe77 100644
---
a/grails-forge/grails-forge-core/src/main/java/org/grails/forge/options/GormImpl.java
+++
b/grails-forge/grails-forge-core/src/main/java/org/grails/forge/options/GormImplTypeConverter.java
@@ -18,31 +18,21 @@
*/
package org.grails.forge.options;
-import io.micronaut.core.annotation.NonNull;
+import java.util.Optional;
-public enum GormImpl {
+import io.micronaut.core.convert.ConversionContext;
+import io.micronaut.core.convert.TypeConverter;
+import jakarta.inject.Singleton;
- HIBERNATE("gorm-hibernate5", "Hibernate 5"),
- HIBERNATE7("gorm-hibernate7", "Hibernate 7"),
- MONGODB("gorm-mongodb", "MongoDB");
-
- public static final GormImpl DEFAULT_OPTION = HIBERNATE;
- private final String featureName;
- private final String label;
-
- GormImpl(String featureName, String label) {
- this.featureName = featureName;
- this.label = label;
- }
-
- @NonNull
- public String getName() {
- return featureName;
- }
+/**
+ * Converts user-supplied selection values (including the legacy {@code
hibernate}
+ * value) to {@link GormImpl} for HTTP parameter binding.
+ */
+@Singleton
+public class GormImplTypeConverter implements TypeConverter<CharSequence,
GormImpl> {
- @NonNull
- public String getLabel() {
- return label;
+ @Override
+ public Optional<GormImpl> convert(CharSequence object, Class<GormImpl>
targetType, ConversionContext context) {
+ return Optional.ofNullable(GormImpl.parse(object.toString()));
}
-
}
diff --git
a/grails-forge/grails-forge-core/src/test/groovy/org/grails/forge/feature/database/GrailsDataHibernate7Spec.groovy
b/grails-forge/grails-forge-core/src/test/groovy/org/grails/forge/feature/database/GrailsDataHibernate7Spec.groovy
index c795b6e039..5c22075f5a 100644
---
a/grails-forge/grails-forge-core/src/test/groovy/org/grails/forge/feature/database/GrailsDataHibernate7Spec.groovy
+++
b/grails-forge/grails-forge-core/src/test/groovy/org/grails/forge/feature/database/GrailsDataHibernate7Spec.groovy
@@ -167,7 +167,7 @@ class GrailsDataHibernate7Spec extends
ApplicationContextSpec implements Command
then:
IllegalArgumentException e = thrown()
- e.message.contains('Only one GORM for Hibernate implementation can be
selected')
+ e.message.contains('Only one Grails Data for Hibernate implementation
can be selected')
}
void "test config"() {
diff --git
a/grails-forge/grails-forge-core/src/main/java/org/grails/forge/options/GormImpl.java
b/grails-forge/grails-forge-core/src/test/groovy/org/grails/forge/options/GormImplSpec.groovy
similarity index 53%
copy from
grails-forge/grails-forge-core/src/main/java/org/grails/forge/options/GormImpl.java
copy to
grails-forge/grails-forge-core/src/test/groovy/org/grails/forge/options/GormImplSpec.groovy
index 1c53118c8e..8334323918 100644
---
a/grails-forge/grails-forge-core/src/main/java/org/grails/forge/options/GormImpl.java
+++
b/grails-forge/grails-forge-core/src/test/groovy/org/grails/forge/options/GormImplSpec.groovy
@@ -16,33 +16,33 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.grails.forge.options;
-import io.micronaut.core.annotation.NonNull;
+package org.grails.forge.options
-public enum GormImpl {
+import spock.lang.Specification
+import spock.lang.Unroll
- HIBERNATE("gorm-hibernate5", "Hibernate 5"),
- HIBERNATE7("gorm-hibernate7", "Hibernate 7"),
- MONGODB("gorm-mongodb", "MongoDB");
+class GormImplSpec extends Specification {
- public static final GormImpl DEFAULT_OPTION = HIBERNATE;
- private final String featureName;
- private final String label;
+ @Unroll
+ void "parse resolves #value to #expected"() {
+ expect:
+ GormImpl.parse(value) == expected
- GormImpl(String featureName, String label) {
- this.featureName = featureName;
- this.label = label;
+ where:
+ value | expected
+ 'hibernate5' | GormImpl.HIBERNATE5
+ 'HIBERNATE5' | GormImpl.HIBERNATE5
+ 'hibernate' | GormImpl.HIBERNATE5
+ 'HIBERNATE' | GormImpl.HIBERNATE5
+ 'hibernate7' | GormImpl.HIBERNATE7
+ 'mongodb' | GormImpl.MONGODB
+ 'neo4j' | null
+ null | null
}
- @NonNull
- public String getName() {
- return featureName;
+ void "the default option is Hibernate 5"() {
+ expect:
+ GormImpl.DEFAULT_OPTION == GormImpl.HIBERNATE5
}
-
- @NonNull
- public String getLabel() {
- return label;
- }
-
}