diff --git a/.github/dependabot.yml b/.github/dependabot.yml
new file mode 100644
index 0000000000..2bd7143061
--- /dev/null
+++ b/.github/dependabot.yml
@@ -0,0 +1,17 @@
+# To get started with Dependabot version updates, you'll need to specify which
+# package ecosystems to update and where the package manifests are located.
+# Please see the documentation for all configuration options:
+# https://docs.github.com/github/administering-a-repository/configuration-options-for-dependency-updates
+
+version: 2
+updates:
+ - package-ecosystem: "github-actions"
+ directory: "/"
+ schedule:
+ interval: "monthly"
+ groups:
+ workflow-actions:
+ patterns:
+ - "*"
+ allow:
+ - dependency-name: "actions/*"
diff --git a/.github/workflows/build_test.yml b/.github/workflows/build_test.yml
index 109aede3b3..38b3308676 100644
--- a/.github/workflows/build_test.yml
+++ b/.github/workflows/build_test.yml
@@ -9,20 +9,18 @@ jobs:
steps:
- name: Checkout PR Branch
- uses: actions/checkout@v2
+ uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
with:
ref: ${{ github.event.pull_request.head.sha }}
fetch-depth: 0
- name: Setup Java 11
- uses: actions/setup-java@v1
+ uses: actions/setup-java@3a4f6e1af504cf6a31855fa899c6aa5355ba6c12 # v4.7.0
with:
java-version: 11
- java-package: jdk
- architecture: x64
+ distribution: temurin
- name: Build and Test
- uses: GabrielBB/xvfb-action@v1
- with:
- run: mvn clean install
-
+ uses: GabrielBB/xvfb-action@b706e4e27b14669b486812790492dc50ca16b465 # v1.7
+ with:
+ run: ./mvnw clean install
diff --git a/.mvn/wrapper/maven-wrapper.jar b/.mvn/wrapper/maven-wrapper.jar
new file mode 100644
index 0000000000..7967f30dd1
Binary files /dev/null and b/.mvn/wrapper/maven-wrapper.jar differ
diff --git a/.mvn/wrapper/maven-wrapper.properties b/.mvn/wrapper/maven-wrapper.properties
new file mode 100644
index 0000000000..f5b763a229
--- /dev/null
+++ b/.mvn/wrapper/maven-wrapper.properties
@@ -0,0 +1,20 @@
+# 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.
+wrapperVersion=3.3.2
+distributionType=bin
+distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.9.7/apache-maven-3.9.7-bin.zip
+wrapperUrl=https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.3.2/maven-wrapper-3.3.2.jar
diff --git a/.release/.gitignore b/.release/.gitignore
new file mode 100644
index 0000000000..cdd9a17d6b
--- /dev/null
+++ b/.release/.gitignore
@@ -0,0 +1,3 @@
+# The folder into which we checkout our release scripts into
+*
+!.gitignore
\ No newline at end of file
diff --git a/ant/pom.xml b/ant/pom.xml
index 5b08096009..52da9b0df2 100644
--- a/ant/pom.xml
+++ b/ant/pom.xml
@@ -21,7 +21,7 @@
org.hibernate.tool
hibernate-tools-parent
- 6.5.0.Final
+ 6.5.4-SNAPSHOT
hibernate-tools-ant
@@ -30,6 +30,11 @@
Hibernate Tools Ant Tasks
jar
+
+
+ false
+
+
org.apache.ant
diff --git a/ci/release/Jenkinsfile b/ci/release/Jenkinsfile
new file mode 100644
index 0000000000..21e327bdd0
--- /dev/null
+++ b/ci/release/Jenkinsfile
@@ -0,0 +1,120 @@
+/*
+ * Hibernate Tools, Tooling for your Hibernate Projects
+ *
+ * Copyright 2016-2024 Red Hat, Inc.
+ *
+ * Licensed under the GNU Lesser General Public License (LGPL),
+ * version 2.1 or later (the "License").
+ * You may not use this file except in compliance with the License.
+ * You may read the licence in the 'lgpl.txt' file in the root folder of
+ * project or obtain a copy at
+ *
+ * http://www.gnu.org/licenses/lgpl-2.1.html
+ *
+ * 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.
+ */
+@Library('hibernate-jenkins-pipeline-helpers') _
+
+import org.hibernate.jenkins.pipeline.helpers.version.Version
+
+pipeline {
+ agent {
+ label 'Release'
+ }
+ tools {
+ maven 'Apache Maven 3.9'
+ jdk 'OpenJDK 11 Latest'
+ }
+ options {
+ buildDiscarder logRotator(daysToKeepStr: '30', numToKeepStr: '10')
+ disableConcurrentBuilds(abortPrevious: false)
+ }
+ parameters {
+ string(
+ name: 'RELEASE_VERSION',
+ defaultValue: '6.5.4.Final',
+ description: 'The version to be released, e.g. 6.5.4.Final.',
+ trim: true
+ )
+ string(
+ name: 'DEVELOPMENT_VERSION',
+ defaultValue: '6.5.5-SNAPSHOT',
+ description: 'The next version to be used after the release, e.g. 6.5.5-SNAPSHOT.',
+ trim: true
+ )
+ booleanParam(
+ name: 'RELEASE_DRY_RUN',
+ defaultValue: true,
+ description: 'If true, just simulate the release, without pushing any commits or tags, and without uploading any artifacts or documentation.'
+ )
+ booleanParam(
+ name: 'RELEASE_PUBLISH_AUTOMATICALLY',
+ defaultValue: false,
+ description: 'If true, staging repository will get closed and published automatically, otherwise the artifacts will only be uploaded and the publishing (releasing the staging repository) has to be performed manually at Maven Central portal.'
+ )
+ }
+ stages {
+ stage('Release') {
+ when {
+ beforeAgent true
+ // Releases must be triggered explicitly
+ // This is just for safety; normally the Jenkins job for this pipeline
+ // should be configured to "Suppress automatic SCM triggering"
+ // See https://stackoverflow.com/questions/58259326/prevent-jenkins-multibranch-pipeline-from-triggering-builds-for-new-branches
+ triggeredBy cause: "UserIdCause"
+ }
+ steps {
+ script {
+ // Check that all the necessary parameters are set
+ if (!params.RELEASE_VERSION) {
+ throw new IllegalArgumentException("Missing value for parameter RELEASE_VERSION.")
+ }
+ if (!params.DEVELOPMENT_VERSION) {
+ throw new IllegalArgumentException("Missing value for parameter DEVELOPMENT_VERSION.")
+ }
+
+ def releaseVersion = Version.parseReleaseVersion(params.RELEASE_VERSION)
+ def developmentVersion = Version.parseDevelopmentVersion(params.DEVELOPMENT_VERSION)
+ env.JRELEASER_DRY_RUN = params.RELEASE_DRY_RUN
+ if (!params.RELEASE_PUBLISH_AUTOMATICALLY) {
+ env.JRELEASER_DEPLOY_MAVEN_MAVENCENTRAL_STAGE='UPLOAD'
+ }
+ echo "Performing full release for version ${releaseVersion.toString()}"
+
+ withMaven(mavenSettingsConfig: params.RELEASE_DRY_RUN ? null : 'ci-hibernate.deploy.settings.maven',
+ mavenLocalRepo: env.WORKSPACE_TMP + '/.m2repository') {
+ configFileProvider([configFile(fileId: 'release.config.ssh', targetLocation: env.HOME + '/.ssh/config'),
+ configFile(fileId: 'release.config.ssh.knownhosts', targetLocation: env.HOME + '/.ssh/known_hosts')]) {
+ // using MAVEN_GPG_PASSPHRASE (the default env variable name for passphrase in maven gpg plugin)
+ withCredentials([file(credentialsId: 'release.gpg.private-key', variable: 'RELEASE_GPG_PRIVATE_KEY_PATH'),
+ string(credentialsId: 'release.gpg.passphrase', variable: 'JRELEASER_GPG_PASSPHRASE'),
+ usernamePassword(credentialsId: 'central.sonatype.com', passwordVariable: 'JRELEASER_MAVENCENTRAL_TOKEN', usernameVariable: 'JRELEASER_MAVENCENTRAL_USERNAME'),
+ usernamePassword(credentialsId: 'gradle-plugin-portal-api-key', passwordVariable: 'GRADLE_PUBLISH_SECRET', usernameVariable: 'GRADLE_PUBLISH_KEY'),
+ string(credentialsId: 'Hibernate-CI.github.com', variable: 'JRELEASER_GITHUB_TOKEN')]) {
+ sshagent(['ed25519.Hibernate-CI.github.com', 'hibernate.filemgmt.jboss.org', 'hibernate-ci.frs.sourceforge.net']) {
+ sh 'cat $HOME/.ssh/config'
+ dir('.release/scripts') {
+ sh 'git clone https://github.com/hibernate/hibernate-release-scripts.git .'
+ }
+ sh """
+ bash -xe .release/scripts/release.sh -j ${params.RELEASE_DRY_RUN ? '-d' : ''} \
+ tools ${releaseVersion.toString()} ${developmentVersion.toString()}
+ """
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ post {
+ always {
+ notifyBuildResult notifySuccessAfterSuccess: true, maintainers: 'koen@hibernate.org'
+ }
+ }
+}
diff --git a/gradle/.gitattributes b/gradle/.gitattributes
new file mode 100644
index 0000000000..097f9f98d9
--- /dev/null
+++ b/gradle/.gitattributes
@@ -0,0 +1,9 @@
+#
+# https://help.github.com/articles/dealing-with-line-endings/
+#
+# Linux start script should use lf
+/gradlew text eol=lf
+
+# These are Windows script files and should use crlf
+*.bat text eol=crlf
+
diff --git a/gradle/.gitignore b/gradle/.gitignore
new file mode 100644
index 0000000000..1b6985c009
--- /dev/null
+++ b/gradle/.gitignore
@@ -0,0 +1,5 @@
+# Ignore Gradle project-specific cache directory
+.gradle
+
+# Ignore Gradle build output directory
+build
diff --git a/gradle/gradle/libs.versions.toml b/gradle/gradle/libs.versions.toml
new file mode 100644
index 0000000000..5a98a3eadb
--- /dev/null
+++ b/gradle/gradle/libs.versions.toml
@@ -0,0 +1,8 @@
+# This file was generated by the Gradle 'init' task.
+# https://docs.gradle.org/current/userguide/platforms.html#sub::toml-dependencies-format
+
+[versions]
+junit-jupiter = "5.10.2"
+
+[libraries]
+junit-jupiter = { module = "org.junit.jupiter:junit-jupiter", version.ref = "junit-jupiter" }
diff --git a/gradle/gradle/wrapper/gradle-wrapper.jar b/gradle/gradle/wrapper/gradle-wrapper.jar
new file mode 100644
index 0000000000..e6441136f3
Binary files /dev/null and b/gradle/gradle/wrapper/gradle-wrapper.jar differ
diff --git a/gradle/gradle/wrapper/gradle-wrapper.properties b/gradle/gradle/wrapper/gradle-wrapper.properties
new file mode 100644
index 0000000000..a4413138c9
--- /dev/null
+++ b/gradle/gradle/wrapper/gradle-wrapper.properties
@@ -0,0 +1,7 @@
+distributionBase=GRADLE_USER_HOME
+distributionPath=wrapper/dists
+distributionUrl=https\://services.gradle.org/distributions/gradle-8.8-bin.zip
+networkTimeout=10000
+validateDistributionUrl=true
+zipStoreBase=GRADLE_USER_HOME
+zipStorePath=wrapper/dists
diff --git a/gradle/gradlew b/gradle/gradlew
new file mode 100755
index 0000000000..b740cf1339
--- /dev/null
+++ b/gradle/gradlew
@@ -0,0 +1,249 @@
+#!/bin/sh
+
+#
+# Copyright © 2015-2021 the original authors.
+#
+# Licensed 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
+#
+# https://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.
+#
+
+##############################################################################
+#
+# Gradle start up script for POSIX generated by Gradle.
+#
+# Important for running:
+#
+# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is
+# noncompliant, but you have some other compliant shell such as ksh or
+# bash, then to run this script, type that shell name before the whole
+# command line, like:
+#
+# ksh Gradle
+#
+# Busybox and similar reduced shells will NOT work, because this script
+# requires all of these POSIX shell features:
+# * functions;
+# * expansions «$var», «${var}», «${var:-default}», «${var+SET}»,
+# «${var#prefix}», «${var%suffix}», and «$( cmd )»;
+# * compound commands having a testable exit status, especially «case»;
+# * various built-in commands including «command», «set», and «ulimit».
+#
+# Important for patching:
+#
+# (2) This script targets any POSIX shell, so it avoids extensions provided
+# by Bash, Ksh, etc; in particular arrays are avoided.
+#
+# The "traditional" practice of packing multiple parameters into a
+# space-separated string is a well documented source of bugs and security
+# problems, so this is (mostly) avoided, by progressively accumulating
+# options in "$@", and eventually passing that to Java.
+#
+# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS,
+# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly;
+# see the in-line comments for details.
+#
+# There are tweaks for specific operating systems such as AIX, CygWin,
+# Darwin, MinGW, and NonStop.
+#
+# (3) This script is generated from the Groovy template
+# https://github.com/gradle/gradle/blob/HEAD/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
+# within the Gradle project.
+#
+# You can find Gradle at https://github.com/gradle/gradle/.
+#
+##############################################################################
+
+# Attempt to set APP_HOME
+
+# Resolve links: $0 may be a link
+app_path=$0
+
+# Need this for daisy-chained symlinks.
+while
+ APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path
+ [ -h "$app_path" ]
+do
+ ls=$( ls -ld "$app_path" )
+ link=${ls#*' -> '}
+ case $link in #(
+ /*) app_path=$link ;; #(
+ *) app_path=$APP_HOME$link ;;
+ esac
+done
+
+# This is normally unused
+# shellcheck disable=SC2034
+APP_BASE_NAME=${0##*/}
+# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036)
+APP_HOME=$( cd "${APP_HOME:-./}" > /dev/null && pwd -P ) || exit
+
+# Use the maximum available, or set MAX_FD != -1 to use that value.
+MAX_FD=maximum
+
+warn () {
+ echo "$*"
+} >&2
+
+die () {
+ echo
+ echo "$*"
+ echo
+ exit 1
+} >&2
+
+# OS specific support (must be 'true' or 'false').
+cygwin=false
+msys=false
+darwin=false
+nonstop=false
+case "$( uname )" in #(
+ CYGWIN* ) cygwin=true ;; #(
+ Darwin* ) darwin=true ;; #(
+ MSYS* | MINGW* ) msys=true ;; #(
+ NONSTOP* ) nonstop=true ;;
+esac
+
+CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
+
+
+# Determine the Java command to use to start the JVM.
+if [ -n "$JAVA_HOME" ] ; then
+ if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
+ # IBM's JDK on AIX uses strange locations for the executables
+ JAVACMD=$JAVA_HOME/jre/sh/java
+ else
+ JAVACMD=$JAVA_HOME/bin/java
+ fi
+ if [ ! -x "$JAVACMD" ] ; then
+ die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
+
+Please set the JAVA_HOME variable in your environment to match the
+location of your Java installation."
+ fi
+else
+ JAVACMD=java
+ if ! command -v java >/dev/null 2>&1
+ then
+ die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+
+Please set the JAVA_HOME variable in your environment to match the
+location of your Java installation."
+ fi
+fi
+
+# Increase the maximum file descriptors if we can.
+if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then
+ case $MAX_FD in #(
+ max*)
+ # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked.
+ # shellcheck disable=SC2039,SC3045
+ MAX_FD=$( ulimit -H -n ) ||
+ warn "Could not query maximum file descriptor limit"
+ esac
+ case $MAX_FD in #(
+ '' | soft) :;; #(
+ *)
+ # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked.
+ # shellcheck disable=SC2039,SC3045
+ ulimit -n "$MAX_FD" ||
+ warn "Could not set maximum file descriptor limit to $MAX_FD"
+ esac
+fi
+
+# Collect all arguments for the java command, stacking in reverse order:
+# * args from the command line
+# * the main class name
+# * -classpath
+# * -D...appname settings
+# * --module-path (only if needed)
+# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables.
+
+# For Cygwin or MSYS, switch paths to Windows format before running java
+if "$cygwin" || "$msys" ; then
+ APP_HOME=$( cygpath --path --mixed "$APP_HOME" )
+ CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" )
+
+ JAVACMD=$( cygpath --unix "$JAVACMD" )
+
+ # Now convert the arguments - kludge to limit ourselves to /bin/sh
+ for arg do
+ if
+ case $arg in #(
+ -*) false ;; # don't mess with options #(
+ /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath
+ [ -e "$t" ] ;; #(
+ *) false ;;
+ esac
+ then
+ arg=$( cygpath --path --ignore --mixed "$arg" )
+ fi
+ # Roll the args list around exactly as many times as the number of
+ # args, so each arg winds up back in the position where it started, but
+ # possibly modified.
+ #
+ # NB: a `for` loop captures its iteration list before it begins, so
+ # changing the positional parameters here affects neither the number of
+ # iterations, nor the values presented in `arg`.
+ shift # remove old arg
+ set -- "$@" "$arg" # push replacement arg
+ done
+fi
+
+
+# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
+
+# Collect all arguments for the java command:
+# * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments,
+# and any embedded shellness will be escaped.
+# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be
+# treated as '${Hostname}' itself on the command line.
+
+set -- \
+ "-Dorg.gradle.appname=$APP_BASE_NAME" \
+ -classpath "$CLASSPATH" \
+ org.gradle.wrapper.GradleWrapperMain \
+ "$@"
+
+# Stop when "xargs" is not available.
+if ! command -v xargs >/dev/null 2>&1
+then
+ die "xargs is not available"
+fi
+
+# Use "xargs" to parse quoted args.
+#
+# With -n1 it outputs one arg per line, with the quotes and backslashes removed.
+#
+# In Bash we could simply go:
+#
+# readarray ARGS < <( xargs -n1 <<<"$var" ) &&
+# set -- "${ARGS[@]}" "$@"
+#
+# but POSIX shell has neither arrays nor command substitution, so instead we
+# post-process each arg (as a line of input to sed) to backslash-escape any
+# character that might be a shell metacharacter, then use eval to reverse
+# that process (while maintaining the separation between arguments), and wrap
+# the whole thing up as a single "set" statement.
+#
+# This will of course break if any of these variables contains a newline or
+# an unmatched quote.
+#
+
+eval "set -- $(
+ printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" |
+ xargs -n1 |
+ sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' |
+ tr '\n' ' '
+ )" '"$@"'
+
+exec "$JAVACMD" "$@"
diff --git a/gradle/gradlew.bat b/gradle/gradlew.bat
new file mode 100644
index 0000000000..25da30dbde
--- /dev/null
+++ b/gradle/gradlew.bat
@@ -0,0 +1,92 @@
+@rem
+@rem Copyright 2015 the original author or authors.
+@rem
+@rem Licensed under the Apache License, Version 2.0 (the "License");
+@rem you may not use this file except in compliance with the License.
+@rem You may obtain a copy of the License at
+@rem
+@rem https://www.apache.org/licenses/LICENSE-2.0
+@rem
+@rem Unless required by applicable law or agreed to in writing, software
+@rem distributed under the License is distributed on an "AS IS" BASIS,
+@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+@rem See the License for the specific language governing permissions and
+@rem limitations under the License.
+@rem
+
+@if "%DEBUG%"=="" @echo off
+@rem ##########################################################################
+@rem
+@rem Gradle startup script for Windows
+@rem
+@rem ##########################################################################
+
+@rem Set local scope for the variables with windows NT shell
+if "%OS%"=="Windows_NT" setlocal
+
+set DIRNAME=%~dp0
+if "%DIRNAME%"=="" set DIRNAME=.
+@rem This is normally unused
+set APP_BASE_NAME=%~n0
+set APP_HOME=%DIRNAME%
+
+@rem Resolve any "." and ".." in APP_HOME to make it shorter.
+for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi
+
+@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
+
+@rem Find java.exe
+if defined JAVA_HOME goto findJavaFromJavaHome
+
+set JAVA_EXE=java.exe
+%JAVA_EXE% -version >NUL 2>&1
+if %ERRORLEVEL% equ 0 goto execute
+
+echo. 1>&2
+echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2
+echo. 1>&2
+echo Please set the JAVA_HOME variable in your environment to match the 1>&2
+echo location of your Java installation. 1>&2
+
+goto fail
+
+:findJavaFromJavaHome
+set JAVA_HOME=%JAVA_HOME:"=%
+set JAVA_EXE=%JAVA_HOME%/bin/java.exe
+
+if exist "%JAVA_EXE%" goto execute
+
+echo. 1>&2
+echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2
+echo. 1>&2
+echo Please set the JAVA_HOME variable in your environment to match the 1>&2
+echo location of your Java installation. 1>&2
+
+goto fail
+
+:execute
+@rem Setup the command line
+
+set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
+
+
+@rem Execute Gradle
+"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %*
+
+:end
+@rem End local scope for the variables with windows NT shell
+if %ERRORLEVEL% equ 0 goto mainEnd
+
+:fail
+rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
+rem the _cmd.exe /c_ return code!
+set EXIT_CODE=%ERRORLEVEL%
+if %EXIT_CODE% equ 0 set EXIT_CODE=1
+if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE%
+exit /b %EXIT_CODE%
+
+:mainEnd
+if "%OS%"=="Windows_NT" endlocal
+
+:omega
diff --git a/gradle/plugin/bin/.gitignore b/gradle/plugin/bin/.gitignore
new file mode 100644
index 0000000000..dc141cdac9
--- /dev/null
+++ b/gradle/plugin/bin/.gitignore
@@ -0,0 +1,3 @@
+/functionalTest/
+/main/
+/test/
diff --git a/gradle/plugin/build.gradle b/gradle/plugin/build.gradle
new file mode 100644
index 0000000000..f42eeb15d5
--- /dev/null
+++ b/gradle/plugin/build.gradle
@@ -0,0 +1,141 @@
+plugins {
+ id 'java-gradle-plugin'
+ id 'maven-publish'
+ id 'com.gradle.plugin-publish' version '1.2.1'
+}
+
+group = 'org.hibernate.tool'
+project.description = 'Gradle plugin to provide hibernate-tools reverse engineering and code/schema generation abilities.'
+
+java {
+ toolchain {
+ languageVersion = JavaLanguageVersion.of(11)
+ }
+}
+
+repositories {
+ mavenCentral()
+ mavenLocal()
+}
+
+dependencies {
+
+ implementation "org.hibernate.tool:hibernate-tools-orm:$version"
+
+ testImplementation libs.junit.jupiter
+
+ testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
+}
+
+rootProject.ext.set("gradle.publish.key", System.env.PLUGIN_PORTAL_USERNAME)
+rootProject.ext.set("gradle.publish.secret", System.env.PLUGIN_PORTAL_PASSWORD)
+
+gradlePlugin {
+ website = 'https://github.com/hibernate/hibernate-tools/tree/main/gradle/plugin'
+ vcsUrl = 'https://github.com/hibernate/hibernate-tools/tree/main/gradle/plugin'
+ plugins {
+ hibernate {
+ id = 'org.hibernate.tool.hibernate-tools-gradle'
+ implementationClass = 'org.hibernate.tool.gradle.Plugin'
+ displayName = 'Hibernate Tools Gradle Plugin'
+ description = project.description
+ tags = ['hibernate','tools','reverse engineering','reveng','generation']
+ }
+ }
+}
+
+sourceSets {
+ functionalTest {
+ }
+}
+
+configurations.functionalTestImplementation.extendsFrom(configurations.testImplementation)
+configurations.functionalTestRuntimeOnly.extendsFrom(configurations.testRuntimeOnly)
+
+tasks.register('functionalTest', Test) {
+ testClassesDirs = sourceSets.functionalTest.output.classesDirs
+ classpath = sourceSets.functionalTest.runtimeClasspath
+ useJUnitPlatform()
+}
+
+gradlePlugin.testSourceSets.add(sourceSets.functionalTest)
+
+tasks.named('check') {
+ dependsOn(tasks.functionalTest)
+}
+
+tasks.named('test') {
+ useJUnitPlatform()
+}
+
+tasks.named('publishPlugins') {
+ onlyIf {
+ def isDryRun = System.getenv('JRELEASER_DRY_RUN')
+ !Boolean.parseBoolean(isDryRun)
+ }
+}
+
+publishing {
+ publications {
+ pluginMaven(MavenPublication) {
+ pom {
+ name = project.name
+ groupId = 'org.hibernate.tool'
+ artifactId = project.name
+ version = project.version
+
+ description = project.description
+ url = 'https://hibernate.org/tools'
+
+ organization {
+ name = 'Hibernate.org'
+ url = 'https://hibernate.org'
+ }
+
+ licenses {
+ license {
+ name = 'Apache License, version 2.0'
+ url = 'https://www.apache.org/licenses/LICENSE-2.0'
+ }
+ }
+
+ scm {
+ url = 'https://github.com/hibernate/hibernate-tools'
+ connection = 'scm:git:https://github.com/hibernate/hibernate-tools.git'
+ developerConnection = 'scm:git:git@github.com:hibernate/hibernate-tools.git'
+ }
+
+ developers {
+ developer {
+ id = 'maxandersen'
+ name = 'Max Andersen'
+ email = 'max@hibernate.org'
+ url = 'https://in.relation.to/Bloggers/Max'
+ }
+ developer {
+ id = 'koentsje'
+ name = 'Koen Aers'
+ email = 'koen@hibernate.org'
+ url = 'https://koentsje.blogspot.be'
+ }
+ }
+
+ issueManagement {
+ system = 'jira'
+ url = 'https://hibernate.atlassian.net/browse/HBX'
+ }
+ }
+ }
+ }
+ repositories {
+ maven {
+ name = "staging"
+ var mavenPath = findProperty("mavenStagingDirectory")
+ if (mavenPath == null) {
+ url = rootProject.layout.buildDirectory.dir("staging-deploy${File.separator}maven")
+ } else {
+ url = URI.create(mavenPath).toURL()
+ }
+ }
+ }
+}
diff --git a/gradle/plugin/src/functionalTest/java/org/hibernate/tool/gradle/GenerateCfgTest.java b/gradle/plugin/src/functionalTest/java/org/hibernate/tool/gradle/GenerateCfgTest.java
new file mode 100644
index 0000000000..aee4e698e2
--- /dev/null
+++ b/gradle/plugin/src/functionalTest/java/org/hibernate/tool/gradle/GenerateCfgTest.java
@@ -0,0 +1,38 @@
+package org.hibernate.tool.gradle;
+
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
+import java.io.File;
+import java.io.IOException;
+import java.nio.file.Files;
+
+import org.gradle.testkit.runner.BuildResult;
+import org.hibernate.tool.gradle.test.func.utils.FuncTestConstants;
+import org.hibernate.tool.gradle.test.func.utils.FuncTestTemplate;
+import org.junit.jupiter.api.Test;
+
+class GenerateCfgTest extends FuncTestTemplate implements FuncTestConstants {
+
+ @Test
+ void testGenerateCfg() throws IOException {
+ performTask("generateCfg", true);
+ }
+
+ @Override
+ public void verifyBuild(BuildResult buildResult) {
+ try {
+ File generatedSourcesFolder = new File(projectDir, "generated-sources");
+ assertTrue(buildResult.getOutput().contains("Starting CFG export to directory: " + generatedSourcesFolder.getCanonicalPath()));
+ assertTrue(generatedSourcesFolder.exists());
+ assertTrue(generatedSourcesFolder.isDirectory());
+ File cfgFile = new File(generatedSourcesFolder, "hibernate.cfg.xml");
+ assertTrue(cfgFile.exists());
+ assertTrue(cfgFile.isFile());
+ String cfgContents = Files.readString(cfgFile.toPath());
+ assertTrue(cfgContents.contains(""));
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ }
diff --git a/gradle/plugin/src/functionalTest/java/org/hibernate/tool/gradle/GenerateDaoTest.java b/gradle/plugin/src/functionalTest/java/org/hibernate/tool/gradle/GenerateDaoTest.java
new file mode 100644
index 0000000000..4b87877980
--- /dev/null
+++ b/gradle/plugin/src/functionalTest/java/org/hibernate/tool/gradle/GenerateDaoTest.java
@@ -0,0 +1,46 @@
+package org.hibernate.tool.gradle;
+
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
+import java.io.File;
+import java.io.IOException;
+
+import org.gradle.testkit.runner.BuildResult;
+import org.hibernate.tool.gradle.test.func.utils.FuncTestConstants;
+import org.hibernate.tool.gradle.test.func.utils.FuncTestTemplate;
+import org.junit.jupiter.api.Test;
+
+class GenerateDaoTest extends FuncTestTemplate implements FuncTestConstants {
+
+ private static final String BUILD_FILE_HIBERNATE_TOOLS_SECTION =
+ "hibernateTools {\n" +
+ " packageName = 'foo.model'\n" +
+ "}\n";
+
+ @Override
+ public String getBuildFileHibernateToolsSection() {
+ return BUILD_FILE_HIBERNATE_TOOLS_SECTION;
+ }
+
+ @Test
+ void testGenerateJava() throws IOException {
+ performTask("generateDao", true);
+ }
+
+ @Override
+ protected void verifyBuild(BuildResult buildResult) {
+ try {
+ File generatedSourcesFolder = new File(projectDir, "generated-sources");
+ assertTrue(buildResult.getOutput().contains(
+ "Starting DAO export to directory: " + generatedSourcesFolder.getCanonicalPath()));
+ assertTrue(generatedSourcesFolder.exists());
+ assertTrue(generatedSourcesFolder.isDirectory());
+ File fooFile = new File(generatedSourcesFolder, "foo/model/FooHome.java");
+ assertTrue(fooFile.exists());
+ assertTrue(fooFile.isFile());
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ }
diff --git a/gradle/plugin/src/functionalTest/java/org/hibernate/tool/gradle/GenerateHbmTest.java b/gradle/plugin/src/functionalTest/java/org/hibernate/tool/gradle/GenerateHbmTest.java
new file mode 100644
index 0000000000..0697a1c382
--- /dev/null
+++ b/gradle/plugin/src/functionalTest/java/org/hibernate/tool/gradle/GenerateHbmTest.java
@@ -0,0 +1,46 @@
+package org.hibernate.tool.gradle;
+
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
+import java.io.File;
+import java.io.IOException;
+
+import org.gradle.testkit.runner.BuildResult;
+import org.hibernate.tool.gradle.test.func.utils.FuncTestConstants;
+import org.hibernate.tool.gradle.test.func.utils.FuncTestTemplate;
+import org.junit.jupiter.api.Test;
+
+class GenerateHbmTest extends FuncTestTemplate implements FuncTestConstants {
+
+ private static final String BUILD_FILE_HIBERNATE_TOOLS_SECTION =
+ "hibernateTools {\n" +
+ " packageName = 'foo.model'\n" +
+ "}\n";
+
+ @Override
+ public String getBuildFileHibernateToolsSection() {
+ return BUILD_FILE_HIBERNATE_TOOLS_SECTION;
+ }
+
+ @Test
+ void testGenerateHbm() throws IOException {
+ performTask("generateHbm", true);
+ }
+
+ @Override
+ protected void verifyBuild(BuildResult buildResult) {
+ try {
+ File generatedSourcesFolder = new File(projectDir, "generated-sources");
+ assertTrue(buildResult.getOutput().contains(
+ "Starting HBM export to directory: " + generatedSourcesFolder.getCanonicalPath()));
+ assertTrue(generatedSourcesFolder.exists());
+ assertTrue(generatedSourcesFolder.isDirectory());
+ File fooFile = new File(generatedSourcesFolder, "foo/model/Foo.hbm.xml");
+ assertTrue(fooFile.exists());
+ assertTrue(fooFile.isFile());
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ }
diff --git a/gradle/plugin/src/functionalTest/java/org/hibernate/tool/gradle/GenerateJavaTest.java b/gradle/plugin/src/functionalTest/java/org/hibernate/tool/gradle/GenerateJavaTest.java
new file mode 100644
index 0000000000..d6bc58734c
--- /dev/null
+++ b/gradle/plugin/src/functionalTest/java/org/hibernate/tool/gradle/GenerateJavaTest.java
@@ -0,0 +1,46 @@
+package org.hibernate.tool.gradle;
+
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
+import java.io.File;
+import java.io.IOException;
+
+import org.gradle.testkit.runner.BuildResult;
+import org.hibernate.tool.gradle.test.func.utils.FuncTestConstants;
+import org.hibernate.tool.gradle.test.func.utils.FuncTestTemplate;
+import org.junit.jupiter.api.Test;
+
+class GenerateJavaTest extends FuncTestTemplate implements FuncTestConstants {
+
+ private static final String BUILD_FILE_HIBERNATE_TOOLS_SECTION =
+ "hibernateTools {\n" +
+ " packageName = 'foo.model'\n" +
+ "}\n";
+
+ @Override
+ public String getBuildFileHibernateToolsSection() {
+ return BUILD_FILE_HIBERNATE_TOOLS_SECTION;
+ }
+
+ @Test
+ void testGenerateJava() throws IOException {
+ performTask("generateJava", true);
+ }
+
+ @Override
+ protected void verifyBuild(BuildResult buildResult) {
+ try {
+ File generatedSourcesFolder = new File(projectDir, "generated-sources");
+ assertTrue(buildResult.getOutput().contains(
+ "Starting Java export to directory: " + generatedSourcesFolder.getCanonicalPath()));
+ assertTrue(generatedSourcesFolder.exists());
+ assertTrue(generatedSourcesFolder.isDirectory());
+ File fooFile = new File(generatedSourcesFolder, "foo/model/Foo.java");
+ assertTrue(fooFile.exists());
+ assertTrue(fooFile.isFile());
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ }
diff --git a/gradle/plugin/src/functionalTest/java/org/hibernate/tool/gradle/RunSqlTest.java b/gradle/plugin/src/functionalTest/java/org/hibernate/tool/gradle/RunSqlTest.java
new file mode 100644
index 0000000000..796597a6ac
--- /dev/null
+++ b/gradle/plugin/src/functionalTest/java/org/hibernate/tool/gradle/RunSqlTest.java
@@ -0,0 +1,45 @@
+/*
+ * This source file was generated by the Gradle 'init' task
+ */
+package org.hibernate.tool.gradle;
+
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
+import java.io.File;
+import java.io.IOException;
+
+import org.gradle.testkit.runner.BuildResult;
+import org.hibernate.tool.gradle.test.func.utils.FuncTestConstants;
+import org.hibernate.tool.gradle.test.func.utils.FuncTestTemplate;
+import org.junit.jupiter.api.Test;
+
+class RunSqlTest extends FuncTestTemplate implements FuncTestConstants {
+
+ private static final String BUILD_FILE_HIBERNATE_TOOLS_SECTION =
+ "hibernateTools {\n" +
+ " sqlToRun = 'create table foo (id int not null primary key, baz varchar(256))'\n" +
+ " hibernateProperties = 'foo.bar'" +
+ "}\n";
+
+ @Override
+ public String getBuildFileHibernateToolsSection() {
+ return BUILD_FILE_HIBERNATE_TOOLS_SECTION;
+ }
+
+ @Override
+ public String getHibernatePropertiesFileName() {
+ return "foo.bar";
+ }
+
+ @Test
+ void testRunSql() throws IOException {
+ performTask("runSql", false);
+ }
+
+ @Override
+ protected void verifyBuild(BuildResult buildResult) {
+ assertTrue(buildResult.getOutput().contains("Running SQL: create table foo (id int not null primary key, baz varchar(256))"));
+ assertTrue(new File(projectDir, DATABASE_FOLDER_NAME + "/" + DATABASE_FILE_NAME).exists());
+ }
+
+ }
\ No newline at end of file
diff --git a/gradle/plugin/src/functionalTest/java/org/hibernate/tool/gradle/test/func/utils/FuncTestConstants.java b/gradle/plugin/src/functionalTest/java/org/hibernate/tool/gradle/test/func/utils/FuncTestConstants.java
new file mode 100644
index 0000000000..d1620d2e45
--- /dev/null
+++ b/gradle/plugin/src/functionalTest/java/org/hibernate/tool/gradle/test/func/utils/FuncTestConstants.java
@@ -0,0 +1,65 @@
+package org.hibernate.tool.gradle.test.func.utils;
+
+public interface FuncTestConstants {
+
+ public static final String DATABASE_NAME = "bardb";
+ public static final String DATABASE_FILE_NAME = DATABASE_NAME + ".mv.db";
+ public static final String DATABASE_FOLDER_NAME = "database";
+ public static final String DATABASE_PATH = DATABASE_FOLDER_NAME + "/" + DATABASE_NAME;
+ public static final String HIBERNATE_PROPERTIES_FILE_NAME = "hibernate.properties";
+ public static final String RESOURCES_FOLDER_PATH = "src/main/resources";
+ public static final String GRADLE_BUILD_FILE_NAME = "build.gradle";
+ public static final String GRADLE_SETTINGS_FILE_NAME = "settions.gradle";
+ public static final String PROJECT_DIR_PLACEHOLDER = "${projectDir}";
+
+ public static final String HIBERNATE_PROPERTIES_CONTENTS =
+ "hibernate.connection.driver_class=org.h2.Driver\n" +
+ "hibernate.connection.url=jdbc:h2:" + PROJECT_DIR_PLACEHOLDER + "/" + DATABASE_PATH + "\n" +
+ "hibernate.connection.username=sa\n" +
+ "hibernate.connection.password=\n"
+ ;
+
+ public static final String BUILD_FILE_PLUGINS_SECTION =
+ "plugins {\n" +
+ " id('application')\n" +
+ " id('org.hibernate.tool.hibernate-tools-gradle')\n" +
+ "}\n";
+
+ public static final String BUILD_FILE_REPOSITORIES_SECTION =
+ "repositories {\n" +
+ " mavenCentral()\n" +
+ "}\n";
+
+ public static final String BUILD_FILE_DEPENDENCIES_SECTION =
+ "dependencies {\n" +
+ " implementation('com.h2database:h2:2.1.214')\n" +
+ "}\n";
+
+ default String getBuildFilePluginsSection() {
+ return BUILD_FILE_PLUGINS_SECTION;
+ }
+
+ default String getBuildFileRepositoriesSection() {
+ return BUILD_FILE_REPOSITORIES_SECTION;
+ }
+
+ default String getBuildFileDependenciesSection() {
+ return BUILD_FILE_DEPENDENCIES_SECTION;
+ }
+
+ default String getBuildFileHibernateToolsSection() {
+ return "";
+ }
+
+ default String getBuildFileContents() {
+ return getBuildFilePluginsSection() +
+ getBuildFileRepositoriesSection() +
+ getBuildFileDependenciesSection() +
+ getBuildFileHibernateToolsSection();
+ }
+
+ default String getHibernatePropertiesFileName() {
+ return HIBERNATE_PROPERTIES_FILE_NAME;
+ }
+
+}
diff --git a/gradle/plugin/src/functionalTest/java/org/hibernate/tool/gradle/test/func/utils/FuncTestTemplate.java b/gradle/plugin/src/functionalTest/java/org/hibernate/tool/gradle/test/func/utils/FuncTestTemplate.java
new file mode 100644
index 0000000000..e274eb8d18
--- /dev/null
+++ b/gradle/plugin/src/functionalTest/java/org/hibernate/tool/gradle/test/func/utils/FuncTestTemplate.java
@@ -0,0 +1,86 @@
+package org.hibernate.tool.gradle.test.func.utils;
+
+import java.io.File;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.io.Writer;
+import java.net.URISyntaxException;
+import java.nio.file.Files;
+
+import org.gradle.testkit.runner.BuildResult;
+import org.gradle.testkit.runner.GradleRunner;
+import org.junit.jupiter.api.io.TempDir;
+
+public class FuncTestTemplate implements FuncTestConstants {
+
+ @TempDir
+ protected File projectDir;
+
+ protected File getBuildFile() {
+ return new File(projectDir, GRADLE_BUILD_FILE_NAME);
+ }
+
+ protected File getSettingsFile() {
+ return new File(projectDir, GRADLE_SETTINGS_FILE_NAME);
+ }
+
+ protected File getDatabaseFile() {
+ File databaseDir = new File(projectDir, DATABASE_FOLDER_NAME);
+ databaseDir.mkdirs();
+ return new File(databaseDir, DATABASE_FILE_NAME);
+ }
+
+ protected File getHibernatePropertiesFile() {
+ File resourcesDir = new File(projectDir, RESOURCES_FOLDER_PATH);
+ resourcesDir.mkdirs();
+ return new File(resourcesDir, getHibernatePropertiesFileName());
+ }
+
+ protected String getHibernatePropertiesContents() {
+ return HIBERNATE_PROPERTIES_CONTENTS.replace("${projectDir}", projectDir.getAbsolutePath());
+ }
+
+ protected void copyDatabase() {
+ try {
+ Files.copy(
+ new File(getClass().getClassLoader().getResource(DATABASE_FILE_NAME).toURI()).toPath(),
+ getDatabaseFile().toPath());
+ } catch (URISyntaxException | IOException e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ protected void writeString(File file, String string) {
+ try (Writer writer = new FileWriter(file)) {
+ writer.write(string);
+ } catch (IOException e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ protected void performTask(String taskName, boolean needDatabase) {
+ prepareBuild(needDatabase);
+ verifyBuild(runBuild(taskName));
+ }
+
+ protected void prepareBuild(boolean needDatabase) {
+ writeString(getSettingsFile(), "");
+ writeString(getBuildFile(),getBuildFileContents());
+ writeString(getHibernatePropertiesFile(), getHibernatePropertiesContents());
+ if (needDatabase) {
+ copyDatabase();
+ }
+ }
+
+ protected BuildResult runBuild(String taskName) {
+ GradleRunner runner = GradleRunner.create();
+ runner.forwardOutput();
+ runner.withPluginClasspath();
+ runner.withArguments(taskName);
+ runner.withProjectDir(projectDir);
+ return runner.build();
+ }
+
+ protected void verifyBuild(BuildResult buildResult) {}
+
+}
diff --git a/gradle/plugin/src/functionalTest/resources/bardb.mv.db b/gradle/plugin/src/functionalTest/resources/bardb.mv.db
new file mode 100644
index 0000000000..fbe5bee5da
Binary files /dev/null and b/gradle/plugin/src/functionalTest/resources/bardb.mv.db differ
diff --git a/gradle/plugin/src/main/java/org/hibernate/tool/gradle/Extension.java b/gradle/plugin/src/main/java/org/hibernate/tool/gradle/Extension.java
new file mode 100644
index 0000000000..69e8d7599e
--- /dev/null
+++ b/gradle/plugin/src/main/java/org/hibernate/tool/gradle/Extension.java
@@ -0,0 +1,15 @@
+package org.hibernate.tool.gradle;
+
+import org.gradle.api.Project;
+
+public class Extension {
+
+ public String sqlToRun = "";
+ public String hibernateProperties = "hibernate.properties";
+ public String outputFolder = "generated-sources";
+ public String packageName = "";
+ public String revengStrategy = null;
+
+ public Extension(Project project) {}
+
+}
diff --git a/gradle/plugin/src/main/java/org/hibernate/tool/gradle/Plugin.java b/gradle/plugin/src/main/java/org/hibernate/tool/gradle/Plugin.java
new file mode 100644
index 0000000000..f796a9176d
--- /dev/null
+++ b/gradle/plugin/src/main/java/org/hibernate/tool/gradle/Plugin.java
@@ -0,0 +1,34 @@
+package org.hibernate.tool.gradle;
+
+import java.util.Map;
+
+import org.gradle.api.Project;
+import org.hibernate.tool.gradle.task.AbstractTask;
+import org.hibernate.tool.gradle.task.GenerateCfgTask;
+import org.hibernate.tool.gradle.task.GenerateDaoTask;
+import org.hibernate.tool.gradle.task.GenerateHbmTask;
+import org.hibernate.tool.gradle.task.GenerateJavaTask;
+import org.hibernate.tool.gradle.task.RunSqlTask;
+
+public class Plugin implements org.gradle.api.Plugin {
+
+ private static Map> PLUGIN_TASK_MAP = Map.of(
+ "runSql", RunSqlTask.class,
+ "generateJava", GenerateJavaTask.class,
+ "generateCfg", GenerateCfgTask.class,
+ "generateHbm", GenerateHbmTask.class,
+ "generateDao", GenerateDaoTask.class
+ );
+
+ @SuppressWarnings("unchecked")
+ public void apply(Project project) {
+ Extension extension = project.getExtensions().create("hibernateTools", Extension.class, project);
+ for (String key : PLUGIN_TASK_MAP.keySet()) {
+ Class> taskClass = PLUGIN_TASK_MAP.get(key);
+ project.getTasks().register(key, (Class)taskClass);
+ AbstractTask task = (AbstractTask)project.getTasks().getByName(key);
+ task.doFirst(w -> task.initialize(extension));
+ }
+ }
+
+}
diff --git a/gradle/plugin/src/main/java/org/hibernate/tool/gradle/task/AbstractTask.java b/gradle/plugin/src/main/java/org/hibernate/tool/gradle/task/AbstractTask.java
new file mode 100644
index 0000000000..e3c4bad9f7
--- /dev/null
+++ b/gradle/plugin/src/main/java/org/hibernate/tool/gradle/task/AbstractTask.java
@@ -0,0 +1,142 @@
+package org.hibernate.tool.gradle.task;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.net.URLClassLoader;
+import java.util.Properties;
+import java.util.Set;
+
+import org.apache.tools.ant.BuildException;
+import org.gradle.api.DefaultTask;
+import org.gradle.api.artifacts.Configuration;
+import org.gradle.api.artifacts.ConfigurationContainer;
+import org.gradle.api.artifacts.ResolvedArtifact;
+import org.gradle.api.artifacts.ResolvedConfiguration;
+import org.gradle.api.file.SourceDirectorySet;
+import org.gradle.api.tasks.Internal;
+import org.gradle.api.tasks.SourceSet;
+import org.gradle.api.tasks.SourceSetContainer;
+import org.hibernate.tool.api.metadata.MetadataConstants;
+import org.hibernate.tool.api.metadata.MetadataDescriptor;
+import org.hibernate.tool.api.metadata.MetadataDescriptorFactory;
+import org.hibernate.tool.api.reveng.RevengSettings;
+import org.hibernate.tool.api.reveng.RevengStrategy;
+import org.hibernate.tool.api.reveng.RevengStrategyFactory;
+import org.hibernate.tool.gradle.Extension;
+
+public abstract class AbstractTask extends DefaultTask {
+
+ @Internal
+ private Extension extension = null;
+
+ @Internal
+ private Properties hibernateProperties = null;
+
+ public void initialize(Extension extension) {
+ this.extension = extension;
+ }
+
+ Extension getExtension() {
+ return this.extension;
+ }
+
+ void perform() {
+ getLogger().lifecycle("Starting Task '" + getName() + "'");
+ ClassLoader oldLoader = Thread.currentThread().getContextClassLoader();
+ try {
+ Thread.currentThread().setContextClassLoader(
+ new URLClassLoader(
+ resolveProjectClassPath(),
+ oldLoader));
+ doWork();
+ } finally {
+ Thread.currentThread().setContextClassLoader(oldLoader);
+ getLogger().lifecycle("Ending Task '" + getName() + "'");
+ }
+ }
+
+ URL[] resolveProjectClassPath() {
+ try {
+ ConfigurationContainer cc = getProject().getConfigurations();
+ Configuration defaultConf = cc.getByName("compileClasspath");
+ ResolvedConfiguration resolvedConf = defaultConf.getResolvedConfiguration();
+ Set ras = resolvedConf.getResolvedArtifacts();
+ ResolvedArtifact[] resolvedArtifacts = ras.toArray(new ResolvedArtifact[ras.size()]);
+ URL[] urls = new URL[ras.size()];
+ for (int i = 0; i < ras.size(); i++) {
+ urls[i] = resolvedArtifacts[i].getFile().toURI().toURL();
+ }
+ return urls;
+ } catch (MalformedURLException e) {
+ getLogger().error("MalformedURLException while compiling project classpath");
+ throw new BuildException(e);
+ }
+ }
+
+ Properties getHibernateProperties() {
+ if (hibernateProperties == null) {
+ loadPropertiesFile(getPropertyFile());
+ }
+ return hibernateProperties;
+ }
+
+ String getHibernateProperty(String name) {
+ return getHibernateProperties().getProperty(name);
+ }
+
+ MetadataDescriptor createJdbcDescriptor() {
+ RevengStrategy strategy = setupReverseEngineeringStrategy();
+ Properties hibernateProperties = getHibernateProperties();
+ hibernateProperties.put(MetadataConstants.PREFER_BASIC_COMPOSITE_IDS, true);
+ return MetadataDescriptorFactory.createReverseEngineeringDescriptor(strategy, hibernateProperties);
+ }
+
+ @Internal
+ File getOutputFolder() {
+ return new File(getProject().getProjectDir(), getExtension().outputFolder);
+ }
+
+ RevengStrategy setupReverseEngineeringStrategy() {
+ RevengStrategy result = RevengStrategyFactory
+ .createReverseEngineeringStrategy(getExtension().revengStrategy);
+ RevengSettings settings = new RevengSettings(result);
+ settings.setDefaultPackageName(getExtension().packageName);
+ result.setSettings(settings);
+ return result;
+ }
+
+ private File getPropertyFile() {
+ String hibernatePropertiesFile = getExtension().hibernateProperties;
+ SourceSetContainer ssc = getProject().getExtensions().getByType(SourceSetContainer.class);
+ SourceSet ss = ssc.getByName(SourceSet.MAIN_SOURCE_SET_NAME);
+ SourceDirectorySet sds = ss.getResources();
+ for (File f : sds.getFiles()) {
+ if (hibernatePropertiesFile.equals(f.getName())) {
+ return f;
+ }
+ }
+ throw new BuildException("File '" + hibernatePropertiesFile + "' could not be found");
+ }
+
+ private void loadPropertiesFile(File propertyFile) {
+ getLogger().lifecycle("Loading the properties file : " + propertyFile.getPath());
+ try (FileInputStream is = new FileInputStream(propertyFile)) {
+ hibernateProperties = new Properties();
+ hibernateProperties.load(is);
+ getLogger().lifecycle("Properties file is loaded");
+ } catch (FileNotFoundException e) {
+ e.printStackTrace();
+ throw new BuildException(propertyFile + " not found.", e);
+ } catch (IOException e) {
+ e.printStackTrace();
+ throw new BuildException("Problem while loading " + propertyFile, e);
+ }
+ }
+
+ abstract void doWork();
+
+}
diff --git a/gradle/plugin/src/main/java/org/hibernate/tool/gradle/task/GenerateCfgTask.java b/gradle/plugin/src/main/java/org/hibernate/tool/gradle/task/GenerateCfgTask.java
new file mode 100644
index 0000000000..08e3e79baa
--- /dev/null
+++ b/gradle/plugin/src/main/java/org/hibernate/tool/gradle/task/GenerateCfgTask.java
@@ -0,0 +1,29 @@
+package org.hibernate.tool.gradle.task;
+
+import java.io.File;
+
+import org.gradle.api.tasks.TaskAction;
+import org.hibernate.tool.api.export.Exporter;
+import org.hibernate.tool.api.export.ExporterConstants;
+import org.hibernate.tool.api.export.ExporterFactory;
+import org.hibernate.tool.api.export.ExporterType;
+
+public class GenerateCfgTask extends AbstractTask {
+
+ @TaskAction
+ public void performTask() {
+ super.perform();
+ }
+
+ void doWork() {
+ getLogger().lifecycle("Creating CFG exporter");
+ Exporter cfgExporter = ExporterFactory.createExporter(ExporterType.CFG);
+ File outputFolder = getOutputFolder();
+ cfgExporter.getProperties().put(ExporterConstants.METADATA_DESCRIPTOR, createJdbcDescriptor());
+ cfgExporter.getProperties().put(ExporterConstants.DESTINATION_FOLDER, outputFolder);
+ getLogger().lifecycle("Starting CFG export to directory: " + outputFolder + "...");
+ cfgExporter.start();
+ getLogger().lifecycle("CFG export finished");
+ }
+
+}
diff --git a/gradle/plugin/src/main/java/org/hibernate/tool/gradle/task/GenerateDaoTask.java b/gradle/plugin/src/main/java/org/hibernate/tool/gradle/task/GenerateDaoTask.java
new file mode 100644
index 0000000000..74edc40101
--- /dev/null
+++ b/gradle/plugin/src/main/java/org/hibernate/tool/gradle/task/GenerateDaoTask.java
@@ -0,0 +1,29 @@
+package org.hibernate.tool.gradle.task;
+
+import java.io.File;
+
+import org.gradle.api.tasks.TaskAction;
+import org.hibernate.tool.api.export.Exporter;
+import org.hibernate.tool.api.export.ExporterConstants;
+import org.hibernate.tool.api.export.ExporterFactory;
+import org.hibernate.tool.api.export.ExporterType;
+
+public class GenerateDaoTask extends AbstractTask {
+
+ @TaskAction
+ public void performTask() {
+ super.perform();
+ }
+
+ void doWork() {
+ getLogger().lifecycle("Creating DAO exporter");
+ Exporter hbmExporter = ExporterFactory.createExporter(ExporterType.DAO);
+ File outputFolder = getOutputFolder();
+ hbmExporter.getProperties().put(ExporterConstants.METADATA_DESCRIPTOR, createJdbcDescriptor());
+ hbmExporter.getProperties().put(ExporterConstants.DESTINATION_FOLDER, outputFolder);
+ getLogger().lifecycle("Starting DAO export to directory: " + outputFolder + "...");
+ hbmExporter.start();
+ getLogger().lifecycle("DAO export finished");
+ }
+
+}
diff --git a/gradle/plugin/src/main/java/org/hibernate/tool/gradle/task/GenerateHbmTask.java b/gradle/plugin/src/main/java/org/hibernate/tool/gradle/task/GenerateHbmTask.java
new file mode 100644
index 0000000000..495a4cefe1
--- /dev/null
+++ b/gradle/plugin/src/main/java/org/hibernate/tool/gradle/task/GenerateHbmTask.java
@@ -0,0 +1,29 @@
+package org.hibernate.tool.gradle.task;
+
+import java.io.File;
+
+import org.gradle.api.tasks.TaskAction;
+import org.hibernate.tool.api.export.Exporter;
+import org.hibernate.tool.api.export.ExporterConstants;
+import org.hibernate.tool.api.export.ExporterFactory;
+import org.hibernate.tool.api.export.ExporterType;
+
+public class GenerateHbmTask extends AbstractTask {
+
+ @TaskAction
+ public void performTask() {
+ super.perform();
+ }
+
+ void doWork() {
+ getLogger().lifecycle("Creating HBM exporter");
+ Exporter hbmExporter = ExporterFactory.createExporter(ExporterType.HBM);
+ File outputFolder = getOutputFolder();
+ hbmExporter.getProperties().put(ExporterConstants.METADATA_DESCRIPTOR, createJdbcDescriptor());
+ hbmExporter.getProperties().put(ExporterConstants.DESTINATION_FOLDER, outputFolder);
+ getLogger().lifecycle("Starting HBM export to directory: " + outputFolder + "...");
+ hbmExporter.start();
+ getLogger().lifecycle("HBM export finished");
+ }
+
+}
diff --git a/gradle/plugin/src/main/java/org/hibernate/tool/gradle/task/GenerateJavaTask.java b/gradle/plugin/src/main/java/org/hibernate/tool/gradle/task/GenerateJavaTask.java
new file mode 100644
index 0000000000..868e7175ce
--- /dev/null
+++ b/gradle/plugin/src/main/java/org/hibernate/tool/gradle/task/GenerateJavaTask.java
@@ -0,0 +1,29 @@
+package org.hibernate.tool.gradle.task;
+
+import java.io.File;
+
+import org.gradle.api.tasks.TaskAction;
+import org.hibernate.tool.api.export.Exporter;
+import org.hibernate.tool.api.export.ExporterConstants;
+import org.hibernate.tool.api.export.ExporterFactory;
+import org.hibernate.tool.api.export.ExporterType;
+
+public class GenerateJavaTask extends AbstractTask {
+
+ @TaskAction
+ public void performTask() {
+ super.perform();
+ }
+
+ void doWork() {
+ getLogger().lifecycle("Creating Java exporter");
+ Exporter pojoExporter = ExporterFactory.createExporter(ExporterType.JAVA);
+ File outputFolder = getOutputFolder();
+ pojoExporter.getProperties().put(ExporterConstants.METADATA_DESCRIPTOR, createJdbcDescriptor());
+ pojoExporter.getProperties().put(ExporterConstants.DESTINATION_FOLDER, outputFolder);
+ getLogger().lifecycle("Starting Java export to directory: " + outputFolder + "...");
+ pojoExporter.start();
+ getLogger().lifecycle("Java export finished");
+ }
+
+}
diff --git a/gradle/plugin/src/main/java/org/hibernate/tool/gradle/task/RunSqlTask.java b/gradle/plugin/src/main/java/org/hibernate/tool/gradle/task/RunSqlTask.java
new file mode 100644
index 0000000000..d5b4a35e2f
--- /dev/null
+++ b/gradle/plugin/src/main/java/org/hibernate/tool/gradle/task/RunSqlTask.java
@@ -0,0 +1,70 @@
+package org.hibernate.tool.gradle.task;
+
+import java.lang.reflect.Constructor;
+import java.lang.reflect.InvocationHandler;
+import java.lang.reflect.Method;
+import java.lang.reflect.Proxy;
+import java.sql.Connection;
+import java.sql.Driver;
+import java.sql.DriverManager;
+import java.sql.SQLException;
+import java.sql.Statement;
+
+import org.gradle.api.tasks.TaskAction;
+
+public class RunSqlTask extends AbstractTask {
+
+ @TaskAction
+ public void performTask() {
+ super.perform();
+ }
+
+ void doWork() {
+ registerDriver();
+ runSql();
+ }
+
+ private void registerDriver() {
+ String driverClassName = getHibernateProperty("hibernate.connection.driver_class");
+ getLogger().lifecycle("Registering the database driver: " + driverClassName);
+ try {
+ Class> driverClass = Thread.currentThread().getContextClassLoader().loadClass(driverClassName);
+ Constructor> constructor = driverClass.getDeclaredConstructor();
+ DriverManager.registerDriver(createDelegatingDriver((Driver)constructor.newInstance()));
+ getLogger().lifecycle("Database driver is registered");
+ } catch (Exception e) {
+ getLogger().error("Exception while registering the database driver: " + e.getMessage());
+ throw new RuntimeException(e);
+ }
+ }
+
+ private void runSql() {
+ try {
+ String databaseUrl = getHibernateProperty("hibernate.connection.url");
+ getLogger().lifecycle("Connecting to database: " + databaseUrl);
+ Connection connection = DriverManager
+ .getConnection(databaseUrl, "sa", "");
+ Statement statement = connection.createStatement();
+ getLogger().lifecycle("Running SQL: " + getExtension().sqlToRun);
+ statement.execute(getExtension().sqlToRun);
+ statement.close();
+ connection.close();
+ } catch (SQLException e) {
+ getLogger().error("SQLException");
+ throw new RuntimeException(e);
+ }
+ }
+
+ private Driver createDelegatingDriver(Driver driver) {
+ return (Driver)Proxy.newProxyInstance(
+ DriverManager.class.getClassLoader(),
+ new Class[] { Driver.class},
+ new InvocationHandler() {
+ @Override
+ public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
+ return method.invoke(driver, args);
+ }
+ });
+ }
+
+}
diff --git a/gradle/plugin/src/test/java/org/hibernate/tool/gradle/ExtensionTest.java b/gradle/plugin/src/test/java/org/hibernate/tool/gradle/ExtensionTest.java
new file mode 100644
index 0000000000..981689a872
--- /dev/null
+++ b/gradle/plugin/src/test/java/org/hibernate/tool/gradle/ExtensionTest.java
@@ -0,0 +1,22 @@
+package org.hibernate.tool.gradle;
+
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+
+import java.lang.reflect.Field;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.junit.jupiter.api.Test;
+
+public class ExtensionTest {
+
+ @Test
+ void testExtension() {
+ Map extensionFieldMap = new HashMap();
+ for(Field field : Extension.class.getDeclaredFields()) {
+ extensionFieldMap.put(field.getName(), field);
+ }
+ assertNotNull(extensionFieldMap.get("sqlToRun"));
+ }
+
+}
diff --git a/gradle/plugin/src/test/java/org/hibernate/tool/gradle/PluginTest.java b/gradle/plugin/src/test/java/org/hibernate/tool/gradle/PluginTest.java
new file mode 100644
index 0000000000..7a1848137f
--- /dev/null
+++ b/gradle/plugin/src/test/java/org/hibernate/tool/gradle/PluginTest.java
@@ -0,0 +1,25 @@
+package org.hibernate.tool.gradle;
+
+import org.gradle.testfixtures.ProjectBuilder;
+import org.gradle.api.Project;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.*;
+
+class PluginTest {
+
+ @Test
+ void testApply() {
+ // Create a test project and apply the plugin
+ Project project = ProjectBuilder.builder().build();
+ project.getPlugins().apply("org.hibernate.tool.hibernate-tools-gradle");
+
+ // Verify the result
+ assertNotNull(project.getTasks().findByName("generateJava"));
+ assertNotNull(project.getTasks().findByName("runSql"));
+
+ Object extension = project.getExtensions().getByName("hibernateTools");
+ assertNotNull(extension);
+ assertTrue(extension instanceof Extension);
+ }
+
+}
diff --git a/gradle/plugin/src/test/java/org/hibernate/tool/gradle/task/AbstractTaskTest.java b/gradle/plugin/src/test/java/org/hibernate/tool/gradle/task/AbstractTaskTest.java
new file mode 100644
index 0000000000..4f890dbc7c
--- /dev/null
+++ b/gradle/plugin/src/test/java/org/hibernate/tool/gradle/task/AbstractTaskTest.java
@@ -0,0 +1,87 @@
+package org.hibernate.tool.gradle.task;
+
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertNotSame;
+import static org.junit.jupiter.api.Assertions.assertNull;
+import static org.junit.jupiter.api.Assertions.assertSame;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
+import java.lang.reflect.Field;
+import java.net.URL;
+
+import org.gradle.api.Project;
+import org.gradle.testfixtures.ProjectBuilder;
+import org.hibernate.tool.api.reveng.RevengStrategy;
+import org.hibernate.tool.gradle.Extension;
+import org.hibernate.tool.internal.reveng.strategy.AbstractStrategy;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+
+public class AbstractTaskTest {
+
+ private static ClassLoader USED_CLASS_LOADER;
+ private static URL[] URLS = new URL[] {};
+
+ private AbstractTask abstractTask = null;
+
+ private Field extensionField = null;
+ private Extension extension = null;
+
+ @BeforeEach
+ void beforeEach() throws Exception {
+ USED_CLASS_LOADER = null;
+ Project project = ProjectBuilder.builder().build();
+ abstractTask = project.getTasks().create("foo", FooTask.class);
+ extensionField = AbstractTask.class.getDeclaredField("extension");
+ extensionField.setAccessible(true);
+ extension = new Extension(project);
+ }
+
+ @Test
+ void testInitialize() throws Exception {
+ assertNull(extensionField.get(abstractTask));
+ abstractTask.initialize(extension);
+ assertSame(extension, extensionField.get(abstractTask));
+ }
+
+ @Test
+ void testGetExtension() throws Exception {
+ assertNull(abstractTask.getExtension());
+ extensionField.set(abstractTask, extension);
+ assertSame(extension, abstractTask.getExtension());
+ }
+
+ @Test
+ void testPerform() {
+ ClassLoader contextClassLoader = Thread.currentThread().getContextClassLoader();
+ assertNull(USED_CLASS_LOADER);
+ abstractTask.perform();
+ assertNotNull(USED_CLASS_LOADER);
+ assertNotSame(contextClassLoader, USED_CLASS_LOADER);
+ }
+
+ @Test
+ void testResolveProjectClassPath() {
+ assertSame(URLS, abstractTask.resolveProjectClassPath());
+ }
+
+ @Test
+ public void testSetupReverseEngineeringStrategy() throws Exception {
+ extension.revengStrategy = FooStrategy.class.getName();
+ extensionField.set(abstractTask, extension);
+ RevengStrategy revengStrategy = abstractTask.setupReverseEngineeringStrategy();
+ assertTrue(revengStrategy instanceof FooStrategy);
+ }
+
+ public static class FooStrategy extends AbstractStrategy {}
+
+ public static class FooTask extends AbstractTask {
+ void doWork() {
+ USED_CLASS_LOADER = Thread.currentThread().getContextClassLoader();
+ }
+ URL[] resolveProjectClassPath() {
+ return URLS;
+ }
+ }
+
+}
diff --git a/gradle/pom.xml b/gradle/pom.xml
new file mode 100644
index 0000000000..d203a9ad86
--- /dev/null
+++ b/gradle/pom.xml
@@ -0,0 +1,137 @@
+
+
+
+
+ 4.0.0
+
+
+ org.hibernate.tool
+ hibernate-tools-parent
+ 6.5.4-SNAPSHOT
+
+
+ hibernate-tools-gradle
+ pom
+
+ Hibernate Tools Gradle Plugin
+ Gradle plugin to provide hibernate-tools reverse engineering and code/schema generation abilities.
+ https://hibernate.org/tools/
+
+
+ JIRA
+ https://hibernate.atlassian.net/projects/HBX
+
+
+
+
+ false
+
+ ./gradlew
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-deploy-plugin
+
+ true
+
+
+
+
+ org.codehaus.mojo
+ exec-maven-plugin
+
+
+ gradle-package
+ prepare-package
+
+ ${gradle.executable}
+
+ clean
+ build
+ -Pversion=${project.version}
+ -Dmaven.repo.local=${settings.localRepository}
+
+
+
+ exec
+
+
+
+ gradle-clean
+ clean
+
+ ${gradle.executable}
+
+ clean
+ -Pversion=${project.version}
+
+
+
+ exec
+
+
+
+
+
+
+
+
+
+ release
+
+
+ performRelease
+ true
+
+
+
+
+
+ org.codehaus.mojo
+ exec-maven-plugin
+
+
+ gradle-publish-to-plugin-portal
+ deploy
+
+ ${gradle.executable}
+
+ publishPlugins
+ publishPluginMavenPublicationToStagingRepository
+ -Pversion=${project.version}
+ -Dmaven.repo.local=${settings.localRepository}
+ -PmavenStagingDirectory=${local.staging.releases.repo.url}
+
+
+
+ exec
+
+
+
+
+
+
+
+
+
+
+
diff --git a/gradle/settings.gradle b/gradle/settings.gradle
new file mode 100644
index 0000000000..696921961c
--- /dev/null
+++ b/gradle/settings.gradle
@@ -0,0 +1,10 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ *
+ * The settings file is used to specify which projects to include in your build.
+ * For more detailed information on multi-project builds, please refer to https://docs.gradle.org/8.8/userguide/multi_project_builds.html in the Gradle documentation.
+ */
+
+rootProject.name = 'hibernate-tools-gradle'
+include('plugin')
+project( ':plugin' ).name = 'hibernate-tools-gradle'
diff --git a/jbt/pom.xml b/jbt/pom.xml
index 3fbfd24c27..fd3ab4f168 100644
--- a/jbt/pom.xml
+++ b/jbt/pom.xml
@@ -25,7 +25,7 @@
org.hibernate.tool
hibernate-tools-parent
- 6.5.0.Final
+ 6.5.4-SNAPSHOT
hibernate-tools-orm-jbt
@@ -35,6 +35,11 @@
Hibernate Tools ORM - JBoss Tools Adapter
Hibernate Tools ORM - JBoss Tools Adapter
+
+
+ false
+
+
com.h2database
diff --git a/jbt/src/main/java/org/hibernate/tool/hbm2x/DAOExporter.java b/jbt/src/main/java/org/hibernate/tool/hbm2x/DAOExporter.java
new file mode 100644
index 0000000000..263e564e9a
--- /dev/null
+++ b/jbt/src/main/java/org/hibernate/tool/hbm2x/DAOExporter.java
@@ -0,0 +1,5 @@
+package org.hibernate.tool.hbm2x;
+
+import org.hibernate.tool.internal.export.dao.DaoExporter;
+
+public class DAOExporter extends DaoExporter {}
diff --git a/jbt/src/main/java/org/hibernate/tool/hbm2x/DocExporter.java b/jbt/src/main/java/org/hibernate/tool/hbm2x/DocExporter.java
new file mode 100644
index 0000000000..01ea56276e
--- /dev/null
+++ b/jbt/src/main/java/org/hibernate/tool/hbm2x/DocExporter.java
@@ -0,0 +1,3 @@
+package org.hibernate.tool.hbm2x;
+
+public class DocExporter extends org.hibernate.tool.internal.export.doc.DocExporter {}
diff --git a/jbt/src/main/java/org/hibernate/tool/hbm2x/GenericExporter.java b/jbt/src/main/java/org/hibernate/tool/hbm2x/GenericExporter.java
new file mode 100644
index 0000000000..3ae36af92d
--- /dev/null
+++ b/jbt/src/main/java/org/hibernate/tool/hbm2x/GenericExporter.java
@@ -0,0 +1,3 @@
+package org.hibernate.tool.hbm2x;
+
+public class GenericExporter extends org.hibernate.tool.internal.export.common.GenericExporter {}
diff --git a/jbt/src/main/java/org/hibernate/tool/hbm2x/Hbm2DDLExporter.java b/jbt/src/main/java/org/hibernate/tool/hbm2x/Hbm2DDLExporter.java
new file mode 100644
index 0000000000..ce5334e854
--- /dev/null
+++ b/jbt/src/main/java/org/hibernate/tool/hbm2x/Hbm2DDLExporter.java
@@ -0,0 +1,5 @@
+package org.hibernate.tool.hbm2x;
+
+import org.hibernate.tool.internal.export.ddl.DdlExporter;
+
+public class Hbm2DDLExporter extends DdlExporter {}
diff --git a/jbt/src/main/java/org/hibernate/tool/hbm2x/QueryExporter.java b/jbt/src/main/java/org/hibernate/tool/hbm2x/QueryExporter.java
new file mode 100644
index 0000000000..cb199780c0
--- /dev/null
+++ b/jbt/src/main/java/org/hibernate/tool/hbm2x/QueryExporter.java
@@ -0,0 +1,3 @@
+package org.hibernate.tool.hbm2x;
+
+public class QueryExporter extends org.hibernate.tool.internal.export.query.QueryExporter {}
diff --git a/jbt/src/main/java/org/hibernate/tool/orm/jbt/api/ArtifactCollectorWrapper.java b/jbt/src/main/java/org/hibernate/tool/orm/jbt/api/ArtifactCollectorWrapper.java
deleted file mode 100644
index a9097fb70e..0000000000
--- a/jbt/src/main/java/org/hibernate/tool/orm/jbt/api/ArtifactCollectorWrapper.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package org.hibernate.tool.orm.jbt.api;
-
-import java.io.File;
-import java.util.Set;
-
-import org.hibernate.tool.api.export.ArtifactCollector;
-import org.hibernate.tool.orm.jbt.wrp.Wrapper;
-
-public interface ArtifactCollectorWrapper extends Wrapper {
-
- default Set getFileTypes() { return ((ArtifactCollector)getWrappedObject()).getFileTypes(); }
- default void formatFiles() { ((ArtifactCollector)getWrappedObject()).formatFiles(); }
- default File[] getFiles(String string) { return ((ArtifactCollector)getWrappedObject()).getFiles(string); }
-
-}
diff --git a/jbt/src/main/java/org/hibernate/tool/orm/jbt/api/Cfg2HbmToolWrapper.java b/jbt/src/main/java/org/hibernate/tool/orm/jbt/api/Cfg2HbmToolWrapper.java
deleted file mode 100644
index 567ce63370..0000000000
--- a/jbt/src/main/java/org/hibernate/tool/orm/jbt/api/Cfg2HbmToolWrapper.java
+++ /dev/null
@@ -1,40 +0,0 @@
-package org.hibernate.tool.orm.jbt.api;
-
-import org.hibernate.mapping.PersistentClass;
-import org.hibernate.mapping.Property;
-import org.hibernate.mapping.SimpleValue;
-import org.hibernate.tool.internal.export.hbm.Cfg2HbmTool;
-import org.hibernate.tool.internal.export.hbm.HBMTagForValueVisitor;
-import org.hibernate.tool.orm.jbt.wrp.Wrapper;
-
-public interface Cfg2HbmToolWrapper extends Wrapper {
-
- default String getTag(PersistentClass pc) {
- return ((Cfg2HbmTool)getWrappedObject()).getTag(pc);
- }
- default String getTag(Property p) {
- if (p instanceof Wrapper) {
- p = (Property)((Wrapper)p).getWrappedObject();
- }
- PersistentClass persistentClass = p.getPersistentClass();
- if(persistentClass!=null) {
- Property v = persistentClass.getVersion();
- if (v instanceof Wrapper) {
- v = (Property)((Wrapper)v).getWrappedObject();
- }
- if(v==p) {
- String typeName = ((SimpleValue)p.getValue()).getTypeName();
- if("timestamp".equals(typeName) || "dbtimestamp".equals(typeName)) {
- return "timestamp";
- } else {
- return "version";
- }
- }
- }
- String toolTag = (String) p.getValue().accept(HBMTagForValueVisitor.INSTANCE);
- if ("component".equals(toolTag) && "embedded".equals(p.getPropertyAccessorName())){
- toolTag = "properties";
- }
- return toolTag;
- }
-}
diff --git a/jbt/src/main/java/org/hibernate/tool/orm/jbt/api/ClassMetadataWrapper.java b/jbt/src/main/java/org/hibernate/tool/orm/jbt/api/ClassMetadataWrapper.java
deleted file mode 100644
index 346faaeb8a..0000000000
--- a/jbt/src/main/java/org/hibernate/tool/orm/jbt/api/ClassMetadataWrapper.java
+++ /dev/null
@@ -1,25 +0,0 @@
-package org.hibernate.tool.orm.jbt.api;
-
-import org.hibernate.Session;
-import org.hibernate.engine.spi.SharedSessionContractImplementor;
-import org.hibernate.persister.entity.AbstractEntityPersister;
-import org.hibernate.persister.entity.EntityPersister;
-import org.hibernate.tool.orm.jbt.wrp.Wrapper;
-import org.hibernate.type.Type;
-
-public interface ClassMetadataWrapper extends Wrapper {
-
- default String getEntityName() { return ((EntityPersister)getWrappedObject()).getEntityName(); }
- default String getIdentifierPropertyName() { return ((EntityPersister)getWrappedObject()).getIdentifierPropertyName(); }
- default String[] getPropertyNames() { return ((EntityPersister)getWrappedObject()).getPropertyNames(); }
- default Type[] getPropertyTypes() { return ((EntityPersister)getWrappedObject()).getPropertyTypes(); }
- default Class> getMappedClass() { return ((EntityPersister)getWrappedObject()).getMappedClass(); }
- default Type getIdentifierType() { return ((EntityPersister)getWrappedObject()).getIdentifierType(); }
- default Object getPropertyValue(Object object, String name) { return ((EntityPersister)getWrappedObject()).getPropertyValue(object, name); }
- default boolean hasIdentifierProperty() { return ((EntityPersister)getWrappedObject()).hasIdentifierProperty(); }
- default Object getIdentifier(Object object, Session session) { return ((EntityPersister)getWrappedObject()).getIdentifier(object, (SharedSessionContractImplementor)session); }
- default boolean isInstanceOfAbstractEntityPersister() { return (EntityPersister)getWrappedObject() instanceof AbstractEntityPersister; }
- default Integer getPropertyIndexOrNull(String id) { return ((EntityPersister)getWrappedObject()).getEntityMetamodel().getPropertyIndexOrNull(id); }
- default Object getTuplizerPropertyValue(Object entity, int i) { return ((EntityPersister)getWrappedObject()).getValue(entity, i); }
-
-}
diff --git a/jbt/src/main/java/org/hibernate/tool/orm/jbt/api/CollectionMetadataWrapper.java b/jbt/src/main/java/org/hibernate/tool/orm/jbt/api/CollectionMetadataWrapper.java
deleted file mode 100644
index ef272a5e7c..0000000000
--- a/jbt/src/main/java/org/hibernate/tool/orm/jbt/api/CollectionMetadataWrapper.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package org.hibernate.tool.orm.jbt.api;
-
-import org.hibernate.persister.collection.CollectionPersister;
-import org.hibernate.tool.orm.jbt.wrp.Wrapper;
-import org.hibernate.type.Type;
-
-public interface CollectionMetadataWrapper extends Wrapper {
-
- default Type getElementType() { return ((CollectionPersister)getWrappedObject()).getElementType(); }
-
-}
diff --git a/jbt/src/main/java/org/hibernate/tool/orm/jbt/api/ColumnWrapper.java b/jbt/src/main/java/org/hibernate/tool/orm/jbt/api/ColumnWrapper.java
deleted file mode 100644
index 71e873fe86..0000000000
--- a/jbt/src/main/java/org/hibernate/tool/orm/jbt/api/ColumnWrapper.java
+++ /dev/null
@@ -1,41 +0,0 @@
-package org.hibernate.tool.orm.jbt.api;
-
-import org.hibernate.cfg.Configuration;
-import org.hibernate.mapping.Column;
-import org.hibernate.mapping.Value;
-import org.hibernate.tool.orm.jbt.util.MetadataHelper;
-import org.hibernate.tool.orm.jbt.wrp.Wrapper;
-
-public interface ColumnWrapper extends Wrapper {
-
- static final int DEFAULT_LENGTH = 255;
- static final int DEFAULT_PRECISION = 19;
- static final int DEFAULT_SCALE = 2;
-
- default String getName() { return ((Column)getWrappedObject()).getName(); }
- default Integer getSqlTypeCode() { return ((Column)getWrappedObject()).getSqlTypeCode(); }
- default String getSqlType() { return ((Column)getWrappedObject()).getSqlType(); }
- default String getSqlType(Configuration configuration) {
- return ((Column)getWrappedObject()).getSqlType(MetadataHelper.getMetadata(configuration));
- }
- default long getLength() {
- Long length = ((Column)getWrappedObject()).getLength();
- return length == null ? Integer.MIN_VALUE : length;
- }
- default int getDefaultLength() { return DEFAULT_LENGTH; }
- default int getPrecision() {
- Integer precision = ((Column)getWrappedObject()).getPrecision();
- return precision == null ? Integer.MIN_VALUE : precision;
- }
- default int getDefaultPrecision() { return DEFAULT_PRECISION; }
- default int getScale() {
- Integer scale = ((Column)getWrappedObject()).getScale();
- return scale == null ? Integer.MIN_VALUE : scale;
- }
- default int getDefaultScale() { return DEFAULT_SCALE; }
- default boolean isNullable() { return ((Column)getWrappedObject()).isNullable(); }
- default Value getValue() { return ((Column)getWrappedObject()).getValue(); }
- default boolean isUnique() { return ((Column)getWrappedObject()).isUnique(); }
- default void setSqlType(String sqlType) { ((Column)getWrappedObject()).setSqlType(sqlType); }
-
-}
diff --git a/jbt/src/main/java/org/hibernate/tool/orm/jbt/api/ConfigurationWrapper.java b/jbt/src/main/java/org/hibernate/tool/orm/jbt/api/ConfigurationWrapper.java
deleted file mode 100644
index 2d25d8f531..0000000000
--- a/jbt/src/main/java/org/hibernate/tool/orm/jbt/api/ConfigurationWrapper.java
+++ /dev/null
@@ -1,111 +0,0 @@
-package org.hibernate.tool.orm.jbt.api;
-
-import java.io.File;
-import java.util.Iterator;
-import java.util.Properties;
-
-import org.hibernate.SessionFactory;
-import org.hibernate.cfg.Configuration;
-import org.hibernate.cfg.NamingStrategy;
-import org.hibernate.mapping.PersistentClass;
-import org.hibernate.mapping.Table;
-import org.hibernate.tool.api.reveng.RevengStrategy;
-import org.hibernate.tool.orm.jbt.util.JpaConfiguration;
-import org.hibernate.tool.orm.jbt.util.NativeConfiguration;
-import org.hibernate.tool.orm.jbt.util.RevengConfiguration;
-import org.hibernate.tool.orm.jbt.wrp.Wrapper;
-import org.w3c.dom.Document;
-import org.xml.sax.EntityResolver;
-
-public interface ConfigurationWrapper extends Wrapper {
-
- default String getProperty(String property) { return ((Configuration)getWrappedObject()).getProperty(property); }
- default ConfigurationWrapper addFile(File file) { ((Configuration)getWrappedObject()).addFile(file); return this; }
- default void setProperty(String name, String value) { ((Configuration)getWrappedObject()).setProperty(name, value); }
- default ConfigurationWrapper setProperties(Properties properties) { ((Configuration)getWrappedObject()).setProperties(properties); return this; }
- default void setEntityResolver(EntityResolver entityResolver) {
- Object wrappedObject = getWrappedObject();
- if (wrappedObject instanceof NativeConfiguration) ((NativeConfiguration)wrappedObject).setEntityResolver(entityResolver);
- if (wrappedObject instanceof RevengConfiguration) ((RevengConfiguration)wrappedObject).setEntityResolver(entityResolver);
- if (wrappedObject instanceof JpaConfiguration) ((JpaConfiguration)wrappedObject).setEntityResolver(entityResolver);
- }
- default void setNamingStrategy(NamingStrategy namingStrategy) {
- Object wrappedObject = getWrappedObject();
- if (wrappedObject instanceof NativeConfiguration) ((NativeConfiguration)wrappedObject).setNamingStrategy(namingStrategy);
- if (wrappedObject instanceof RevengConfiguration) ((RevengConfiguration)wrappedObject).setNamingStrategy(namingStrategy);
- if (wrappedObject instanceof JpaConfiguration) ((JpaConfiguration)wrappedObject).setNamingStrategy(namingStrategy);
- }
- default Properties getProperties() { return ((Configuration)getWrappedObject()).getProperties(); }
- default void addProperties(Properties properties) { ((Configuration)getWrappedObject()).addProperties(properties); }
- default ConfigurationWrapper configure(Document document) {
- Object wrappedObject = getWrappedObject();
- if (wrappedObject instanceof NativeConfiguration) ((NativeConfiguration)wrappedObject).configure(document);
- if (wrappedObject instanceof RevengConfiguration) ((RevengConfiguration)wrappedObject).configure(document);
- if (wrappedObject instanceof JpaConfiguration) ((JpaConfiguration)wrappedObject).configure(document);
- return this;
- }
- default ConfigurationWrapper configure(File file) { ((Configuration)getWrappedObject()).configure(file); return this; }
- default ConfigurationWrapper configure() { ((Configuration)getWrappedObject()).configure(); return this; }
- default void addClass(Class> clazz) { ((Configuration)getWrappedObject()).addClass(clazz); }
- default void buildMappings() {
- Object wrappedObject = getWrappedObject();
- if (wrappedObject instanceof NativeConfiguration) ((NativeConfiguration)wrappedObject).buildMappings();
- if (wrappedObject instanceof RevengConfiguration) ((RevengConfiguration)wrappedObject).buildMappings();
- if (wrappedObject instanceof JpaConfiguration) ((JpaConfiguration)wrappedObject).buildMappings();
- }
- default SessionFactory buildSessionFactory() { return ((Configuration)getWrappedObject()).buildSessionFactory(); }
- default Iterator getClassMappings() {
- Object wrappedObject = getWrappedObject();
- if (wrappedObject instanceof NativeConfiguration) return ((NativeConfiguration)wrappedObject).getClassMappings();
- if (wrappedObject instanceof RevengConfiguration) return ((RevengConfiguration)wrappedObject).getClassMappings();
- if (wrappedObject instanceof JpaConfiguration) return ((JpaConfiguration)wrappedObject).getClassMappings();
- return null;
- }
- default void setPreferBasicCompositeIds(boolean b) {
- Object wrappedObject = getWrappedObject();
- if (wrappedObject instanceof NativeConfiguration) ((NativeConfiguration)wrappedObject).setPreferBasicCompositeIds(b);
- if (wrappedObject instanceof RevengConfiguration) ((RevengConfiguration)wrappedObject).setPreferBasicCompositeIds(b);
- if (wrappedObject instanceof JpaConfiguration) ((JpaConfiguration)wrappedObject).setPreferBasicCompositeIds(b);
- }
- default void setReverseEngineeringStrategy(RevengStrategy strategy) {
- Object wrappedObject = getWrappedObject();
- if (wrappedObject instanceof NativeConfiguration) ((NativeConfiguration)wrappedObject).setReverseEngineeringStrategy(strategy);
- if (wrappedObject instanceof RevengConfiguration) ((RevengConfiguration)wrappedObject).setReverseEngineeringStrategy(strategy);
- if (wrappedObject instanceof JpaConfiguration) ((JpaConfiguration)wrappedObject).setReverseEngineeringStrategy(strategy);
- }
- default void readFromJDBC() {
- Object wrappedObject = getWrappedObject();
- if (wrappedObject instanceof NativeConfiguration) ((NativeConfiguration)wrappedObject).readFromJDBC();
- if (wrappedObject instanceof RevengConfiguration) ((RevengConfiguration)wrappedObject).readFromJDBC();
- if (wrappedObject instanceof JpaConfiguration) ((JpaConfiguration)wrappedObject).readFromJDBC();
- }
- default PersistentClass getClassMapping(String string) {
- Object wrappedObject = getWrappedObject();
- if (wrappedObject instanceof NativeConfiguration) return ((NativeConfiguration)wrappedObject).getClassMapping(string);
- if (wrappedObject instanceof RevengConfiguration) return ((RevengConfiguration)wrappedObject).getClassMapping(string);
- if (wrappedObject instanceof JpaConfiguration) return ((JpaConfiguration)wrappedObject).getClassMapping(string);
- return null;
- }
- default NamingStrategy getNamingStrategy() {
- Object wrappedObject = getWrappedObject();
- if (wrappedObject instanceof NativeConfiguration) return ((NativeConfiguration)wrappedObject).getNamingStrategy();
- if (wrappedObject instanceof RevengConfiguration) return ((RevengConfiguration)wrappedObject).getNamingStrategy();
- if (wrappedObject instanceof JpaConfiguration) return ((JpaConfiguration)wrappedObject).getNamingStrategy();
- return null;
- }
- default EntityResolver getEntityResolver() {
- Object wrappedObject = getWrappedObject();
- if (wrappedObject instanceof NativeConfiguration) return ((NativeConfiguration)wrappedObject).getEntityResolver();
- if (wrappedObject instanceof RevengConfiguration) return ((RevengConfiguration)wrappedObject).getEntityResolver();
- if (wrappedObject instanceof JpaConfiguration) return ((JpaConfiguration)wrappedObject).getEntityResolver();
- return null;
- }
- default Iterator getTableMappings() {
- Object wrappedObject = getWrappedObject();
- if (wrappedObject instanceof NativeConfiguration) return ((NativeConfiguration)wrappedObject).getTableMappings();
- if (wrappedObject instanceof RevengConfiguration) return ((RevengConfiguration)wrappedObject).getTableMappings();
- if (wrappedObject instanceof JpaConfiguration) return ((JpaConfiguration)wrappedObject).getTableMappings();
- return null;
- }
-
-}
diff --git a/jbt/src/main/java/org/hibernate/tool/orm/jbt/api/CriteriaWrapper.java b/jbt/src/main/java/org/hibernate/tool/orm/jbt/api/CriteriaWrapper.java
deleted file mode 100644
index 34244aaba6..0000000000
--- a/jbt/src/main/java/org/hibernate/tool/orm/jbt/api/CriteriaWrapper.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package org.hibernate.tool.orm.jbt.api;
-
-import java.util.List;
-
-import org.hibernate.tool.orm.jbt.wrp.Wrapper;
-
-import jakarta.persistence.Query;
-
-public interface CriteriaWrapper extends Wrapper {
-
- default void setMaxResults(int intValue) { ((Query)getWrappedObject()).setMaxResults(intValue); }
- default List> list() { return ((Query)getWrappedObject()).getResultList(); }
-
-}
diff --git a/jbt/src/main/java/org/hibernate/tool/orm/jbt/api/DdlExporterWrapper.java b/jbt/src/main/java/org/hibernate/tool/orm/jbt/api/DdlExporterWrapper.java
deleted file mode 100644
index 856f32bf3e..0000000000
--- a/jbt/src/main/java/org/hibernate/tool/orm/jbt/api/DdlExporterWrapper.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package org.hibernate.tool.orm.jbt.api;
-
-import java.util.Properties;
-
-import org.hibernate.tool.api.export.ExporterConstants;
-import org.hibernate.tool.internal.export.ddl.DdlExporter;
-import org.hibernate.tool.orm.jbt.wrp.Wrapper;
-
-public interface DdlExporterWrapper extends Wrapper {
-
- default void setExport(boolean b) {
- ((DdlExporter)getWrappedObject()).getProperties().put(
- ExporterConstants.EXPORT_TO_DATABASE, b);
- }
-
- default Properties getProperties() {
- return ((DdlExporter)getWrappedObject()).getProperties();
- }
-
-}
diff --git a/jbt/src/main/java/org/hibernate/tool/orm/jbt/api/EnvironmentWrapper.java b/jbt/src/main/java/org/hibernate/tool/orm/jbt/api/EnvironmentWrapper.java
deleted file mode 100644
index 0eb05b77ae..0000000000
--- a/jbt/src/main/java/org/hibernate/tool/orm/jbt/api/EnvironmentWrapper.java
+++ /dev/null
@@ -1,34 +0,0 @@
-package org.hibernate.tool.orm.jbt.api;
-
-import org.hibernate.cfg.Environment;
-import org.hibernate.tool.orm.jbt.wrp.Wrapper;
-
-public interface EnvironmentWrapper extends Wrapper {
-
- default String getTransactionManagerStrategy() { return "hibernate.transaction.coordinator_class"; }
-
- default String getDriver() { return Environment.DRIVER; }
-
- default String getHBM2DDLAuto() { return Environment.HBM2DDL_AUTO; }
-
- default String getDialect() { return Environment.DIALECT; }
-
- default String getDataSource() { return Environment.DATASOURCE; }
-
- default String getConnectionProvider() { return Environment.CONNECTION_PROVIDER; }
-
- default String getURL() { return Environment.URL; }
-
- default String getUser() { return Environment.USER; }
-
- default String getPass() { return Environment.PASS; }
-
- default String getSessionFactoryName() { return Environment.SESSION_FACTORY_NAME; }
-
- default String getDefaultCatalog() { return Environment.DEFAULT_CATALOG; }
-
- default String getDefaultSchema() { return Environment.DEFAULT_SCHEMA; }
-
- default Class getWrappedClass() { return Environment.class; }
-
-}
diff --git a/jbt/src/main/java/org/hibernate/tool/orm/jbt/api/ExporterWrapper.java b/jbt/src/main/java/org/hibernate/tool/orm/jbt/api/ExporterWrapper.java
deleted file mode 100644
index 6f8623f9cb..0000000000
--- a/jbt/src/main/java/org/hibernate/tool/orm/jbt/api/ExporterWrapper.java
+++ /dev/null
@@ -1,86 +0,0 @@
-package org.hibernate.tool.orm.jbt.api;
-
-import java.io.File;
-import java.io.StringWriter;
-import java.util.Properties;
-
-import org.hibernate.cfg.Configuration;
-import org.hibernate.tool.api.export.Exporter;
-import org.hibernate.tool.api.export.ExporterConstants;
-import org.hibernate.tool.internal.export.cfg.CfgExporter;
-import org.hibernate.tool.internal.export.common.GenericExporter;
-import org.hibernate.tool.internal.export.ddl.DdlExporter;
-import org.hibernate.tool.internal.export.query.QueryExporter;
-import org.hibernate.tool.orm.jbt.util.ConfigurationMetadataDescriptor;
-import org.hibernate.tool.orm.jbt.wrp.Wrapper;
-
-public interface ExporterWrapper extends Wrapper {
-
- default void setConfiguration(Configuration configuration) {
- if (CfgExporter.class.isAssignableFrom(getWrappedObject().getClass())) {
- ((CfgExporter)getWrappedObject()).setCustomProperties(configuration.getProperties());
- }
- ((Exporter)getWrappedObject()).getProperties().put(
- ExporterConstants.METADATA_DESCRIPTOR,
- new ConfigurationMetadataDescriptor(configuration));
- }
-
- default void setArtifactCollector(ArtifactCollectorWrapper artifactCollectorWrapper) {
- ((Exporter)getWrappedObject()).getProperties().put(
- ExporterConstants.ARTIFACT_COLLECTOR,
- artifactCollectorWrapper.getWrappedObject());
- }
-
- default void setOutputDirectory(File dir) {
- ((Exporter)getWrappedObject()).getProperties().put(ExporterConstants.DESTINATION_FOLDER, dir);
- }
-
- default void setTemplatePath(String[] templatePath) {
- ((Exporter)getWrappedObject()).getProperties().put(ExporterConstants.TEMPLATE_PATH, templatePath);
- }
-
- default void start() {
- ((Exporter)getWrappedObject()).start();
- }
-
- default Properties getProperties() {
- return ((Exporter)getWrappedObject()).getProperties();
- }
-
- default GenericExporter getGenericExporter() {
- if (getWrappedObject() instanceof GenericExporter) {
- return (GenericExporter)getWrappedObject();
- } else {
- return null;
- }
- }
-
- default DdlExporter getHbm2DDLExporter() {
- if (getWrappedObject() instanceof DdlExporter) {
- return (DdlExporter)getWrappedObject();
- } else {
- return null;
- }
- }
-
- default QueryExporter getQueryExporter() {
- if (getWrappedObject() instanceof QueryExporter) {
- return (QueryExporter)getWrappedObject();
- } else {
- return null;
- }
- }
-
- default void setCustomProperties(Properties properties) {
- if (getWrappedObject() instanceof CfgExporter) {
- ((CfgExporter)getWrappedObject()).setCustomProperties(properties);
- }
- }
-
- default void setOutput(StringWriter stringWriter) {
- if (getWrappedObject() instanceof CfgExporter) {
- ((CfgExporter)getWrappedObject()).setOutput(stringWriter);
- }
- }
-
-}
diff --git a/jbt/src/main/java/org/hibernate/tool/orm/jbt/api/ForeignKeyWrapper.java b/jbt/src/main/java/org/hibernate/tool/orm/jbt/api/ForeignKeyWrapper.java
deleted file mode 100644
index bf525f37f0..0000000000
--- a/jbt/src/main/java/org/hibernate/tool/orm/jbt/api/ForeignKeyWrapper.java
+++ /dev/null
@@ -1,23 +0,0 @@
-package org.hibernate.tool.orm.jbt.api;
-
-import java.util.Iterator;
-import java.util.List;
-
-import org.hibernate.mapping.Column;
-import org.hibernate.mapping.ForeignKey;
-import org.hibernate.mapping.Table;
-import org.hibernate.tool.orm.jbt.wrp.Wrapper;
-
-public interface ForeignKeyWrapper extends Wrapper {
-
- default Table getReferencedTable() { return ((ForeignKey)getWrappedObject()).getReferencedTable(); }
-
- default Iterator columnIterator() { return ((ForeignKey)getWrappedObject()).getColumns().iterator(); }
-
- default boolean isReferenceToPrimaryKey() { return ((ForeignKey)getWrappedObject()).isReferenceToPrimaryKey(); }
-
- default List getReferencedColumns() { return ((ForeignKey)getWrappedObject()).getReferencedColumns(); }
-
- default boolean containsColumn(Column column) { return ((ForeignKey)getWrappedObject()).containsColumn(column); }
-
-}
diff --git a/jbt/src/main/java/org/hibernate/tool/orm/jbt/api/GenericExporterWrapper.java b/jbt/src/main/java/org/hibernate/tool/orm/jbt/api/GenericExporterWrapper.java
deleted file mode 100644
index 0e9a1b9a1a..0000000000
--- a/jbt/src/main/java/org/hibernate/tool/orm/jbt/api/GenericExporterWrapper.java
+++ /dev/null
@@ -1,34 +0,0 @@
-package org.hibernate.tool.orm.jbt.api;
-
-import org.hibernate.tool.api.export.ExporterConstants;
-import org.hibernate.tool.internal.export.common.GenericExporter;
-import org.hibernate.tool.orm.jbt.wrp.Wrapper;
-
-public interface GenericExporterWrapper extends Wrapper {
-
- default void setFilePattern(String filePattern) {
- ((GenericExporter)getWrappedObject()).getProperties().setProperty(
- ExporterConstants.FILE_PATTERN, filePattern);
- }
-
- default void setTemplateName(String templateName) {
- ((GenericExporter)getWrappedObject()).getProperties().setProperty(
- ExporterConstants.TEMPLATE_NAME, templateName);
- }
-
- default void setForEach(String forEach) {
- ((GenericExporter)getWrappedObject()).getProperties().setProperty(
- ExporterConstants.FOR_EACH, forEach);
- }
-
- default String getFilePattern() {
- return ((GenericExporter)getWrappedObject()).getProperties().getProperty(
- ExporterConstants.FILE_PATTERN);
- }
-
- default String getTemplateName() {
- return ((GenericExporter)getWrappedObject()).getProperties().getProperty(
- ExporterConstants.TEMPLATE_NAME);
- }
-
-}
diff --git a/jbt/src/main/java/org/hibernate/tool/orm/jbt/api/HbmExporterWrapper.java b/jbt/src/main/java/org/hibernate/tool/orm/jbt/api/HbmExporterWrapper.java
deleted file mode 100644
index e0e78a9102..0000000000
--- a/jbt/src/main/java/org/hibernate/tool/orm/jbt/api/HbmExporterWrapper.java
+++ /dev/null
@@ -1,34 +0,0 @@
-package org.hibernate.tool.orm.jbt.api;
-
-import java.io.File;
-import java.util.Map;
-
-import org.hibernate.tool.api.export.ExporterConstants;
-import org.hibernate.tool.internal.export.hbm.HbmExporter;
-import org.hibernate.tool.internal.export.java.POJOClass;
-import org.hibernate.tool.orm.jbt.internal.factory.HbmExporterWrapperFactory.HbmExporterExtension;
-import org.hibernate.tool.orm.jbt.wrp.Wrapper;
-
-public interface HbmExporterWrapper extends Wrapper {
-
- default void start() {
- ((HbmExporter)getWrappedObject()).start();
- }
-
- default File getOutputDirectory() {
- return (File)((HbmExporter)getWrappedObject()).getProperties().get(ExporterConstants.DESTINATION_FOLDER);
- }
-
- default void setOutputDirectory(File f) {
- ((HbmExporter)getWrappedObject()).getProperties().put(ExporterConstants.DESTINATION_FOLDER, f);
- }
-
- default void exportPOJO(Map