package org.constellation.database.model; import com.zaxxer.hikari.HikariConfig; import com.zaxxer.hikari.HikariDataSource; import org.flywaydb.core.Flyway; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.sql.Connection; import java.sql.ResultSet; import java.sql.Statement; /** * Main used to init database using flyway during Jooq POJO/DAO generation. * * @author Quentin Boileau (Geomatys) */ public class FlywayGenerator { private static final Logger LOGGER = LoggerFactory.getLogger(FlywayGenerator.class); public static void main(String[] args) throws Exception { String databaseURL = args[0]; String user = args[1]; String password = args[2]; String update = args[3]; try { Class.forName("org.postgresql.Driver"); } catch (ClassNotFoundException ex) { LOGGER.warn(ex.getMessage(), ex); } final HikariConfig config = createHikariConfig("constellation-generator", null, databaseURL, user, password); final HikariDataSource dataSource = new HikariDataSource(config); //Clean database before apply liquidbase scripts final String schemaExist = "SELECT schema_name FROM information_schema.schemata WHERE schema_name = 'admin';"; try (Connection conn = dataSource.getConnection(); Statement stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery(schemaExist)) { if (rs.next()) { LOGGER.info("Admin schema already exist, drop it."); stmt.execute("DROP SCHEMA admin CASCADE;"); stmt.execute("DROP TABLE IF EXISTS public.databasechangelog CASCADE;"); stmt.execute("DROP TABLE IF EXISTS public.databasechangeloglock CASCADE;"); } } final Flyway flyway = FlywayUtils.createFlywayConfig(dataSource); flyway.clean(); flyway.migrate(); } public static HikariConfig createHikariConfig(String poolName, Integer maxPoolSize, String dbUrl, String userName, String password) { HikariConfig config = new HikariConfig(); config.setJdbcUrl(dbUrl); config.setUsername(userName); config.setPassword(password); if (poolName != null) { config.setPoolName(poolName); } if (maxPoolSize != null) { config.setMaximumPoolSize(maxPoolSize); } return config; } }