├── .github ├── pr-labeler.yml ├── release-drafter.yml └── workflows │ ├── ci.yml │ ├── pr-labeler.yml │ ├── release-drafter.yml │ └── release.yml ├── .gitignore ├── .sdkmanrc ├── LICENSE ├── README.md ├── RELEASE_OPERATIONS.md ├── build.gradle.kts ├── codegen-test ├── .gitignore ├── build.gradle.kts ├── docker-compose.yml ├── gradle.properties ├── gradle │ └── wrapper │ │ ├── gradle-wrapper.jar │ │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat ├── settings.gradle.kts └── template │ └── entity.ftl ├── codegen ├── .gitignore ├── build.gradle.kts ├── gradle.properties ├── gradle │ └── wrapper │ │ ├── gradle-wrapper.jar │ │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat ├── settings.gradle.kts └── src │ ├── main │ ├── groovy │ │ └── org │ │ │ └── seasar │ │ │ └── doma │ │ │ └── gradle │ │ │ └── codegen │ │ │ └── desc │ │ │ └── EntityPropertyDescMerger.groovy │ ├── java │ │ └── org │ │ │ └── seasar │ │ │ └── doma │ │ │ └── gradle │ │ │ └── codegen │ │ │ ├── CodeGenPlugin.java │ │ │ ├── GlobalFactory.java │ │ │ ├── desc │ │ │ ├── ClassConstants.java │ │ │ ├── ClassDesc.java │ │ │ ├── ClassDescSupport.java │ │ │ ├── Constants.java │ │ │ ├── DaoDesc.java │ │ │ ├── DaoDescFactory.java │ │ │ ├── EntityDesc.java │ │ │ ├── EntityDescFactory.java │ │ │ ├── EntityListenerDesc.java │ │ │ ├── EntityListenerDescFactory.java │ │ │ ├── EntityPropertyClassNameResolver.java │ │ │ ├── EntityPropertyDesc.java │ │ │ ├── EntityPropertyDescFactory.java │ │ │ ├── EnumConstants.java │ │ │ ├── GenerationType.java │ │ │ ├── JavaClassResolver.java │ │ │ ├── KotlinClassResolver.java │ │ │ ├── LanguageClass.java │ │ │ ├── LanguageClassResolver.java │ │ │ ├── LanguageType.java │ │ │ ├── MappedSuperclassDesc.java │ │ │ ├── MappedSuperclassDescFactory.java │ │ │ ├── NamingType.java │ │ │ ├── SqlDesc.java │ │ │ ├── SqlDescFactory.java │ │ │ ├── SqlTestDesc.java │ │ │ ├── SqlTestDescFactory.java │ │ │ ├── SqlTestMethodDesc.java │ │ │ ├── SqlTestSuiteDesc.java │ │ │ └── SqlTestSuiteDescFactory.java │ │ │ ├── dialect │ │ │ ├── CodeGenDialect.java │ │ │ ├── CodeGenDialectRegistry.java │ │ │ ├── Db2CodeGenDialect.java │ │ │ ├── H2CodeGenDialect.java │ │ │ ├── HsqldbCodeGenDialect.java │ │ │ ├── Mssql2008CodeGenDialect.java │ │ │ ├── MssqlCodeGenDialect.java │ │ │ ├── MysqlCodeGenDialect.java │ │ │ ├── Oracle11CodeGenDialect.java │ │ │ ├── OracleCodeGenDialect.java │ │ │ ├── PostgresCodeGenDialect.java │ │ │ └── StandardCodeGenDialect.java │ │ │ ├── exception │ │ │ ├── CodeGenException.java │ │ │ └── CodeGenNullPointerException.java │ │ │ ├── extension │ │ │ ├── CodeGenConfig.java │ │ │ ├── DaoConfig.java │ │ │ ├── EntityConfig.java │ │ │ ├── SqlConfig.java │ │ │ └── SqlTestConfig.java │ │ │ ├── generator │ │ │ ├── GenerationContext.java │ │ │ ├── Generator.java │ │ │ ├── OnDemandDateModel.java │ │ │ └── ResourceTemplateLoader.java │ │ │ ├── jdbc │ │ │ └── SimpleDataSource.java │ │ │ ├── message │ │ │ ├── Message.java │ │ │ └── MessageResource.java │ │ │ ├── meta │ │ │ ├── ColumnMeta.java │ │ │ ├── ResultSetMetaReader.java │ │ │ ├── TableMeta.java │ │ │ └── TableMetaReader.java │ │ │ ├── task │ │ │ ├── CodeGenDaoDescTask.java │ │ │ ├── CodeGenDaoTask.java │ │ │ ├── CodeGenDbMetaTask.java │ │ │ ├── CodeGenDtoTask.java │ │ │ ├── CodeGenEntityDescTask.java │ │ │ ├── CodeGenEntityTask.java │ │ │ ├── CodeGenSqlTask.java │ │ │ └── CodeGenSqlTestTask.java │ │ │ └── util │ │ │ ├── AssertionUtil.java │ │ │ ├── ClassUtil.java │ │ │ ├── FileUtil.java │ │ │ ├── IOUtil.java │ │ │ ├── JdbcUtil.java │ │ │ ├── Pair.java │ │ │ ├── ResourceUtil.java │ │ │ ├── StringUtil.java │ │ │ └── TableUtil.java │ └── resources │ │ └── org │ │ └── seasar │ │ └── doma │ │ └── gradle │ │ └── codegen │ │ └── template │ │ ├── java │ │ ├── dao.ftl │ │ ├── entity.ftl │ │ ├── entityListener.ftl │ │ ├── mappedSuperclass.ftl │ │ └── sqlTest.ftl │ │ ├── kotlin │ │ ├── dao.ftl │ │ ├── entity.ftl │ │ ├── entityListener.ftl │ │ ├── mappedSuperclass.ftl │ │ └── sqlTest.ftl │ │ ├── lib.ftl │ │ ├── selectById.sql.ftl │ │ └── selectByIdAndVersion.sql.ftl │ └── test │ ├── java │ ├── example │ │ └── hoge │ │ │ ├── AbstractBean.java │ │ │ ├── CommonEntity.java │ │ │ └── ParentEntity.java │ └── org │ │ └── seasar │ │ └── doma │ │ └── gradle │ │ └── codegen │ │ ├── GeneratorStub.java │ │ ├── GeneratorTest.java │ │ ├── KotlinGeneratorStub.java │ │ ├── KotlinGeneratorTest.java │ │ ├── desc │ │ └── EntityPropertyClassNameResolverTest.java │ │ ├── dialect │ │ ├── MysqlCodeGenDialectTest.java │ │ ├── OracleCodeGenDialectTest.java │ │ └── StandardCodeGenDialectTest.java │ │ └── util │ │ ├── FileUtilTest.java │ │ ├── JdbcUtilTest.java │ │ ├── StringUtilTest.java │ │ └── TableUtilTest.java │ └── resources │ ├── META-INF │ └── org │ │ └── seasar │ │ └── doma │ │ └── gradle │ │ └── codegen │ │ └── GeneratorTest │ │ ├── insert.txt │ │ ├── select-oracle.sql │ │ ├── select.sql │ │ └── update.sql │ └── org │ └── seasar │ └── doma │ └── gradle │ └── codegen │ ├── GeneratorTest_CompositeId.txt │ ├── GeneratorTest_DefaultConfigDao.txt │ ├── GeneratorTest_EntityPropertyClassNameResolver.txt │ ├── GeneratorTest_EntitySuperclass.txt │ ├── GeneratorTest_ExtendingEntityListener.txt │ ├── GeneratorTest_ExtendingMappedSuperclass.txt │ ├── GeneratorTest_GenerationType_IDENTITY.txt │ ├── GeneratorTest_GenerationType_SEQUENCE.txt │ ├── GeneratorTest_GenerationType_TABLE.txt │ ├── GeneratorTest_Metamodel.txt │ ├── GeneratorTest_NamingType.txt │ ├── GeneratorTest_OriginalStates.txt │ ├── GeneratorTest_SelectById.txt │ ├── GeneratorTest_SelectByIdAndVersion.txt │ ├── GeneratorTest_SelectById_date.txt │ ├── GeneratorTest_SelectById_entitySuperclass.txt │ ├── GeneratorTest_SelectById_number.txt │ ├── GeneratorTest_SelectById_time.txt │ ├── GeneratorTest_SelectById_timestamp.txt │ ├── GeneratorTest_SelectById_varchar.txt │ ├── GeneratorTest_ShowColumnName_false.txt │ ├── GeneratorTest_ShowTableName_false.txt │ ├── GeneratorTest_SimpleDao.txt │ ├── GeneratorTest_SimpleDao_with_prefix.txt │ ├── GeneratorTest_SimpleDao_with_prefix_and_suffix.txt │ ├── GeneratorTest_SimpleDao_with_suffix.txt │ ├── GeneratorTest_SimpleEntity.txt │ ├── GeneratorTest_SimpleEntityListener.txt │ ├── GeneratorTest_SimpleEntityListener_with_prefix.txt │ ├── GeneratorTest_SimpleEntityListener_with_prefix_and_suffix.txt │ ├── GeneratorTest_SimpleEntityListener_with_suffix.txt │ ├── GeneratorTest_SimpleEntity_with_prefix.txt │ ├── GeneratorTest_SimpleEntity_with_prefix_and_suffix.txt │ ├── GeneratorTest_SimpleEntity_with_suffix.txt │ ├── GeneratorTest_SimpleMappedSuperclass.txt │ ├── GeneratorTest_SimpleSqlTest.txt │ ├── GeneratorTest_UseEntityListener.txt │ ├── KotlinGeneratorTest_CompositeId.txt │ ├── KotlinGeneratorTest_DefaultConfigDao.txt │ ├── KotlinGeneratorTest_EntityPropertyClassNameResolver.txt │ ├── KotlinGeneratorTest_EntitySuperclass.txt │ ├── KotlinGeneratorTest_ExtendingEntityListener.txt │ ├── KotlinGeneratorTest_ExtendingMappedSuperclass.txt │ ├── KotlinGeneratorTest_GenerationType_IDENTITY.txt │ ├── KotlinGeneratorTest_GenerationType_SEQUENCE.txt │ ├── KotlinGeneratorTest_GenerationType_TABLE.txt │ ├── KotlinGeneratorTest_Metamodel.txt │ ├── KotlinGeneratorTest_NamingType.txt │ ├── KotlinGeneratorTest_OriginalStates.txt │ ├── KotlinGeneratorTest_SelectById.txt │ ├── KotlinGeneratorTest_ShowColumnName_false.txt │ ├── KotlinGeneratorTest_ShowTableName_false.txt │ ├── KotlinGeneratorTest_SimpleDao.txt │ ├── KotlinGeneratorTest_SimpleDao_with_prefix.txt │ ├── KotlinGeneratorTest_SimpleDao_with_prefix_and_suffix.txt │ ├── KotlinGeneratorTest_SimpleDao_with_suffix.txt │ ├── KotlinGeneratorTest_SimpleEntity.txt │ ├── KotlinGeneratorTest_SimpleEntityListener.txt │ ├── KotlinGeneratorTest_SimpleEntityListener_with_prefix.txt │ ├── KotlinGeneratorTest_SimpleEntityListener_with_prefix_and_suffix.txt │ ├── KotlinGeneratorTest_SimpleEntityListener_with_suffix.txt │ ├── KotlinGeneratorTest_SimpleEntity_with_prefix.txt │ ├── KotlinGeneratorTest_SimpleEntity_with_prefix_and_suffix.txt │ ├── KotlinGeneratorTest_SimpleEntity_with_suffix.txt │ ├── KotlinGeneratorTest_SimpleMappedSuperclass.txt │ ├── KotlinGeneratorTest_SimpleSqlTest.txt │ ├── KotlinGeneratorTest_UseEntityListener.txt │ ├── desc │ └── EntityPropertyClassNameResolverTest.properties │ └── entityPropertyClassNames.properties ├── gradle.properties ├── gradle └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat ├── renovate.json └── settings.gradle.kts /.github/pr-labeler.yml: -------------------------------------------------------------------------------- 1 | chore: chore/* 2 | ci: ci/* 3 | dependencies: dependencies/* 4 | docs: docs/* 5 | feature: ['feature/*', 'feat/*'] 6 | fix: fix/* 7 | perf: perf/* 8 | refactor: refactor/* 9 | security: security/* 10 | skip-changelog: ['release/*', 'working/*'] 11 | test: test/* 12 | -------------------------------------------------------------------------------- /.github/release-drafter.yml: -------------------------------------------------------------------------------- 1 | name-template: 'v$RESOLVED_VERSION' 2 | tag-template: 'v$RESOLVED_VERSION' 3 | template: | 4 | # What's Changed 5 | 6 | $CHANGES 7 | 8 | **Full Changelog**: https://github.com/$OWNER/$REPOSITORY/compare/$PREVIOUS_TAG...$RESOLVED_VERSION 9 | 10 | categories: 11 | - title: 'New Features' 12 | labels: 13 | - 'feat' 14 | - 'feature' 15 | - title: 'Bug Fixes' 16 | labels: 17 | - 'bug' 18 | - 'fix' 19 | - title: 'Maintenance' 20 | labels: 21 | - 'ci' 22 | - 'chore' 23 | - 'perf' 24 | - 'refactor' 25 | - 'security' 26 | - 'test' 27 | - title: 'Documentation' 28 | label: 'docs' 29 | - title: 'Dependency Upgrades' 30 | label: 'dependencies' 31 | exclude-labels: 32 | - 'skip-changelog' 33 | version-resolver: 34 | major: 35 | labels: 36 | - 'major' 37 | minor: 38 | labels: 39 | - 'minor' 40 | - 'feat' 41 | - 'feature' 42 | patch: 43 | labels: 44 | - 'patch' 45 | default: patch 46 | -------------------------------------------------------------------------------- /.github/workflows/ci.yml: -------------------------------------------------------------------------------- 1 | name: Java CI with Gradle 2 | 3 | on: 4 | push: 5 | branches: [ master ] 6 | pull_request: 7 | branches: [ master ] 8 | 9 | jobs: 10 | build: 11 | runs-on: ubuntu-latest 12 | 13 | steps: 14 | - uses: actions/checkout@v4 15 | 16 | - name: Set up JDK 21 17 | uses: actions/setup-java@v4 18 | with: 19 | distribution: 'zulu' 20 | java-version: 21 21 | 22 | - name: Grant execute permission for ./gradlew 23 | run: chmod +x gradlew 24 | 25 | - name: Grant execute permission for codegen-test/gradlew 26 | working-directory: ./codegen-test 27 | run: chmod +x gradlew 28 | 29 | - name: Assemble and Check 30 | run: ./gradlew assemble check 31 | 32 | - name: Test plugin (generate Java code) 33 | working-directory: ./codegen-test 34 | run: ./gradlew domaCodeGenJavaAll build 35 | 36 | - name: Test plugin (generate Kotlin code) 37 | working-directory: ./codegen-test 38 | run: ./gradlew domaCodeGenKotlinAll build 39 | 40 | - name: Set version 41 | id: set-version 42 | run: ./gradlew properties | grep "^version:" | awk '{print $2}' | { read v; echo "version=$v" >> $GITHUB_OUTPUT; } 43 | 44 | - name: Print version 45 | run: echo ${{ steps.set-version.outputs.version }} 46 | 47 | - name: Publish plugin 48 | if: github.event_name == 'push' && endsWith(steps.set-version.outputs.version, 'SNAPSHOT') == false 49 | run: ./gradlew publishPlugins -Pgradle.publish.key=${{ secrets.GRADLE_PUBLISH_KEY }} -Pgradle.publish.secret=${{ secrets.GRADLE_PUBLISH_SECRET }} 50 | -------------------------------------------------------------------------------- /.github/workflows/pr-labeler.yml: -------------------------------------------------------------------------------- 1 | name: PR Labeler 2 | 3 | on: 4 | pull_request: 5 | types: [opened] 6 | 7 | jobs: 8 | pr-labeler: 9 | runs-on: ubuntu-latest 10 | 11 | steps: 12 | - uses: TimonVS/pr-labeler-action@v5 13 | with: 14 | configuration-path: .github/pr-labeler.yml 15 | env: 16 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 17 | -------------------------------------------------------------------------------- /.github/workflows/release-drafter.yml: -------------------------------------------------------------------------------- 1 | name: Release Drafter 2 | 3 | on: 4 | push: 5 | branches: 6 | - master 7 | workflow_dispatch: 8 | 9 | jobs: 10 | update_release_draft: 11 | runs-on: ubuntu-latest 12 | 13 | steps: 14 | - uses: release-drafter/release-drafter@v6 15 | env: 16 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 17 | -------------------------------------------------------------------------------- /.github/workflows/release.yml: -------------------------------------------------------------------------------- 1 | name: Release 2 | 3 | on: 4 | workflow_dispatch: 5 | inputs: 6 | version: 7 | description: 'Release version' 8 | required: false 9 | 10 | jobs: 11 | release: 12 | name: Release 13 | runs-on: ubuntu-latest 14 | timeout-minutes: 30 15 | 16 | steps: 17 | - name: Assign input version 18 | if: github.event.inputs.version != null 19 | run: echo "RELEASE_VERSION=${{ github.event.inputs.version }}" >> $GITHUB_ENV 20 | 21 | - uses: actions/github-script@v7 22 | if: github.event.inputs.version == null 23 | id: candidate-version 24 | with: 25 | github-token: ${{secrets.GITHUB_TOKEN}} 26 | result-encoding: string 27 | script: | 28 | const list = await github.rest.repos.listReleases({ 29 | owner: "domaframework", 30 | repo: "doma-codegen-plugin", 31 | }); 32 | console.log(list) 33 | let version = list.data[0].name 34 | return version.startsWith("v") ? version.substring(1) : version 35 | 36 | - name: Assign candidate version 37 | if: github.event.inputs.version == null 38 | run: echo "RELEASE_VERSION=${{ steps.candidate-version.outputs.result }}" >> $GITHUB_ENV 39 | 40 | - name: Set up JDK 21 41 | uses: actions/setup-java@v4 42 | with: 43 | distribution: 'zulu' 44 | java-version: 21 45 | 46 | - name: Checkout 47 | uses: actions/checkout@v4 48 | with: 49 | token: ${{ secrets.REPO_ACCESS_TOKEN }} 50 | 51 | - name: Grant execute permission for gradlew 52 | run: chmod +x gradlew 53 | 54 | - name: Cache Gradle 55 | uses: actions/cache@v4 56 | with: 57 | path: | 58 | ~/.gradle/caches 59 | ~/.gradle/wrapper 60 | key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*') }} 61 | restore-keys: | 62 | ${{ runner.os }}-gradle- 63 | 64 | - name: Release ${{ env.RELEASE_VERSION }} 65 | run: | 66 | java -version 67 | git config --local user.email "action@github.com" 68 | git config --local user.name "GitHub Action" 69 | ./gradlew release -Prelease.releaseVersion=${{ env.RELEASE_VERSION }} 70 | 71 | - name: Upload reports 72 | if: failure() 73 | uses: actions/upload-artifact@v4 74 | with: 75 | name: build 76 | path: ./**/build/reports 77 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | /.classpath 2 | /.gradle/ 3 | /.project 4 | /.settings/ 5 | /bin/ 6 | /build/ 7 | /target/ 8 | /.metadata 9 | /.idea/ 10 | .factorypath 11 | -------------------------------------------------------------------------------- /.sdkmanrc: -------------------------------------------------------------------------------- 1 | # Enable auto-env through the sdkman_auto_env config 2 | # Add key=value pairs of SDKs to use below 3 | java=21-zulu 4 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | Doma CodeGen Plugin 2 | =================== 3 | 4 | Doma CodeGen Plugin is a gradle plugin. 5 | It generates Java, Kotlin, and SQL files from Database. 6 | 7 | [![Java CI with Gradle](https://github.com/domaframework/doma-codegen-plugin/workflows/Java%20CI%20with%20Gradle/badge.svg)](https://github.com/domaframework/doma-codegen-plugin/actions?query=workflow%3A%22Java+CI+with+Gradle%22) 8 | [![project chat](https://img.shields.io/badge/zulip-join_chat-green.svg)](https://domaframework.zulipchat.com) 9 | [![Twitter](https://img.shields.io/badge/twitter-@domaframework-blue.svg?style=flat)](https://twitter.com/domaframework) 10 | 11 | Documentation 12 | ------------- 13 | 14 | - English: https://doma.readthedocs.io/en/latest/codegen/ 15 | - Japanese: https://doma.readthedocs.io/ja/latest/codegen/ 16 | 17 | Check latest version 18 | -------------------- 19 | 20 | - [Gradle Plugin Portal](https://plugins.gradle.org/plugin/org.domaframework.doma.codegen) 21 | 22 | Major versions 23 | --------------------- 24 | 25 | ### Status and Repository 26 | 27 | | Version | Status | Repository | Branch | 28 | |-----------------------|-----------------|--------------------------------------------------------------------------------------------|--------| 29 | | Doma CodeGen Plugin 2 | limited-support | [domaframework/doma-codegen-plugin](https://github.com/domaframework/doma-codegen-plugin/) | 2.x | 30 | | Doma CodeGen Plugin 3 | stable | [domaframework/doma-codegen-plugin](https://github.com/domaframework/doma-codegen-plugin/) | master | 31 | 32 | ### Compatibility matrix 33 | 34 | The supported versions of Doma: 35 | 36 | | | Doma 2 | Doma 3 | 37 | |-----------------------|--------|--------| 38 | | Doma CodeGen Plugin 2 | v | | 39 | | Doma CodeGen Plugin 3 | | v | 40 | 41 | The minimum supported versions of Java: 42 | 43 | | | Java 8 | Java 17 | 44 | |-----------------------|--------|---------| 45 | | Doma CodeGen Plugin 2 | v | | 46 | | Doma CodeGen Plugin 3 | | v | 47 | -------------------------------------------------------------------------------- /RELEASE_OPERATIONS.md: -------------------------------------------------------------------------------- 1 | # Release Operations 2 | 3 | ## Dispatch the release workflow 4 | 5 | Dispatch the [release workflow](.github/workflows/release.yml) as follows: 6 | 7 | ``` 8 | $ gh api repos/domaframework/doma-codegen-plugin/actions/workflows/release.yml/dispatches -F ref='master' 9 | ``` 10 | 11 | ## Build and Publish with GitHub Action 12 | 13 | (No operation required) 14 | 15 | The [CI](.github/workflows/ci.yml) workflow follows the above release workflow 16 | and publishes the doma-codegen-plugin to the [Gradle Plugin Portal](https://plugins.gradle.org/). 17 | 18 | ## Publish release notes 19 | 20 | Open [Releases](https://github.com/domaframework/doma-compile-plugin/releases) 21 | and publish release notes. 22 | 23 | ## Announce the release 24 | 25 | Announce the release of new version using Twitter. 26 | - [@domaframework](https://twitter.com/domaframework) 27 | -------------------------------------------------------------------------------- /build.gradle.kts: -------------------------------------------------------------------------------- 1 | plugins { 2 | java 3 | id("net.researchgate.release") version "3.1.0" 4 | } 5 | 6 | configure { 7 | newVersionCommitMessage.set("[Gradle Release Plugin] - [skip ci] new version commit: ") 8 | tagTemplate.set("v\$version") 9 | git { 10 | requireBranch.set("master") 11 | } 12 | } 13 | 14 | allprojects { 15 | apply(plugin = "java") 16 | tasks { 17 | test { 18 | useJUnitPlatform() 19 | } 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /codegen-test/.gitignore: -------------------------------------------------------------------------------- 1 | /.classpath 2 | /.gradle/ 3 | /.project 4 | /.settings/ 5 | /bin/ 6 | /build/ 7 | /src/ 8 | /target/ 9 | /data/ 10 | /.metadata 11 | /.idea/ 12 | /.apt_generated/ 13 | -------------------------------------------------------------------------------- /codegen-test/docker-compose.yml: -------------------------------------------------------------------------------- 1 | # Use root/example as user/password credentials 2 | version: '3.1' 3 | 4 | services: 5 | 6 | db: 7 | image: mysql 8 | command: --default-authentication-plugin=mysql_native_password 9 | restart: always 10 | environment: 11 | MYSQL_ROOT_PASSWORD: example 12 | ports: 13 | - 3306:3306 14 | 15 | adminer: 16 | image: adminer 17 | restart: always 18 | ports: 19 | - 8080:8080 -------------------------------------------------------------------------------- /codegen-test/gradle.properties: -------------------------------------------------------------------------------- 1 | domaVersion=3.9.0 2 | h2Version=2.3.232 3 | -------------------------------------------------------------------------------- /codegen-test/gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/domaframework/doma-codegen-plugin/bc3eebcb48ab56f3ddad05d60b35ea6f9e3c47b3/codegen-test/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /codegen-test/gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | distributionBase=GRADLE_USER_HOME 2 | distributionPath=wrapper/dists 3 | distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-bin.zip 4 | zipStoreBase=GRADLE_USER_HOME 5 | zipStorePath=wrapper/dists 6 | -------------------------------------------------------------------------------- /codegen-test/settings.gradle.kts: -------------------------------------------------------------------------------- 1 | rootProject.name = "codegen-test" 2 | 3 | pluginManagement { 4 | includeBuild("../codegen") 5 | } 6 | -------------------------------------------------------------------------------- /codegen-test/template/entity.ftl: -------------------------------------------------------------------------------- 1 | hello -------------------------------------------------------------------------------- /codegen/.gitignore: -------------------------------------------------------------------------------- 1 | /.classpath 2 | /.gradle/ 3 | /.project 4 | /.settings/ 5 | /bin/ 6 | /build/ 7 | /target/ 8 | /.metadata 9 | /.idea/ 10 | -------------------------------------------------------------------------------- /codegen/build.gradle.kts: -------------------------------------------------------------------------------- 1 | plugins { 2 | id("groovy") 3 | id("java-gradle-plugin") 4 | id("com.diffplug.spotless") version "7.0.4" 5 | id("com.gradle.plugin-publish") version "1.3.1" 6 | } 7 | 8 | gradlePlugin { 9 | website.set("https://github.com/domaframework/doma-codegen-plugin") 10 | vcsUrl.set("https://github.com/domaframework/doma-codegen-plugin.git") 11 | plugins { 12 | create("codegenPlugin") { 13 | id = "org.domaframework.doma.codegen" 14 | displayName = "Doma Codegen Plugin" 15 | description = "Generates Java, Kotlin, and SQL files from Database" 16 | implementationClass = "org.seasar.doma.gradle.codegen.CodeGenPlugin" 17 | tags.set(listOf("doma", "generator")) 18 | } 19 | } 20 | } 21 | 22 | sourceSets { 23 | main { 24 | java { 25 | setSrcDirs(emptyList()) 26 | } 27 | groovy { 28 | setSrcDirs(listOf("src/main/groovy", "src/main/java")) 29 | } 30 | } 31 | } 32 | 33 | spotless { 34 | java { 35 | googleJavaFormat("1.23.0") 36 | } 37 | groovy { 38 | } 39 | } 40 | 41 | java { 42 | toolchain.languageVersion.set(JavaLanguageVersion.of( 17)) 43 | } 44 | 45 | 46 | repositories { 47 | mavenCentral() 48 | mavenLocal() 49 | maven("https://oss.sonatype.org/content/repositories/snapshots/") 50 | } 51 | 52 | dependencies { 53 | implementation("org.freemarker:freemarker:2.3.34") 54 | testImplementation("org.seasar.doma:doma-core:3.9.0") 55 | 56 | // Use JUnit BOM for version management 57 | testImplementation(platform("org.junit:junit-bom:5.13.0")) 58 | testImplementation("org.junit.jupiter:junit-jupiter-api") 59 | testImplementation("org.junit.jupiter:junit-jupiter-params") 60 | testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine") 61 | testRuntimeOnly("org.junit.platform:junit-platform-launcher") 62 | } 63 | 64 | tasks { 65 | test { 66 | useJUnitPlatform() 67 | } 68 | 69 | javadoc { 70 | enabled = false 71 | } 72 | 73 | groovydoc { 74 | enabled = false 75 | } 76 | 77 | build { 78 | dependsOn(spotlessApply) 79 | } 80 | } 81 | -------------------------------------------------------------------------------- /codegen/gradle.properties: -------------------------------------------------------------------------------- 1 | group=org.domaframework.doma 2 | -------------------------------------------------------------------------------- /codegen/gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/domaframework/doma-codegen-plugin/bc3eebcb48ab56f3ddad05d60b35ea6f9e3c47b3/codegen/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /codegen/gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | distributionBase=GRADLE_USER_HOME 2 | distributionPath=wrapper/dists 3 | distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-bin.zip 4 | networkTimeout=10000 5 | validateDistributionUrl=true 6 | zipStoreBase=GRADLE_USER_HOME 7 | zipStorePath=wrapper/dists 8 | -------------------------------------------------------------------------------- /codegen/gradlew.bat: -------------------------------------------------------------------------------- 1 | @rem 2 | @rem Copyright 2015 the original author or authors. 3 | @rem 4 | @rem Licensed under the Apache License, Version 2.0 (the "License"); 5 | @rem you may not use this file except in compliance with the License. 6 | @rem You may obtain a copy of the License at 7 | @rem 8 | @rem https://www.apache.org/licenses/LICENSE-2.0 9 | @rem 10 | @rem Unless required by applicable law or agreed to in writing, software 11 | @rem distributed under the License is distributed on an "AS IS" BASIS, 12 | @rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | @rem See the License for the specific language governing permissions and 14 | @rem limitations under the License. 15 | @rem 16 | 17 | @if "%DEBUG%"=="" @echo off 18 | @rem ########################################################################## 19 | @rem 20 | @rem Gradle startup script for Windows 21 | @rem 22 | @rem ########################################################################## 23 | 24 | @rem Set local scope for the variables with windows NT shell 25 | if "%OS%"=="Windows_NT" setlocal 26 | 27 | set DIRNAME=%~dp0 28 | if "%DIRNAME%"=="" set DIRNAME=. 29 | @rem This is normally unused 30 | set APP_BASE_NAME=%~n0 31 | set APP_HOME=%DIRNAME% 32 | 33 | @rem Resolve any "." and ".." in APP_HOME to make it shorter. 34 | for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi 35 | 36 | @rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. 37 | set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" 38 | 39 | @rem Find java.exe 40 | if defined JAVA_HOME goto findJavaFromJavaHome 41 | 42 | set JAVA_EXE=java.exe 43 | %JAVA_EXE% -version >NUL 2>&1 44 | if %ERRORLEVEL% equ 0 goto execute 45 | 46 | echo. 1>&2 47 | echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2 48 | echo. 1>&2 49 | echo Please set the JAVA_HOME variable in your environment to match the 1>&2 50 | echo location of your Java installation. 1>&2 51 | 52 | goto fail 53 | 54 | :findJavaFromJavaHome 55 | set JAVA_HOME=%JAVA_HOME:"=% 56 | set JAVA_EXE=%JAVA_HOME%/bin/java.exe 57 | 58 | if exist "%JAVA_EXE%" goto execute 59 | 60 | echo. 1>&2 61 | echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2 62 | echo. 1>&2 63 | echo Please set the JAVA_HOME variable in your environment to match the 1>&2 64 | echo location of your Java installation. 1>&2 65 | 66 | goto fail 67 | 68 | :execute 69 | @rem Setup the command line 70 | 71 | set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar 72 | 73 | 74 | @rem Execute Gradle 75 | "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* 76 | 77 | :end 78 | @rem End local scope for the variables with windows NT shell 79 | if %ERRORLEVEL% equ 0 goto mainEnd 80 | 81 | :fail 82 | rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of 83 | rem the _cmd.exe /c_ return code! 84 | set EXIT_CODE=%ERRORLEVEL% 85 | if %EXIT_CODE% equ 0 set EXIT_CODE=1 86 | if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% 87 | exit /b %EXIT_CODE% 88 | 89 | :mainEnd 90 | if "%OS%"=="Windows_NT" endlocal 91 | 92 | :omega 93 | -------------------------------------------------------------------------------- /codegen/settings.gradle.kts: -------------------------------------------------------------------------------- 1 | rootProject.name = "codegen" 2 | -------------------------------------------------------------------------------- /codegen/src/main/java/org/seasar/doma/gradle/codegen/desc/ClassConstants.java: -------------------------------------------------------------------------------- 1 | package org.seasar.doma.gradle.codegen.desc; 2 | 3 | public enum ClassConstants { 4 | Dao("org.seasar.doma", "Dao"), 5 | 6 | Insert("org.seasar.doma", "Insert"), 7 | 8 | Update("org.seasar.doma", "Update"), 9 | 10 | Delete("org.seasar.doma", "Delete"), 11 | 12 | Select("org.seasar.doma", "Select"), 13 | 14 | Entity("org.seasar.doma", "Entity"), 15 | 16 | Metamodel("org.seasar.doma", "Metamodel"), 17 | 18 | Table("org.seasar.doma", "Table"), 19 | 20 | Id("org.seasar.doma", "Id"), 21 | 22 | GeneratedValue("org.seasar.doma", "GeneratedValue"), 23 | 24 | GenerationType("org.seasar.doma", "GenerationType"), 25 | 26 | SequenceGenerator("org.seasar.doma", "SequenceGenerator"), 27 | 28 | TableGenerator("org.seasar.doma", "TableGenerator"), 29 | 30 | Column("org.seasar.doma", "Column"), 31 | 32 | Transient("org.seasar.doma", "Transient"), 33 | 34 | Version("org.seasar.doma", "Version"), 35 | 36 | OriginalStates("org.seasar.doma", "OriginalStates"), 37 | 38 | NamingType("org.seasar.doma.jdbc.entity", "NamingType"), 39 | 40 | EntityListener("org.seasar.doma.jdbc.entity", "EntityListener"), 41 | 42 | PreInsertContext("org.seasar.doma.jdbc.entity", "PreInsertContext"), 43 | 44 | PreUpdateContext("org.seasar.doma.jdbc.entity", "PreUpdateContext"), 45 | 46 | PreDeleteContext("org.seasar.doma.jdbc.entity", "PreDeleteContext"), 47 | 48 | PostInsertContext("org.seasar.doma.jdbc.entity", "PostInsertContext"), 49 | 50 | PostUpdateContext("org.seasar.doma.jdbc.entity", "PostUpdateContext"), 51 | 52 | PostDeleteContext("org.seasar.doma.jdbc.entity", "PostDeleteContext"), 53 | 54 | StandardDialect("org.seasar.doma.jdbc.dialect", "StandardDialect"), 55 | 56 | HsqldbDialect("org.seasar.doma.jdbc.dialect", "HsqldbDialect"), 57 | 58 | H2Dialect("org.seasar.doma.jdbc.dialect", "H2Dialect"), 59 | 60 | MysqlDialect("org.seasar.doma.jdbc.dialect", "MysqlDialect"), 61 | 62 | PostgresDialect("org.seasar.doma.jdbc.dialect", "PostgresDialect"), 63 | 64 | Db2Dialect("org.seasar.doma.jdbc.dialect", "Db2Dialect"), 65 | 66 | Mssql2008("org.seasar.doma.jdbc.dialect", "Mssql2008Dialect"), 67 | 68 | Mssql("org.seasar.doma.jdbc.dialect", "MssqlDialect"), 69 | 70 | Oracle11Dialect("org.seasar.doma.jdbc.dialect", "Oracle11Dialect"), 71 | 72 | OracleDialect("org.seasar.doma.jdbc.dialect", "OracleDialect"), 73 | 74 | Config("org.seasar.doma.jdbc", "Config"), 75 | 76 | bytes("", "byte[]"), 77 | ; 78 | 79 | private final String packageName; 80 | 81 | private final String simpleName; 82 | 83 | private ClassConstants(String packageName, String simpleName) { 84 | this.packageName = packageName; 85 | this.simpleName = simpleName; 86 | } 87 | 88 | public String getQualifiedName() { 89 | return packageName + "." + simpleName; 90 | } 91 | 92 | public String getPackageName() { 93 | return packageName; 94 | } 95 | 96 | public String getSimpleName() { 97 | return simpleName; 98 | } 99 | } 100 | -------------------------------------------------------------------------------- /codegen/src/main/java/org/seasar/doma/gradle/codegen/desc/ClassDesc.java: -------------------------------------------------------------------------------- 1 | package org.seasar.doma.gradle.codegen.desc; 2 | 3 | import java.util.SortedSet; 4 | import java.util.TreeSet; 5 | 6 | public abstract class ClassDesc { 7 | 8 | protected final SortedSet importNames = new TreeSet(); 9 | 10 | protected String packageName; 11 | 12 | protected String simpleName; 13 | 14 | protected String comment; 15 | 16 | protected ClassDesc() {} 17 | 18 | public void addImportName(String name) { 19 | importNames.add(name); 20 | } 21 | 22 | public SortedSet getImportNames() { 23 | return importNames; 24 | } 25 | 26 | public void setPackageName(String packageName) { 27 | this.packageName = packageName; 28 | } 29 | 30 | public String getPackageName() { 31 | return packageName; 32 | } 33 | 34 | public void setSimpleName(String simpleName) { 35 | this.simpleName = simpleName; 36 | } 37 | 38 | public String getSimpleName() { 39 | return simpleName; 40 | } 41 | 42 | public void setComment(String comment) { 43 | this.comment = comment; 44 | } 45 | 46 | public String getComment() { 47 | return comment; 48 | } 49 | 50 | public String getQualifiedName() { 51 | if (packageName == null || packageName.isEmpty()) { 52 | return simpleName; 53 | } 54 | return packageName + "." + simpleName; 55 | } 56 | } 57 | -------------------------------------------------------------------------------- /codegen/src/main/java/org/seasar/doma/gradle/codegen/desc/ClassDescSupport.java: -------------------------------------------------------------------------------- 1 | package org.seasar.doma.gradle.codegen.desc; 2 | 3 | import org.seasar.doma.gradle.codegen.util.ClassUtil; 4 | 5 | public class ClassDescSupport { 6 | 7 | public void addImportName(ClassDesc classDesc, Class importedClass) { 8 | String canonicalName = importedClass.getCanonicalName(); 9 | String packageName = ClassUtil.getPackageName(canonicalName); 10 | if (isImportTargetPackage(classDesc, packageName)) { 11 | classDesc.addImportName(canonicalName); 12 | } 13 | } 14 | 15 | public void addImportName(ClassDesc classDesc, String importedClassName) { 16 | String packageName = ClassUtil.getPackageName(importedClassName); 17 | if (isImportTargetPackage(classDesc, packageName)) { 18 | classDesc.addImportName(importedClassName); 19 | } 20 | } 21 | 22 | public void addImportName(ClassDesc classDesc, ClassConstants importedClass) { 23 | String packageName = importedClass.getPackageName(); 24 | if (isImportTargetPackage(classDesc, packageName)) { 25 | classDesc.addImportName(importedClass.getQualifiedName()); 26 | } 27 | } 28 | 29 | public void addImportName(ClassDesc classDesc, EnumConstants importedClass) { 30 | ClassConstants classConstant = importedClass.getClassConstant(); 31 | String packageName = classConstant.getPackageName(); 32 | if (isImportTargetPackage(classDesc, packageName)) { 33 | classDesc.addImportName(importedClass.getImportName()); 34 | } 35 | } 36 | 37 | protected boolean isImportTargetPackage(ClassDesc classDesc, String importPackageName) { 38 | if (importPackageName == null) { 39 | return false; 40 | } 41 | if (importPackageName.isEmpty()) { 42 | return false; 43 | } 44 | if (importPackageName.equals(classDesc.getPackageName())) { 45 | return false; 46 | } 47 | if (importPackageName.equals("java.lang")) { 48 | return false; 49 | } 50 | return true; 51 | } 52 | } 53 | -------------------------------------------------------------------------------- /codegen/src/main/java/org/seasar/doma/gradle/codegen/desc/Constants.java: -------------------------------------------------------------------------------- 1 | package org.seasar.doma.gradle.codegen.desc; 2 | 3 | public class Constants { 4 | 5 | public static final String ENTITY_LISTENER_SUFFIX = "Listener"; 6 | 7 | public static final String MAPPED_SUPER_CLASS_PREFIX = "Abstract"; 8 | 9 | public static final String ENTITY_TEMPLATE = "entity.ftl"; 10 | 11 | public static final String ENTITY_LISTENER_TEMPLATE = "entityListener.ftl"; 12 | 13 | public static final String MAPPED_SUPERCLASS_TEMPLATE = "mappedSuperclass.ftl"; 14 | 15 | public static final String DAO_TEMPLATE = "dao.ftl"; 16 | 17 | public static final String SQL_TEST_CASE_TEMPLATE = "sqlTest.ftl"; 18 | 19 | public static final String TEMPLATE_EXTENSION = ".ftl"; 20 | 21 | public static final String SQL_TEMPLATE_EXTENSION = ".sql.ftl"; 22 | 23 | public static final String SELECT_BY_ID_SQL_TEMPLATE = "selectById.sql.ftl"; 24 | 25 | public static final String SELECT_BY_ID_AND_VERSION_SQL_TEMPLATE = "selectByIdAndVersion.sql.ftl"; 26 | } 27 | -------------------------------------------------------------------------------- /codegen/src/main/java/org/seasar/doma/gradle/codegen/desc/DaoDesc.java: -------------------------------------------------------------------------------- 1 | package org.seasar.doma.gradle.codegen.desc; 2 | 3 | public class DaoDesc extends ClassDesc { 4 | 5 | protected String configClassSimpleName; 6 | 7 | protected EntityDesc entityDesc; 8 | 9 | protected String templateName; 10 | 11 | public String getConfigClassSimpleName() { 12 | return configClassSimpleName; 13 | } 14 | 15 | public void setConfigClassSimpleName(String configClassSimpleName) { 16 | this.configClassSimpleName = configClassSimpleName; 17 | } 18 | 19 | public EntityDesc getEntityDesc() { 20 | return entityDesc; 21 | } 22 | 23 | public void setEntityDesc(EntityDesc entityDesc) { 24 | this.entityDesc = entityDesc; 25 | } 26 | 27 | public void setTemplateName(String templateName) { 28 | this.templateName = templateName; 29 | } 30 | 31 | public String getTemplateName() { 32 | return templateName; 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /codegen/src/main/java/org/seasar/doma/gradle/codegen/desc/DaoDescFactory.java: -------------------------------------------------------------------------------- 1 | package org.seasar.doma.gradle.codegen.desc; 2 | 3 | import org.seasar.doma.gradle.codegen.exception.CodeGenNullPointerException; 4 | import org.seasar.doma.gradle.codegen.util.ClassUtil; 5 | import org.seasar.doma.gradle.codegen.util.StringUtil; 6 | 7 | public class DaoDescFactory { 8 | 9 | protected final String packageName; 10 | 11 | protected final String suffix; 12 | 13 | protected final String configClassName; 14 | 15 | protected final ClassDescSupport classDescSupport = new ClassDescSupport(); 16 | 17 | public DaoDescFactory(String packageName, String suffix, String configClassName) { 18 | if (suffix == null) { 19 | throw new CodeGenNullPointerException("suffix"); 20 | } 21 | this.packageName = packageName; 22 | this.suffix = suffix; 23 | this.configClassName = configClassName; 24 | } 25 | 26 | public DaoDesc createDaoDesc(EntityDesc entityDesc) { 27 | DaoDesc daoDesc = new DaoDesc(); 28 | daoDesc.setPackageName(packageName); 29 | String entityPrefix = StringUtil.defaultString(entityDesc.getEntityPrefix(), ""); 30 | String entitySuffix = StringUtil.defaultString(entityDesc.getEntitySuffix(), ""); 31 | String simpleName = entityPrefix + entityDesc.getSimpleName() + entitySuffix + suffix; 32 | daoDesc.setSimpleName(simpleName); 33 | if (configClassName != null) { 34 | daoDesc.setConfigClassSimpleName(ClassUtil.getSimpleName(configClassName)); 35 | } 36 | daoDesc.setEntityDesc(entityDesc); 37 | daoDesc.setTemplateName(Constants.DAO_TEMPLATE); 38 | handleImportName(daoDesc, entityDesc); 39 | return daoDesc; 40 | } 41 | 42 | protected void handleImportName(DaoDesc daoDesc, EntityDesc entityDesc) { 43 | classDescSupport.addImportName(daoDesc, ClassConstants.Dao); 44 | classDescSupport.addImportName(daoDesc, ClassConstants.Insert); 45 | classDescSupport.addImportName(daoDesc, ClassConstants.Update); 46 | classDescSupport.addImportName(daoDesc, ClassConstants.Delete); 47 | if (configClassName != null) { 48 | classDescSupport.addImportName(daoDesc, configClassName); 49 | } 50 | classDescSupport.addImportName(daoDesc, entityDesc.getQualifiedName()); 51 | for (EntityPropertyDesc propertyDesc : entityDesc.getIdEntityPropertyDescs()) { 52 | classDescSupport.addImportName(daoDesc, propertyDesc.getPropertyClassName()); 53 | classDescSupport.addImportName(daoDesc, ClassConstants.Select); 54 | } 55 | if (entityDesc.getIdEntityPropertyDescs().size() > 0) { 56 | classDescSupport.addImportName(daoDesc, ClassConstants.Select); 57 | for (EntityPropertyDesc propertyDesc : entityDesc.getIdEntityPropertyDescs()) { 58 | classDescSupport.addImportName(daoDesc, propertyDesc.getPropertyClassName()); 59 | } 60 | if (entityDesc.getVersionEntityPropertyDesc() != null) { 61 | classDescSupport.addImportName( 62 | daoDesc, entityDesc.getVersionEntityPropertyDesc().getPropertyClassName()); 63 | } 64 | } 65 | } 66 | } 67 | -------------------------------------------------------------------------------- /codegen/src/main/java/org/seasar/doma/gradle/codegen/desc/EntityListenerDesc.java: -------------------------------------------------------------------------------- 1 | package org.seasar.doma.gradle.codegen.desc; 2 | 3 | public class EntityListenerDesc extends ClassDesc { 4 | 5 | protected String entityClassSimpleName; 6 | 7 | protected String superclassSimpleName; 8 | 9 | protected String listenerClassSimpleName; 10 | 11 | protected EntityDesc entityDesc; 12 | 13 | protected String templateName; 14 | 15 | public void setTemplateName(String templateName) { 16 | this.templateName = templateName; 17 | } 18 | 19 | public String getTemplateName() { 20 | return templateName; 21 | } 22 | 23 | public String getEntityClassSimpleName() { 24 | return entityClassSimpleName; 25 | } 26 | 27 | public void setEntityClassSimpleName(String entityClassSimpleName) { 28 | this.entityClassSimpleName = entityClassSimpleName; 29 | } 30 | 31 | public String getSuperclassSimpleName() { 32 | return superclassSimpleName; 33 | } 34 | 35 | public void setSuperclassSimpleName(String superclassSimpleName) { 36 | this.superclassSimpleName = superclassSimpleName; 37 | } 38 | 39 | public String getListenerClassSimpleName() { 40 | return listenerClassSimpleName; 41 | } 42 | 43 | public void setListenerClassSimpleName(String listenerClassSimpleName) { 44 | this.listenerClassSimpleName = listenerClassSimpleName; 45 | } 46 | 47 | public EntityDesc getEntityDesc() { 48 | return entityDesc; 49 | } 50 | 51 | public void setEntityDesc(EntityDesc entityDesc) { 52 | this.entityDesc = entityDesc; 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /codegen/src/main/java/org/seasar/doma/gradle/codegen/desc/EntityListenerDescFactory.java: -------------------------------------------------------------------------------- 1 | package org.seasar.doma.gradle.codegen.desc; 2 | 3 | import org.seasar.doma.gradle.codegen.util.ClassUtil; 4 | import org.seasar.doma.gradle.codegen.util.StringUtil; 5 | 6 | public class EntityListenerDescFactory { 7 | 8 | protected final String packageName; 9 | 10 | protected final String superclassName; 11 | 12 | protected final ClassDescSupport classDescSupport = new ClassDescSupport(); 13 | 14 | public EntityListenerDescFactory(String packageName, String superclassName) { 15 | this.packageName = packageName; 16 | this.superclassName = superclassName; 17 | } 18 | 19 | public EntityListenerDesc createEntityListenerDesc(EntityDesc entityDesc) { 20 | EntityListenerDesc entityListenerDesc = new EntityListenerDesc(); 21 | entityListenerDesc.setEntityDesc(entityDesc); 22 | entityListenerDesc.setPackageName(entityDesc.getPackageName()); 23 | String entityPrefix = StringUtil.defaultString(entityDesc.getEntityPrefix(), ""); 24 | String entitySuffix = StringUtil.defaultString(entityDesc.getEntitySuffix(), ""); 25 | String entityName = entityPrefix + entityDesc.getSimpleName() + entitySuffix; 26 | entityListenerDesc.setSimpleName(entityName + Constants.ENTITY_LISTENER_SUFFIX); 27 | entityListenerDesc.setEntityClassSimpleName(entityDesc.getSimpleName()); 28 | if (superclassName != null) { 29 | entityListenerDesc.setSuperclassSimpleName(ClassUtil.getSimpleName(superclassName)); 30 | } 31 | entityListenerDesc.setTemplateName(Constants.ENTITY_LISTENER_TEMPLATE); 32 | handleImportName(entityListenerDesc, entityDesc); 33 | return entityListenerDesc; 34 | } 35 | 36 | protected void handleImportName(EntityListenerDesc entityListenerDesc, EntityDesc entityDesc) { 37 | classDescSupport.addImportName(entityListenerDesc, entityDesc.getQualifiedName()); 38 | if (superclassName == null) { 39 | classDescSupport.addImportName(entityListenerDesc, ClassConstants.EntityListener); 40 | classDescSupport.addImportName(entityListenerDesc, ClassConstants.PreInsertContext); 41 | classDescSupport.addImportName(entityListenerDesc, ClassConstants.PreUpdateContext); 42 | classDescSupport.addImportName(entityListenerDesc, ClassConstants.PreDeleteContext); 43 | classDescSupport.addImportName(entityListenerDesc, ClassConstants.PostInsertContext); 44 | classDescSupport.addImportName(entityListenerDesc, ClassConstants.PostUpdateContext); 45 | classDescSupport.addImportName(entityListenerDesc, ClassConstants.PostDeleteContext); 46 | } else { 47 | classDescSupport.addImportName(entityListenerDesc, superclassName); 48 | } 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /codegen/src/main/java/org/seasar/doma/gradle/codegen/desc/EntityPropertyClassNameResolver.java: -------------------------------------------------------------------------------- 1 | package org.seasar.doma.gradle.codegen.desc; 2 | 3 | import java.io.BufferedReader; 4 | import java.io.File; 5 | import java.io.FileInputStream; 6 | import java.io.IOException; 7 | import java.io.InputStreamReader; 8 | import java.util.LinkedHashMap; 9 | import java.util.Map; 10 | import java.util.regex.Matcher; 11 | import java.util.regex.Pattern; 12 | import org.seasar.doma.gradle.codegen.exception.CodeGenException; 13 | import org.seasar.doma.gradle.codegen.message.Message; 14 | import org.seasar.doma.gradle.codegen.util.IOUtil; 15 | 16 | public class EntityPropertyClassNameResolver { 17 | 18 | protected final LinkedHashMap patternMap; 19 | 20 | public EntityPropertyClassNameResolver(File propertyFile) { 21 | if (propertyFile == null) { 22 | patternMap = new LinkedHashMap(); 23 | } else { 24 | patternMap = load(propertyFile); 25 | } 26 | } 27 | 28 | protected LinkedHashMap load(File propertyFile) { 29 | LinkedHashMap result = new LinkedHashMap(); 30 | BufferedReader reader = null; 31 | try { 32 | reader = 33 | new BufferedReader(new InputStreamReader(new FileInputStream(propertyFile), "UTF-8")); 34 | String line; 35 | while ((line = reader.readLine()) != null) { 36 | if (line.length() == 0) { 37 | continue; 38 | } 39 | char firstChar = line.charAt(0); 40 | if (firstChar == '#' || firstChar == '!') { 41 | continue; 42 | } 43 | int pos = line.indexOf('='); 44 | if (pos < 0) { 45 | continue; 46 | } 47 | String key = line.substring(0, pos); 48 | String value = line.substring(pos + 1, line.length()); 49 | int pos2 = line.indexOf('@'); 50 | if (pos2 == 0) { 51 | key = key.substring(1); 52 | } else if (pos2 > 0) { 53 | key = Pattern.quote(key.substring(0, pos2)) + key.substring(pos2); 54 | } 55 | result.put(Pattern.compile(key), value); 56 | } 57 | } catch (IOException e) { 58 | throw new CodeGenException(Message.DOMAGEN9001, e, e); 59 | } finally { 60 | IOUtil.close(reader); 61 | } 62 | return result; 63 | } 64 | 65 | public String resolve( 66 | EntityDesc entityDesc, String propertyName, String defaultPropertyClassName) { 67 | String qualifiedPropertyName = entityDesc.getQualifiedName() + "@" + propertyName; 68 | for (Map.Entry entry : patternMap.entrySet()) { 69 | Pattern pattern = entry.getKey(); 70 | String input = pattern.pattern().contains("@") ? qualifiedPropertyName : propertyName; 71 | Matcher matcher = pattern.matcher(input); 72 | if (!matcher.matches()) { 73 | continue; 74 | } 75 | matcher.reset(); 76 | StringBuffer buf = new StringBuffer(); 77 | String replacement = entry.getValue(); 78 | for (; matcher.find(); ) { 79 | matcher.appendReplacement(buf, replacement); 80 | if (matcher.hitEnd()) { 81 | break; 82 | } 83 | } 84 | matcher.appendTail(buf); 85 | return buf.toString(); 86 | } 87 | return defaultPropertyClassName; 88 | } 89 | } 90 | -------------------------------------------------------------------------------- /codegen/src/main/java/org/seasar/doma/gradle/codegen/desc/EnumConstants.java: -------------------------------------------------------------------------------- 1 | package org.seasar.doma.gradle.codegen.desc; 2 | 3 | public enum EnumConstants { 4 | NamingType_NONE(ClassConstants.NamingType, "NONE"), 5 | 6 | NamingType_UPPER_CASE(ClassConstants.NamingType, "UPPER_CASE"), 7 | 8 | NamingType_LOWER_CASE(ClassConstants.NamingType, "LOWER_CASE"), 9 | 10 | NamingType_SNAKE_UPPER_CASE(ClassConstants.NamingType, "SNAKE_UPPER_CASE"), 11 | 12 | NamingType_SNAKE_LOWER_CASE(ClassConstants.NamingType, "SNAKE_LOWER_CASE"), 13 | 14 | GenerationType_SEQUENCE(ClassConstants.GenerationType, "SEQUENCE"), 15 | 16 | GenerationType_TABLE(ClassConstants.GenerationType, "TABLE"), 17 | 18 | GenerationType_IDENTITY(ClassConstants.GenerationType, "IDENTITY"), 19 | ; 20 | 21 | private final ClassConstants classConstant; 22 | 23 | private final String name; 24 | 25 | private EnumConstants(ClassConstants classConstant, String name) { 26 | this.classConstant = classConstant; 27 | this.name = name; 28 | } 29 | 30 | public ClassConstants getClassConstant() { 31 | return classConstant; 32 | } 33 | 34 | public String getImportName() { 35 | return classConstant.getQualifiedName(); 36 | } 37 | 38 | public String getReferenceName() { 39 | return classConstant.getSimpleName() + "." + name; 40 | } 41 | 42 | public String getName() { 43 | return name; 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /codegen/src/main/java/org/seasar/doma/gradle/codegen/desc/GenerationType.java: -------------------------------------------------------------------------------- 1 | package org.seasar.doma.gradle.codegen.desc; 2 | 3 | public enum GenerationType { 4 | IDENTITY(EnumConstants.GenerationType_IDENTITY), 5 | 6 | SEQUENCE(EnumConstants.GenerationType_SEQUENCE), 7 | 8 | TABLE(EnumConstants.GenerationType_TABLE); 9 | 10 | private final EnumConstants enumConstant; 11 | 12 | GenerationType(EnumConstants enumConstant) { 13 | this.enumConstant = enumConstant; 14 | } 15 | 16 | public EnumConstants getEnumConstant() { 17 | return enumConstant; 18 | } 19 | 20 | public String getReferenceName() { 21 | return enumConstant.getReferenceName(); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /codegen/src/main/java/org/seasar/doma/gradle/codegen/desc/JavaClassResolver.java: -------------------------------------------------------------------------------- 1 | package org.seasar.doma.gradle.codegen.desc; 2 | 3 | import org.seasar.doma.gradle.codegen.meta.ColumnMeta; 4 | 5 | public class JavaClassResolver implements LanguageClassResolver { 6 | @Override 7 | public LanguageClass resolve(String javaClassName, ColumnMeta columnMeta) { 8 | return new LanguageClass(javaClassName, "null"); 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /codegen/src/main/java/org/seasar/doma/gradle/codegen/desc/KotlinClassResolver.java: -------------------------------------------------------------------------------- 1 | package org.seasar.doma.gradle.codegen.desc; 2 | 3 | import java.util.HashMap; 4 | import java.util.Map; 5 | import java.util.Objects; 6 | import org.seasar.doma.gradle.codegen.meta.ColumnMeta; 7 | 8 | public class KotlinClassResolver implements LanguageClassResolver { 9 | 10 | @Override 11 | public LanguageClass resolve(String javaClassName, ColumnMeta columnMeta) { 12 | Objects.requireNonNull(javaClassName); 13 | Map map = createMap(); 14 | LanguageClass value = map.get(javaClassName); 15 | if (value != null) { 16 | return value; 17 | } 18 | return new LanguageClass(javaClassName, "null"); 19 | } 20 | 21 | protected Map createMap() { 22 | Map map = new HashMap<>(); 23 | map.put(Byte.class.getName(), new LanguageClass("Byte", "-1")); 24 | map.put(Short.class.getName(), new LanguageClass("Short", "-1")); 25 | map.put(Integer.class.getName(), new LanguageClass("Int", "-1")); 26 | map.put(Long.class.getName(), new LanguageClass("Long", "-1L")); 27 | map.put(Float.class.getName(), new LanguageClass("Float", "-1f")); 28 | map.put(Double.class.getName(), new LanguageClass("Double", "-1.0")); 29 | return map; 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /codegen/src/main/java/org/seasar/doma/gradle/codegen/desc/LanguageClass.java: -------------------------------------------------------------------------------- 1 | package org.seasar.doma.gradle.codegen.desc; 2 | 3 | import java.util.Objects; 4 | 5 | public class LanguageClass { 6 | 7 | private final String className; 8 | private final String defaultValue; 9 | 10 | public LanguageClass(String className, String initialValue) { 11 | this.className = Objects.requireNonNull(className); 12 | this.defaultValue = Objects.requireNonNull(initialValue); 13 | } 14 | 15 | public String getClassName() { 16 | return className; 17 | } 18 | 19 | public String getDefaultValue() { 20 | return defaultValue; 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /codegen/src/main/java/org/seasar/doma/gradle/codegen/desc/LanguageClassResolver.java: -------------------------------------------------------------------------------- 1 | package org.seasar.doma.gradle.codegen.desc; 2 | 3 | import org.seasar.doma.gradle.codegen.meta.ColumnMeta; 4 | 5 | public interface LanguageClassResolver { 6 | 7 | LanguageClass resolve(String javaClassName, ColumnMeta columnMeta); 8 | } 9 | -------------------------------------------------------------------------------- /codegen/src/main/java/org/seasar/doma/gradle/codegen/desc/LanguageType.java: -------------------------------------------------------------------------------- 1 | package org.seasar.doma.gradle.codegen.desc; 2 | 3 | public enum LanguageType { 4 | JAVA("java", "org/seasar/doma/gradle/codegen/template/java", new JavaClassResolver()), 5 | KOTLIN("kt", "org/seasar/doma/gradle/codegen/template/kotlin", new KotlinClassResolver()); 6 | 7 | private final String fileExtension; 8 | private final String templateDir; 9 | private final LanguageClassResolver resolver; 10 | 11 | LanguageType(String fileExtension, String templateDir, LanguageClassResolver resolver) { 12 | this.fileExtension = fileExtension; 13 | this.templateDir = templateDir; 14 | this.resolver = resolver; 15 | } 16 | 17 | public String getFileExtension() { 18 | return fileExtension; 19 | } 20 | 21 | public String getTemplateDir() { 22 | return templateDir; 23 | } 24 | 25 | public LanguageClassResolver getResolver() { 26 | return resolver; 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /codegen/src/main/java/org/seasar/doma/gradle/codegen/desc/MappedSuperclassDesc.java: -------------------------------------------------------------------------------- 1 | package org.seasar.doma.gradle.codegen.desc; 2 | 3 | public class MappedSuperclassDesc extends ClassDesc { 4 | 5 | protected String entityClassSimpleName; 6 | 7 | protected String superclassSimpleName; 8 | 9 | protected String mappedSuperclassSimpleName; 10 | 11 | protected EntityDesc entityDesc; 12 | 13 | protected String templateName; 14 | 15 | public void setTemplateName(String templateName) { 16 | this.templateName = templateName; 17 | } 18 | 19 | public String getTemplateName() { 20 | return templateName; 21 | } 22 | 23 | public String getEntityClassSimpleName() { 24 | return entityClassSimpleName; 25 | } 26 | 27 | public void setEntityClassSimpleName(String entityClassSimpleName) { 28 | this.entityClassSimpleName = entityClassSimpleName; 29 | } 30 | 31 | public String getSuperclassSimpleName() { 32 | return superclassSimpleName; 33 | } 34 | 35 | public void setSuperclassSimpleName(String superclassSimpleName) { 36 | this.superclassSimpleName = superclassSimpleName; 37 | } 38 | 39 | public String getMappedSuperclassSimpleName() { 40 | return mappedSuperclassSimpleName; 41 | } 42 | 43 | public void setMappedSuperclassSimpleName(String mappedSuperclassSimpleName) { 44 | this.mappedSuperclassSimpleName = mappedSuperclassSimpleName; 45 | } 46 | 47 | public EntityDesc getEntityDesc() { 48 | return entityDesc; 49 | } 50 | 51 | public void setEntityDesc(EntityDesc entityDesc) { 52 | this.entityDesc = entityDesc; 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /codegen/src/main/java/org/seasar/doma/gradle/codegen/desc/MappedSuperclassDescFactory.java: -------------------------------------------------------------------------------- 1 | package org.seasar.doma.gradle.codegen.desc; 2 | 3 | import org.seasar.doma.gradle.codegen.util.ClassUtil; 4 | import org.seasar.doma.gradle.codegen.util.StringUtil; 5 | 6 | public class MappedSuperclassDescFactory { 7 | 8 | protected final String packageName; 9 | 10 | protected final String entitySuperclassName; 11 | 12 | protected final ClassDescSupport classDescSupport = new ClassDescSupport(); 13 | 14 | public MappedSuperclassDescFactory(String packageName, String entitySuperclassName) { 15 | this.packageName = packageName; 16 | this.entitySuperclassName = entitySuperclassName; 17 | } 18 | 19 | public MappedSuperclassDesc createMappedSuperclassDesc(EntityDesc entityDesc) { 20 | MappedSuperclassDesc mappedSuperclassDesc = new MappedSuperclassDesc(); 21 | mappedSuperclassDesc.setEntityDesc(entityDesc); 22 | mappedSuperclassDesc.setPackageName(entityDesc.getPackageName()); 23 | String entityPrefix = StringUtil.defaultString(entityDesc.getEntityPrefix(), ""); 24 | String entitySuffix = StringUtil.defaultString(entityDesc.getEntitySuffix(), ""); 25 | String entityName = entityPrefix + entityDesc.getSimpleName() + entitySuffix; 26 | mappedSuperclassDesc.setSimpleName(Constants.MAPPED_SUPER_CLASS_PREFIX + entityName); 27 | mappedSuperclassDesc.setEntityClassSimpleName(entityDesc.getSimpleName()); 28 | if (entitySuperclassName != null) { 29 | String simpleName = ClassUtil.getSimpleName(entitySuperclassName); 30 | mappedSuperclassDesc.setSuperclassSimpleName(simpleName); 31 | } 32 | mappedSuperclassDesc.setTemplateName(Constants.MAPPED_SUPERCLASS_TEMPLATE); 33 | handleImportName(mappedSuperclassDesc, entityDesc); 34 | return mappedSuperclassDesc; 35 | } 36 | 37 | protected void handleImportName( 38 | MappedSuperclassDesc mappedSuperclassDesc, EntityDesc entityDesc) { 39 | classDescSupport.addImportName(mappedSuperclassDesc, entityDesc.getQualifiedName()); 40 | if (entitySuperclassName != null) { 41 | classDescSupport.addImportName(mappedSuperclassDesc, entitySuperclassName); 42 | } 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /codegen/src/main/java/org/seasar/doma/gradle/codegen/desc/NamingType.java: -------------------------------------------------------------------------------- 1 | package org.seasar.doma.gradle.codegen.desc; 2 | 3 | import org.seasar.doma.gradle.codegen.exception.CodeGenNullPointerException; 4 | import org.seasar.doma.gradle.codegen.util.StringUtil; 5 | 6 | public enum NamingType { 7 | NONE(EnumConstants.NamingType_NONE) { 8 | 9 | @Override 10 | public String apply(String text) { 11 | return text; 12 | } 13 | }, 14 | 15 | LOWER_CASE(EnumConstants.NamingType_LOWER_CASE) { 16 | 17 | @Override 18 | public String apply(String text) { 19 | if (text == null) { 20 | throw new CodeGenNullPointerException("text"); 21 | } 22 | return text.toLowerCase(); 23 | } 24 | }, 25 | 26 | UPPER_CASE(EnumConstants.NamingType_UPPER_CASE) { 27 | 28 | @Override 29 | public String apply(String text) { 30 | if (text == null) { 31 | throw new CodeGenNullPointerException("text"); 32 | } 33 | return text.toUpperCase(); 34 | } 35 | }, 36 | 37 | SNAKE_UPPER_CASE(EnumConstants.NamingType_SNAKE_UPPER_CASE) { 38 | 39 | @Override 40 | public String apply(String text) { 41 | if (text == null) { 42 | throw new CodeGenNullPointerException("text"); 43 | } 44 | String s = StringUtil.fromCamelCaseToSnakeCase(text); 45 | return s.toUpperCase(); 46 | } 47 | }, 48 | 49 | SNAKE_LOWER_CASE(EnumConstants.NamingType_SNAKE_LOWER_CASE) { 50 | 51 | @Override 52 | public String apply(String text) { 53 | if (text == null) { 54 | throw new CodeGenNullPointerException("text"); 55 | } 56 | String s = StringUtil.fromCamelCaseToSnakeCase(text); 57 | return s.toLowerCase(); 58 | } 59 | }; 60 | 61 | private final EnumConstants enumConstant; 62 | 63 | NamingType(EnumConstants enumConstant) { 64 | this.enumConstant = enumConstant; 65 | } 66 | 67 | public EnumConstants getEnumConstant() { 68 | return enumConstant; 69 | } 70 | 71 | public String getReferenceName() { 72 | return enumConstant.getReferenceName(); 73 | } 74 | 75 | public abstract String apply(String text); 76 | } 77 | -------------------------------------------------------------------------------- /codegen/src/main/java/org/seasar/doma/gradle/codegen/desc/SqlDesc.java: -------------------------------------------------------------------------------- 1 | package org.seasar.doma.gradle.codegen.desc; 2 | 3 | import org.seasar.doma.gradle.codegen.dialect.CodeGenDialect; 4 | 5 | public class SqlDesc { 6 | 7 | protected String fileName; 8 | 9 | protected String templateName; 10 | 11 | protected EntityDesc entityDesc; 12 | 13 | protected DaoDesc daoDesc; 14 | 15 | protected CodeGenDialect dialect; 16 | 17 | public String getFileName() { 18 | return fileName; 19 | } 20 | 21 | public void setFileName(String fileName) { 22 | this.fileName = fileName; 23 | } 24 | 25 | public String getTemplateName() { 26 | return templateName; 27 | } 28 | 29 | public void setTemplateName(String templateName) { 30 | this.templateName = templateName; 31 | } 32 | 33 | public EntityDesc getEntityDesc() { 34 | return entityDesc; 35 | } 36 | 37 | public void setEntityDesc(EntityDesc entityDesc) { 38 | this.entityDesc = entityDesc; 39 | } 40 | 41 | public DaoDesc getDaoDesc() { 42 | return daoDesc; 43 | } 44 | 45 | public void setDaoDesc(DaoDesc daoDesc) { 46 | this.daoDesc = daoDesc; 47 | } 48 | 49 | public void setDialect(CodeGenDialect dialect) { 50 | this.dialect = dialect; 51 | } 52 | 53 | public String toTime(String value) { 54 | return dialect.convertToTimeLiteral(value); 55 | } 56 | 57 | public String toDate(String value) { 58 | return dialect.convertToDateLiteral(value); 59 | } 60 | 61 | public String toTimestamp(String value) { 62 | return dialect.convertToTimestampLiteral(value); 63 | } 64 | } 65 | -------------------------------------------------------------------------------- /codegen/src/main/java/org/seasar/doma/gradle/codegen/desc/SqlTestDesc.java: -------------------------------------------------------------------------------- 1 | package org.seasar.doma.gradle.codegen.desc; 2 | 3 | import java.util.List; 4 | 5 | public class SqlTestDesc extends ClassDesc { 6 | 7 | protected String templateName; 8 | 9 | protected String dialectClassName = null; 10 | 11 | protected String driverClassName = null; 12 | 13 | protected String user = null; 14 | 15 | protected String password = null; 16 | 17 | protected String url = null; 18 | 19 | protected boolean abstrct; 20 | 21 | protected List methodDescs; 22 | 23 | public String getTemplateName() { 24 | return templateName; 25 | } 26 | 27 | public void setTemplateName(String templateName) { 28 | this.templateName = templateName; 29 | } 30 | 31 | public String getUser() { 32 | return user; 33 | } 34 | 35 | public void setUser(String user) { 36 | this.user = user; 37 | } 38 | 39 | public String getPassword() { 40 | return password; 41 | } 42 | 43 | public void setPassword(String password) { 44 | this.password = password; 45 | } 46 | 47 | public String getUrl() { 48 | return url; 49 | } 50 | 51 | public void setUrl(String url) { 52 | this.url = url; 53 | } 54 | 55 | public boolean isAbstrct() { 56 | return abstrct; 57 | } 58 | 59 | public void setAbstrct(boolean abstrct) { 60 | this.abstrct = abstrct; 61 | } 62 | 63 | public String getDialectClassName() { 64 | return dialectClassName; 65 | } 66 | 67 | public void setDialectClassName(String dialectClassName) { 68 | this.dialectClassName = dialectClassName; 69 | } 70 | 71 | public List getMethodDescs() { 72 | return methodDescs; 73 | } 74 | 75 | public void setMethodDescs(List methodDescs) { 76 | this.methodDescs = methodDescs; 77 | } 78 | } 79 | -------------------------------------------------------------------------------- /codegen/src/main/java/org/seasar/doma/gradle/codegen/desc/SqlTestDescFactory.java: -------------------------------------------------------------------------------- 1 | package org.seasar.doma.gradle.codegen.desc; 2 | 3 | import java.io.File; 4 | import java.util.List; 5 | import java.util.Set; 6 | import java.util.TreeSet; 7 | import org.seasar.doma.gradle.codegen.exception.CodeGenNullPointerException; 8 | import org.seasar.doma.gradle.codegen.util.ClassUtil; 9 | 10 | public class SqlTestDescFactory { 11 | 12 | protected final String dialectClassName; 13 | 14 | protected final String url; 15 | 16 | protected final String user; 17 | 18 | protected final String password; 19 | 20 | protected final Set sqlFiles = new TreeSet(); 21 | 22 | protected final ClassDescSupport classDescSupport = new ClassDescSupport(); 23 | 24 | public SqlTestDescFactory(String dialectClassName, String url, String user, String password) { 25 | if (dialectClassName == null) { 26 | throw new CodeGenNullPointerException("dialectClassName"); 27 | } 28 | if (url == null) { 29 | throw new CodeGenNullPointerException("url"); 30 | } 31 | if (user == null) { 32 | throw new CodeGenNullPointerException("user"); 33 | } 34 | if (password == null) { 35 | throw new CodeGenNullPointerException("password"); 36 | } 37 | if (sqlFiles == null) { 38 | throw new CodeGenNullPointerException("sqlFiles"); 39 | } 40 | this.dialectClassName = dialectClassName; 41 | this.url = url; 42 | this.user = user; 43 | this.password = password; 44 | this.sqlFiles.addAll(sqlFiles); 45 | } 46 | 47 | public SqlTestDesc createSqlFileTestDesc(String className, List methodDescs) { 48 | SqlTestDesc sqlTestDesc = new SqlTestDesc(); 49 | sqlTestDesc.setPackageName(ClassUtil.getPackageName(className)); 50 | sqlTestDesc.setSimpleName(ClassUtil.getSimpleName(className)); 51 | sqlTestDesc.setAbstrct(false); 52 | sqlTestDesc.setDialectClassName(dialectClassName); 53 | sqlTestDesc.setUrl(url); 54 | sqlTestDesc.setUser(user); 55 | sqlTestDesc.setPassword(password); 56 | sqlTestDesc.setTemplateName(Constants.SQL_TEST_CASE_TEMPLATE); 57 | sqlTestDesc.setMethodDescs(methodDescs); 58 | return sqlTestDesc; 59 | } 60 | } 61 | -------------------------------------------------------------------------------- /codegen/src/main/java/org/seasar/doma/gradle/codegen/desc/SqlTestMethodDesc.java: -------------------------------------------------------------------------------- 1 | package org.seasar.doma.gradle.codegen.desc; 2 | 3 | public class SqlTestMethodDesc { 4 | 5 | protected String methodName; 6 | 7 | protected String path; 8 | 9 | public SqlTestMethodDesc(String methodName, String path) { 10 | this.methodName = methodName; 11 | this.path = path; 12 | } 13 | 14 | public String getMethodName() { 15 | return methodName; 16 | } 17 | 18 | public void setMethodName(String methodName) { 19 | this.methodName = methodName; 20 | } 21 | 22 | public String getPath() { 23 | return path; 24 | } 25 | 26 | public void setPath(String path) { 27 | this.path = path; 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /codegen/src/main/java/org/seasar/doma/gradle/codegen/desc/SqlTestSuiteDesc.java: -------------------------------------------------------------------------------- 1 | package org.seasar.doma.gradle.codegen.desc; 2 | 3 | import java.util.ArrayList; 4 | import java.util.List; 5 | 6 | public class SqlTestSuiteDesc { 7 | 8 | protected List testCaseDescs = new ArrayList<>(); 9 | 10 | public List getTestCaseDescs() { 11 | return testCaseDescs; 12 | } 13 | 14 | public void addTestCaseDesc(SqlTestDesc testCaseDesc) { 15 | testCaseDescs.add(testCaseDesc); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /codegen/src/main/java/org/seasar/doma/gradle/codegen/desc/SqlTestSuiteDescFactory.java: -------------------------------------------------------------------------------- 1 | package org.seasar.doma.gradle.codegen.desc; 2 | 3 | import static java.util.stream.Collectors.groupingBy; 4 | import static java.util.stream.Collectors.mapping; 5 | import static java.util.stream.Collectors.toList; 6 | 7 | import java.io.File; 8 | import java.util.Objects; 9 | import java.util.stream.StreamSupport; 10 | import org.seasar.doma.gradle.codegen.exception.CodeGenNullPointerException; 11 | import org.seasar.doma.gradle.codegen.util.FileUtil; 12 | import org.seasar.doma.gradle.codegen.util.Pair; 13 | import org.seasar.doma.gradle.codegen.util.StringUtil; 14 | 15 | public class SqlTestSuiteDescFactory { 16 | 17 | protected SqlTestDescFactory sqlTestDescFactory; 18 | 19 | public SqlTestSuiteDescFactory(SqlTestDescFactory sqlTestDescFactory) { 20 | if (sqlTestDescFactory == null) { 21 | throw new CodeGenNullPointerException("sqlTestCaseDescFactory"); 22 | } 23 | this.sqlTestDescFactory = sqlTestDescFactory; 24 | } 25 | 26 | public SqlTestSuiteDesc createSqlTestSuiteDesc(Iterable sqlFiles) { 27 | if (sqlFiles == null) { 28 | throw new CodeGenNullPointerException("sqlFiles"); 29 | } 30 | SqlTestSuiteDesc suiteDesc = new SqlTestSuiteDesc(); 31 | StreamSupport.stream(sqlFiles.spliterator(), false) 32 | .filter(Objects::nonNull) 33 | .filter(f -> f.isFile()) 34 | .filter(f -> f.getName().endsWith(".sql")) 35 | .filter(f -> !f.getName().contains("-")) 36 | .map(FileUtil::getCanonicalPath) 37 | .map(path -> path.replace(File.separator, "/")) 38 | .map(this::fromPathToPair) 39 | .filter(Objects::nonNull) 40 | .collect(groupingBy(Pair::getFirst, mapping(Pair::getSecond, toList()))) 41 | .forEach( 42 | (className, methodDescs) -> { 43 | SqlTestDesc testCaseDesc = 44 | sqlTestDescFactory.createSqlFileTestDesc(className, methodDescs); 45 | suiteDesc.addTestCaseDesc(testCaseDesc); 46 | }); 47 | return suiteDesc; 48 | } 49 | 50 | protected Pair fromPathToPair(String path) { 51 | int pos = path.indexOf("/META-INF/"); 52 | int pos2 = path.lastIndexOf('/'); 53 | if (pos == -1 || pos2 == -1 || pos + "/META-INF/".length() == pos2) { 54 | return null; 55 | } 56 | String sqlPath = path.substring(pos + 1); 57 | String dirName = path.substring(pos + "/META-INF/".length(), pos2); 58 | String baseName = path.substring(pos2 + 1); 59 | String className = dirName.replace('/', '.') + "Test"; 60 | String methodName = 61 | "test" + StringUtil.capitalize(baseName.substring(0, baseName.length() - ".sql".length())); 62 | return new Pair<>(className, new SqlTestMethodDesc(methodName, sqlPath)); 63 | } 64 | } 65 | -------------------------------------------------------------------------------- /codegen/src/main/java/org/seasar/doma/gradle/codegen/dialect/CodeGenDialect.java: -------------------------------------------------------------------------------- 1 | package org.seasar.doma.gradle.codegen.dialect; 2 | 3 | import java.sql.Connection; 4 | import java.sql.SQLException; 5 | import java.util.Map; 6 | import org.seasar.doma.gradle.codegen.meta.ColumnMeta; 7 | 8 | public interface CodeGenDialect { 9 | 10 | String getName(); 11 | 12 | String getDialectClassName(); 13 | 14 | String getDefaultSchemaName(String userName); 15 | 16 | String getMappedPropertyClassName(ColumnMeta columnMeta); 17 | 18 | void replacePropertyClassName(String oldClassName, String newClassName); 19 | 20 | boolean supportsIdentity(); 21 | 22 | boolean supportsSequence(); 23 | 24 | boolean isAutoIncrement( 25 | Connection connection, 26 | String catalogName, 27 | String schemaName, 28 | String tableName, 29 | String columnName) 30 | throws SQLException; 31 | 32 | boolean isJdbcCommentUnavailable(); 33 | 34 | String getTableComment( 35 | Connection connection, String catalogName, String schemaName, String tableName) 36 | throws SQLException; 37 | 38 | Map getColumnCommentMap( 39 | Connection connection, String catalogName, String schemaName, String tableName) 40 | throws SQLException; 41 | 42 | String convertToTimeLiteral(String value); 43 | 44 | String convertToDateLiteral(String value); 45 | 46 | String convertToTimestampLiteral(String value); 47 | 48 | /** 49 | * Enclose the name with quotation marks. 50 | * 51 | * @param name the name of a database object such as a table, a column, and so on 52 | * @return the name that is enclosed with quotation marks 53 | */ 54 | String applyQuote(String name); 55 | } 56 | -------------------------------------------------------------------------------- /codegen/src/main/java/org/seasar/doma/gradle/codegen/dialect/CodeGenDialectRegistry.java: -------------------------------------------------------------------------------- 1 | package org.seasar.doma.gradle.codegen.dialect; 2 | 3 | import java.util.ArrayList; 4 | import java.util.Collections; 5 | import java.util.HashMap; 6 | import java.util.List; 7 | import java.util.Map; 8 | import org.seasar.doma.gradle.codegen.util.AssertionUtil; 9 | 10 | public class CodeGenDialectRegistry { 11 | 12 | protected static final Map genDialectMap = 13 | Collections.synchronizedMap(new HashMap()); 14 | 15 | static { 16 | register(new StandardCodeGenDialect()); 17 | register(new HsqldbCodeGenDialect()); 18 | register(new H2CodeGenDialect()); 19 | register(new MysqlCodeGenDialect()); 20 | register(new PostgresCodeGenDialect()); 21 | register(new Oracle11CodeGenDialect()); 22 | register(new OracleCodeGenDialect()); 23 | register(new Db2CodeGenDialect()); 24 | register(new Mssql2008CodeGenDialect()); 25 | register(new MssqlCodeGenDialect()); 26 | } 27 | 28 | public static void register(CodeGenDialect dialect) { 29 | AssertionUtil.assertNotNull(dialect); 30 | genDialectMap.put(dialect.getName(), dialect); 31 | } 32 | 33 | public static CodeGenDialect lookup(String dialectName) { 34 | return genDialectMap.get(dialectName); 35 | } 36 | 37 | public static List getDialectNames() { 38 | return new ArrayList(genDialectMap.keySet()); 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /codegen/src/main/java/org/seasar/doma/gradle/codegen/dialect/Db2CodeGenDialect.java: -------------------------------------------------------------------------------- 1 | package org.seasar.doma.gradle.codegen.dialect; 2 | 3 | import java.math.BigDecimal; 4 | import java.sql.Connection; 5 | import java.sql.PreparedStatement; 6 | import java.sql.ResultSet; 7 | import java.sql.SQLException; 8 | import org.seasar.doma.gradle.codegen.desc.ClassConstants; 9 | import org.seasar.doma.gradle.codegen.exception.CodeGenNullPointerException; 10 | import org.seasar.doma.gradle.codegen.util.JdbcUtil; 11 | 12 | public class Db2CodeGenDialect extends StandardCodeGenDialect { 13 | 14 | public Db2CodeGenDialect() { 15 | classNameMap.put("char () for bit data", ClassConstants.bytes.getQualifiedName()); 16 | classNameMap.put("decimal", BigDecimal.class.getName()); 17 | classNameMap.put("long varchar for bit data", ClassConstants.bytes.getQualifiedName()); 18 | classNameMap.put("long varchar", String.class.getName()); 19 | classNameMap.put("varchar () for bit data", ClassConstants.bytes.getQualifiedName()); 20 | } 21 | 22 | @Override 23 | public String getName() { 24 | return "db2"; 25 | } 26 | 27 | @Override 28 | public String getDialectClassName() { 29 | return ClassConstants.Db2Dialect.getQualifiedName(); 30 | } 31 | 32 | @Override 33 | public String getDefaultSchemaName(String userName) { 34 | return userName != null ? userName.toUpperCase() : null; 35 | } 36 | 37 | @Override 38 | public boolean supportsIdentity() { 39 | return true; 40 | } 41 | 42 | @Override 43 | public boolean supportsSequence() { 44 | return true; 45 | } 46 | 47 | @Override 48 | public boolean isAutoIncrement( 49 | Connection connection, 50 | String catalogName, 51 | String schemaName, 52 | String tableName, 53 | String columnName) 54 | throws SQLException { 55 | if (connection == null) { 56 | throw new CodeGenNullPointerException("connection"); 57 | } 58 | if (tableName == null) { 59 | throw new CodeGenNullPointerException("tableName"); 60 | } 61 | if (columnName == null) { 62 | throw new CodeGenNullPointerException("columnName"); 63 | } 64 | String sql = 65 | "select generated from syscat.columns where tabschema = ? and tabname = ? and colname = ?"; 66 | PreparedStatement ps = JdbcUtil.prepareStatement(connection, sql); 67 | ps.setString(1, schemaName); 68 | ps.setString(2, tableName); 69 | ps.setString(3, columnName); 70 | try { 71 | ResultSet rs = ps.executeQuery(); 72 | try { 73 | if (rs.next()) { 74 | String generated = rs.getString(1); 75 | return "A".equals(generated) || "D".equals(generated); 76 | } 77 | return false; 78 | } finally { 79 | JdbcUtil.close(rs); 80 | } 81 | } finally { 82 | JdbcUtil.close(ps); 83 | } 84 | } 85 | } 86 | -------------------------------------------------------------------------------- /codegen/src/main/java/org/seasar/doma/gradle/codegen/dialect/H2CodeGenDialect.java: -------------------------------------------------------------------------------- 1 | package org.seasar.doma.gradle.codegen.dialect; 2 | 3 | import org.seasar.doma.gradle.codegen.desc.ClassConstants; 4 | 5 | public class H2CodeGenDialect extends StandardCodeGenDialect { 6 | 7 | public H2CodeGenDialect() {} 8 | 9 | @Override 10 | public String getName() { 11 | return "h2"; 12 | } 13 | 14 | @Override 15 | public String getDialectClassName() { 16 | return ClassConstants.H2Dialect.getQualifiedName(); 17 | } 18 | 19 | @Override 20 | public String getDefaultSchemaName(String userName) { 21 | return null; 22 | } 23 | 24 | @Override 25 | public boolean isJdbcCommentUnavailable() { 26 | return true; 27 | } 28 | 29 | @Override 30 | public boolean supportsIdentity() { 31 | return true; 32 | } 33 | 34 | @Override 35 | public boolean supportsSequence() { 36 | return true; 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /codegen/src/main/java/org/seasar/doma/gradle/codegen/dialect/HsqldbCodeGenDialect.java: -------------------------------------------------------------------------------- 1 | package org.seasar.doma.gradle.codegen.dialect; 2 | 3 | import org.seasar.doma.gradle.codegen.desc.ClassConstants; 4 | 5 | public class HsqldbCodeGenDialect extends StandardCodeGenDialect { 6 | 7 | public HsqldbCodeGenDialect() { 8 | classNameMap.put("int", Integer.class.getName()); 9 | classNameMap.put("varchar_ignorecase", String.class.getName()); 10 | } 11 | 12 | @Override 13 | public String getName() { 14 | return "hsqldb"; 15 | } 16 | 17 | @Override 18 | public String getDialectClassName() { 19 | return ClassConstants.HsqldbDialect.getQualifiedName(); 20 | } 21 | 22 | @Override 23 | public String getDefaultSchemaName(String userName) { 24 | return null; 25 | } 26 | 27 | @Override 28 | public boolean isJdbcCommentUnavailable() { 29 | return true; 30 | } 31 | 32 | @Override 33 | public boolean supportsIdentity() { 34 | return true; 35 | } 36 | 37 | @Override 38 | public boolean supportsSequence() { 39 | return true; 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /codegen/src/main/java/org/seasar/doma/gradle/codegen/dialect/Mssql2008CodeGenDialect.java: -------------------------------------------------------------------------------- 1 | package org.seasar.doma.gradle.codegen.dialect; 2 | 3 | import java.math.BigDecimal; 4 | import java.sql.Blob; 5 | import java.sql.Clob; 6 | import java.sql.NClob; 7 | import java.time.LocalDateTime; 8 | import org.seasar.doma.gradle.codegen.desc.ClassConstants; 9 | import org.seasar.doma.gradle.codegen.meta.ColumnMeta; 10 | 11 | public class Mssql2008CodeGenDialect extends StandardCodeGenDialect { 12 | 13 | /** the quotation mark of the start */ 14 | protected static final char OPEN_QUOTE = '['; 15 | 16 | /** the quotation mark of the end */ 17 | protected static final char CLOSE_QUOTE = ']'; 18 | 19 | public Mssql2008CodeGenDialect() { 20 | classNameMap.put("datetime", LocalDateTime.class.getName()); 21 | classNameMap.put("datetime2", LocalDateTime.class.getName()); 22 | classNameMap.put("datetimeoffset", LocalDateTime.class.getName()); 23 | classNameMap.put("image", Blob.class.getName()); 24 | classNameMap.put("int", Integer.class.getName()); 25 | classNameMap.put("money", BigDecimal.class.getName()); 26 | classNameMap.put("ntext", NClob.class.getName()); 27 | classNameMap.put("smalldatetime", LocalDateTime.class.getName()); 28 | classNameMap.put("smallmoney", BigDecimal.class.getName()); 29 | classNameMap.put("text", Clob.class.getName()); 30 | classNameMap.put("timestamp", ClassConstants.bytes.getQualifiedName()); 31 | classNameMap.put("uniqueidentifier", String.class.getName()); 32 | classNameMap.put("xml", String.class.getName()); 33 | } 34 | 35 | @Override 36 | public String getName() { 37 | return "mssql2008"; 38 | } 39 | 40 | @Override 41 | public String getDialectClassName() { 42 | return ClassConstants.Mssql2008.getQualifiedName(); 43 | } 44 | 45 | @Override 46 | public String getDefaultSchemaName(String userName) { 47 | return "dbo"; 48 | } 49 | 50 | @Override 51 | public boolean supportsIdentity() { 52 | return true; 53 | } 54 | 55 | @Override 56 | public String getMappedPropertyClassName(ColumnMeta columnMeta) { 57 | String typeName = columnMeta.getTypeName(); 58 | if (typeName.startsWith("int")) { 59 | typeName = "int"; 60 | } else if (typeName.startsWith("bigint")) { 61 | typeName = "bigint"; 62 | } else if (typeName.startsWith("smallint")) { 63 | typeName = "smallint"; 64 | } else if (typeName.startsWith("tinyint")) { 65 | typeName = "tinyint"; 66 | } else if (typeName.startsWith("decimal")) { 67 | typeName = "decimal"; 68 | } else if (typeName.startsWith("numeric")) { 69 | typeName = "numeric"; 70 | } 71 | return super.getMappedPropertyClassName(columnMeta); 72 | } 73 | 74 | @Override 75 | public String applyQuote(String name) { 76 | return OPEN_QUOTE + name + CLOSE_QUOTE; 77 | } 78 | } 79 | -------------------------------------------------------------------------------- /codegen/src/main/java/org/seasar/doma/gradle/codegen/dialect/MssqlCodeGenDialect.java: -------------------------------------------------------------------------------- 1 | package org.seasar.doma.gradle.codegen.dialect; 2 | 3 | import org.seasar.doma.gradle.codegen.desc.ClassConstants; 4 | 5 | public class MssqlCodeGenDialect extends Mssql2008CodeGenDialect { 6 | 7 | public MssqlCodeGenDialect() {} 8 | 9 | @Override 10 | public String getName() { 11 | return "mssql"; 12 | } 13 | 14 | @Override 15 | public String getDialectClassName() { 16 | return ClassConstants.Mssql.getQualifiedName(); 17 | } 18 | 19 | @Override 20 | public boolean supportsSequence() { 21 | return true; 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /codegen/src/main/java/org/seasar/doma/gradle/codegen/dialect/OracleCodeGenDialect.java: -------------------------------------------------------------------------------- 1 | package org.seasar.doma.gradle.codegen.dialect; 2 | 3 | import org.seasar.doma.gradle.codegen.desc.ClassConstants; 4 | 5 | public class OracleCodeGenDialect extends Oracle11CodeGenDialect { 6 | 7 | @Override 8 | public String getName() { 9 | return "oracle"; 10 | } 11 | 12 | @Override 13 | public String getDialectClassName() { 14 | return ClassConstants.OracleDialect.getQualifiedName(); 15 | } 16 | 17 | @Override 18 | public boolean supportsIdentity() { 19 | return true; 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /codegen/src/main/java/org/seasar/doma/gradle/codegen/dialect/PostgresCodeGenDialect.java: -------------------------------------------------------------------------------- 1 | package org.seasar.doma.gradle.codegen.dialect; 2 | 3 | import java.sql.Blob; 4 | import java.time.LocalDateTime; 5 | import java.time.LocalTime; 6 | import org.seasar.doma.gradle.codegen.desc.ClassConstants; 7 | 8 | public class PostgresCodeGenDialect extends StandardCodeGenDialect { 9 | 10 | public PostgresCodeGenDialect() { 11 | classNameMap.put("bigserial", Long.class.getName()); 12 | classNameMap.put("bit", ClassConstants.bytes.getQualifiedName()); 13 | classNameMap.put("bool", Boolean.class.getName()); 14 | classNameMap.put("bpchar", String.class.getName()); 15 | classNameMap.put("bytea", ClassConstants.bytes.getQualifiedName()); 16 | classNameMap.put("float4", Float.class.getName()); 17 | classNameMap.put("float8", Double.class.getName()); 18 | classNameMap.put("int2", Short.class.getName()); 19 | classNameMap.put("int4", Integer.class.getName()); 20 | classNameMap.put("int8", Long.class.getName()); 21 | classNameMap.put("money", Float.class.getName()); 22 | classNameMap.put("oid", Blob.class.getName()); 23 | classNameMap.put("serial", Integer.class.getName()); 24 | classNameMap.put("text", String.class.getName()); 25 | classNameMap.put("timestamptz", LocalDateTime.class.getName()); 26 | classNameMap.put("timetz", LocalTime.class.getName()); 27 | classNameMap.put("varbit", ClassConstants.bytes.getQualifiedName()); 28 | classNameMap.put("varchar", String.class.getName()); 29 | } 30 | 31 | @Override 32 | public String getName() { 33 | return "postgres"; 34 | } 35 | 36 | @Override 37 | public String getDialectClassName() { 38 | return ClassConstants.PostgresDialect.getQualifiedName(); 39 | } 40 | 41 | @Override 42 | public String getDefaultSchemaName(String userName) { 43 | return null; 44 | } 45 | 46 | @Override 47 | public boolean supportsIdentity() { 48 | return true; 49 | } 50 | 51 | @Override 52 | public boolean supportsSequence() { 53 | return true; 54 | } 55 | } 56 | -------------------------------------------------------------------------------- /codegen/src/main/java/org/seasar/doma/gradle/codegen/exception/CodeGenException.java: -------------------------------------------------------------------------------- 1 | package org.seasar.doma.gradle.codegen.exception; 2 | 3 | import org.seasar.doma.gradle.codegen.message.MessageResource; 4 | 5 | public class CodeGenException extends RuntimeException { 6 | 7 | private static final long serialVersionUID = 1L; 8 | 9 | protected final MessageResource messageResource; 10 | 11 | protected final Object args; 12 | 13 | public CodeGenException(MessageResource messageResource, Object... args) { 14 | this(messageResource, null, args); 15 | } 16 | 17 | public CodeGenException(MessageResource messageResource, Throwable cause, Object... args) { 18 | super(messageResource.getMessage(args), cause); 19 | this.messageResource = messageResource; 20 | this.args = args; 21 | } 22 | 23 | public MessageResource getMessageResource() { 24 | return messageResource; 25 | } 26 | 27 | public Object getArgs() { 28 | return args; 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /codegen/src/main/java/org/seasar/doma/gradle/codegen/exception/CodeGenNullPointerException.java: -------------------------------------------------------------------------------- 1 | package org.seasar.doma.gradle.codegen.exception; 2 | 3 | import org.seasar.doma.gradle.codegen.message.Message; 4 | 5 | public class CodeGenNullPointerException extends CodeGenException { 6 | 7 | private static final long serialVersionUID = 1L; 8 | 9 | protected final String parameterName; 10 | 11 | public CodeGenNullPointerException(String parameterName) { 12 | super(Message.DOMAGEN0001, parameterName); 13 | this.parameterName = parameterName; 14 | } 15 | 16 | public String getParameterName() { 17 | return parameterName; 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /codegen/src/main/java/org/seasar/doma/gradle/codegen/extension/DaoConfig.java: -------------------------------------------------------------------------------- 1 | package org.seasar.doma.gradle.codegen.extension; 2 | 3 | import javax.inject.Inject; 4 | import org.gradle.api.model.ObjectFactory; 5 | import org.gradle.api.provider.Property; 6 | import org.gradle.api.tasks.Internal; 7 | 8 | public class DaoConfig { 9 | 10 | private final Property overwrite; 11 | 12 | private final Property packageName; 13 | 14 | private final Property suffix; 15 | 16 | private final Property configClassName; 17 | 18 | @Inject 19 | public DaoConfig(ObjectFactory objects) { 20 | overwrite = objects.property(Boolean.class); 21 | packageName = objects.property(String.class); 22 | suffix = objects.property(String.class); 23 | configClassName = objects.property(String.class); 24 | 25 | overwrite.set(false); 26 | packageName.set("example.dao"); 27 | suffix.set("Dao"); 28 | } 29 | 30 | @Internal 31 | public Property getOverwrite() { 32 | return overwrite; 33 | } 34 | 35 | public void setOverwrite(boolean overwrite) { 36 | this.overwrite.set(overwrite); 37 | } 38 | 39 | @Internal 40 | public Property getPackageName() { 41 | return packageName; 42 | } 43 | 44 | public void setPackageName(String packageName) { 45 | this.packageName.set(packageName); 46 | } 47 | 48 | @Internal 49 | public Property getSuffix() { 50 | return suffix; 51 | } 52 | 53 | public void setSuffix(String suffix) { 54 | this.suffix.set(suffix); 55 | } 56 | 57 | @Internal 58 | public Property getConfigClassName() { 59 | return configClassName; 60 | } 61 | 62 | public void setConfigClassName(String configClassName) { 63 | this.configClassName.set(configClassName); 64 | } 65 | } 66 | -------------------------------------------------------------------------------- /codegen/src/main/java/org/seasar/doma/gradle/codegen/extension/SqlConfig.java: -------------------------------------------------------------------------------- 1 | package org.seasar.doma.gradle.codegen.extension; 2 | 3 | import javax.inject.Inject; 4 | import org.gradle.api.model.ObjectFactory; 5 | import org.gradle.api.provider.Property; 6 | import org.gradle.api.tasks.Internal; 7 | 8 | public class SqlConfig { 9 | 10 | private final Property overwrite; 11 | 12 | @Inject 13 | public SqlConfig(ObjectFactory objects) { 14 | overwrite = objects.property(Boolean.class); 15 | overwrite.set(true); 16 | } 17 | 18 | @Internal 19 | public Property getOverwrite() { 20 | return overwrite; 21 | } 22 | 23 | public void setOverwrite(boolean overwrite) { 24 | this.overwrite.set(overwrite); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /codegen/src/main/java/org/seasar/doma/gradle/codegen/extension/SqlTestConfig.java: -------------------------------------------------------------------------------- 1 | package org.seasar.doma.gradle.codegen.extension; 2 | 3 | import javax.inject.Inject; 4 | import org.gradle.api.file.FileTree; 5 | import org.gradle.api.model.ObjectFactory; 6 | import org.gradle.api.provider.Property; 7 | import org.gradle.api.tasks.InputFiles; 8 | 9 | public class SqlTestConfig { 10 | 11 | private final Property sqlFiles; 12 | 13 | @Inject 14 | public SqlTestConfig(ObjectFactory objects) { 15 | this.sqlFiles = objects.property(FileTree.class); 16 | } 17 | 18 | @InputFiles 19 | public Property getSqlFiles() { 20 | return sqlFiles; 21 | } 22 | 23 | public void setSqlFiles(FileTree sqlFiles) { 24 | this.sqlFiles.set(sqlFiles); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /codegen/src/main/java/org/seasar/doma/gradle/codegen/generator/GenerationContext.java: -------------------------------------------------------------------------------- 1 | package org.seasar.doma.gradle.codegen.generator; 2 | 3 | import java.io.File; 4 | import org.seasar.doma.gradle.codegen.exception.CodeGenNullPointerException; 5 | 6 | public class GenerationContext { 7 | 8 | protected final Object model; 9 | 10 | protected final File file; 11 | 12 | protected final String templateName; 13 | 14 | protected final String encoding; 15 | 16 | protected final boolean overwrite; 17 | 18 | public GenerationContext( 19 | Object model, File file, String templateName, String encoding, boolean overwrite) { 20 | if (model == null) { 21 | throw new CodeGenNullPointerException("model"); 22 | } 23 | if (file == null) { 24 | throw new CodeGenNullPointerException("file"); 25 | } 26 | if (templateName == null) { 27 | throw new CodeGenNullPointerException("templateName"); 28 | } 29 | if (encoding == null) { 30 | throw new CodeGenNullPointerException("fileEncoding"); 31 | } 32 | this.model = model; 33 | this.file = file; 34 | this.templateName = templateName; 35 | this.encoding = encoding; 36 | this.overwrite = overwrite; 37 | } 38 | 39 | public Object getModel() { 40 | return model; 41 | } 42 | 43 | public File getFile() { 44 | return file; 45 | } 46 | 47 | public String getTemplateName() { 48 | return templateName; 49 | } 50 | 51 | public String getEncoding() { 52 | return encoding; 53 | } 54 | 55 | public boolean isOverwrite() { 56 | return overwrite; 57 | } 58 | } 59 | -------------------------------------------------------------------------------- /codegen/src/main/java/org/seasar/doma/gradle/codegen/generator/OnDemandDateModel.java: -------------------------------------------------------------------------------- 1 | package org.seasar.doma.gradle.codegen.generator; 2 | 3 | import freemarker.template.TemplateDateModel; 4 | import freemarker.template.TemplateModelException; 5 | import java.util.Date; 6 | 7 | public class OnDemandDateModel implements TemplateDateModel { 8 | 9 | @Override 10 | public Date getAsDate() throws TemplateModelException { 11 | return new Date(); 12 | } 13 | 14 | @Override 15 | public int getDateType() { 16 | return UNKNOWN; 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /codegen/src/main/java/org/seasar/doma/gradle/codegen/generator/ResourceTemplateLoader.java: -------------------------------------------------------------------------------- 1 | package org.seasar.doma.gradle.codegen.generator; 2 | 3 | import freemarker.cache.URLTemplateLoader; 4 | import java.net.URL; 5 | import org.seasar.doma.gradle.codegen.util.ResourceUtil; 6 | 7 | public class ResourceTemplateLoader extends URLTemplateLoader { 8 | 9 | protected String basePath; 10 | 11 | public ResourceTemplateLoader(String basePath) { 12 | if (basePath == null) { 13 | throw new NullPointerException("basePath"); 14 | } 15 | this.basePath = basePath; 16 | } 17 | 18 | @Override 19 | protected URL getURL(String name) { 20 | String path = basePath + "/" + name; 21 | return ResourceUtil.getResource(path); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /codegen/src/main/java/org/seasar/doma/gradle/codegen/message/Message.java: -------------------------------------------------------------------------------- 1 | package org.seasar.doma.gradle.codegen.message; 2 | 3 | import java.text.MessageFormat; 4 | 5 | public enum Message implements MessageResource { 6 | DOMAGEN0001("The parameter \"{0}\" is null."), 7 | DOMAGEN0003("GenerationType.IDENTITY is not supported for the RDBMS \"{0}\"."), 8 | DOMAGEN0004("GenerationType.SEQUENCE is not supported for the RDBMS \"{0}\"."), 9 | DOMAGEN0005( 10 | "Cannot get any tables. Check parameters such as url, schemaName, tableNamePattern and so on."), 11 | DOMAGEN0007("The mandatory property \"{0}\" is not resolved. {1}"), 12 | DOMAGEN0013("The class \"{1}\" to which the parameter \"{0}\" refers is not found. {2}"), 13 | DOMAGEN0014( 14 | "The class \"{1}\" to which the parameter \"{0}\" refers must be a subtype of the class \"{2}\"."), 15 | DOMAGEN0015( 16 | "The class \"{1}\" to which the parameter \"{0}\" refers cannot be instantiated. The class \"{1}\" must have a public default constructor. {2}"), 17 | DOMAGEN0018( 18 | "The column \"{1}\" of the table \"{0}\" is not mapped to any Java classes. So it will be mapped to java.lang.String. (The column data type is {2} and the JDBC SQL type is {3})"), 19 | DOMAGEN0019("The file is created. {0}"), 20 | DOMAGEN0020("The file is overwritten. {0}"), 21 | DOMAGEN0021( 22 | "The column \"{2}\" which corresponds to the property \"{1}\" of the entity class \"{0}\" is not defined in the table \"{3}\"."), 23 | DOMAGEN0023( 24 | "Cannot look up the codeGenDialect by the dialectName \"{0}\". Specify the property \"codeGenDialect\" explicitly."), 25 | DOMAGEN0024( 26 | "Cannot infer the driver class name from the property \"url\", so this plugin cannot create a DataSource instance. Correct the url property or specify the property \"dataSource\" explicitly."), 27 | DOMAGEN0025( 28 | "Cannot infer the dialect name from the property \"url\", so this plugin cannot create a CodeGenDialect instance. Correct the url property or specify the property \"codeGenDialect\" explicitly."), 29 | 30 | DOMAGEN5001( 31 | "The JDBC driver may not be loaded. Check that the JDBC driver is in the classpath. If the JDBC driver is not loaded automatically, load it explicitly using Class.forName. ex) Class.forName(\"oracle.jdbc.driver.OracleDriver\")"), 32 | DOMAGEN5002("The url parameter is not specified."), 33 | 34 | DOMAGEN9001("The exception was thrown. {0}"), 35 | ; 36 | 37 | private final String messagePattern; 38 | 39 | Message(String messagePattern) { 40 | this.messagePattern = messagePattern; 41 | } 42 | 43 | @Override 44 | public String getCode() { 45 | return name(); 46 | } 47 | 48 | @Override 49 | public String getMessagePattern() { 50 | return messagePattern; 51 | } 52 | 53 | @Override 54 | public String getMessage(Object... args) { 55 | return "[" + name() + "] " + MessageFormat.format(messagePattern, args); 56 | } 57 | } 58 | -------------------------------------------------------------------------------- /codegen/src/main/java/org/seasar/doma/gradle/codegen/message/MessageResource.java: -------------------------------------------------------------------------------- 1 | package org.seasar.doma.gradle.codegen.message; 2 | 3 | public interface MessageResource { 4 | 5 | String getCode(); 6 | 7 | String getMessagePattern(); 8 | 9 | String getMessage(Object... args); 10 | } 11 | -------------------------------------------------------------------------------- /codegen/src/main/java/org/seasar/doma/gradle/codegen/meta/ColumnMeta.java: -------------------------------------------------------------------------------- 1 | package org.seasar.doma.gradle.codegen.meta; 2 | 3 | public class ColumnMeta { 4 | 5 | protected String name; 6 | 7 | protected int sqlType; 8 | 9 | protected String typeName; 10 | 11 | protected int length; 12 | 13 | protected int scale; 14 | 15 | protected String defaultValue; 16 | 17 | protected boolean nullable; 18 | 19 | protected boolean primaryKey; 20 | 21 | protected boolean autoIncrement; 22 | 23 | protected boolean unique; 24 | 25 | protected String comment; 26 | 27 | protected TableMeta tableMeta; 28 | 29 | public String getName() { 30 | return name; 31 | } 32 | 33 | public void setName(String name) { 34 | this.name = name; 35 | } 36 | 37 | public int getSqlType() { 38 | return sqlType; 39 | } 40 | 41 | public void setSqlType(int sqlType) { 42 | this.sqlType = sqlType; 43 | } 44 | 45 | public String getTypeName() { 46 | return typeName; 47 | } 48 | 49 | public void setTypeName(String typeName) { 50 | this.typeName = typeName; 51 | } 52 | 53 | public int getLength() { 54 | return length; 55 | } 56 | 57 | public void setLength(int length) { 58 | this.length = length; 59 | } 60 | 61 | public int getScale() { 62 | return scale; 63 | } 64 | 65 | public void setScale(int scale) { 66 | this.scale = scale; 67 | } 68 | 69 | public boolean isNullable() { 70 | return nullable; 71 | } 72 | 73 | public String getDefaultValue() { 74 | return defaultValue; 75 | } 76 | 77 | public void setDefaultValue(String defaultValue) { 78 | this.defaultValue = defaultValue; 79 | } 80 | 81 | public void setNullable(boolean nullable) { 82 | this.nullable = nullable; 83 | } 84 | 85 | public boolean isPrimaryKey() { 86 | return primaryKey; 87 | } 88 | 89 | public void setPrimaryKey(boolean primaryKey) { 90 | this.primaryKey = primaryKey; 91 | } 92 | 93 | public boolean isAutoIncrement() { 94 | return autoIncrement; 95 | } 96 | 97 | public void setAutoIncrement(boolean autoIncrement) { 98 | this.autoIncrement = autoIncrement; 99 | } 100 | 101 | public boolean isUnique() { 102 | return unique; 103 | } 104 | 105 | public void setUnique(boolean unique) { 106 | this.unique = unique; 107 | } 108 | 109 | public String getComment() { 110 | return comment; 111 | } 112 | 113 | public void setComment(String comment) { 114 | this.comment = comment; 115 | } 116 | 117 | public TableMeta getTableMeta() { 118 | return tableMeta; 119 | } 120 | 121 | public void setTableMeta(TableMeta tableMeta) { 122 | this.tableMeta = tableMeta; 123 | } 124 | } 125 | -------------------------------------------------------------------------------- /codegen/src/main/java/org/seasar/doma/gradle/codegen/meta/ResultSetMetaReader.java: -------------------------------------------------------------------------------- 1 | package org.seasar.doma.gradle.codegen.meta; 2 | 3 | import java.sql.Connection; 4 | import java.sql.PreparedStatement; 5 | import java.sql.ResultSet; 6 | import java.sql.ResultSetMetaData; 7 | import java.sql.SQLException; 8 | import javax.sql.DataSource; 9 | import org.seasar.doma.gradle.codegen.dialect.CodeGenDialect; 10 | import org.seasar.doma.gradle.codegen.exception.CodeGenException; 11 | import org.seasar.doma.gradle.codegen.exception.CodeGenNullPointerException; 12 | import org.seasar.doma.gradle.codegen.message.Message; 13 | import org.seasar.doma.gradle.codegen.util.JdbcUtil; 14 | 15 | public class ResultSetMetaReader { 16 | 17 | protected final CodeGenDialect dialect; 18 | 19 | protected final DataSource dataSource; 20 | 21 | public ResultSetMetaReader(CodeGenDialect dialect, DataSource dataSource) { 22 | if (dialect == null) { 23 | throw new CodeGenNullPointerException("dialect"); 24 | } 25 | if (dataSource == null) { 26 | throw new CodeGenNullPointerException("dataSource"); 27 | } 28 | this.dialect = dialect; 29 | this.dataSource = dataSource; 30 | } 31 | 32 | public TableMeta read(String sql) { 33 | if (sql == null) { 34 | throw new CodeGenNullPointerException("sql"); 35 | } 36 | Connection connection = JdbcUtil.getConnection(dataSource); 37 | try { 38 | PreparedStatement preparedStatement = JdbcUtil.prepareStatement(connection, sql); 39 | try { 40 | ResultSet resultSet = preparedStatement.executeQuery(); 41 | try { 42 | return createTableMeta(resultSet.getMetaData()); 43 | } finally { 44 | JdbcUtil.close(resultSet); 45 | } 46 | } finally { 47 | JdbcUtil.close(preparedStatement); 48 | } 49 | } catch (SQLException e) { 50 | throw new CodeGenException(Message.DOMAGEN9001, e, e); 51 | } finally { 52 | JdbcUtil.close(connection); 53 | } 54 | } 55 | 56 | protected TableMeta createTableMeta(ResultSetMetaData rsmd) throws SQLException { 57 | TableMeta tableMeta = new TableMeta(); 58 | for (int i = 1, max = rsmd.getColumnCount() + 1; i < max; i++) { 59 | ColumnMeta columnMeta = new ColumnMeta(); 60 | columnMeta.setName(rsmd.getColumnLabel(i)); 61 | columnMeta.setSqlType(rsmd.getColumnType(i)); 62 | columnMeta.setTypeName(rsmd.getTableName(i).toLowerCase()); 63 | columnMeta.setLength(rsmd.getPrecision(i)); 64 | columnMeta.setScale(rsmd.getScale(i)); 65 | tableMeta.addColumnMeta(columnMeta); 66 | } 67 | return tableMeta; 68 | } 69 | } 70 | -------------------------------------------------------------------------------- /codegen/src/main/java/org/seasar/doma/gradle/codegen/meta/TableMeta.java: -------------------------------------------------------------------------------- 1 | package org.seasar.doma.gradle.codegen.meta; 2 | 3 | import java.util.ArrayList; 4 | import java.util.Collections; 5 | import java.util.List; 6 | import org.seasar.doma.gradle.codegen.util.TableUtil; 7 | 8 | public class TableMeta { 9 | 10 | protected String catalogName; 11 | 12 | protected String schemaName; 13 | 14 | protected String name; 15 | 16 | protected String comment; 17 | 18 | protected final List columnMetas = new ArrayList(); 19 | 20 | protected final List primaryKeyColumnMetas = new ArrayList(); 21 | 22 | public String getCatalogName() { 23 | return catalogName; 24 | } 25 | 26 | public void setCatalogName(String catalogName) { 27 | this.catalogName = catalogName; 28 | } 29 | 30 | public String getSchemaName() { 31 | return schemaName; 32 | } 33 | 34 | public void setSchemaName(String schemaName) { 35 | this.schemaName = schemaName; 36 | } 37 | 38 | public String getName() { 39 | return name; 40 | } 41 | 42 | public void setName(String name) { 43 | this.name = name; 44 | } 45 | 46 | public String getComment() { 47 | return comment; 48 | } 49 | 50 | public void setComment(String comment) { 51 | this.comment = comment; 52 | } 53 | 54 | public List getColumnMetas() { 55 | return Collections.unmodifiableList(columnMetas); 56 | } 57 | 58 | public void addColumnMeta(ColumnMeta columnMeta) { 59 | columnMetas.add(columnMeta); 60 | columnMeta.setTableMeta(this); 61 | if (columnMeta.isPrimaryKey()) { 62 | primaryKeyColumnMetas.add(columnMeta); 63 | } 64 | } 65 | 66 | public List getPrimaryKeyColumnMetas() { 67 | return Collections.unmodifiableList(primaryKeyColumnMetas); 68 | } 69 | 70 | public String getQualifiedTableName() { 71 | return TableUtil.getQualifiedTableName(catalogName, schemaName, name); 72 | } 73 | 74 | public boolean hasCompositePrimaryKey() { 75 | return primaryKeyColumnMetas.size() > 1; 76 | } 77 | } 78 | -------------------------------------------------------------------------------- /codegen/src/main/java/org/seasar/doma/gradle/codegen/task/CodeGenDaoDescTask.java: -------------------------------------------------------------------------------- 1 | package org.seasar.doma.gradle.codegen.task; 2 | 3 | import java.util.ArrayList; 4 | import java.util.List; 5 | import org.gradle.api.DefaultTask; 6 | import org.gradle.api.provider.ListProperty; 7 | import org.gradle.api.provider.Property; 8 | import org.gradle.api.provider.Provider; 9 | import org.gradle.api.tasks.Internal; 10 | import org.gradle.api.tasks.Nested; 11 | import org.gradle.api.tasks.TaskAction; 12 | import org.seasar.doma.gradle.codegen.GlobalFactory; 13 | import org.seasar.doma.gradle.codegen.desc.DaoDesc; 14 | import org.seasar.doma.gradle.codegen.desc.DaoDescFactory; 15 | import org.seasar.doma.gradle.codegen.desc.EntityDesc; 16 | import org.seasar.doma.gradle.codegen.extension.DaoConfig; 17 | 18 | public class CodeGenDaoDescTask extends DefaultTask { 19 | 20 | private final List daoDescList = new ArrayList<>(); 21 | 22 | private final ListProperty entityDescList = 23 | getProject().getObjects().listProperty(EntityDesc.class); 24 | 25 | private final Property globalFactory = 26 | getProject().getObjects().property(GlobalFactory.class); 27 | 28 | private DaoConfig daoConfig; 29 | 30 | @Internal 31 | public Provider> getDaoDescList() { 32 | return getProject().provider(() -> daoDescList); 33 | } 34 | 35 | @Internal 36 | public ListProperty getEntityDescList() { 37 | return entityDescList; 38 | } 39 | 40 | @Internal 41 | public Property getGlobalFactory() { 42 | return globalFactory; 43 | } 44 | 45 | @Nested 46 | public DaoConfig getDaoConfig() { 47 | return daoConfig; 48 | } 49 | 50 | public void setDaoConfig(DaoConfig daoConfig) { 51 | this.daoConfig = daoConfig; 52 | } 53 | 54 | @TaskAction 55 | public void create() { 56 | DaoDescFactory daoDescFactory = createDaoDescFactory(); 57 | entityDescList.get().stream().map(daoDescFactory::createDaoDesc).forEach(daoDescList::add); 58 | } 59 | 60 | private DaoDescFactory createDaoDescFactory() { 61 | return globalFactory 62 | .get() 63 | .createDaoDescFactory( 64 | daoConfig.getPackageName().get(), 65 | daoConfig.getSuffix().get(), 66 | daoConfig.getConfigClassName().getOrNull()); 67 | } 68 | } 69 | -------------------------------------------------------------------------------- /codegen/src/main/java/org/seasar/doma/gradle/codegen/task/CodeGenDaoTask.java: -------------------------------------------------------------------------------- 1 | package org.seasar.doma.gradle.codegen.task; 2 | 3 | import java.io.File; 4 | import org.gradle.api.DefaultTask; 5 | import org.gradle.api.file.DirectoryProperty; 6 | import org.gradle.api.provider.ListProperty; 7 | import org.gradle.api.provider.Property; 8 | import org.gradle.api.tasks.Internal; 9 | import org.gradle.api.tasks.Nested; 10 | import org.gradle.api.tasks.TaskAction; 11 | import org.seasar.doma.gradle.codegen.desc.DaoDesc; 12 | import org.seasar.doma.gradle.codegen.desc.LanguageType; 13 | import org.seasar.doma.gradle.codegen.extension.DaoConfig; 14 | import org.seasar.doma.gradle.codegen.generator.GenerationContext; 15 | import org.seasar.doma.gradle.codegen.generator.Generator; 16 | import org.seasar.doma.gradle.codegen.util.FileUtil; 17 | 18 | public class CodeGenDaoTask extends DefaultTask { 19 | 20 | private final ListProperty daoDescList = 21 | getProject().getObjects().listProperty(DaoDesc.class); 22 | 23 | private final Property generator = getProject().getObjects().property(Generator.class); 24 | 25 | private final Property languageType = 26 | getProject().getObjects().property(LanguageType.class); 27 | 28 | private final DirectoryProperty sourceDir = getProject().getObjects().directoryProperty(); 29 | 30 | private final Property encoding = getProject().getObjects().property(String.class); 31 | 32 | private DaoConfig daoConfig; 33 | 34 | @Internal 35 | public ListProperty getDaoDescList() { 36 | return daoDescList; 37 | } 38 | 39 | @Internal 40 | public Property getGenerator() { 41 | return generator; 42 | } 43 | 44 | @Internal 45 | public Property getLanguageType() { 46 | return languageType; 47 | } 48 | 49 | @Internal 50 | public DirectoryProperty getSourceDir() { 51 | return sourceDir; 52 | } 53 | 54 | @Internal 55 | public Property getEncoding() { 56 | return encoding; 57 | } 58 | 59 | @Nested 60 | public DaoConfig getDaoConfig() { 61 | return daoConfig; 62 | } 63 | 64 | public void setDaoConfig(DaoConfig daoConfig) { 65 | this.daoConfig = daoConfig; 66 | } 67 | 68 | @TaskAction 69 | public void generate() { 70 | daoDescList.get().forEach(this::generateDao); 71 | } 72 | 73 | private void generateDao(DaoDesc daoDesc) { 74 | File sourceFile = 75 | FileUtil.createFile( 76 | languageType.get(), sourceDir.getAsFile().get(), daoDesc.getQualifiedName()); 77 | GenerationContext context = 78 | new GenerationContext( 79 | daoDesc, 80 | sourceFile, 81 | daoDesc.getTemplateName(), 82 | encoding.get(), 83 | daoConfig.getOverwrite().get()); 84 | generator.get().generate(context); 85 | } 86 | } 87 | -------------------------------------------------------------------------------- /codegen/src/main/java/org/seasar/doma/gradle/codegen/util/ClassUtil.java: -------------------------------------------------------------------------------- 1 | package org.seasar.doma.gradle.codegen.util; 2 | 3 | import org.seasar.doma.gradle.codegen.exception.CodeGenException; 4 | import org.seasar.doma.gradle.codegen.message.Message; 5 | 6 | public final class ClassUtil { 7 | 8 | public static String getPackageName(String qualifiedName) { 9 | AssertionUtil.assertNotNull(qualifiedName); 10 | int pos = qualifiedName.lastIndexOf('.'); 11 | if (pos < 0) { 12 | return ""; 13 | } 14 | return qualifiedName.substring(0, pos); 15 | } 16 | 17 | public static String getSimpleName(String qualifiedName) { 18 | AssertionUtil.assertNotNull(qualifiedName); 19 | int pos = qualifiedName.lastIndexOf('.'); 20 | if (pos < 0) { 21 | return qualifiedName; 22 | } 23 | return qualifiedName.substring(pos + 1); 24 | } 25 | 26 | public static Class toBoxedPrimitiveTypeIfPossible(Class clazz) { 27 | AssertionUtil.assertNotNull(clazz); 28 | if (clazz == void.class) { 29 | return Void.class; 30 | } 31 | if (clazz == char.class) { 32 | return Character.class; 33 | } 34 | if (clazz == boolean.class) { 35 | return Boolean.class; 36 | } 37 | if (clazz == byte.class) { 38 | return Byte.class; 39 | } 40 | if (clazz == short.class) { 41 | return Short.class; 42 | } 43 | if (clazz == int.class) { 44 | return Integer.class; 45 | } 46 | if (clazz == long.class) { 47 | return Long.class; 48 | } 49 | if (clazz == float.class) { 50 | return Float.class; 51 | } 52 | if (clazz == double.class) { 53 | return Double.class; 54 | } 55 | return clazz; 56 | } 57 | 58 | public static T newInstance(Class supertype, String className, String propertyName) { 59 | AssertionUtil.assertNotNull(supertype, className, propertyName); 60 | Class clazz = forName(className, propertyName); 61 | if (!supertype.isAssignableFrom(clazz)) { 62 | throw new CodeGenException(Message.DOMAGEN0014, propertyName, className, supertype.getName()); 63 | } 64 | try { 65 | return supertype.cast(clazz.getDeclaredConstructor().newInstance()); 66 | } catch (ReflectiveOperationException e) { 67 | throw new CodeGenException(Message.DOMAGEN0015, propertyName, className, e); 68 | } 69 | } 70 | 71 | public static Class forName(String className, String propertyName) { 72 | AssertionUtil.assertNotNull(className, propertyName); 73 | try { 74 | return Class.forName(className); 75 | } catch (ClassNotFoundException e) { 76 | throw new CodeGenException(Message.DOMAGEN0013, propertyName, className, e); 77 | } 78 | } 79 | } 80 | -------------------------------------------------------------------------------- /codegen/src/main/java/org/seasar/doma/gradle/codegen/util/FileUtil.java: -------------------------------------------------------------------------------- 1 | package org.seasar.doma.gradle.codegen.util; 2 | 3 | import java.io.File; 4 | import java.io.IOException; 5 | import org.seasar.doma.gradle.codegen.desc.LanguageType; 6 | import org.seasar.doma.gradle.codegen.exception.CodeGenException; 7 | import org.seasar.doma.gradle.codegen.message.Message; 8 | 9 | public final class FileUtil { 10 | 11 | public static String getCanonicalPath(File file) { 12 | try { 13 | return file.getCanonicalPath(); 14 | } catch (IOException e) { 15 | throw new CodeGenException(Message.DOMAGEN9001, e, e); 16 | } 17 | } 18 | 19 | public static File createFile(LanguageType languageType, File baseDir, String className) { 20 | AssertionUtil.assertNotNull(baseDir, className); 21 | String javaFilePath = 22 | className.replace('.', File.separatorChar) + "." + languageType.getFileExtension(); 23 | return new File(baseDir, javaFilePath); 24 | } 25 | 26 | public static File createSqlDir(File baseDir, String className, String fileName) { 27 | AssertionUtil.assertNotNull(baseDir, className); 28 | File metaInfDir = new File(baseDir, "META-INF"); 29 | File dir = new File(metaInfDir, className.replace('.', File.separatorChar)); 30 | return new File(dir, fileName); 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /codegen/src/main/java/org/seasar/doma/gradle/codegen/util/IOUtil.java: -------------------------------------------------------------------------------- 1 | package org.seasar.doma.gradle.codegen.util; 2 | 3 | import java.io.BufferedReader; 4 | import java.io.Closeable; 5 | import java.io.File; 6 | import java.io.FileInputStream; 7 | import java.io.FileNotFoundException; 8 | import java.io.IOException; 9 | import java.io.InputStream; 10 | import java.io.InputStreamReader; 11 | import java.nio.CharBuffer; 12 | import java.nio.charset.Charset; 13 | import org.seasar.doma.gradle.codegen.exception.CodeGenException; 14 | import org.seasar.doma.gradle.codegen.message.Message; 15 | 16 | public final class IOUtil { 17 | 18 | protected static final int BUF_SIZE = 8192; 19 | 20 | public static String readAsString(InputStream inputStream) { 21 | AssertionUtil.assertNotNull(inputStream); 22 | BufferedReader reader = 23 | new BufferedReader(new InputStreamReader(inputStream, Charset.forName("UTF-8"))); 24 | StringBuilder buf = new StringBuilder(200); 25 | try { 26 | CharBuffer c = CharBuffer.allocate(BUF_SIZE); 27 | while (reader.read(c) > -1) { 28 | c.flip(); 29 | buf.append(c); 30 | c.clear(); 31 | } 32 | } catch (IOException e) { 33 | throw new CodeGenException(Message.DOMAGEN9001, e, e); 34 | } finally { 35 | IOUtil.close(reader); 36 | } 37 | return buf.toString(); 38 | } 39 | 40 | public static String readAsString(File file) { 41 | AssertionUtil.assertNotNull(file); 42 | InputStream inputStream = null; 43 | try { 44 | inputStream = new FileInputStream(file); 45 | return readAsString(inputStream); 46 | } catch (FileNotFoundException e) { 47 | throw new CodeGenException(Message.DOMAGEN9001, e, e); 48 | } finally { 49 | IOUtil.close(inputStream); 50 | } 51 | } 52 | 53 | public static void close(Closeable closeable) { 54 | if (closeable != null) { 55 | try { 56 | closeable.close(); 57 | } catch (IOException ignored) { 58 | } 59 | } 60 | } 61 | } 62 | -------------------------------------------------------------------------------- /codegen/src/main/java/org/seasar/doma/gradle/codegen/util/Pair.java: -------------------------------------------------------------------------------- 1 | package org.seasar.doma.gradle.codegen.util; 2 | 3 | public class Pair { 4 | 5 | private final FIRST first; 6 | 7 | private final SECOND second; 8 | 9 | public Pair(FIRST first, SECOND second) { 10 | super(); 11 | this.first = first; 12 | this.second = second; 13 | } 14 | 15 | public FIRST getFirst() { 16 | return first; 17 | } 18 | 19 | public SECOND getSecond() { 20 | return second; 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /codegen/src/main/java/org/seasar/doma/gradle/codegen/util/ResourceUtil.java: -------------------------------------------------------------------------------- 1 | package org.seasar.doma.gradle.codegen.util; 2 | 3 | import java.io.File; 4 | import java.io.IOException; 5 | import java.io.InputStream; 6 | import java.io.UnsupportedEncodingException; 7 | import java.net.URL; 8 | import java.net.URLDecoder; 9 | import org.seasar.doma.gradle.codegen.exception.CodeGenException; 10 | import org.seasar.doma.gradle.codegen.message.Message; 11 | 12 | public final class ResourceUtil { 13 | 14 | public static URL getResource(String path) { 15 | AssertionUtil.assertNotNull(path); 16 | URL result = ResourceUtil.class.getResource("/" + path); 17 | if (result != null) { 18 | return result; 19 | } 20 | ClassLoader loader = Thread.currentThread().getContextClassLoader(); 21 | if (loader == null) { 22 | return null; 23 | } 24 | return loader.getResource(path); 25 | } 26 | 27 | public static InputStream getResourceAsStream(String path) { 28 | AssertionUtil.assertNotNull(path); 29 | URL url = getResource(path); 30 | try { 31 | return url != null ? url.openStream() : null; 32 | } catch (IOException e) { 33 | return null; 34 | } 35 | } 36 | 37 | public static String getResourceAsString(String path) { 38 | AssertionUtil.assertNotNull(path); 39 | AssertionUtil.assertTrue(path.length() > 0); 40 | InputStream inputStream = getResourceAsStream(path); 41 | if (inputStream == null) { 42 | return null; 43 | } 44 | return IOUtil.readAsString(inputStream); 45 | } 46 | 47 | public static File getResourceAsFile(String path) { 48 | AssertionUtil.assertNotNull(path); 49 | URL url = getResource(path); 50 | if (url == null) { 51 | return null; 52 | } 53 | return getFile(url); 54 | } 55 | 56 | protected static File getFile(URL url) { 57 | AssertionUtil.assertNotNull(url); 58 | File file = new File(getFileName(url)); 59 | if (file.exists()) { 60 | return file; 61 | } 62 | return null; 63 | } 64 | 65 | protected static String getFileName(URL url) { 66 | AssertionUtil.assertNotNull(url); 67 | String s = url.getFile(); 68 | try { 69 | return URLDecoder.decode(s, "UTF-8"); 70 | } catch (final UnsupportedEncodingException e) { 71 | throw new CodeGenException(Message.DOMAGEN9001, e, e); 72 | } 73 | } 74 | } 75 | -------------------------------------------------------------------------------- /codegen/src/main/java/org/seasar/doma/gradle/codegen/util/StringUtil.java: -------------------------------------------------------------------------------- 1 | package org.seasar.doma.gradle.codegen.util; 2 | 3 | import java.nio.CharBuffer; 4 | 5 | public final class StringUtil { 6 | 7 | public static String capitalize(String text) { 8 | if (isNullOrEmpty(text)) { 9 | return text; 10 | } 11 | char chars[] = text.toCharArray(); 12 | chars[0] = Character.toUpperCase(chars[0]); 13 | return new String(chars); 14 | } 15 | 16 | public static String decapitalize(String text) { 17 | if (isNullOrEmpty(text)) { 18 | return text; 19 | } 20 | char chars[] = text.toCharArray(); 21 | chars[0] = Character.toLowerCase(chars[0]); 22 | return new String(chars); 23 | } 24 | 25 | public static String fromSnakeCaseToCamelCase(String text) { 26 | if (isNullOrEmpty(text)) { 27 | return text; 28 | } 29 | String[] array = text.split("_"); 30 | if (array.length == 0) { 31 | return ""; 32 | } 33 | StringBuilder result = new StringBuilder(); 34 | result.append(array[0].toLowerCase()); 35 | for (int i = 1; i < array.length; i++) { 36 | String s = capitalize(array[i].toLowerCase()); 37 | result.append(s); 38 | } 39 | return result.toString(); 40 | } 41 | 42 | public static String fromCamelCaseToSnakeCase(String text) { 43 | if (isNullOrEmpty(text)) { 44 | return text; 45 | } 46 | StringBuilder result = new StringBuilder(); 47 | CharBuffer buf = CharBuffer.wrap(text); 48 | while (buf.hasRemaining()) { 49 | char c = buf.get(); 50 | result.append(Character.toLowerCase(c)); 51 | buf.mark(); 52 | if (buf.hasRemaining()) { 53 | char c2 = buf.get(); 54 | if (Character.isLowerCase(c) && Character.isUpperCase(c2)) { 55 | result.append("_"); 56 | } 57 | buf.reset(); 58 | } 59 | } 60 | return result.toString(); 61 | } 62 | 63 | public static boolean isNullOrEmpty(String text) { 64 | return text == null || text.isEmpty(); 65 | } 66 | 67 | public static String defaultString(final String str, final String defaultStr) { 68 | return str == null ? defaultStr : str; 69 | } 70 | } 71 | -------------------------------------------------------------------------------- /codegen/src/main/java/org/seasar/doma/gradle/codegen/util/TableUtil.java: -------------------------------------------------------------------------------- 1 | package org.seasar.doma.gradle.codegen.util; 2 | 3 | import java.util.function.Function; 4 | 5 | public final class TableUtil { 6 | 7 | public static String getQualifiedTableName( 8 | String catalogName, String schemaName, String tableName) { 9 | StringBuilder buf = new StringBuilder(); 10 | if (catalogName != null && !catalogName.isEmpty()) { 11 | buf.append(catalogName).append("."); 12 | } 13 | if (schemaName != null && !schemaName.isEmpty()) { 14 | buf.append(schemaName).append("."); 15 | } 16 | return buf.append(tableName).toString(); 17 | } 18 | 19 | public static String getEnquoteQualifiedTableName( 20 | Function enquote, String catalogName, String schemaName, String tableName) { 21 | StringBuilder buf = new StringBuilder(); 22 | if (catalogName != null && !catalogName.isEmpty()) { 23 | buf.append(enquote.apply(catalogName)).append("."); 24 | } 25 | if (schemaName != null && !schemaName.isEmpty()) { 26 | buf.append(enquote.apply(schemaName)).append("."); 27 | } 28 | return buf.append(enquote.apply(tableName)).toString(); 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /codegen/src/main/resources/org/seasar/doma/gradle/codegen/template/java/dao.ftl: -------------------------------------------------------------------------------- 1 | <#-- See also org.seasar.doma.gradle.codegen.desc.DaoDesc --> 2 | <#import "/lib.ftl" as lib> 3 | <#if lib.copyright??> 4 | ${lib.copyright} 5 | 6 | <#if packageName??> 7 | package ${packageName}; 8 | 9 | 10 | <#list importNames as importName> 11 | import ${importName}; 12 | 13 | 14 | /** 15 | <#if lib.author??> 16 | * @author ${lib.author} 17 | 18 | */ 19 | @Dao<#if configClassSimpleName??>(config = ${configClassSimpleName}.class) 20 | public interface ${simpleName} { 21 | 22 | <#if entityDesc.idEntityPropertyDescs?size gt 0> 23 | /** 24 | <#list entityDesc.idEntityPropertyDescs as property> 25 | * @param ${property.name} 26 | 27 | * @return the <#if entityDesc.entityPrefix??>${entityDesc.entityPrefix}${entityDesc.simpleName}<#if entityDesc.entitySuffix??>${entityDesc.entitySuffix} entity 28 | */ 29 | @Select 30 | <#if entityDesc.entityPrefix??>${entityDesc.entityPrefix}${entityDesc.simpleName}<#if entityDesc.entitySuffix??>${entityDesc.entitySuffix} selectById(<#list entityDesc.idEntityPropertyDescs as property>${property.propertyClassSimpleName} ${property.name}<#if property_has_next>, ); 31 | 32 | 33 | <#if entityDesc.idEntityPropertyDescs?size gt 0 && entityDesc.versionEntityPropertyDesc??> 34 | /** 35 | <#list entityDesc.idEntityPropertyDescs as property> 36 | * @param ${property.name} 37 | 38 | * @param ${entityDesc.versionEntityPropertyDesc.name} 39 | * @return the <#if entityDesc.entityPrefix??>${entityDesc.entityPrefix}${entityDesc.simpleName}<#if entityDesc.entitySuffix??>${entityDesc.entitySuffix} entity 40 | */ 41 | @Select(ensureResult = true) 42 | <#if entityDesc.entityPrefix??>${entityDesc.entityPrefix}${entityDesc.simpleName}<#if entityDesc.entitySuffix??>${entityDesc.entitySuffix} selectByIdAndVersion(<#list entityDesc.idEntityPropertyDescs as property>${property.propertyClassSimpleName} ${property.name}, ${entityDesc.versionEntityPropertyDesc.propertyClassSimpleName} ${entityDesc.versionEntityPropertyDesc.name}); 43 | 44 | 45 | /** 46 | * @param entity 47 | * @return affected rows 48 | */ 49 | @Insert 50 | int insert(<#if entityDesc.entityPrefix??>${entityDesc.entityPrefix}${entityDesc.simpleName}<#if entityDesc.entitySuffix??>${entityDesc.entitySuffix} entity); 51 | 52 | /** 53 | * @param entity 54 | * @return affected rows 55 | */ 56 | @Update 57 | int update(<#if entityDesc.entityPrefix??>${entityDesc.entityPrefix}${entityDesc.simpleName}<#if entityDesc.entitySuffix??>${entityDesc.entitySuffix} entity); 58 | 59 | /** 60 | * @param entity 61 | * @return affected rows 62 | */ 63 | @Delete 64 | int delete(<#if entityDesc.entityPrefix??>${entityDesc.entityPrefix}${entityDesc.simpleName}<#if entityDesc.entitySuffix??>${entityDesc.entitySuffix} entity); 65 | } 66 | -------------------------------------------------------------------------------- /codegen/src/main/resources/org/seasar/doma/gradle/codegen/template/java/mappedSuperclass.ftl: -------------------------------------------------------------------------------- 1 | <#-- See also org.seasar.doma.gradle.codegen.desc.EntityListenerDesc --> 2 | <#import "/lib.ftl" as lib> 3 | <#if lib.copyright??> 4 | ${lib.copyright} 5 | 6 | <#if packageName??> 7 | package ${packageName}; 8 | 9 | 10 | <#list importNames as importName> 11 | import ${importName}; 12 | 13 | 14 | /** 15 | <#if lib.author??> 16 | * @author ${lib.author} 17 | 18 | */ 19 | public abstract class ${simpleName}<#if superclassSimpleName??> extends ${superclassSimpleName} { 20 | } 21 | -------------------------------------------------------------------------------- /codegen/src/main/resources/org/seasar/doma/gradle/codegen/template/java/sqlTest.ftl: -------------------------------------------------------------------------------- 1 | <#-- See also org.seasar.doma.gradle.codegen.desc.SqlTestDesc --> 2 | <#import "/lib.ftl" as lib> 3 | <#if lib.copyright??> 4 | ${lib.copyright} 5 | 6 | <#if packageName??> 7 | package ${packageName}; 8 | 9 | 10 | import java.sql.Connection; 11 | import java.sql.Driver; 12 | import java.sql.DriverManager; 13 | import java.sql.Statement; 14 | 15 | import org.junit.jupiter.api.BeforeEach; 16 | import org.junit.jupiter.api.Test; 17 | import org.junit.jupiter.api.TestInfo; 18 | 19 | import org.seasar.doma.jdbc.NoCacheSqlFileRepository; 20 | import org.seasar.doma.jdbc.SqlFile; 21 | import org.seasar.doma.jdbc.SqlFileRepository; 22 | import org.seasar.doma.jdbc.dialect.Dialect; 23 | 24 | /** 25 | * 26 | <#if lib.author??> 27 | * @author ${lib.author} 28 | 29 | */ 30 | public class <#if entityPrefix??>${entityPrefix}${simpleName}<#if entitySuffix??>${entitySuffix} { 31 | 32 | /** */ 33 | protected SqlFileRepository repository; 34 | 35 | /** */ 36 | protected Dialect dialect; 37 | 38 | /** */ 39 | protected Driver driver; 40 | 41 | /** */ 42 | protected String url; 43 | 44 | /** */ 45 | protected String user; 46 | 47 | /** */ 48 | protected String password; 49 | 50 | @BeforeEach 51 | protected void setUp() throws Exception { 52 | repository = new NoCacheSqlFileRepository(); 53 | dialect = new ${dialectClassName}(); 54 | url = "${url}"; 55 | user = "${user}"; 56 | password = "${password}"; 57 | } 58 | 59 | /** 60 | * 61 | * @param sqlFile 62 | * @throws Exception 63 | */ 64 | protected void execute(SqlFile sqlFile) throws Exception { 65 | Connection connection = getConnection(); 66 | try { 67 | connection.setAutoCommit(false); 68 | Statement statement = connection.createStatement(); 69 | try { 70 | statement.execute(sqlFile.getSql()); 71 | } finally { 72 | statement.close(); 73 | } 74 | } finally { 75 | try { 76 | connection.rollback(); 77 | } finally { 78 | connection.close(); 79 | } 80 | } 81 | } 82 | 83 | /** 84 | * 85 | * @return 86 | * @throws Exception 87 | */ 88 | protected Connection getConnection() throws Exception { 89 | return DriverManager.getConnection(url, user, password); 90 | } 91 | <#list methodDescs as methodDesc> 92 | 93 | /** 94 | * 95 | * @throws Exception 96 | */ 97 | @Test 98 | public void ${methodDesc.methodName}(TestInfo testInfo) throws Exception { 99 | SqlFile sqlFile = repository.getSqlFile(testInfo.getTestMethod().get(), "${methodDesc.path}", dialect); 100 | execute(sqlFile); 101 | } 102 | 103 | 104 | } 105 | -------------------------------------------------------------------------------- /codegen/src/main/resources/org/seasar/doma/gradle/codegen/template/kotlin/dao.ftl: -------------------------------------------------------------------------------- 1 | <#-- See also org.seasar.doma.gradle.codegen.desc.DaoDesc --> 2 | <#import "/lib.ftl" as lib> 3 | <#if lib.copyright??> 4 | ${lib.copyright} 5 | 6 | <#if packageName??> 7 | package ${packageName} 8 | 9 | 10 | <#list importNames as importName> 11 | import ${importName} 12 | 13 | 14 | /** 15 | <#if lib.author??> 16 | * @author ${lib.author} 17 | 18 | */ 19 | @Dao<#if configClassSimpleName??>(config = ${configClassSimpleName}.class) 20 | interface ${simpleName} { 21 | 22 | <#if entityDesc.idEntityPropertyDescs?size gt 0> 23 | /** 24 | <#list entityDesc.idEntityPropertyDescs as property> 25 | * @param ${property.name} 26 | 27 | * @return the <#if entityDesc.entityPrefix??>${entityDesc.entityPrefix}${entityDesc.simpleName}<#if entityDesc.entitySuffix??>${entityDesc.entitySuffix} entity 28 | */ 29 | @Select 30 | fun selectById(<#list entityDesc.idEntityPropertyDescs as property>${property.name}: ${property.languageClassSimpleName}<#if property_has_next>, ): <#if entityDesc.entityPrefix??>${entityDesc.entityPrefix}${entityDesc.simpleName}<#if entityDesc.entitySuffix??>${entityDesc.entitySuffix} 31 | 32 | 33 | <#if entityDesc.idEntityPropertyDescs?size gt 0 && entityDesc.versionEntityPropertyDesc??> 34 | /** 35 | <#list entityDesc.idEntityPropertyDescs as property> 36 | * @param ${property.name} 37 | 38 | * @param ${entityDesc.versionEntityPropertyDesc.name} 39 | * @return the <#if entityDesc.entityPrefix??>${entityDesc.entityPrefix}${entityDesc.simpleName}<#if entityDesc.entitySuffix??>${entityDesc.entitySuffix} entity 40 | */ 41 | @Select(ensureResult = true) 42 | fun selectByIdAndVersion(<#list entityDesc.idEntityPropertyDescs as property>${property.name}: ${property.languageClassSimpleName}, ${entityDesc.versionEntityPropertyDesc.name}: ${entityDesc.versionEntityPropertyDesc.languageClassSimpleName}): <#if entityDesc.entityPrefix??>${entityDesc.entityPrefix}${entityDesc.simpleName}<#if entityDesc.entitySuffix??>${entityDesc.entitySuffix} 43 | 44 | 45 | /** 46 | * @param entity 47 | * @return affected rows 48 | */ 49 | @Insert 50 | fun insert(entity: <#if entityDesc.entityPrefix??>${entityDesc.entityPrefix}${entityDesc.simpleName}<#if entityDesc.entitySuffix??>${entityDesc.entitySuffix}): Int 51 | 52 | /** 53 | * @param entity 54 | * @return affected rows 55 | */ 56 | @Update 57 | fun update(entity: <#if entityDesc.entityPrefix??>${entityDesc.entityPrefix}${entityDesc.simpleName}<#if entityDesc.entitySuffix??>${entityDesc.entitySuffix}): Int 58 | 59 | /** 60 | * @param entity 61 | * @return affected rows 62 | */ 63 | @Delete 64 | fun delete(entity: <#if entityDesc.entityPrefix??>${entityDesc.entityPrefix}${entityDesc.simpleName}<#if entityDesc.entitySuffix??>${entityDesc.entitySuffix}): Int 65 | } 66 | -------------------------------------------------------------------------------- /codegen/src/main/resources/org/seasar/doma/gradle/codegen/template/kotlin/entity.ftl: -------------------------------------------------------------------------------- 1 | <#-- See also org.seasar.doma.gradle.codegen.desc.EntityDesc --> 2 | <#import "/lib.ftl" as lib> 3 | <#if lib.copyright??> 4 | ${lib.copyright} 5 | 6 | <#if packageName??> 7 | package ${packageName} 8 | 9 | 10 | <#list importNames as importName> 11 | import ${importName} 12 | 13 | 14 | /** 15 | <#if showDbComment && comment??> 16 | * ${comment} 17 | 18 | <#if lib.author??> 19 | * @author ${lib.author} 20 | 21 | */ 22 | @Entity<#if useListener || namingType != "NONE" || useMetamodel>(<#if useListener>listener = ${listenerClassSimpleName}::class<#if namingType != "NONE"><#if useListener>, naming = ${namingType.referenceName}<#if useMetamodel><#if useListener || namingType != "NONE">, metamodel = Metamodel()<#if useListener || namingType != "NONE" || useMetamodel>) 23 | <#if showCatalogName && catalogName?? || showSchemaName && schemaName?? || showTableName && tableName??> 24 | @Table(<#if showCatalogName && catalogName??>catalog = "${catalogName}"<#if showSchemaName && schemaName??><#if showCatalogName && catalogName??>, schema = "${schemaName}"<#if showTableName><#if showCatalogName && catalogName?? || showSchemaName && schemaName??>, name = "${tableName}") 25 | 26 | class <#if entityPrefix??>${entityPrefix}${simpleName}<#if entitySuffix??>${entitySuffix}<#if superclassSimpleName??> : ${superclassSimpleName}() { 27 | <#list ownEntityPropertyDescs as property> 28 | 29 | <#if showDbComment && property.comment??> 30 | /** ${property.comment} */ 31 | <#else> 32 | /** */ 33 | 34 | <#if property.id> 35 | @Id 36 | <#if property.generationType??> 37 | @GeneratedValue(strategy = ${property.generationType.referenceName}) 38 | <#if property.generationType == "SEQUENCE"> 39 | @SequenceGenerator(sequence = "${tableName}_${property.columnName}"<#if property.initialValue??>, initialValue = ${property.initialValue}<#if property.allocationSize??>, allocationSize = ${property.allocationSize}) 40 | <#elseif property.generationType == "TABLE"> 41 | @TableGenerator(pkColumnValue = "${tableName}_${property.columnName}"<#if property.initialValue??>, initialValue = ${property.initialValue}<#if property.allocationSize??>, allocationSize = ${property.allocationSize}) 42 | 43 | 44 | 45 | <#if property.version> 46 | @Version 47 | 48 | <#if property.showColumnName && property.columnName??> 49 | @Column(name = "${property.columnName}") 50 | 51 | var ${property.name}: ${property.languageClassSimpleName}<#if property.nullable>? = ${property.defaultValue} 52 | 53 | <#if originalStatesPropertyName??> 54 | 55 | /** */ 56 | @OriginalStates 57 | var ${originalStatesPropertyName}: <#if entityPrefix??>${entityPrefix}${simpleName}<#if entitySuffix??>${entitySuffix} 58 | 59 | } 60 | -------------------------------------------------------------------------------- /codegen/src/main/resources/org/seasar/doma/gradle/codegen/template/kotlin/entityListener.ftl: -------------------------------------------------------------------------------- 1 | <#-- See also org.seasar.doma.gradle.codegen.desc.EntityListenerDesc --> 2 | <#import "/lib.ftl" as lib> 3 | <#if lib.copyright??> 4 | ${lib.copyright} 5 | 6 | <#if packageName??> 7 | package ${packageName} 8 | 9 | 10 | <#list importNames as importName> 11 | import ${importName} 12 | 13 | 14 | /** 15 | * 16 | <#if lib.author??> 17 | * @author ${lib.author} 18 | 19 | */ 20 | class ${simpleName}<#if superclassSimpleName??> : ${superclassSimpleName}<<#if entityDesc.entityPrefix??>${entityDesc.entityPrefix}${entityClassSimpleName}<#if entityDesc.entitySuffix??>${entityDesc.entitySuffix}><#else> : EntityListener<<#if entityDesc.entityPrefix??>${entityDesc.entityPrefix}${entityClassSimpleName}<#if entityDesc.entitySuffix??>${entityDesc.entitySuffix}> { 21 | <#if !superclassSimpleName??> 22 | 23 | override fun preInsert(entity: <#if entityDesc.entityPrefix??>${entityDesc.entityPrefix}${entityClassSimpleName}<#if entityDesc.entitySuffix??>${entityDesc.entitySuffix}, context: PreInsertContext<<#if entityDesc.entityPrefix??>${entityDesc.entityPrefix}${entityClassSimpleName}<#if entityDesc.entitySuffix??>${entityDesc.entitySuffix}>) { 24 | } 25 | 26 | override fun preUpdate(entity: <#if entityDesc.entityPrefix??>${entityDesc.entityPrefix}${entityClassSimpleName}<#if entityDesc.entitySuffix??>${entityDesc.entitySuffix}, context: PreUpdateContext<<#if entityDesc.entityPrefix??>${entityDesc.entityPrefix}${entityClassSimpleName}<#if entityDesc.entitySuffix??>${entityDesc.entitySuffix}>) { 27 | } 28 | 29 | override fun preDelete(entity: <#if entityDesc.entityPrefix??>${entityDesc.entityPrefix}${entityClassSimpleName}<#if entityDesc.entitySuffix??>${entityDesc.entitySuffix}, context: PreDeleteContext<<#if entityDesc.entityPrefix??>${entityDesc.entityPrefix}${entityClassSimpleName}<#if entityDesc.entitySuffix??>${entityDesc.entitySuffix}>) { 30 | } 31 | 32 | override fun postInsert(entity: <#if entityDesc.entityPrefix??>${entityDesc.entityPrefix}${entityClassSimpleName}<#if entityDesc.entitySuffix??>${entityDesc.entitySuffix}, context: PostInsertContext<<#if entityDesc.entityPrefix??>${entityDesc.entityPrefix}${entityClassSimpleName}<#if entityDesc.entitySuffix??>${entityDesc.entitySuffix}>) { 33 | } 34 | 35 | override fun postUpdate(entity: <#if entityDesc.entityPrefix??>${entityDesc.entityPrefix}${entityClassSimpleName}<#if entityDesc.entitySuffix??>${entityDesc.entitySuffix}, context: PostUpdateContext<<#if entityDesc.entityPrefix??>${entityDesc.entityPrefix}${entityClassSimpleName}<#if entityDesc.entitySuffix??>${entityDesc.entitySuffix}>) { 36 | } 37 | 38 | override fun postDelete(entity: <#if entityDesc.entityPrefix??>${entityDesc.entityPrefix}${entityClassSimpleName}<#if entityDesc.entitySuffix??>${entityDesc.entitySuffix}, context: PostDeleteContext<<#if entityDesc.entityPrefix??>${entityDesc.entityPrefix}${entityClassSimpleName}<#if entityDesc.entitySuffix??>${entityDesc.entitySuffix}>) { 39 | } 40 | 41 | } 42 | -------------------------------------------------------------------------------- /codegen/src/main/resources/org/seasar/doma/gradle/codegen/template/kotlin/mappedSuperclass.ftl: -------------------------------------------------------------------------------- 1 | <#-- See also org.seasar.doma.gradle.codegen.desc.EntityListenerDesc --> 2 | <#import "/lib.ftl" as lib> 3 | <#if lib.copyright??> 4 | ${lib.copyright} 5 | 6 | <#if packageName??> 7 | package ${packageName} 8 | 9 | 10 | <#list importNames as importName> 11 | import ${importName} 12 | 13 | 14 | /** 15 | <#if lib.author??> 16 | * @author ${lib.author} 17 | 18 | */ 19 | abstract class ${simpleName}<#if superclassSimpleName??> : ${superclassSimpleName} { 20 | } 21 | -------------------------------------------------------------------------------- /codegen/src/main/resources/org/seasar/doma/gradle/codegen/template/kotlin/sqlTest.ftl: -------------------------------------------------------------------------------- 1 | <#-- See also org.seasar.doma.gradle.codegen.desc.SqlTestDesc --> 2 | <#import "/lib.ftl" as lib> 3 | <#if lib.copyright??> 4 | ${lib.copyright} 5 | 6 | <#if packageName??> 7 | package ${packageName} 8 | 9 | 10 | import java.sql.Connection 11 | import java.sql.Driver 12 | import java.sql.DriverManager 13 | import java.sql.Statement 14 | 15 | import org.junit.jupiter.api.BeforeEach 16 | import org.junit.jupiter.api.Test 17 | import org.junit.jupiter.api.TestInfo 18 | 19 | import org.seasar.doma.jdbc.NoCacheSqlFileRepository 20 | import org.seasar.doma.jdbc.SqlFile 21 | import org.seasar.doma.jdbc.SqlFileRepository 22 | import org.seasar.doma.jdbc.dialect.Dialect 23 | 24 | /** 25 | * 26 | <#if lib.author??> 27 | * @author ${lib.author} 28 | 29 | */ 30 | class <#if entityPrefix??>${entityPrefix}${simpleName}<#if entitySuffix??>${entitySuffix} { 31 | 32 | lateinit var repository: SqlFileRepository 33 | lateinit var dialect: Dialect 34 | lateinit var driver: Driver 35 | lateinit var url: String 36 | lateinit var user: String 37 | lateinit var password: String 38 | 39 | @BeforeEach 40 | protected fun setUp() { 41 | repository = NoCacheSqlFileRepository() 42 | dialect = ${dialectClassName}() 43 | url = "${url}" 44 | user = "${user}" 45 | password = "${password}" 46 | } 47 | 48 | protected fun execute(sqlFile: SqlFile) { 49 | val connection = getConnection() 50 | try { 51 | connection.setAutoCommit(false) 52 | val statement = connection.createStatement() 53 | try { 54 | statement.execute(sqlFile.getSql()) 55 | } finally { 56 | statement.close() 57 | } 58 | } finally { 59 | try { 60 | connection.rollback() 61 | } finally { 62 | connection.close() 63 | } 64 | } 65 | } 66 | 67 | protected fun getConnection(): Connection { 68 | return DriverManager.getConnection(url, user, password) 69 | } 70 | <#list methodDescs as methodDesc> 71 | 72 | @Test 73 | public fun ${methodDesc.methodName}(testInfo: TestInfo) { 74 | val sqlFile = repository.getSqlFile(testInfo.getTestMethod().get(), "${methodDesc.path}", dialect) 75 | execute(sqlFile) 76 | } 77 | 78 | 79 | } 80 | -------------------------------------------------------------------------------- /codegen/src/main/resources/org/seasar/doma/gradle/codegen/template/lib.ftl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/domaframework/doma-codegen-plugin/bc3eebcb48ab56f3ddad05d60b35ea6f9e3c47b3/codegen/src/main/resources/org/seasar/doma/gradle/codegen/template/lib.ftl -------------------------------------------------------------------------------- /codegen/src/main/resources/org/seasar/doma/gradle/codegen/template/selectById.sql.ftl: -------------------------------------------------------------------------------- 1 | <#-- See also org.seasar.doma.gradle.codegen.desc.SqlDesc --> 2 | select 3 | /*%expand*/* 4 | from 5 | ${entityDesc.tableName} 6 | where 7 | <#list entityDesc.idEntityPropertyDescs as property> 8 | ${property.columnName} = /* ${property.name} */<#if property.number>1<#elseif property.time>${toTime("12:34:56")}<#elseif property.date>${toDate("2010-01-23")}<#elseif property.timestamp>${toTimestamp("2010-01-23 12:34:56")}<#else>'a'<#if property_has_next> 9 | and 10 | 11 | -------------------------------------------------------------------------------- /codegen/src/main/resources/org/seasar/doma/gradle/codegen/template/selectByIdAndVersion.sql.ftl: -------------------------------------------------------------------------------- 1 | <#-- See also org.seasar.doma.gradle.codegen.desc.SqlDesc --> 2 | select 3 | /*%expand*/* 4 | from 5 | ${entityDesc.tableName} 6 | where 7 | <#list entityDesc.idEntityPropertyDescs as property> 8 | ${property.columnName} = /* ${property.name} */<#if property.number>1<#elseif property.time>${toTime("12:34:56")}<#elseif property.date>${toDate("2010-01-23")}<#elseif property.timestamp>${toTimestamp("2010-01-23 12:34:56")}<#else>'a' 9 | and 10 | 11 | <#if entityDesc.idEntityPropertyDescs?size gt 0 && entityDesc.versionEntityPropertyDesc??> 12 | ${entityDesc.versionEntityPropertyDesc.columnName} = /* ${entityDesc.versionEntityPropertyDesc.name} */1 13 | 14 | -------------------------------------------------------------------------------- /codegen/src/test/java/example/hoge/AbstractBean.java: -------------------------------------------------------------------------------- 1 | package example.hoge; 2 | 3 | public abstract class AbstractBean {} 4 | -------------------------------------------------------------------------------- /codegen/src/test/java/example/hoge/CommonEntity.java: -------------------------------------------------------------------------------- 1 | package example.hoge; 2 | 3 | import org.seasar.doma.Entity; 4 | import org.seasar.doma.Transient; 5 | 6 | @Entity 7 | public class CommonEntity extends AbstractBean { 8 | 9 | String name; 10 | 11 | @Transient String transientString; 12 | 13 | static String staticString; 14 | 15 | @SuppressWarnings("unused") 16 | private String privateString; 17 | } 18 | -------------------------------------------------------------------------------- /codegen/src/test/java/example/hoge/ParentEntity.java: -------------------------------------------------------------------------------- 1 | package example.hoge; 2 | 3 | import org.seasar.doma.Column; 4 | import org.seasar.doma.Entity; 5 | 6 | @Entity 7 | public class ParentEntity { 8 | 9 | @Column(name = "EMP_NAME") 10 | String hoge; 11 | } 12 | -------------------------------------------------------------------------------- /codegen/src/test/java/org/seasar/doma/gradle/codegen/GeneratorStub.java: -------------------------------------------------------------------------------- 1 | package org.seasar.doma.gradle.codegen; 2 | 3 | import java.io.File; 4 | import java.io.StringWriter; 5 | import java.io.Writer; 6 | import org.seasar.doma.gradle.codegen.desc.LanguageType; 7 | import org.seasar.doma.gradle.codegen.generator.GenerationContext; 8 | import org.seasar.doma.gradle.codegen.generator.Generator; 9 | 10 | public class GeneratorStub extends Generator { 11 | 12 | private StringWriter writer = new StringWriter(300); 13 | 14 | public GeneratorStub() { 15 | super(LanguageType.JAVA); 16 | } 17 | 18 | public GeneratorStub(LanguageType languageType) { 19 | super(languageType); 20 | } 21 | 22 | @Override 23 | protected boolean exists(File file) { 24 | return false; 25 | } 26 | 27 | @Override 28 | protected void mkdirs(File dir) {} 29 | 30 | @Override 31 | protected Writer openWriter(GenerationContext context) { 32 | return writer; 33 | } 34 | 35 | protected String getResult() { 36 | return writer.toString(); 37 | } 38 | 39 | protected void clear() { 40 | writer = new StringWriter(300); 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /codegen/src/test/java/org/seasar/doma/gradle/codegen/KotlinGeneratorStub.java: -------------------------------------------------------------------------------- 1 | package org.seasar.doma.gradle.codegen; 2 | 3 | public class KotlinGeneratorStub {} 4 | -------------------------------------------------------------------------------- /codegen/src/test/java/org/seasar/doma/gradle/codegen/desc/EntityPropertyClassNameResolverTest.java: -------------------------------------------------------------------------------- 1 | package org.seasar.doma.gradle.codegen.desc; 2 | 3 | import static org.junit.jupiter.api.Assertions.assertEquals; 4 | 5 | import java.io.File; 6 | import java.util.regex.Pattern; 7 | import org.junit.jupiter.api.Test; 8 | import org.seasar.doma.gradle.codegen.util.ResourceUtil; 9 | 10 | public class EntityPropertyClassNameResolverTest { 11 | 12 | @Test 13 | public void testResolve2() throws Exception { 14 | EntityDesc entityDesc = new EntityDesc(); 15 | entityDesc.setPackageName("aaa"); 16 | entityDesc.setSimpleName("Bbb"); 17 | 18 | EntityPropertyClassNameResolver resolver = new EntityPropertyClassNameResolver(null); 19 | resolver.patternMap.put(Pattern.compile("aaa\\.Bbb@ccc"), "String"); 20 | assertEquals("String", resolver.resolve(entityDesc, "ccc", "Integer")); 21 | assertEquals("Integer", resolver.resolve(entityDesc, "ddd", "Integer")); 22 | } 23 | 24 | @Test 25 | public void testResolve() throws Exception { 26 | String path = getClass().getName().replace('.', '/') + ".properties"; 27 | File file = ResourceUtil.getResourceAsFile(path); 28 | EntityPropertyClassNameResolver resolver = new EntityPropertyClassNameResolver(file); 29 | 30 | EntityDesc entityDesc = new EntityDesc(); 31 | entityDesc.setPackageName("aaa"); 32 | entityDesc.setSimpleName("Bbb"); 33 | assertEquals("java.lang.String", resolver.resolve(entityDesc, "ccc", "java.lang.Integer")); 34 | assertEquals("java.lang.Long", resolver.resolve(entityDesc, "ddd", "java.lang.Integer")); 35 | 36 | entityDesc = new EntityDesc(); 37 | entityDesc.setPackageName("xxx"); 38 | entityDesc.setSimpleName("Yyy"); 39 | assertEquals("java.lang.Double", resolver.resolve(entityDesc, "ccc", "java.lang.Integer")); 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /codegen/src/test/java/org/seasar/doma/gradle/codegen/dialect/OracleCodeGenDialectTest.java: -------------------------------------------------------------------------------- 1 | package org.seasar.doma.gradle.codegen.dialect; 2 | 3 | import static org.junit.jupiter.api.Assertions.assertEquals; 4 | 5 | import org.junit.jupiter.api.Test; 6 | 7 | public class OracleCodeGenDialectTest { 8 | 9 | @Test 10 | public void testConvertToTimeLiteral() throws Exception { 11 | OracleCodeGenDialect dialect = new OracleCodeGenDialect(); 12 | assertEquals("time'a'", dialect.convertToTimeLiteral("a")); 13 | } 14 | 15 | @Test 16 | public void testConvertToDateLiteral() throws Exception { 17 | OracleCodeGenDialect dialect = new OracleCodeGenDialect(); 18 | assertEquals("date'a'", dialect.convertToDateLiteral("a")); 19 | } 20 | 21 | @Test 22 | public void testConvertToTimestampLiteral() throws Exception { 23 | OracleCodeGenDialect dialect = new OracleCodeGenDialect(); 24 | assertEquals("timestamp'a'", dialect.convertToTimestampLiteral("a")); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /codegen/src/test/java/org/seasar/doma/gradle/codegen/dialect/StandardCodeGenDialectTest.java: -------------------------------------------------------------------------------- 1 | package org.seasar.doma.gradle.codegen.dialect; 2 | 3 | import static org.junit.jupiter.api.Assertions.assertEquals; 4 | 5 | import java.sql.Types; 6 | import java.time.LocalDate; 7 | import org.junit.jupiter.api.Test; 8 | 9 | public class StandardCodeGenDialectTest { 10 | 11 | @Test 12 | public void testReplacePropertyClassName() throws Exception { 13 | StandardCodeGenDialect dialect = new StandardCodeGenDialect(); 14 | String localDateClassName = LocalDate.class.getName(); 15 | String utilDateClassName = java.util.Date.class.getName(); 16 | dialect.replacePropertyClassName(localDateClassName, utilDateClassName); 17 | assertEquals(utilDateClassName, dialect.classNameMap.get("date")); 18 | assertEquals(utilDateClassName, dialect.fallbackClassNameMap.get(Types.DATE)); 19 | } 20 | 21 | @Test 22 | public void testConvertToTimeLiteral() throws Exception { 23 | StandardCodeGenDialect dialect = new StandardCodeGenDialect(); 24 | assertEquals("'a'", dialect.convertToTimeLiteral("a")); 25 | } 26 | 27 | @Test 28 | public void testConvertToDateLiteral() throws Exception { 29 | StandardCodeGenDialect dialect = new StandardCodeGenDialect(); 30 | assertEquals("'a'", dialect.convertToDateLiteral("a")); 31 | } 32 | 33 | @Test 34 | public void testConvertToTimestampLiteral() throws Exception { 35 | StandardCodeGenDialect dialect = new StandardCodeGenDialect(); 36 | assertEquals("'a'", dialect.convertToTimestampLiteral("a")); 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /codegen/src/test/java/org/seasar/doma/gradle/codegen/util/FileUtilTest.java: -------------------------------------------------------------------------------- 1 | package org.seasar.doma.gradle.codegen.util; 2 | 3 | import static org.junit.jupiter.api.Assertions.assertEquals; 4 | 5 | import java.io.File; 6 | import org.junit.jupiter.api.Test; 7 | import org.seasar.doma.gradle.codegen.desc.LanguageType; 8 | 9 | public class FileUtilTest { 10 | 11 | @Test 12 | public void testCreateJavaFile() throws Exception { 13 | File file = FileUtil.createFile(LanguageType.JAVA, new File("."), "aaa.bbb.Ccc"); 14 | assertEquals("Ccc.java", file.getName()); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /codegen/src/test/java/org/seasar/doma/gradle/codegen/util/JdbcUtilTest.java: -------------------------------------------------------------------------------- 1 | package org.seasar.doma.gradle.codegen.util; 2 | 3 | import static org.junit.jupiter.api.Assertions.assertEquals; 4 | import static org.junit.jupiter.api.Assertions.assertNull; 5 | 6 | import org.junit.jupiter.api.Test; 7 | 8 | public class JdbcUtilTest { 9 | 10 | @Test 11 | public void testInferDialectName() throws Exception { 12 | String dialectName = JdbcUtil.inferDialectName("jdbc:postgresql://localhost/hoge"); 13 | assertEquals("postgres", dialectName); 14 | } 15 | 16 | @Test 17 | public void testInferDialectName_mysql() throws Exception { 18 | String dialectName = JdbcUtil.inferDialectName("jdbc:mysql://localhost:3306/hoge"); 19 | assertEquals("mysql", dialectName); 20 | } 21 | 22 | @Test 23 | public void testInferDialectName_mysql_aws() throws Exception { 24 | String dialectName = 25 | JdbcUtil.inferDialectName( 26 | "jdbc:mysql:aws://db-identifier.cluster-XYZ.us-east-2.rds.amazonaws.com:3306"); 27 | assertEquals("mysql", dialectName); 28 | } 29 | 30 | @Test 31 | public void testInferDialectName_unknown() throws Exception { 32 | String dialectName = JdbcUtil.inferDialectName("jdbc:unknown://localhost/hoge"); 33 | assertNull(dialectName); 34 | } 35 | 36 | @Test 37 | public void testInferDialectName_invalidUrl() throws Exception { 38 | String dialectName = JdbcUtil.inferDialectName("localhost/hoge"); 39 | assertNull(dialectName); 40 | } 41 | 42 | @Test 43 | public void testInferDriverClassName() throws Exception { 44 | String driverClassName = JdbcUtil.inferDriverClassName("jdbc:postgresql://localhost/hoge"); 45 | assertEquals("org.postgresql.Driver", driverClassName); 46 | } 47 | 48 | @Test 49 | public void testInferDriverClassName_mysql() throws Exception { 50 | String driverClassName = JdbcUtil.inferDriverClassName("jdbc:mysql://localhost:3306/hoge"); 51 | assertEquals("com.mysql.cj.jdbc.Driver", driverClassName); 52 | } 53 | 54 | @Test 55 | public void testInferDriverClassName_mysql_aws() throws Exception { 56 | String driverClassName = 57 | JdbcUtil.inferDriverClassName( 58 | "jdbc:mysql:aws://db-identifier.cluster-XYZ.us-east-2.rds.amazonaws.com:3306"); 59 | assertEquals("software.aws.rds.jdbc.mysql.Driver", driverClassName); 60 | } 61 | 62 | @Test 63 | public void testInferDriverClassName_mariadb() throws Exception { 64 | String driverClassName = JdbcUtil.inferDriverClassName("jdbc:mariadb://localhost:3306/hoge"); 65 | assertEquals("org.mariadb.jdbc.Driver", driverClassName); 66 | } 67 | 68 | @Test 69 | public void testInferDriverClassName_unknown() throws Exception { 70 | String driverClassName = JdbcUtil.inferDriverClassName("jdbc:unknown://localhost/hoge"); 71 | assertNull(driverClassName); 72 | } 73 | 74 | @Test 75 | public void testInferDriverClassName_invalidUrl() throws Exception { 76 | String driverClassName = JdbcUtil.inferDriverClassName("localhost/hoge"); 77 | assertNull(driverClassName); 78 | } 79 | } 80 | -------------------------------------------------------------------------------- /codegen/src/test/java/org/seasar/doma/gradle/codegen/util/StringUtilTest.java: -------------------------------------------------------------------------------- 1 | package org.seasar.doma.gradle.codegen.util; 2 | 3 | import static org.junit.jupiter.api.Assertions.assertEquals; 4 | import static org.junit.jupiter.api.Assertions.assertFalse; 5 | import static org.junit.jupiter.api.Assertions.assertTrue; 6 | 7 | import org.junit.jupiter.api.Test; 8 | 9 | public class StringUtilTest { 10 | 11 | @Test 12 | public void testCapitalize() throws Exception { 13 | assertEquals("Aaa", StringUtil.capitalize("aaa")); 14 | } 15 | 16 | @Test 17 | public void testDecapitalize() throws Exception { 18 | assertEquals("aAA", StringUtil.decapitalize("AAA")); 19 | } 20 | 21 | @Test 22 | public void testFromSnakeCaseToCamelCase() throws Exception { 23 | assertEquals("aaaBbb", StringUtil.fromSnakeCaseToCamelCase("AAA_BBB")); 24 | } 25 | 26 | @Test 27 | public void testFromCamelCaseToSnakeCase() throws Exception { 28 | assertEquals("aaa_bbb", StringUtil.fromCamelCaseToSnakeCase("aaaBbb")); 29 | } 30 | 31 | @Test 32 | public void testIsNullOrEmpty() throws Exception { 33 | assertTrue(StringUtil.isNullOrEmpty(null)); 34 | assertTrue(StringUtil.isNullOrEmpty("")); 35 | assertFalse(StringUtil.isNullOrEmpty(" ")); 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /codegen/src/test/java/org/seasar/doma/gradle/codegen/util/TableUtilTest.java: -------------------------------------------------------------------------------- 1 | package org.seasar.doma.gradle.codegen.util; 2 | 3 | import static org.junit.jupiter.api.Assertions.assertEquals; 4 | 5 | import java.util.function.Function; 6 | import org.junit.jupiter.api.Test; 7 | 8 | public class TableUtilTest { 9 | 10 | @Test 11 | public void testGetQualifiedTableName() { 12 | assertEquals("aaa.bbb.ccc", TableUtil.getQualifiedTableName("aaa", "bbb", "ccc")); 13 | assertEquals("bbb.ccc", TableUtil.getQualifiedTableName(null, "bbb", "ccc")); 14 | assertEquals("aaa.ccc", TableUtil.getQualifiedTableName("aaa", null, "ccc")); 15 | assertEquals("ccc", TableUtil.getQualifiedTableName(null, null, "ccc")); 16 | } 17 | 18 | @Test 19 | public void testGetEnquoteQualifiedTableName() { 20 | Function enquote = name -> "[" + name + "]"; 21 | assertEquals( 22 | "[aaa].[bbb].[ccc]", TableUtil.getEnquoteQualifiedTableName(enquote, "aaa", "bbb", "ccc")); 23 | assertEquals( 24 | "[bbb].[ccc]", TableUtil.getEnquoteQualifiedTableName(enquote, null, "bbb", "ccc")); 25 | assertEquals( 26 | "[aaa].[ccc]", TableUtil.getEnquoteQualifiedTableName(enquote, "aaa", null, "ccc")); 27 | assertEquals("[ccc]", TableUtil.getEnquoteQualifiedTableName(enquote, null, null, "ccc")); 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /codegen/src/test/resources/META-INF/org/seasar/doma/gradle/codegen/GeneratorTest/insert.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/domaframework/doma-codegen-plugin/bc3eebcb48ab56f3ddad05d60b35ea6f9e3c47b3/codegen/src/test/resources/META-INF/org/seasar/doma/gradle/codegen/GeneratorTest/insert.txt -------------------------------------------------------------------------------- /codegen/src/test/resources/META-INF/org/seasar/doma/gradle/codegen/GeneratorTest/select-oracle.sql: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/domaframework/doma-codegen-plugin/bc3eebcb48ab56f3ddad05d60b35ea6f9e3c47b3/codegen/src/test/resources/META-INF/org/seasar/doma/gradle/codegen/GeneratorTest/select-oracle.sql -------------------------------------------------------------------------------- /codegen/src/test/resources/META-INF/org/seasar/doma/gradle/codegen/GeneratorTest/select.sql: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/domaframework/doma-codegen-plugin/bc3eebcb48ab56f3ddad05d60b35ea6f9e3c47b3/codegen/src/test/resources/META-INF/org/seasar/doma/gradle/codegen/GeneratorTest/select.sql -------------------------------------------------------------------------------- /codegen/src/test/resources/META-INF/org/seasar/doma/gradle/codegen/GeneratorTest/update.sql: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/domaframework/doma-codegen-plugin/bc3eebcb48ab56f3ddad05d60b35ea6f9e3c47b3/codegen/src/test/resources/META-INF/org/seasar/doma/gradle/codegen/GeneratorTest/update.sql -------------------------------------------------------------------------------- /codegen/src/test/resources/org/seasar/doma/gradle/codegen/GeneratorTest_CompositeId.txt: -------------------------------------------------------------------------------- 1 | package example.entity; 2 | 3 | import org.seasar.doma.Column; 4 | import org.seasar.doma.Entity; 5 | import org.seasar.doma.Id; 6 | import org.seasar.doma.Table; 7 | 8 | /** 9 | * COMMENT for HOGE 10 | */ 11 | @Entity 12 | @Table(name = "HOGE") 13 | public class Hoge { 14 | 15 | /** COMMENT for ID */ 16 | @Id 17 | @Column(name = "ID1") 18 | Integer id1; 19 | 20 | /** COMMENT for ID */ 21 | @Id 22 | @Column(name = "ID2") 23 | Integer id2; 24 | 25 | /** 26 | * Returns the id1. 27 | * 28 | * @return the id1 29 | */ 30 | public Integer getId1() { 31 | return id1; 32 | } 33 | 34 | /** 35 | * Sets the id1. 36 | * 37 | * @param id1 the id1 38 | */ 39 | public void setId1(Integer id1) { 40 | this.id1 = id1; 41 | } 42 | 43 | /** 44 | * Returns the id2. 45 | * 46 | * @return the id2 47 | */ 48 | public Integer getId2() { 49 | return id2; 50 | } 51 | 52 | /** 53 | * Sets the id2. 54 | * 55 | * @param id2 the id2 56 | */ 57 | public void setId2(Integer id2) { 58 | this.id2 = id2; 59 | } 60 | } 61 | -------------------------------------------------------------------------------- /codegen/src/test/resources/org/seasar/doma/gradle/codegen/GeneratorTest_DefaultConfigDao.txt: -------------------------------------------------------------------------------- 1 | package example.dao; 2 | 3 | import example.entity.Hoge; 4 | import org.seasar.doma.Dao; 5 | import org.seasar.doma.Delete; 6 | import org.seasar.doma.Insert; 7 | import org.seasar.doma.Select; 8 | import org.seasar.doma.Update; 9 | 10 | /** 11 | */ 12 | @Dao 13 | public interface HogeDao { 14 | 15 | /** 16 | * @param id 17 | * @return the Hoge entity 18 | */ 19 | @Select 20 | Hoge selectById(Integer id); 21 | 22 | /** 23 | * @param id 24 | * @param version 25 | * @return the Hoge entity 26 | */ 27 | @Select(ensureResult = true) 28 | Hoge selectByIdAndVersion(Integer id, Integer version); 29 | 30 | /** 31 | * @param entity 32 | * @return affected rows 33 | */ 34 | @Insert 35 | int insert(Hoge entity); 36 | 37 | /** 38 | * @param entity 39 | * @return affected rows 40 | */ 41 | @Update 42 | int update(Hoge entity); 43 | 44 | /** 45 | * @param entity 46 | * @return affected rows 47 | */ 48 | @Delete 49 | int delete(Hoge entity); 50 | } 51 | -------------------------------------------------------------------------------- /codegen/src/test/resources/org/seasar/doma/gradle/codegen/GeneratorTest_EntityPropertyClassNameResolver.txt: -------------------------------------------------------------------------------- 1 | package example.entity; 2 | 3 | import example.domain.Name; 4 | import example.domain.XValue; 5 | import org.seasar.doma.Column; 6 | import org.seasar.doma.Entity; 7 | import org.seasar.doma.Id; 8 | import org.seasar.doma.Table; 9 | 10 | /** 11 | * COMMENT for HOGE 12 | */ 13 | @Entity 14 | @Table(name = "HOGE") 15 | public class Hoge { 16 | 17 | /** COMMENT for ID */ 18 | @Id 19 | @Column(name = "ID") 20 | Integer id; 21 | 22 | /** COMMENT for NAME */ 23 | @Column(name = "EMP_NAME") 24 | Name empName; 25 | 26 | /** COMMENT for XVAL */ 27 | @Column(name = "XVAL") 28 | XValue xval; 29 | 30 | /** 31 | * Returns the id. 32 | * 33 | * @return the id 34 | */ 35 | public Integer getId() { 36 | return id; 37 | } 38 | 39 | /** 40 | * Sets the id. 41 | * 42 | * @param id the id 43 | */ 44 | public void setId(Integer id) { 45 | this.id = id; 46 | } 47 | 48 | /** 49 | * Returns the empName. 50 | * 51 | * @return the empName 52 | */ 53 | public Name getEmpName() { 54 | return empName; 55 | } 56 | 57 | /** 58 | * Sets the empName. 59 | * 60 | * @param empName the empName 61 | */ 62 | public void setEmpName(Name empName) { 63 | this.empName = empName; 64 | } 65 | 66 | /** 67 | * Returns the xval. 68 | * 69 | * @return the xval 70 | */ 71 | public XValue getXval() { 72 | return xval; 73 | } 74 | 75 | /** 76 | * Sets the xval. 77 | * 78 | * @param xval the xval 79 | */ 80 | public void setXval(XValue xval) { 81 | this.xval = xval; 82 | } 83 | } 84 | -------------------------------------------------------------------------------- /codegen/src/test/resources/org/seasar/doma/gradle/codegen/GeneratorTest_EntitySuperclass.txt: -------------------------------------------------------------------------------- 1 | package example.entity; 2 | 3 | import example.hoge.CommonEntity; 4 | import org.seasar.doma.Column; 5 | import org.seasar.doma.Entity; 6 | import org.seasar.doma.Id; 7 | import org.seasar.doma.Table; 8 | 9 | /** 10 | * COMMENT for HOGE 11 | */ 12 | @Entity 13 | @Table(name = "HOGE") 14 | public class Hoge extends CommonEntity { 15 | 16 | /** COMMENT for ID */ 17 | @Id 18 | @Column(name = "ID") 19 | Integer id; 20 | 21 | /** 22 | * Returns the id. 23 | * 24 | * @return the id 25 | */ 26 | public Integer getId() { 27 | return id; 28 | } 29 | 30 | /** 31 | * Sets the id. 32 | * 33 | * @param id the id 34 | */ 35 | public void setId(Integer id) { 36 | this.id = id; 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /codegen/src/test/resources/org/seasar/doma/gradle/codegen/GeneratorTest_ExtendingEntityListener.txt: -------------------------------------------------------------------------------- 1 | package example.entity; 2 | 3 | import aaa.FooListener; 4 | 5 | /** 6 | * 7 | */ 8 | public class HogeListener extends FooListener { 9 | } 10 | -------------------------------------------------------------------------------- /codegen/src/test/resources/org/seasar/doma/gradle/codegen/GeneratorTest_ExtendingMappedSuperclass.txt: -------------------------------------------------------------------------------- 1 | package example.entity; 2 | 3 | import example.hoge.CommonEntity; 4 | 5 | /** 6 | */ 7 | public abstract class AbstractHoge extends CommonEntity { 8 | } 9 | -------------------------------------------------------------------------------- /codegen/src/test/resources/org/seasar/doma/gradle/codegen/GeneratorTest_GenerationType_IDENTITY.txt: -------------------------------------------------------------------------------- 1 | package example.entity; 2 | 3 | import org.seasar.doma.Column; 4 | import org.seasar.doma.Entity; 5 | import org.seasar.doma.GeneratedValue; 6 | import org.seasar.doma.GenerationType; 7 | import org.seasar.doma.Id; 8 | import org.seasar.doma.Table; 9 | 10 | /** 11 | * COMMENT for HOGE 12 | */ 13 | @Entity 14 | @Table(name = "HOGE") 15 | public class Hoge { 16 | 17 | /** COMMENT for ID */ 18 | @Id 19 | @GeneratedValue(strategy = GenerationType.IDENTITY) 20 | @Column(name = "ID") 21 | Integer id; 22 | 23 | /** 24 | * Returns the id. 25 | * 26 | * @return the id 27 | */ 28 | public Integer getId() { 29 | return id; 30 | } 31 | 32 | /** 33 | * Sets the id. 34 | * 35 | * @param id the id 36 | */ 37 | public void setId(Integer id) { 38 | this.id = id; 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /codegen/src/test/resources/org/seasar/doma/gradle/codegen/GeneratorTest_GenerationType_SEQUENCE.txt: -------------------------------------------------------------------------------- 1 | package example.entity; 2 | 3 | import org.seasar.doma.Column; 4 | import org.seasar.doma.Entity; 5 | import org.seasar.doma.GeneratedValue; 6 | import org.seasar.doma.GenerationType; 7 | import org.seasar.doma.Id; 8 | import org.seasar.doma.SequenceGenerator; 9 | import org.seasar.doma.Table; 10 | 11 | /** 12 | * COMMENT for HOGE 13 | */ 14 | @Entity 15 | @Table(name = "HOGE") 16 | public class Hoge { 17 | 18 | /** COMMENT for ID */ 19 | @Id 20 | @GeneratedValue(strategy = GenerationType.SEQUENCE) 21 | @SequenceGenerator(sequence = "HOGE_ID", initialValue = 100, allocationSize = 50) 22 | @Column(name = "ID") 23 | Integer id; 24 | 25 | /** 26 | * Returns the id. 27 | * 28 | * @return the id 29 | */ 30 | public Integer getId() { 31 | return id; 32 | } 33 | 34 | /** 35 | * Sets the id. 36 | * 37 | * @param id the id 38 | */ 39 | public void setId(Integer id) { 40 | this.id = id; 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /codegen/src/test/resources/org/seasar/doma/gradle/codegen/GeneratorTest_GenerationType_TABLE.txt: -------------------------------------------------------------------------------- 1 | package example.entity; 2 | 3 | import org.seasar.doma.Column; 4 | import org.seasar.doma.Entity; 5 | import org.seasar.doma.GeneratedValue; 6 | import org.seasar.doma.GenerationType; 7 | import org.seasar.doma.Id; 8 | import org.seasar.doma.Table; 9 | import org.seasar.doma.TableGenerator; 10 | 11 | /** 12 | * COMMENT for HOGE 13 | */ 14 | @Entity 15 | @Table(name = "HOGE") 16 | public class Hoge { 17 | 18 | /** COMMENT for ID */ 19 | @Id 20 | @GeneratedValue(strategy = GenerationType.TABLE) 21 | @TableGenerator(pkColumnValue = "HOGE_ID", initialValue = 100, allocationSize = 50) 22 | @Column(name = "ID") 23 | Integer id; 24 | 25 | /** 26 | * Returns the id. 27 | * 28 | * @return the id 29 | */ 30 | public Integer getId() { 31 | return id; 32 | } 33 | 34 | /** 35 | * Sets the id. 36 | * 37 | * @param id the id 38 | */ 39 | public void setId(Integer id) { 40 | this.id = id; 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /codegen/src/test/resources/org/seasar/doma/gradle/codegen/GeneratorTest_Metamodel.txt: -------------------------------------------------------------------------------- 1 | package example.entity; 2 | 3 | import org.seasar.doma.Column; 4 | import org.seasar.doma.Entity; 5 | import org.seasar.doma.Id; 6 | import org.seasar.doma.Metamodel; 7 | import org.seasar.doma.Table; 8 | import org.seasar.doma.Version; 9 | 10 | /** 11 | * COMMENT for HOGE 12 | */ 13 | @Entity(metamodel = @Metamodel) 14 | @Table(name = "HOGE") 15 | public class Hoge { 16 | 17 | /** COMMENT for ID */ 18 | @Id 19 | @Column(name = "ID") 20 | Integer id; 21 | 22 | /** COMMENT for NAME */ 23 | @Column(name = "EMP_NAME") 24 | String empName; 25 | 26 | /** COMMENT for VERSION */ 27 | @Version 28 | @Column(name = "VERSION") 29 | Integer version; 30 | 31 | /** 32 | * Returns the id. 33 | * 34 | * @return the id 35 | */ 36 | public Integer getId() { 37 | return id; 38 | } 39 | 40 | /** 41 | * Sets the id. 42 | * 43 | * @param id the id 44 | */ 45 | public void setId(Integer id) { 46 | this.id = id; 47 | } 48 | 49 | /** 50 | * Returns the empName. 51 | * 52 | * @return the empName 53 | */ 54 | public String getEmpName() { 55 | return empName; 56 | } 57 | 58 | /** 59 | * Sets the empName. 60 | * 61 | * @param empName the empName 62 | */ 63 | public void setEmpName(String empName) { 64 | this.empName = empName; 65 | } 66 | 67 | /** 68 | * Returns the version. 69 | * 70 | * @return the version 71 | */ 72 | public Integer getVersion() { 73 | return version; 74 | } 75 | 76 | /** 77 | * Sets the version. 78 | * 79 | * @param version the version 80 | */ 81 | public void setVersion(Integer version) { 82 | this.version = version; 83 | } 84 | } 85 | -------------------------------------------------------------------------------- /codegen/src/test/resources/org/seasar/doma/gradle/codegen/GeneratorTest_NamingType.txt: -------------------------------------------------------------------------------- 1 | package example.entity; 2 | 3 | import org.seasar.doma.Column; 4 | import org.seasar.doma.Entity; 5 | import org.seasar.doma.Id; 6 | import org.seasar.doma.Table; 7 | import org.seasar.doma.jdbc.entity.NamingType; 8 | 9 | /** 10 | * COMMENT for HOGE 11 | */ 12 | @Entity(naming = NamingType.SNAKE_UPPER_CASE) 13 | @Table(name = "HOGE") 14 | public class Hoge { 15 | 16 | /** COMMENT for ID */ 17 | @Id 18 | @Column(name = "ID") 19 | Integer id; 20 | 21 | /** 22 | * Returns the id. 23 | * 24 | * @return the id 25 | */ 26 | public Integer getId() { 27 | return id; 28 | } 29 | 30 | /** 31 | * Sets the id. 32 | * 33 | * @param id the id 34 | */ 35 | public void setId(Integer id) { 36 | this.id = id; 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /codegen/src/test/resources/org/seasar/doma/gradle/codegen/GeneratorTest_OriginalStates.txt: -------------------------------------------------------------------------------- 1 | package example.entity; 2 | 3 | import org.seasar.doma.Column; 4 | import org.seasar.doma.Entity; 5 | import org.seasar.doma.Id; 6 | import org.seasar.doma.OriginalStates; 7 | import org.seasar.doma.Table; 8 | import org.seasar.doma.Version; 9 | 10 | /** 11 | * COMMENT for HOGE 12 | */ 13 | @Entity 14 | @Table(name = "HOGE") 15 | public class Hoge { 16 | 17 | /** COMMENT for ID */ 18 | @Id 19 | @Column(name = "ID") 20 | Integer id; 21 | 22 | /** COMMENT for NAME */ 23 | @Column(name = "EMP_NAME") 24 | String empName; 25 | 26 | /** COMMENT for VERSION */ 27 | @Version 28 | @Column(name = "VERSION") 29 | Integer version; 30 | 31 | /** */ 32 | @OriginalStates 33 | Hoge original; 34 | 35 | /** 36 | * Returns the id. 37 | * 38 | * @return the id 39 | */ 40 | public Integer getId() { 41 | return id; 42 | } 43 | 44 | /** 45 | * Sets the id. 46 | * 47 | * @param id the id 48 | */ 49 | public void setId(Integer id) { 50 | this.id = id; 51 | } 52 | 53 | /** 54 | * Returns the empName. 55 | * 56 | * @return the empName 57 | */ 58 | public String getEmpName() { 59 | return empName; 60 | } 61 | 62 | /** 63 | * Sets the empName. 64 | * 65 | * @param empName the empName 66 | */ 67 | public void setEmpName(String empName) { 68 | this.empName = empName; 69 | } 70 | 71 | /** 72 | * Returns the version. 73 | * 74 | * @return the version 75 | */ 76 | public Integer getVersion() { 77 | return version; 78 | } 79 | 80 | /** 81 | * Sets the version. 82 | * 83 | * @param version the version 84 | */ 85 | public void setVersion(Integer version) { 86 | this.version = version; 87 | } 88 | } 89 | -------------------------------------------------------------------------------- /codegen/src/test/resources/org/seasar/doma/gradle/codegen/GeneratorTest_SelectById.txt: -------------------------------------------------------------------------------- 1 | select 2 | /*%expand*/* 3 | from 4 | HOGE 5 | where 6 | ID = /* id */1 7 | -------------------------------------------------------------------------------- /codegen/src/test/resources/org/seasar/doma/gradle/codegen/GeneratorTest_SelectByIdAndVersion.txt: -------------------------------------------------------------------------------- 1 | select 2 | /*%expand*/* 3 | from 4 | HOGE 5 | where 6 | ID = /* id */1 7 | and 8 | VERSION = /* version */1 9 | -------------------------------------------------------------------------------- /codegen/src/test/resources/org/seasar/doma/gradle/codegen/GeneratorTest_SelectById_date.txt: -------------------------------------------------------------------------------- 1 | select 2 | /*%expand*/* 3 | from 4 | HOGE 5 | where 6 | ID = /* id */'2010-01-23' 7 | -------------------------------------------------------------------------------- /codegen/src/test/resources/org/seasar/doma/gradle/codegen/GeneratorTest_SelectById_entitySuperclass.txt: -------------------------------------------------------------------------------- 1 | select 2 | /*%expand*/* 3 | from 4 | HOGE 5 | where 6 | ID = /* id */1 7 | -------------------------------------------------------------------------------- /codegen/src/test/resources/org/seasar/doma/gradle/codegen/GeneratorTest_SelectById_number.txt: -------------------------------------------------------------------------------- 1 | select 2 | /*%expand*/* 3 | from 4 | HOGE 5 | where 6 | ID = /* id */1 7 | -------------------------------------------------------------------------------- /codegen/src/test/resources/org/seasar/doma/gradle/codegen/GeneratorTest_SelectById_time.txt: -------------------------------------------------------------------------------- 1 | select 2 | /*%expand*/* 3 | from 4 | HOGE 5 | where 6 | ID = /* id */'12:34:56' 7 | -------------------------------------------------------------------------------- /codegen/src/test/resources/org/seasar/doma/gradle/codegen/GeneratorTest_SelectById_timestamp.txt: -------------------------------------------------------------------------------- 1 | select 2 | /*%expand*/* 3 | from 4 | HOGE 5 | where 6 | ID = /* id */'2010-01-23 12:34:56' 7 | -------------------------------------------------------------------------------- /codegen/src/test/resources/org/seasar/doma/gradle/codegen/GeneratorTest_SelectById_varchar.txt: -------------------------------------------------------------------------------- 1 | select 2 | /*%expand*/* 3 | from 4 | HOGE 5 | where 6 | ID = /* id */'a' 7 | -------------------------------------------------------------------------------- /codegen/src/test/resources/org/seasar/doma/gradle/codegen/GeneratorTest_ShowColumnName_false.txt: -------------------------------------------------------------------------------- 1 | package example.entity; 2 | 3 | import org.seasar.doma.Column; 4 | import org.seasar.doma.Entity; 5 | import org.seasar.doma.Id; 6 | import org.seasar.doma.Table; 7 | 8 | /** 9 | * COMMENT for HOGE 10 | */ 11 | @Entity 12 | @Table(name = "HOGE") 13 | public class Hoge { 14 | 15 | /** COMMENT for ID */ 16 | @Id 17 | Integer id; 18 | 19 | /** COMMENT for EMP_NAME */ 20 | @Column(name = "EMP_NAME") 21 | String empName; 22 | 23 | /** 24 | * Returns the id. 25 | * 26 | * @return the id 27 | */ 28 | public Integer getId() { 29 | return id; 30 | } 31 | 32 | /** 33 | * Sets the id. 34 | * 35 | * @param id the id 36 | */ 37 | public void setId(Integer id) { 38 | this.id = id; 39 | } 40 | 41 | /** 42 | * Returns the empName. 43 | * 44 | * @return the empName 45 | */ 46 | public String getEmpName() { 47 | return empName; 48 | } 49 | 50 | /** 51 | * Sets the empName. 52 | * 53 | * @param empName the empName 54 | */ 55 | public void setEmpName(String empName) { 56 | this.empName = empName; 57 | } 58 | } 59 | -------------------------------------------------------------------------------- /codegen/src/test/resources/org/seasar/doma/gradle/codegen/GeneratorTest_ShowTableName_false.txt: -------------------------------------------------------------------------------- 1 | package example.entity; 2 | 3 | import org.seasar.doma.Column; 4 | import org.seasar.doma.Entity; 5 | import org.seasar.doma.Id; 6 | import org.seasar.doma.Table; 7 | 8 | /** 9 | * COMMENT for HOGE 10 | */ 11 | @Entity 12 | public class Hoge { 13 | 14 | /** COMMENT for ID */ 15 | @Id 16 | @Column(name = "ID") 17 | Integer id; 18 | 19 | /** COMMENT for EMP_NAME */ 20 | @Column(name = "EMP_NAME") 21 | String empName; 22 | 23 | /** 24 | * Returns the id. 25 | * 26 | * @return the id 27 | */ 28 | public Integer getId() { 29 | return id; 30 | } 31 | 32 | /** 33 | * Sets the id. 34 | * 35 | * @param id the id 36 | */ 37 | public void setId(Integer id) { 38 | this.id = id; 39 | } 40 | 41 | /** 42 | * Returns the empName. 43 | * 44 | * @return the empName 45 | */ 46 | public String getEmpName() { 47 | return empName; 48 | } 49 | 50 | /** 51 | * Sets the empName. 52 | * 53 | * @param empName the empName 54 | */ 55 | public void setEmpName(String empName) { 56 | this.empName = empName; 57 | } 58 | } 59 | -------------------------------------------------------------------------------- /codegen/src/test/resources/org/seasar/doma/gradle/codegen/GeneratorTest_SimpleDao.txt: -------------------------------------------------------------------------------- 1 | package example.dao; 2 | 3 | import dao.config.MyConfig; 4 | import example.entity.Hoge; 5 | import org.seasar.doma.Dao; 6 | import org.seasar.doma.Delete; 7 | import org.seasar.doma.Insert; 8 | import org.seasar.doma.Select; 9 | import org.seasar.doma.Update; 10 | 11 | /** 12 | */ 13 | @Dao(config = MyConfig.class) 14 | public interface HogeDao { 15 | 16 | /** 17 | * @param id 18 | * @return the Hoge entity 19 | */ 20 | @Select 21 | Hoge selectById(Integer id); 22 | 23 | /** 24 | * @param id 25 | * @param version 26 | * @return the Hoge entity 27 | */ 28 | @Select(ensureResult = true) 29 | Hoge selectByIdAndVersion(Integer id, Integer version); 30 | 31 | /** 32 | * @param entity 33 | * @return affected rows 34 | */ 35 | @Insert 36 | int insert(Hoge entity); 37 | 38 | /** 39 | * @param entity 40 | * @return affected rows 41 | */ 42 | @Update 43 | int update(Hoge entity); 44 | 45 | /** 46 | * @param entity 47 | * @return affected rows 48 | */ 49 | @Delete 50 | int delete(Hoge entity); 51 | } 52 | -------------------------------------------------------------------------------- /codegen/src/test/resources/org/seasar/doma/gradle/codegen/GeneratorTest_SimpleDao_with_prefix.txt: -------------------------------------------------------------------------------- 1 | package example.dao; 2 | 3 | import dao.config.MyConfig; 4 | import example.entity.THoge; 5 | import org.seasar.doma.Dao; 6 | import org.seasar.doma.Delete; 7 | import org.seasar.doma.Insert; 8 | import org.seasar.doma.Select; 9 | import org.seasar.doma.Update; 10 | 11 | /** 12 | */ 13 | @Dao(config = MyConfig.class) 14 | public interface THogeDao { 15 | 16 | /** 17 | * @param id 18 | * @return the THoge entity 19 | */ 20 | @Select 21 | THoge selectById(Integer id); 22 | 23 | /** 24 | * @param id 25 | * @param version 26 | * @return the THoge entity 27 | */ 28 | @Select(ensureResult = true) 29 | THoge selectByIdAndVersion(Integer id, Integer version); 30 | 31 | /** 32 | * @param entity 33 | * @return affected rows 34 | */ 35 | @Insert 36 | int insert(THoge entity); 37 | 38 | /** 39 | * @param entity 40 | * @return affected rows 41 | */ 42 | @Update 43 | int update(THoge entity); 44 | 45 | /** 46 | * @param entity 47 | * @return affected rows 48 | */ 49 | @Delete 50 | int delete(THoge entity); 51 | } 52 | -------------------------------------------------------------------------------- /codegen/src/test/resources/org/seasar/doma/gradle/codegen/GeneratorTest_SimpleDao_with_prefix_and_suffix.txt: -------------------------------------------------------------------------------- 1 | package example.dao; 2 | 3 | import dao.config.MyConfig; 4 | import example.entity.THogeEntity; 5 | import org.seasar.doma.Dao; 6 | import org.seasar.doma.Delete; 7 | import org.seasar.doma.Insert; 8 | import org.seasar.doma.Select; 9 | import org.seasar.doma.Update; 10 | 11 | /** 12 | */ 13 | @Dao(config = MyConfig.class) 14 | public interface THogeEntityDao { 15 | 16 | /** 17 | * @param id 18 | * @return the THogeEntity entity 19 | */ 20 | @Select 21 | THogeEntity selectById(Integer id); 22 | 23 | /** 24 | * @param id 25 | * @param version 26 | * @return the THogeEntity entity 27 | */ 28 | @Select(ensureResult = true) 29 | THogeEntity selectByIdAndVersion(Integer id, Integer version); 30 | 31 | /** 32 | * @param entity 33 | * @return affected rows 34 | */ 35 | @Insert 36 | int insert(THogeEntity entity); 37 | 38 | /** 39 | * @param entity 40 | * @return affected rows 41 | */ 42 | @Update 43 | int update(THogeEntity entity); 44 | 45 | /** 46 | * @param entity 47 | * @return affected rows 48 | */ 49 | @Delete 50 | int delete(THogeEntity entity); 51 | } 52 | -------------------------------------------------------------------------------- /codegen/src/test/resources/org/seasar/doma/gradle/codegen/GeneratorTest_SimpleDao_with_suffix.txt: -------------------------------------------------------------------------------- 1 | package example.dao; 2 | 3 | import dao.config.MyConfig; 4 | import example.entity.HogeEntity; 5 | import org.seasar.doma.Dao; 6 | import org.seasar.doma.Delete; 7 | import org.seasar.doma.Insert; 8 | import org.seasar.doma.Select; 9 | import org.seasar.doma.Update; 10 | 11 | /** 12 | */ 13 | @Dao(config = MyConfig.class) 14 | public interface HogeEntityDao { 15 | 16 | /** 17 | * @param id 18 | * @return the HogeEntity entity 19 | */ 20 | @Select 21 | HogeEntity selectById(Integer id); 22 | 23 | /** 24 | * @param id 25 | * @param version 26 | * @return the HogeEntity entity 27 | */ 28 | @Select(ensureResult = true) 29 | HogeEntity selectByIdAndVersion(Integer id, Integer version); 30 | 31 | /** 32 | * @param entity 33 | * @return affected rows 34 | */ 35 | @Insert 36 | int insert(HogeEntity entity); 37 | 38 | /** 39 | * @param entity 40 | * @return affected rows 41 | */ 42 | @Update 43 | int update(HogeEntity entity); 44 | 45 | /** 46 | * @param entity 47 | * @return affected rows 48 | */ 49 | @Delete 50 | int delete(HogeEntity entity); 51 | } 52 | -------------------------------------------------------------------------------- /codegen/src/test/resources/org/seasar/doma/gradle/codegen/GeneratorTest_SimpleEntity.txt: -------------------------------------------------------------------------------- 1 | package example.entity; 2 | 3 | import org.seasar.doma.Column; 4 | import org.seasar.doma.Entity; 5 | import org.seasar.doma.Id; 6 | import org.seasar.doma.Table; 7 | import org.seasar.doma.Version; 8 | 9 | /** 10 | * COMMENT for HOGE 11 | */ 12 | @Entity 13 | @Table(name = "HOGE") 14 | public class Hoge { 15 | 16 | /** COMMENT for ID */ 17 | @Id 18 | @Column(name = "ID") 19 | Integer id; 20 | 21 | /** COMMENT for NAME */ 22 | @Column(name = "EMP_NAME") 23 | String empName; 24 | 25 | /** COMMENT for VERSION */ 26 | @Version 27 | @Column(name = "VERSION") 28 | Integer version; 29 | 30 | /** 31 | * Returns the id. 32 | * 33 | * @return the id 34 | */ 35 | public Integer getId() { 36 | return id; 37 | } 38 | 39 | /** 40 | * Sets the id. 41 | * 42 | * @param id the id 43 | */ 44 | public void setId(Integer id) { 45 | this.id = id; 46 | } 47 | 48 | /** 49 | * Returns the empName. 50 | * 51 | * @return the empName 52 | */ 53 | public String getEmpName() { 54 | return empName; 55 | } 56 | 57 | /** 58 | * Sets the empName. 59 | * 60 | * @param empName the empName 61 | */ 62 | public void setEmpName(String empName) { 63 | this.empName = empName; 64 | } 65 | 66 | /** 67 | * Returns the version. 68 | * 69 | * @return the version 70 | */ 71 | public Integer getVersion() { 72 | return version; 73 | } 74 | 75 | /** 76 | * Sets the version. 77 | * 78 | * @param version the version 79 | */ 80 | public void setVersion(Integer version) { 81 | this.version = version; 82 | } 83 | } 84 | -------------------------------------------------------------------------------- /codegen/src/test/resources/org/seasar/doma/gradle/codegen/GeneratorTest_SimpleEntityListener.txt: -------------------------------------------------------------------------------- 1 | package example.entity; 2 | 3 | import org.seasar.doma.jdbc.entity.EntityListener; 4 | import org.seasar.doma.jdbc.entity.PostDeleteContext; 5 | import org.seasar.doma.jdbc.entity.PostInsertContext; 6 | import org.seasar.doma.jdbc.entity.PostUpdateContext; 7 | import org.seasar.doma.jdbc.entity.PreDeleteContext; 8 | import org.seasar.doma.jdbc.entity.PreInsertContext; 9 | import org.seasar.doma.jdbc.entity.PreUpdateContext; 10 | 11 | /** 12 | * 13 | */ 14 | public class HogeListener implements EntityListener { 15 | 16 | @Override 17 | public void preInsert(Hoge entity, PreInsertContext context) { 18 | } 19 | 20 | @Override 21 | public void preUpdate(Hoge entity, PreUpdateContext context) { 22 | } 23 | 24 | @Override 25 | public void preDelete(Hoge entity, PreDeleteContext context) { 26 | } 27 | 28 | @Override 29 | public void postInsert(Hoge entity, PostInsertContext context) { 30 | } 31 | 32 | @Override 33 | public void postUpdate(Hoge entity, PostUpdateContext context) { 34 | } 35 | 36 | @Override 37 | public void postDelete(Hoge entity, PostDeleteContext context) { 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /codegen/src/test/resources/org/seasar/doma/gradle/codegen/GeneratorTest_SimpleEntityListener_with_prefix.txt: -------------------------------------------------------------------------------- 1 | package example.entity; 2 | 3 | import org.seasar.doma.jdbc.entity.EntityListener; 4 | import org.seasar.doma.jdbc.entity.PostDeleteContext; 5 | import org.seasar.doma.jdbc.entity.PostInsertContext; 6 | import org.seasar.doma.jdbc.entity.PostUpdateContext; 7 | import org.seasar.doma.jdbc.entity.PreDeleteContext; 8 | import org.seasar.doma.jdbc.entity.PreInsertContext; 9 | import org.seasar.doma.jdbc.entity.PreUpdateContext; 10 | 11 | /** 12 | * 13 | */ 14 | public class THogeListener implements EntityListener { 15 | 16 | @Override 17 | public void preInsert(THoge entity, PreInsertContext context) { 18 | } 19 | 20 | @Override 21 | public void preUpdate(THoge entity, PreUpdateContext context) { 22 | } 23 | 24 | @Override 25 | public void preDelete(THoge entity, PreDeleteContext context) { 26 | } 27 | 28 | @Override 29 | public void postInsert(THoge entity, PostInsertContext context) { 30 | } 31 | 32 | @Override 33 | public void postUpdate(THoge entity, PostUpdateContext context) { 34 | } 35 | 36 | @Override 37 | public void postDelete(THoge entity, PostDeleteContext context) { 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /codegen/src/test/resources/org/seasar/doma/gradle/codegen/GeneratorTest_SimpleEntityListener_with_prefix_and_suffix.txt: -------------------------------------------------------------------------------- 1 | package example.entity; 2 | 3 | import org.seasar.doma.jdbc.entity.EntityListener; 4 | import org.seasar.doma.jdbc.entity.PostDeleteContext; 5 | import org.seasar.doma.jdbc.entity.PostInsertContext; 6 | import org.seasar.doma.jdbc.entity.PostUpdateContext; 7 | import org.seasar.doma.jdbc.entity.PreDeleteContext; 8 | import org.seasar.doma.jdbc.entity.PreInsertContext; 9 | import org.seasar.doma.jdbc.entity.PreUpdateContext; 10 | 11 | /** 12 | * 13 | */ 14 | public class THogeEntityListener implements EntityListener { 15 | 16 | @Override 17 | public void preInsert(THogeEntity entity, PreInsertContext context) { 18 | } 19 | 20 | @Override 21 | public void preUpdate(THogeEntity entity, PreUpdateContext context) { 22 | } 23 | 24 | @Override 25 | public void preDelete(THogeEntity entity, PreDeleteContext context) { 26 | } 27 | 28 | @Override 29 | public void postInsert(THogeEntity entity, PostInsertContext context) { 30 | } 31 | 32 | @Override 33 | public void postUpdate(THogeEntity entity, PostUpdateContext context) { 34 | } 35 | 36 | @Override 37 | public void postDelete(THogeEntity entity, PostDeleteContext context) { 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /codegen/src/test/resources/org/seasar/doma/gradle/codegen/GeneratorTest_SimpleEntityListener_with_suffix.txt: -------------------------------------------------------------------------------- 1 | package example.entity; 2 | 3 | import org.seasar.doma.jdbc.entity.EntityListener; 4 | import org.seasar.doma.jdbc.entity.PostDeleteContext; 5 | import org.seasar.doma.jdbc.entity.PostInsertContext; 6 | import org.seasar.doma.jdbc.entity.PostUpdateContext; 7 | import org.seasar.doma.jdbc.entity.PreDeleteContext; 8 | import org.seasar.doma.jdbc.entity.PreInsertContext; 9 | import org.seasar.doma.jdbc.entity.PreUpdateContext; 10 | 11 | /** 12 | * 13 | */ 14 | public class HogeEntityListener implements EntityListener { 15 | 16 | @Override 17 | public void preInsert(HogeEntity entity, PreInsertContext context) { 18 | } 19 | 20 | @Override 21 | public void preUpdate(HogeEntity entity, PreUpdateContext context) { 22 | } 23 | 24 | @Override 25 | public void preDelete(HogeEntity entity, PreDeleteContext context) { 26 | } 27 | 28 | @Override 29 | public void postInsert(HogeEntity entity, PostInsertContext context) { 30 | } 31 | 32 | @Override 33 | public void postUpdate(HogeEntity entity, PostUpdateContext context) { 34 | } 35 | 36 | @Override 37 | public void postDelete(HogeEntity entity, PostDeleteContext context) { 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /codegen/src/test/resources/org/seasar/doma/gradle/codegen/GeneratorTest_SimpleEntity_with_prefix.txt: -------------------------------------------------------------------------------- 1 | package example.entity; 2 | 3 | import org.seasar.doma.Column; 4 | import org.seasar.doma.Entity; 5 | import org.seasar.doma.Id; 6 | import org.seasar.doma.Table; 7 | import org.seasar.doma.Version; 8 | 9 | /** 10 | * COMMENT for HOGE 11 | */ 12 | @Entity 13 | @Table(name = "HOGE") 14 | public class THoge { 15 | 16 | /** COMMENT for ID */ 17 | @Id 18 | @Column(name = "ID") 19 | Integer id; 20 | 21 | /** COMMENT for NAME */ 22 | @Column(name = "EMP_NAME") 23 | String empName; 24 | 25 | /** COMMENT for VERSION */ 26 | @Version 27 | @Column(name = "VERSION") 28 | Integer version; 29 | 30 | /** 31 | * Returns the id. 32 | * 33 | * @return the id 34 | */ 35 | public Integer getId() { 36 | return id; 37 | } 38 | 39 | /** 40 | * Sets the id. 41 | * 42 | * @param id the id 43 | */ 44 | public void setId(Integer id) { 45 | this.id = id; 46 | } 47 | 48 | /** 49 | * Returns the empName. 50 | * 51 | * @return the empName 52 | */ 53 | public String getEmpName() { 54 | return empName; 55 | } 56 | 57 | /** 58 | * Sets the empName. 59 | * 60 | * @param empName the empName 61 | */ 62 | public void setEmpName(String empName) { 63 | this.empName = empName; 64 | } 65 | 66 | /** 67 | * Returns the version. 68 | * 69 | * @return the version 70 | */ 71 | public Integer getVersion() { 72 | return version; 73 | } 74 | 75 | /** 76 | * Sets the version. 77 | * 78 | * @param version the version 79 | */ 80 | public void setVersion(Integer version) { 81 | this.version = version; 82 | } 83 | } 84 | -------------------------------------------------------------------------------- /codegen/src/test/resources/org/seasar/doma/gradle/codegen/GeneratorTest_SimpleEntity_with_prefix_and_suffix.txt: -------------------------------------------------------------------------------- 1 | package example.entity; 2 | 3 | import org.seasar.doma.Column; 4 | import org.seasar.doma.Entity; 5 | import org.seasar.doma.Id; 6 | import org.seasar.doma.Table; 7 | import org.seasar.doma.Version; 8 | 9 | /** 10 | * COMMENT for HOGE 11 | */ 12 | @Entity 13 | @Table(name = "HOGE") 14 | public class THogeEntity { 15 | 16 | /** COMMENT for ID */ 17 | @Id 18 | @Column(name = "ID") 19 | Integer id; 20 | 21 | /** COMMENT for NAME */ 22 | @Column(name = "EMP_NAME") 23 | String empName; 24 | 25 | /** COMMENT for VERSION */ 26 | @Version 27 | @Column(name = "VERSION") 28 | Integer version; 29 | 30 | /** 31 | * Returns the id. 32 | * 33 | * @return the id 34 | */ 35 | public Integer getId() { 36 | return id; 37 | } 38 | 39 | /** 40 | * Sets the id. 41 | * 42 | * @param id the id 43 | */ 44 | public void setId(Integer id) { 45 | this.id = id; 46 | } 47 | 48 | /** 49 | * Returns the empName. 50 | * 51 | * @return the empName 52 | */ 53 | public String getEmpName() { 54 | return empName; 55 | } 56 | 57 | /** 58 | * Sets the empName. 59 | * 60 | * @param empName the empName 61 | */ 62 | public void setEmpName(String empName) { 63 | this.empName = empName; 64 | } 65 | 66 | /** 67 | * Returns the version. 68 | * 69 | * @return the version 70 | */ 71 | public Integer getVersion() { 72 | return version; 73 | } 74 | 75 | /** 76 | * Sets the version. 77 | * 78 | * @param version the version 79 | */ 80 | public void setVersion(Integer version) { 81 | this.version = version; 82 | } 83 | } 84 | -------------------------------------------------------------------------------- /codegen/src/test/resources/org/seasar/doma/gradle/codegen/GeneratorTest_SimpleEntity_with_suffix.txt: -------------------------------------------------------------------------------- 1 | package example.entity; 2 | 3 | import org.seasar.doma.Column; 4 | import org.seasar.doma.Entity; 5 | import org.seasar.doma.Id; 6 | import org.seasar.doma.Table; 7 | import org.seasar.doma.Version; 8 | 9 | /** 10 | * COMMENT for HOGE 11 | */ 12 | @Entity 13 | @Table(name = "HOGE") 14 | public class HogeEntity { 15 | 16 | /** COMMENT for ID */ 17 | @Id 18 | @Column(name = "ID") 19 | Integer id; 20 | 21 | /** COMMENT for NAME */ 22 | @Column(name = "EMP_NAME") 23 | String empName; 24 | 25 | /** COMMENT for VERSION */ 26 | @Version 27 | @Column(name = "VERSION") 28 | Integer version; 29 | 30 | /** 31 | * Returns the id. 32 | * 33 | * @return the id 34 | */ 35 | public Integer getId() { 36 | return id; 37 | } 38 | 39 | /** 40 | * Sets the id. 41 | * 42 | * @param id the id 43 | */ 44 | public void setId(Integer id) { 45 | this.id = id; 46 | } 47 | 48 | /** 49 | * Returns the empName. 50 | * 51 | * @return the empName 52 | */ 53 | public String getEmpName() { 54 | return empName; 55 | } 56 | 57 | /** 58 | * Sets the empName. 59 | * 60 | * @param empName the empName 61 | */ 62 | public void setEmpName(String empName) { 63 | this.empName = empName; 64 | } 65 | 66 | /** 67 | * Returns the version. 68 | * 69 | * @return the version 70 | */ 71 | public Integer getVersion() { 72 | return version; 73 | } 74 | 75 | /** 76 | * Sets the version. 77 | * 78 | * @param version the version 79 | */ 80 | public void setVersion(Integer version) { 81 | this.version = version; 82 | } 83 | } 84 | -------------------------------------------------------------------------------- /codegen/src/test/resources/org/seasar/doma/gradle/codegen/GeneratorTest_SimpleMappedSuperclass.txt: -------------------------------------------------------------------------------- 1 | package example.entity; 2 | 3 | 4 | /** 5 | */ 6 | public abstract class AbstractHoge { 7 | } 8 | -------------------------------------------------------------------------------- /codegen/src/test/resources/org/seasar/doma/gradle/codegen/GeneratorTest_UseEntityListener.txt: -------------------------------------------------------------------------------- 1 | package example.entity; 2 | 3 | import org.seasar.doma.Column; 4 | import org.seasar.doma.Entity; 5 | import org.seasar.doma.Id; 6 | import org.seasar.doma.Table; 7 | 8 | /** 9 | * COMMENT for HOGE 10 | */ 11 | @Entity(listener = HogeListener.class) 12 | @Table(name = "HOGE") 13 | public class Hoge { 14 | 15 | /** COMMENT for ID */ 16 | @Id 17 | @Column(name = "ID") 18 | Integer id; 19 | 20 | /** 21 | * Returns the id. 22 | * 23 | * @return the id 24 | */ 25 | public Integer getId() { 26 | return id; 27 | } 28 | 29 | /** 30 | * Sets the id. 31 | * 32 | * @param id the id 33 | */ 34 | public void setId(Integer id) { 35 | this.id = id; 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /codegen/src/test/resources/org/seasar/doma/gradle/codegen/KotlinGeneratorTest_CompositeId.txt: -------------------------------------------------------------------------------- 1 | package example.entity 2 | 3 | import org.seasar.doma.Column 4 | import org.seasar.doma.Entity 5 | import org.seasar.doma.Id 6 | import org.seasar.doma.Table 7 | 8 | /** 9 | * COMMENT for HOGE 10 | */ 11 | @Entity 12 | @Table(name = "HOGE") 13 | class Hoge { 14 | 15 | /** COMMENT for ID */ 16 | @Id 17 | @Column(name = "ID1") 18 | var id1: Int = -1 19 | 20 | /** COMMENT for ID */ 21 | @Id 22 | @Column(name = "ID2") 23 | var id2: Int = -1 24 | } 25 | -------------------------------------------------------------------------------- /codegen/src/test/resources/org/seasar/doma/gradle/codegen/KotlinGeneratorTest_DefaultConfigDao.txt: -------------------------------------------------------------------------------- 1 | package example.dao 2 | 3 | import example.entity.Hoge 4 | import org.seasar.doma.Dao 5 | import org.seasar.doma.Delete 6 | import org.seasar.doma.Insert 7 | import org.seasar.doma.Select 8 | import org.seasar.doma.Update 9 | 10 | /** 11 | */ 12 | @Dao 13 | interface HogeDao { 14 | 15 | /** 16 | * @param id 17 | * @return the Hoge entity 18 | */ 19 | @Select 20 | fun selectById(id: Int): Hoge 21 | 22 | /** 23 | * @param id 24 | * @param version 25 | * @return the Hoge entity 26 | */ 27 | @Select(ensureResult = true) 28 | fun selectByIdAndVersion(id: Int, version: Int): Hoge 29 | 30 | /** 31 | * @param entity 32 | * @return affected rows 33 | */ 34 | @Insert 35 | fun insert(entity: Hoge): Int 36 | 37 | /** 38 | * @param entity 39 | * @return affected rows 40 | */ 41 | @Update 42 | fun update(entity: Hoge): Int 43 | 44 | /** 45 | * @param entity 46 | * @return affected rows 47 | */ 48 | @Delete 49 | fun delete(entity: Hoge): Int 50 | } 51 | -------------------------------------------------------------------------------- /codegen/src/test/resources/org/seasar/doma/gradle/codegen/KotlinGeneratorTest_EntityPropertyClassNameResolver.txt: -------------------------------------------------------------------------------- 1 | package example.entity 2 | 3 | import example.domain.Name 4 | import example.domain.XValue 5 | import org.seasar.doma.Column 6 | import org.seasar.doma.Entity 7 | import org.seasar.doma.Id 8 | import org.seasar.doma.Table 9 | 10 | /** 11 | * COMMENT for HOGE 12 | */ 13 | @Entity 14 | @Table(name = "HOGE") 15 | class Hoge { 16 | 17 | /** COMMENT for ID */ 18 | @Id 19 | @Column(name = "ID") 20 | var id: Int = -1 21 | 22 | /** COMMENT for NAME */ 23 | @Column(name = "EMP_NAME") 24 | var empName: Name? = null 25 | 26 | /** COMMENT for XVAL */ 27 | @Column(name = "XVAL") 28 | var xval: XValue? = null 29 | } 30 | -------------------------------------------------------------------------------- /codegen/src/test/resources/org/seasar/doma/gradle/codegen/KotlinGeneratorTest_EntitySuperclass.txt: -------------------------------------------------------------------------------- 1 | package example.entity 2 | 3 | import example.hoge.CommonEntity 4 | import org.seasar.doma.Column 5 | import org.seasar.doma.Entity 6 | import org.seasar.doma.Id 7 | import org.seasar.doma.Table 8 | 9 | /** 10 | * COMMENT for HOGE 11 | */ 12 | @Entity 13 | @Table(name = "HOGE") 14 | class Hoge : CommonEntity() { 15 | 16 | /** COMMENT for ID */ 17 | @Id 18 | @Column(name = "ID") 19 | var id: Int = -1 20 | } 21 | -------------------------------------------------------------------------------- /codegen/src/test/resources/org/seasar/doma/gradle/codegen/KotlinGeneratorTest_ExtendingEntityListener.txt: -------------------------------------------------------------------------------- 1 | package example.entity 2 | 3 | import aaa.FooListener 4 | 5 | /** 6 | * 7 | */ 8 | class HogeListener : FooListener { 9 | } 10 | -------------------------------------------------------------------------------- /codegen/src/test/resources/org/seasar/doma/gradle/codegen/KotlinGeneratorTest_ExtendingMappedSuperclass.txt: -------------------------------------------------------------------------------- 1 | package example.entity 2 | 3 | import example.hoge.CommonEntity 4 | 5 | /** 6 | */ 7 | abstract class AbstractHoge : CommonEntity { 8 | } 9 | -------------------------------------------------------------------------------- /codegen/src/test/resources/org/seasar/doma/gradle/codegen/KotlinGeneratorTest_GenerationType_IDENTITY.txt: -------------------------------------------------------------------------------- 1 | package example.entity 2 | 3 | import org.seasar.doma.Column 4 | import org.seasar.doma.Entity 5 | import org.seasar.doma.GeneratedValue 6 | import org.seasar.doma.GenerationType 7 | import org.seasar.doma.Id 8 | import org.seasar.doma.Table 9 | 10 | /** 11 | * COMMENT for HOGE 12 | */ 13 | @Entity 14 | @Table(name = "HOGE") 15 | class Hoge { 16 | 17 | /** COMMENT for ID */ 18 | @Id 19 | @GeneratedValue(strategy = GenerationType.IDENTITY) 20 | @Column(name = "ID") 21 | var id: Int = -1 22 | } 23 | -------------------------------------------------------------------------------- /codegen/src/test/resources/org/seasar/doma/gradle/codegen/KotlinGeneratorTest_GenerationType_SEQUENCE.txt: -------------------------------------------------------------------------------- 1 | package example.entity 2 | 3 | import org.seasar.doma.Column 4 | import org.seasar.doma.Entity 5 | import org.seasar.doma.GeneratedValue 6 | import org.seasar.doma.GenerationType 7 | import org.seasar.doma.Id 8 | import org.seasar.doma.SequenceGenerator 9 | import org.seasar.doma.Table 10 | 11 | /** 12 | * COMMENT for HOGE 13 | */ 14 | @Entity 15 | @Table(name = "HOGE") 16 | class Hoge { 17 | 18 | /** COMMENT for ID */ 19 | @Id 20 | @GeneratedValue(strategy = GenerationType.SEQUENCE) 21 | @SequenceGenerator(sequence = "HOGE_ID", initialValue = 100, allocationSize = 50) 22 | @Column(name = "ID") 23 | var id: Int = -1 24 | } 25 | -------------------------------------------------------------------------------- /codegen/src/test/resources/org/seasar/doma/gradle/codegen/KotlinGeneratorTest_GenerationType_TABLE.txt: -------------------------------------------------------------------------------- 1 | package example.entity 2 | 3 | import org.seasar.doma.Column 4 | import org.seasar.doma.Entity 5 | import org.seasar.doma.GeneratedValue 6 | import org.seasar.doma.GenerationType 7 | import org.seasar.doma.Id 8 | import org.seasar.doma.Table 9 | import org.seasar.doma.TableGenerator 10 | 11 | /** 12 | * COMMENT for HOGE 13 | */ 14 | @Entity 15 | @Table(name = "HOGE") 16 | class Hoge { 17 | 18 | /** COMMENT for ID */ 19 | @Id 20 | @GeneratedValue(strategy = GenerationType.TABLE) 21 | @TableGenerator(pkColumnValue = "HOGE_ID", initialValue = 100, allocationSize = 50) 22 | @Column(name = "ID") 23 | var id: Int = -1 24 | } 25 | -------------------------------------------------------------------------------- /codegen/src/test/resources/org/seasar/doma/gradle/codegen/KotlinGeneratorTest_Metamodel.txt: -------------------------------------------------------------------------------- 1 | package example.entity 2 | 3 | import org.seasar.doma.Column 4 | import org.seasar.doma.Entity 5 | import org.seasar.doma.Id 6 | import org.seasar.doma.Metamodel 7 | import org.seasar.doma.Table 8 | import org.seasar.doma.Version 9 | 10 | /** 11 | * COMMENT for HOGE 12 | */ 13 | @Entity(metamodel = Metamodel()) 14 | @Table(name = "HOGE") 15 | class Hoge { 16 | 17 | /** COMMENT for ID */ 18 | @Id 19 | @Column(name = "ID") 20 | var id: Int = -1 21 | 22 | /** COMMENT for NAME */ 23 | @Column(name = "EMP_NAME") 24 | var empName: String? = null 25 | 26 | /** COMMENT for VERSION */ 27 | @Version 28 | @Column(name = "VERSION") 29 | var version: Int = -1 30 | } 31 | -------------------------------------------------------------------------------- /codegen/src/test/resources/org/seasar/doma/gradle/codegen/KotlinGeneratorTest_NamingType.txt: -------------------------------------------------------------------------------- 1 | package example.entity 2 | 3 | import org.seasar.doma.Column 4 | import org.seasar.doma.Entity 5 | import org.seasar.doma.Id 6 | import org.seasar.doma.Table 7 | import org.seasar.doma.jdbc.entity.NamingType 8 | 9 | /** 10 | * COMMENT for HOGE 11 | */ 12 | @Entity(naming = NamingType.SNAKE_UPPER_CASE) 13 | @Table(name = "HOGE") 14 | class Hoge { 15 | 16 | /** COMMENT for ID */ 17 | @Id 18 | @Column(name = "ID") 19 | var id: Int = -1 20 | } 21 | -------------------------------------------------------------------------------- /codegen/src/test/resources/org/seasar/doma/gradle/codegen/KotlinGeneratorTest_OriginalStates.txt: -------------------------------------------------------------------------------- 1 | package example.entity 2 | 3 | import org.seasar.doma.Column 4 | import org.seasar.doma.Entity 5 | import org.seasar.doma.Id 6 | import org.seasar.doma.OriginalStates 7 | import org.seasar.doma.Table 8 | import org.seasar.doma.Version 9 | 10 | /** 11 | * COMMENT for HOGE 12 | */ 13 | @Entity 14 | @Table(name = "HOGE") 15 | class Hoge { 16 | 17 | /** COMMENT for ID */ 18 | @Id 19 | @Column(name = "ID") 20 | var id: Int = -1 21 | 22 | /** COMMENT for NAME */ 23 | @Column(name = "EMP_NAME") 24 | var empName: String? = null 25 | 26 | /** COMMENT for VERSION */ 27 | @Version 28 | @Column(name = "VERSION") 29 | var version: Int = -1 30 | 31 | /** */ 32 | @OriginalStates 33 | var original: Hoge 34 | } 35 | -------------------------------------------------------------------------------- /codegen/src/test/resources/org/seasar/doma/gradle/codegen/KotlinGeneratorTest_SelectById.txt: -------------------------------------------------------------------------------- 1 | select 2 | /*%expand*/* 3 | from 4 | HOGE 5 | where 6 | ID = /* id */1 7 | -------------------------------------------------------------------------------- /codegen/src/test/resources/org/seasar/doma/gradle/codegen/KotlinGeneratorTest_ShowColumnName_false.txt: -------------------------------------------------------------------------------- 1 | package example.entity 2 | 3 | import org.seasar.doma.Column 4 | import org.seasar.doma.Entity 5 | import org.seasar.doma.Id 6 | import org.seasar.doma.Table 7 | 8 | /** 9 | * COMMENT for HOGE 10 | */ 11 | @Entity 12 | @Table(name = "HOGE") 13 | class Hoge { 14 | 15 | /** COMMENT for ID */ 16 | @Id 17 | var id: Int = -1 18 | 19 | /** COMMENT for EMP_NAME */ 20 | @Column(name = "EMP_NAME") 21 | var empName: String? = null 22 | } 23 | -------------------------------------------------------------------------------- /codegen/src/test/resources/org/seasar/doma/gradle/codegen/KotlinGeneratorTest_ShowTableName_false.txt: -------------------------------------------------------------------------------- 1 | package example.entity 2 | 3 | import org.seasar.doma.Column 4 | import org.seasar.doma.Entity 5 | import org.seasar.doma.Id 6 | import org.seasar.doma.Table 7 | 8 | /** 9 | * COMMENT for HOGE 10 | */ 11 | @Entity 12 | class Hoge { 13 | 14 | /** COMMENT for ID */ 15 | @Id 16 | @Column(name = "ID") 17 | var id: Int = -1 18 | 19 | /** COMMENT for EMP_NAME */ 20 | @Column(name = "EMP_NAME") 21 | var empName: String? = null 22 | } 23 | -------------------------------------------------------------------------------- /codegen/src/test/resources/org/seasar/doma/gradle/codegen/KotlinGeneratorTest_SimpleDao.txt: -------------------------------------------------------------------------------- 1 | package example.dao 2 | 3 | import dao.config.MyConfig 4 | import example.entity.Hoge 5 | import org.seasar.doma.Dao 6 | import org.seasar.doma.Delete 7 | import org.seasar.doma.Insert 8 | import org.seasar.doma.Select 9 | import org.seasar.doma.Update 10 | 11 | /** 12 | */ 13 | @Dao(config = MyConfig.class) 14 | interface HogeDao { 15 | 16 | /** 17 | * @param id 18 | * @return the Hoge entity 19 | */ 20 | @Select 21 | fun selectById(id: Int): Hoge 22 | 23 | /** 24 | * @param id 25 | * @param version 26 | * @return the Hoge entity 27 | */ 28 | @Select(ensureResult = true) 29 | fun selectByIdAndVersion(id: Int, version: Int): Hoge 30 | 31 | /** 32 | * @param entity 33 | * @return affected rows 34 | */ 35 | @Insert 36 | fun insert(entity: Hoge): Int 37 | 38 | /** 39 | * @param entity 40 | * @return affected rows 41 | */ 42 | @Update 43 | fun update(entity: Hoge): Int 44 | 45 | /** 46 | * @param entity 47 | * @return affected rows 48 | */ 49 | @Delete 50 | fun delete(entity: Hoge): Int 51 | } 52 | -------------------------------------------------------------------------------- /codegen/src/test/resources/org/seasar/doma/gradle/codegen/KotlinGeneratorTest_SimpleDao_with_prefix.txt: -------------------------------------------------------------------------------- 1 | package example.dao 2 | 3 | import dao.config.MyConfig 4 | import example.entity.THoge 5 | import org.seasar.doma.Dao 6 | import org.seasar.doma.Delete 7 | import org.seasar.doma.Insert 8 | import org.seasar.doma.Select 9 | import org.seasar.doma.Update 10 | 11 | /** 12 | */ 13 | @Dao(config = MyConfig.class) 14 | interface THogeDao { 15 | 16 | /** 17 | * @param id 18 | * @return the THoge entity 19 | */ 20 | @Select 21 | fun selectById(id: Int): THoge 22 | 23 | /** 24 | * @param id 25 | * @param version 26 | * @return the THoge entity 27 | */ 28 | @Select(ensureResult = true) 29 | fun selectByIdAndVersion(id: Int, version: Int): THoge 30 | 31 | /** 32 | * @param entity 33 | * @return affected rows 34 | */ 35 | @Insert 36 | fun insert(entity: THoge): Int 37 | 38 | /** 39 | * @param entity 40 | * @return affected rows 41 | */ 42 | @Update 43 | fun update(entity: THoge): Int 44 | 45 | /** 46 | * @param entity 47 | * @return affected rows 48 | */ 49 | @Delete 50 | fun delete(entity: THoge): Int 51 | } 52 | -------------------------------------------------------------------------------- /codegen/src/test/resources/org/seasar/doma/gradle/codegen/KotlinGeneratorTest_SimpleDao_with_prefix_and_suffix.txt: -------------------------------------------------------------------------------- 1 | package example.dao 2 | 3 | import dao.config.MyConfig 4 | import example.entity.THogeEntity 5 | import org.seasar.doma.Dao 6 | import org.seasar.doma.Delete 7 | import org.seasar.doma.Insert 8 | import org.seasar.doma.Select 9 | import org.seasar.doma.Update 10 | 11 | /** 12 | */ 13 | @Dao(config = MyConfig.class) 14 | interface THogeEntityDao { 15 | 16 | /** 17 | * @param id 18 | * @return the THogeEntity entity 19 | */ 20 | @Select 21 | fun selectById(id: Int): THogeEntity 22 | 23 | /** 24 | * @param id 25 | * @param version 26 | * @return the THogeEntity entity 27 | */ 28 | @Select(ensureResult = true) 29 | fun selectByIdAndVersion(id: Int, version: Int): THogeEntity 30 | 31 | /** 32 | * @param entity 33 | * @return affected rows 34 | */ 35 | @Insert 36 | fun insert(entity: THogeEntity): Int 37 | 38 | /** 39 | * @param entity 40 | * @return affected rows 41 | */ 42 | @Update 43 | fun update(entity: THogeEntity): Int 44 | 45 | /** 46 | * @param entity 47 | * @return affected rows 48 | */ 49 | @Delete 50 | fun delete(entity: THogeEntity): Int 51 | } 52 | -------------------------------------------------------------------------------- /codegen/src/test/resources/org/seasar/doma/gradle/codegen/KotlinGeneratorTest_SimpleDao_with_suffix.txt: -------------------------------------------------------------------------------- 1 | package example.dao 2 | 3 | import dao.config.MyConfig 4 | import example.entity.HogeEntity 5 | import org.seasar.doma.Dao 6 | import org.seasar.doma.Delete 7 | import org.seasar.doma.Insert 8 | import org.seasar.doma.Select 9 | import org.seasar.doma.Update 10 | 11 | /** 12 | */ 13 | @Dao(config = MyConfig.class) 14 | interface HogeEntityDao { 15 | 16 | /** 17 | * @param id 18 | * @return the HogeEntity entity 19 | */ 20 | @Select 21 | fun selectById(id: Int): HogeEntity 22 | 23 | /** 24 | * @param id 25 | * @param version 26 | * @return the HogeEntity entity 27 | */ 28 | @Select(ensureResult = true) 29 | fun selectByIdAndVersion(id: Int, version: Int): HogeEntity 30 | 31 | /** 32 | * @param entity 33 | * @return affected rows 34 | */ 35 | @Insert 36 | fun insert(entity: HogeEntity): Int 37 | 38 | /** 39 | * @param entity 40 | * @return affected rows 41 | */ 42 | @Update 43 | fun update(entity: HogeEntity): Int 44 | 45 | /** 46 | * @param entity 47 | * @return affected rows 48 | */ 49 | @Delete 50 | fun delete(entity: HogeEntity): Int 51 | } 52 | -------------------------------------------------------------------------------- /codegen/src/test/resources/org/seasar/doma/gradle/codegen/KotlinGeneratorTest_SimpleEntity.txt: -------------------------------------------------------------------------------- 1 | package example.entity 2 | 3 | import org.seasar.doma.Column 4 | import org.seasar.doma.Entity 5 | import org.seasar.doma.Id 6 | import org.seasar.doma.Table 7 | import org.seasar.doma.Version 8 | 9 | /** 10 | * COMMENT for HOGE 11 | */ 12 | @Entity 13 | @Table(name = "HOGE") 14 | class Hoge { 15 | 16 | /** COMMENT for ID */ 17 | @Id 18 | @Column(name = "ID") 19 | var id: Int = -1 20 | 21 | /** COMMENT for NAME */ 22 | @Column(name = "EMP_NAME") 23 | var empName: String? = null 24 | 25 | /** COMMENT for VERSION */ 26 | @Version 27 | @Column(name = "VERSION") 28 | var version: Int = -1 29 | } 30 | -------------------------------------------------------------------------------- /codegen/src/test/resources/org/seasar/doma/gradle/codegen/KotlinGeneratorTest_SimpleEntityListener.txt: -------------------------------------------------------------------------------- 1 | package example.entity 2 | 3 | import org.seasar.doma.jdbc.entity.EntityListener 4 | import org.seasar.doma.jdbc.entity.PostDeleteContext 5 | import org.seasar.doma.jdbc.entity.PostInsertContext 6 | import org.seasar.doma.jdbc.entity.PostUpdateContext 7 | import org.seasar.doma.jdbc.entity.PreDeleteContext 8 | import org.seasar.doma.jdbc.entity.PreInsertContext 9 | import org.seasar.doma.jdbc.entity.PreUpdateContext 10 | 11 | /** 12 | * 13 | */ 14 | class HogeListener : EntityListener { 15 | 16 | override fun preInsert(entity: Hoge, context: PreInsertContext) { 17 | } 18 | 19 | override fun preUpdate(entity: Hoge, context: PreUpdateContext) { 20 | } 21 | 22 | override fun preDelete(entity: Hoge, context: PreDeleteContext) { 23 | } 24 | 25 | override fun postInsert(entity: Hoge, context: PostInsertContext) { 26 | } 27 | 28 | override fun postUpdate(entity: Hoge, context: PostUpdateContext) { 29 | } 30 | 31 | override fun postDelete(entity: Hoge, context: PostDeleteContext) { 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /codegen/src/test/resources/org/seasar/doma/gradle/codegen/KotlinGeneratorTest_SimpleEntityListener_with_prefix.txt: -------------------------------------------------------------------------------- 1 | package example.entity 2 | 3 | import org.seasar.doma.jdbc.entity.EntityListener 4 | import org.seasar.doma.jdbc.entity.PostDeleteContext 5 | import org.seasar.doma.jdbc.entity.PostInsertContext 6 | import org.seasar.doma.jdbc.entity.PostUpdateContext 7 | import org.seasar.doma.jdbc.entity.PreDeleteContext 8 | import org.seasar.doma.jdbc.entity.PreInsertContext 9 | import org.seasar.doma.jdbc.entity.PreUpdateContext 10 | 11 | /** 12 | * 13 | */ 14 | class THogeListener : EntityListener { 15 | 16 | override fun preInsert(entity: THoge, context: PreInsertContext) { 17 | } 18 | 19 | override fun preUpdate(entity: THoge, context: PreUpdateContext) { 20 | } 21 | 22 | override fun preDelete(entity: THoge, context: PreDeleteContext) { 23 | } 24 | 25 | override fun postInsert(entity: THoge, context: PostInsertContext) { 26 | } 27 | 28 | override fun postUpdate(entity: THoge, context: PostUpdateContext) { 29 | } 30 | 31 | override fun postDelete(entity: THoge, context: PostDeleteContext) { 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /codegen/src/test/resources/org/seasar/doma/gradle/codegen/KotlinGeneratorTest_SimpleEntityListener_with_prefix_and_suffix.txt: -------------------------------------------------------------------------------- 1 | package example.entity 2 | 3 | import org.seasar.doma.jdbc.entity.EntityListener 4 | import org.seasar.doma.jdbc.entity.PostDeleteContext 5 | import org.seasar.doma.jdbc.entity.PostInsertContext 6 | import org.seasar.doma.jdbc.entity.PostUpdateContext 7 | import org.seasar.doma.jdbc.entity.PreDeleteContext 8 | import org.seasar.doma.jdbc.entity.PreInsertContext 9 | import org.seasar.doma.jdbc.entity.PreUpdateContext 10 | 11 | /** 12 | * 13 | */ 14 | class THogeEntityListener : EntityListener { 15 | 16 | override fun preInsert(entity: THogeEntity, context: PreInsertContext) { 17 | } 18 | 19 | override fun preUpdate(entity: THogeEntity, context: PreUpdateContext) { 20 | } 21 | 22 | override fun preDelete(entity: THogeEntity, context: PreDeleteContext) { 23 | } 24 | 25 | override fun postInsert(entity: THogeEntity, context: PostInsertContext) { 26 | } 27 | 28 | override fun postUpdate(entity: THogeEntity, context: PostUpdateContext) { 29 | } 30 | 31 | override fun postDelete(entity: THogeEntity, context: PostDeleteContext) { 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /codegen/src/test/resources/org/seasar/doma/gradle/codegen/KotlinGeneratorTest_SimpleEntityListener_with_suffix.txt: -------------------------------------------------------------------------------- 1 | package example.entity 2 | 3 | import org.seasar.doma.jdbc.entity.EntityListener 4 | import org.seasar.doma.jdbc.entity.PostDeleteContext 5 | import org.seasar.doma.jdbc.entity.PostInsertContext 6 | import org.seasar.doma.jdbc.entity.PostUpdateContext 7 | import org.seasar.doma.jdbc.entity.PreDeleteContext 8 | import org.seasar.doma.jdbc.entity.PreInsertContext 9 | import org.seasar.doma.jdbc.entity.PreUpdateContext 10 | 11 | /** 12 | * 13 | */ 14 | class HogeEntityListener : EntityListener { 15 | 16 | override fun preInsert(entity: HogeEntity, context: PreInsertContext) { 17 | } 18 | 19 | override fun preUpdate(entity: HogeEntity, context: PreUpdateContext) { 20 | } 21 | 22 | override fun preDelete(entity: HogeEntity, context: PreDeleteContext) { 23 | } 24 | 25 | override fun postInsert(entity: HogeEntity, context: PostInsertContext) { 26 | } 27 | 28 | override fun postUpdate(entity: HogeEntity, context: PostUpdateContext) { 29 | } 30 | 31 | override fun postDelete(entity: HogeEntity, context: PostDeleteContext) { 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /codegen/src/test/resources/org/seasar/doma/gradle/codegen/KotlinGeneratorTest_SimpleEntity_with_prefix.txt: -------------------------------------------------------------------------------- 1 | package example.entity 2 | 3 | import org.seasar.doma.Column 4 | import org.seasar.doma.Entity 5 | import org.seasar.doma.Id 6 | import org.seasar.doma.Table 7 | import org.seasar.doma.Version 8 | 9 | /** 10 | * COMMENT for HOGE 11 | */ 12 | @Entity 13 | @Table(name = "HOGE") 14 | class THoge { 15 | 16 | /** COMMENT for ID */ 17 | @Id 18 | @Column(name = "ID") 19 | var id: Int = -1 20 | 21 | /** COMMENT for NAME */ 22 | @Column(name = "EMP_NAME") 23 | var empName: String? = null 24 | 25 | /** COMMENT for VERSION */ 26 | @Version 27 | @Column(name = "VERSION") 28 | var version: Int = -1 29 | } 30 | -------------------------------------------------------------------------------- /codegen/src/test/resources/org/seasar/doma/gradle/codegen/KotlinGeneratorTest_SimpleEntity_with_prefix_and_suffix.txt: -------------------------------------------------------------------------------- 1 | package example.entity 2 | 3 | import org.seasar.doma.Column 4 | import org.seasar.doma.Entity 5 | import org.seasar.doma.Id 6 | import org.seasar.doma.Table 7 | import org.seasar.doma.Version 8 | 9 | /** 10 | * COMMENT for HOGE 11 | */ 12 | @Entity 13 | @Table(name = "HOGE") 14 | class THogeEntity { 15 | 16 | /** COMMENT for ID */ 17 | @Id 18 | @Column(name = "ID") 19 | var id: Int = -1 20 | 21 | /** COMMENT for NAME */ 22 | @Column(name = "EMP_NAME") 23 | var empName: String? = null 24 | 25 | /** COMMENT for VERSION */ 26 | @Version 27 | @Column(name = "VERSION") 28 | var version: Int = -1 29 | } 30 | -------------------------------------------------------------------------------- /codegen/src/test/resources/org/seasar/doma/gradle/codegen/KotlinGeneratorTest_SimpleEntity_with_suffix.txt: -------------------------------------------------------------------------------- 1 | package example.entity 2 | 3 | import org.seasar.doma.Column 4 | import org.seasar.doma.Entity 5 | import org.seasar.doma.Id 6 | import org.seasar.doma.Table 7 | import org.seasar.doma.Version 8 | 9 | /** 10 | * COMMENT for HOGE 11 | */ 12 | @Entity 13 | @Table(name = "HOGE") 14 | class HogeEntity { 15 | 16 | /** COMMENT for ID */ 17 | @Id 18 | @Column(name = "ID") 19 | var id: Int = -1 20 | 21 | /** COMMENT for NAME */ 22 | @Column(name = "EMP_NAME") 23 | var empName: String? = null 24 | 25 | /** COMMENT for VERSION */ 26 | @Version 27 | @Column(name = "VERSION") 28 | var version: Int = -1 29 | } 30 | -------------------------------------------------------------------------------- /codegen/src/test/resources/org/seasar/doma/gradle/codegen/KotlinGeneratorTest_SimpleMappedSuperclass.txt: -------------------------------------------------------------------------------- 1 | package example.entity 2 | 3 | 4 | /** 5 | */ 6 | abstract class AbstractHoge { 7 | } 8 | -------------------------------------------------------------------------------- /codegen/src/test/resources/org/seasar/doma/gradle/codegen/KotlinGeneratorTest_SimpleSqlTest.txt: -------------------------------------------------------------------------------- 1 | package example.dao 2 | 3 | import java.sql.Connection 4 | import java.sql.Driver 5 | import java.sql.DriverManager 6 | import java.sql.Statement 7 | 8 | import org.junit.jupiter.api.BeforeEach 9 | import org.junit.jupiter.api.Test 10 | import org.junit.jupiter.api.TestInfo 11 | 12 | import org.seasar.doma.jdbc.NoCacheSqlFileRepository 13 | import org.seasar.doma.jdbc.SqlFile 14 | import org.seasar.doma.jdbc.SqlFileRepository 15 | import org.seasar.doma.jdbc.dialect.Dialect 16 | 17 | /** 18 | * 19 | */ 20 | class SqlTest { 21 | 22 | lateinit var repository: SqlFileRepository 23 | lateinit var dialect: Dialect 24 | lateinit var driver: Driver 25 | lateinit var url: String 26 | lateinit var user: String 27 | lateinit var password: String 28 | 29 | @BeforeEach 30 | protected fun setUp() { 31 | repository = NoCacheSqlFileRepository() 32 | dialect = org.seasar.doma.jdbc.dialect.StandardDialect() 33 | url = "jdbc:hsqldb:mem:example" 34 | user = "sa" 35 | password = "" 36 | } 37 | 38 | protected fun execute(sqlFile: SqlFile) { 39 | val connection = getConnection() 40 | try { 41 | connection.setAutoCommit(false) 42 | val statement = connection.createStatement() 43 | try { 44 | statement.execute(sqlFile.getSql()) 45 | } finally { 46 | statement.close() 47 | } 48 | } finally { 49 | try { 50 | connection.rollback() 51 | } finally { 52 | connection.close() 53 | } 54 | } 55 | } 56 | 57 | protected fun getConnection(): Connection { 58 | return DriverManager.getConnection(url, user, password) 59 | } 60 | 61 | @Test 62 | public fun testSelect(testInfo: TestInfo) { 63 | val sqlFile = repository.getSqlFile(testInfo.getTestMethod().get(), "META-INF/org/seasar/doma/gradle/codegen/KotlinGeneratorTest/select.sql", dialect) 64 | execute(sqlFile) 65 | } 66 | 67 | @Test 68 | public fun testInsert(testInfo: TestInfo) { 69 | val sqlFile = repository.getSqlFile(testInfo.getTestMethod().get(), "META-INF/org/seasar/doma/gradle/codegen/KotlinGeneratorTest/insert.sql", dialect) 70 | execute(sqlFile) 71 | } 72 | 73 | @Test 74 | public fun testUpdate(testInfo: TestInfo) { 75 | val sqlFile = repository.getSqlFile(testInfo.getTestMethod().get(), "META-INF/org/seasar/doma/gradle/codegen/KotlinGeneratorTest/update.sql", dialect) 76 | execute(sqlFile) 77 | } 78 | 79 | } 80 | -------------------------------------------------------------------------------- /codegen/src/test/resources/org/seasar/doma/gradle/codegen/KotlinGeneratorTest_UseEntityListener.txt: -------------------------------------------------------------------------------- 1 | package example.entity 2 | 3 | import org.seasar.doma.Column 4 | import org.seasar.doma.Entity 5 | import org.seasar.doma.Id 6 | import org.seasar.doma.Table 7 | 8 | /** 9 | * COMMENT for HOGE 10 | */ 11 | @Entity(listener = HogeListener::class) 12 | @Table(name = "HOGE") 13 | class Hoge { 14 | 15 | /** COMMENT for ID */ 16 | @Id 17 | @Column(name = "ID") 18 | var id: Int = -1 19 | } 20 | -------------------------------------------------------------------------------- /codegen/src/test/resources/org/seasar/doma/gradle/codegen/desc/EntityPropertyClassNameResolverTest.properties: -------------------------------------------------------------------------------- 1 | aaa.Bbb@ccc=java.lang.String 2 | ccc=java.lang.Double 3 | .*=java.lang.Long -------------------------------------------------------------------------------- /codegen/src/test/resources/org/seasar/doma/gradle/codegen/entityPropertyClassNames.properties: -------------------------------------------------------------------------------- 1 | .*Name$=example.domain.Name 2 | .*x.*=example.domain.XValue -------------------------------------------------------------------------------- /gradle.properties: -------------------------------------------------------------------------------- 1 | group=org.domaframework.doma 2 | version=3.0.1-SNAPSHOT 3 | release.useAutomaticVersion=true 4 | -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/domaframework/doma-codegen-plugin/bc3eebcb48ab56f3ddad05d60b35ea6f9e3c47b3/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | distributionBase=GRADLE_USER_HOME 2 | distributionPath=wrapper/dists 3 | distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-bin.zip 4 | zipStoreBase=GRADLE_USER_HOME 5 | zipStorePath=wrapper/dists 6 | -------------------------------------------------------------------------------- /gradlew.bat: -------------------------------------------------------------------------------- 1 | @rem 2 | @rem Copyright 2015 the original author or authors. 3 | @rem 4 | @rem Licensed under the Apache License, Version 2.0 (the "License"); 5 | @rem you may not use this file except in compliance with the License. 6 | @rem You may obtain a copy of the License at 7 | @rem 8 | @rem https://www.apache.org/licenses/LICENSE-2.0 9 | @rem 10 | @rem Unless required by applicable law or agreed to in writing, software 11 | @rem distributed under the License is distributed on an "AS IS" BASIS, 12 | @rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | @rem See the License for the specific language governing permissions and 14 | @rem limitations under the License. 15 | @rem 16 | 17 | @if "%DEBUG%" == "" @echo off 18 | @rem ########################################################################## 19 | @rem 20 | @rem Gradle startup script for Windows 21 | @rem 22 | @rem ########################################################################## 23 | 24 | @rem Set local scope for the variables with windows NT shell 25 | if "%OS%"=="Windows_NT" setlocal 26 | 27 | set DIRNAME=%~dp0 28 | if "%DIRNAME%" == "" set DIRNAME=. 29 | set APP_BASE_NAME=%~n0 30 | set APP_HOME=%DIRNAME% 31 | 32 | @rem Resolve any "." and ".." in APP_HOME to make it shorter. 33 | for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi 34 | 35 | @rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. 36 | set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" 37 | 38 | @rem Find java.exe 39 | if defined JAVA_HOME goto findJavaFromJavaHome 40 | 41 | set JAVA_EXE=java.exe 42 | %JAVA_EXE% -version >NUL 2>&1 43 | if "%ERRORLEVEL%" == "0" goto execute 44 | 45 | echo. 46 | echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 47 | echo. 48 | echo Please set the JAVA_HOME variable in your environment to match the 49 | echo location of your Java installation. 50 | 51 | goto fail 52 | 53 | :findJavaFromJavaHome 54 | set JAVA_HOME=%JAVA_HOME:"=% 55 | set JAVA_EXE=%JAVA_HOME%/bin/java.exe 56 | 57 | if exist "%JAVA_EXE%" goto execute 58 | 59 | echo. 60 | echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 61 | echo. 62 | echo Please set the JAVA_HOME variable in your environment to match the 63 | echo location of your Java installation. 64 | 65 | goto fail 66 | 67 | :execute 68 | @rem Setup the command line 69 | 70 | set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar 71 | 72 | 73 | @rem Execute Gradle 74 | "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* 75 | 76 | :end 77 | @rem End local scope for the variables with windows NT shell 78 | if "%ERRORLEVEL%"=="0" goto mainEnd 79 | 80 | :fail 81 | rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of 82 | rem the _cmd.exe /c_ return code! 83 | if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 84 | exit /b 1 85 | 86 | :mainEnd 87 | if "%OS%"=="Windows_NT" endlocal 88 | 89 | :omega 90 | -------------------------------------------------------------------------------- /renovate.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": [ 3 | "github>domaframework/renovate-config" 4 | ], 5 | "ignoreDeps": [ 6 | "gradle" 7 | ] 8 | } 9 | -------------------------------------------------------------------------------- /settings.gradle.kts: -------------------------------------------------------------------------------- 1 | rootProject.name = "doma-codegen-plugin" 2 | 3 | include("codegen") 4 | --------------------------------------------------------------------------------