All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.introproventures.graphql.jpa.query.example.books.BooksSchemaConfiguration Maven / Gradle / Ivy

package com.introproventures.graphql.jpa.query.example.books;

import java.util.HashMap;
import java.util.Map;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.sql.DataSource;

import com.introproventures.graphql.jpa.query.autoconfigure.GraphQLJpaQueryProperties;
import com.introproventures.graphql.jpa.query.autoconfigure.GraphQLSchemaConfigurer;
import com.introproventures.graphql.jpa.query.autoconfigure.GraphQLShemaRegistration;
import com.introproventures.graphql.jpa.query.schema.impl.GraphQLJpaSchemaBuilder;
import org.hibernate.cfg.AvailableSettings;
import org.hibernate.dialect.H2Dialect;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.jdbc.DataSourceBuilder;
import org.springframework.boot.orm.jpa.EntityManagerFactoryBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.DefaultResourceLoader;
import org.springframework.core.io.ResourceLoader;
import org.springframework.jdbc.datasource.init.DataSourceInitializer;
import org.springframework.jdbc.datasource.init.ResourceDatabasePopulator;
import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;

@Configuration
public class BooksSchemaConfiguration {

    @Bean
    @ConfigurationProperties(prefix = "books")    
    @Qualifier("bookDataSource")    
    public DataSource bookDataSource() {
        return DataSourceBuilder.create()
                .build();
    }    
     
    @Bean
    @Qualifier("bookEntityManager")
    public LocalContainerEntityManagerFactoryBean bookEntityManagerFactory(
            EntityManagerFactoryBuilder builder) {
        Map properties = new HashMap<>();
        properties.put(AvailableSettings.HBM2DDL_AUTO, "create-drop");
        properties.put(AvailableSettings.HBM2DLL_CREATE_SCHEMAS, "true");
        properties.put(AvailableSettings.DIALECT, H2Dialect.class.getName());
        properties.put(AvailableSettings.SHOW_SQL, "true");
        properties.put(AvailableSettings.FORMAT_SQL, "true");

        return builder
                .dataSource(bookDataSource())
                .packages(Book.class)
                .persistenceUnit("books")
                .properties(properties)
                .build();
    }
    
    @Bean
    public DataSourceInitializer booksDataSourceInitializer(@Qualifier("bookDataSource")  DataSource bookDataSource) {
        DataSourceInitializer dataSourceInitializer = new DataSourceInitializer();
        ResourceLoader resourceLoader = new DefaultResourceLoader();
        
        ResourceDatabasePopulator databasePopulator = new ResourceDatabasePopulator();
        databasePopulator.addScript(resourceLoader.getResource("books.sql"));
        
        dataSourceInitializer.setDataSource(bookDataSource);
        dataSourceInitializer.setDatabasePopulator(databasePopulator);
        
        return dataSourceInitializer;
    }
    

    @Configuration
    public static class GraphQLJpaQuerySchemaConfigurer implements GraphQLSchemaConfigurer {

        private final EntityManager entityManager;

        @Autowired
        private GraphQLJpaQueryProperties properties;

        public GraphQLJpaQuerySchemaConfigurer(@Qualifier("bookEntityManager") EntityManagerFactory entityManager) {
            this.entityManager = entityManager.createEntityManager();
        }

        @Override
        public void configure(GraphQLShemaRegistration registry) {
            registry.register(
                    new GraphQLJpaSchemaBuilder(entityManager)
                        .name("GraphQLBooks")
                        .useDistinctParameter(properties.isUseDistinctParameter())
                        .setDefaultDistinct(properties.isDefautltDistinct())
                        .build()
            );
        }
    }
    
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy