Skip to content

Commit

Permalink
Add hibernate-jpamodelgen feature for database category. (#2480)
Browse files Browse the repository at this point in the history
closes #2478
  • Loading branch information
wetted authored May 3, 2024
1 parent 7e9ab3b commit a9b625d
Show file tree
Hide file tree
Showing 2 changed files with 134 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
/*
* Copyright 2017-2024 original authors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package io.micronaut.starter.feature.database;

import io.micronaut.core.annotation.NonNull;
import io.micronaut.starter.application.ApplicationType;
import io.micronaut.starter.application.generator.GeneratorContext;
import io.micronaut.starter.build.dependencies.Dependency;
import io.micronaut.starter.feature.Category;
import io.micronaut.starter.feature.Feature;
import jakarta.inject.Singleton;

@Singleton
public class HibernateJpaModelgen implements Feature {

public static final String NAME = "hibernate-jpamodelgen";

private static final Dependency DEPENDENCY_JPAMODELGEN = Dependency.builder()
.groupId("org.hibernate.orm")
.artifactId("hibernate-jpamodelgen")
.annotationProcessor()
.build();

@Override
@NonNull
public String getName() {
return NAME;
}

@Override
public String getTitle() {
return "Hibernate JPA Static Metamodel Generator";
}

@Override
public String getDescription() {
return "Generator for compile time static metamodel classes";
}

@Override
public void apply(GeneratorContext generatorContext) {
generatorContext.addDependency(DEPENDENCY_JPAMODELGEN);
}

@Override
public boolean supports(ApplicationType applicationType) {
return true;
}

@Override
public String getCategory() {
return Category.DATABASE;
}

@Override
public String getThirdPartyDocumentation() {
return "https://hibernate.org/orm/tooling/";
}

@Override
public String getMicronautDocumentation() {
return "https://micronaut-projects.github.io/micronaut-data/latest/guide/#typeSafeJava";
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
package io.micronaut.starter.feature.database

import io.micronaut.starter.ApplicationContextSpec
import io.micronaut.starter.BuildBuilder
import io.micronaut.starter.application.ApplicationType
import io.micronaut.starter.build.BuildTestUtil
import io.micronaut.starter.build.BuildTestVerifier
import io.micronaut.starter.feature.Category
import io.micronaut.starter.fixture.CommandOutputFixture
import io.micronaut.starter.options.BuildTool
import io.micronaut.starter.options.Language
import spock.lang.Shared

class HibernateJpaModelgenSpec extends ApplicationContextSpec implements CommandOutputFixture {

@Shared
HibernateJpaModelgen hibernateJpaModelgen = beanContext.getBean(HibernateJpaModelgen)

void 'test readme.md with feature hibernate-jpamodelgen contains links to docs'() {
when:
Map<String, String> output = generate([HibernateJpaModelgen.NAME])
String readme = output["README.md"]

then:
readme
readme.contains("https://hibernate.org/orm/tooling/")
readme.contains("https://micronaut-projects.github.io/micronaut-data/latest/guide/#typeSafeJava")
}

void "feature hibernate-jpamodelgen supports applicationType=#applicationType"(ApplicationType applicationType) {
expect:
hibernateJpaModelgen.supports(applicationType)

where:
applicationType << ApplicationType.values()
}

void "feature hibernate-jpamodelgen feature is DATABASE category"() {
expect:
hibernateJpaModelgen.category == Category.DATABASE
}

void "dependencies are present for #buildTool and #language"(BuildTool buildTool, Language language) {
when:
String template = new BuildBuilder(beanContext, buildTool)
.features([HibernateJpaModelgen.NAME])
.language(language)
.render()
BuildTestVerifier verifier = BuildTestUtil.verifier(buildTool, language, template)

then:
verifier.hasAnnotationProcessor("org.hibernate.orm", "hibernate-jpamodelgen")

where:
[buildTool, language] << [BuildTool.values(), Language.values()].combinations()
}
}

0 comments on commit a9b625d

Please sign in to comment.