package com.github.arteam.jdit.maintenance; import org.jdbi.v3.core.Handle; import java.sql.SQLException; /** * A factory for creating vendor-specific {@link DatabaseMaintenance} instances * based on the current database vendor name */ public final class DatabaseMaintenanceFactory { private static final String POSTGRESQL = "PostgreSQL"; private static final String HSQLDB = "HSQL Database Engine"; private static final String H2 = "H2"; private static final String MYSQL = "MySQL"; private DatabaseMaintenanceFactory() { } public static DatabaseMaintenance create(Handle handle) { String databaseVendor = getDatabaseVendor(handle); switch (databaseVendor) { case POSTGRESQL: return new PostgresDatabaseMaintenance(handle); case HSQLDB: return new HsqlDatabaseMaintenance(handle); case H2: return new H2DatabaseMaintenance(handle); case MYSQL: return new MySqlDatabaseMaintenance(handle); default: throw new UnsupportedOperationException(databaseVendor + " is not supported"); } } private static String getDatabaseVendor(Handle handle) { try { return handle.getConnection().getMetaData().getDatabaseProductName(); } catch (SQLException e) { throw new RuntimeException(e); } } }