DatabaseManagerFactory.java 3.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. package com.gmail.nossr50.database;
  2. import com.gmail.nossr50.datatypes.database.DatabaseType;
  3. import com.gmail.nossr50.mcMMO;
  4. import com.gmail.nossr50.util.LogUtils;
  5. import java.util.logging.Logger;
  6. import org.jetbrains.annotations.NotNull;
  7. import org.jetbrains.annotations.Nullable;
  8. public class DatabaseManagerFactory {
  9. private static Class<? extends DatabaseManager> customManager = null;
  10. public static final String MYSQL_DRIVER = "com.mysql.cj.jdbc.Driver";
  11. public static DatabaseManager getDatabaseManager(@NotNull String userFilePath,
  12. @NotNull Logger logger, long purgeTime, int startingLevel) {
  13. if (customManager != null) {
  14. try {
  15. return createDefaultCustomDatabaseManager();
  16. } catch (Exception e) {
  17. LogUtils.debug(mcMMO.p.getLogger(), "Could not create custom database manager");
  18. e.printStackTrace();
  19. } catch (Throwable e) {
  20. LogUtils.debug(mcMMO.p.getLogger(), "Failed to create custom database manager");
  21. e.printStackTrace();
  22. }
  23. LogUtils.debug(mcMMO.p.getLogger(),
  24. "Falling back on " + (mcMMO.p.getGeneralConfig().getUseMySQL() ? "SQL"
  25. : "Flatfile") + " database");
  26. }
  27. return mcMMO.p.getGeneralConfig().getUseMySQL()
  28. ? new SQLDatabaseManager(logger, MYSQL_DRIVER)
  29. : new FlatFileDatabaseManager(userFilePath, logger, purgeTime, startingLevel);
  30. }
  31. /**
  32. * Sets the custom DatabaseManager class for mcMMO to use. This should be called prior to mcMMO
  33. * enabling.
  34. * <p/>
  35. * The provided class must have an empty constructor, which is the one that will be used.
  36. * <p/>
  37. * This method is intended for API use, but it should not be considered stable. This method is
  38. * subject to change and/or removal in future versions.
  39. *
  40. * @param clazz the DatabaseManager class to use
  41. * @throws IllegalArgumentException if the provided class does not have an empty constructor
  42. */
  43. public static void setCustomDatabaseManagerClass(Class<? extends DatabaseManager> clazz) {
  44. try {
  45. clazz.getConstructor();
  46. customManager = clazz;
  47. } catch (Throwable e) {
  48. throw new IllegalArgumentException(
  49. "Provided database manager class must have an empty constructor", e);
  50. }
  51. }
  52. public static Class<? extends DatabaseManager> getCustomDatabaseManagerClass() {
  53. return customManager;
  54. }
  55. public static @Nullable DatabaseManager createDatabaseManager(@NotNull DatabaseType type,
  56. @NotNull String userFilePath, @NotNull Logger logger, long purgeTime,
  57. int startingLevel) {
  58. switch (type) {
  59. case FLATFILE:
  60. LogUtils.debug(mcMMO.p.getLogger(), "Using FlatFile Database");
  61. return new FlatFileDatabaseManager(userFilePath, logger, purgeTime, startingLevel);
  62. case SQL:
  63. LogUtils.debug(mcMMO.p.getLogger(), "Using SQL Database");
  64. return new SQLDatabaseManager(logger, "com.mysql.cj.jdbc.Driver");
  65. case CUSTOM:
  66. try {
  67. LogUtils.debug(mcMMO.p.getLogger(), "Attempting to use Custom Database");
  68. return createDefaultCustomDatabaseManager();
  69. } catch (Throwable e) {
  70. e.printStackTrace();
  71. }
  72. default:
  73. return null;
  74. }
  75. }
  76. private static DatabaseManager createDefaultCustomDatabaseManager() throws Throwable {
  77. return customManager.getConstructor().newInstance();
  78. }
  79. public static DatabaseManager createCustomDatabaseManager(
  80. Class<? extends DatabaseManager> clazz) throws Throwable {
  81. return clazz.getConstructor().newInstance();
  82. }
  83. }