diff --git a/Plan/src/main/java/com/djrapitops/plan/Plan.java b/Plan/src/main/java/com/djrapitops/plan/Plan.java index 6bf2006ac..61011911d 100644 --- a/Plan/src/main/java/com/djrapitops/plan/Plan.java +++ b/Plan/src/main/java/com/djrapitops/plan/Plan.java @@ -124,9 +124,6 @@ public class Plan extends BukkitPlugin implements PlanPlugin { locale = system.getLocaleSystem().getLocale(); system.enable(); - // TODO Refactor into ImportSystem - // ImporterManager.registerImporter(new OfflinePlayerImporter()); - new BStatsBukkit(this).registerMetrics(); logger.debug("Verbose debug messages are enabled."); diff --git a/Plan/src/main/java/com/djrapitops/plan/command/commands/manage/ManageImportCommand.java b/Plan/src/main/java/com/djrapitops/plan/command/commands/manage/ManageImportCommand.java index 116178b47..e98ecfcea 100644 --- a/Plan/src/main/java/com/djrapitops/plan/command/commands/manage/ManageImportCommand.java +++ b/Plan/src/main/java/com/djrapitops/plan/command/commands/manage/ManageImportCommand.java @@ -1,13 +1,13 @@ package com.djrapitops.plan.command.commands.manage; +import com.djrapitops.plan.system.importing.ImportSystem; +import com.djrapitops.plan.system.importing.importers.Importer; import com.djrapitops.plan.system.locale.Locale; import com.djrapitops.plan.system.locale.lang.CmdHelpLang; import com.djrapitops.plan.system.locale.lang.CommandLang; import com.djrapitops.plan.system.locale.lang.DeepHelpLang; import com.djrapitops.plan.system.locale.lang.ManageLang; import com.djrapitops.plan.system.processing.Processing; -import com.djrapitops.plan.system.processing.importing.ImporterManager; -import com.djrapitops.plan.system.processing.importing.importers.Importer; import com.djrapitops.plan.system.settings.Permissions; import com.djrapitops.plugin.command.CommandNode; import com.djrapitops.plugin.command.CommandType; @@ -17,6 +17,7 @@ import com.djrapitops.plugin.utilities.Verify; import javax.inject.Inject; import javax.inject.Singleton; import java.util.Arrays; +import java.util.Optional; /** * This manage SubCommand is used to import data from 3rd party plugins. @@ -29,16 +30,19 @@ public class ManageImportCommand extends CommandNode { private final Locale locale; private final Processing processing; + private final ImportSystem importSystem; @Inject public ManageImportCommand( Locale locale, - Processing processing + Processing processing, + ImportSystem importSystem ) { super("import", Permissions.MANAGE.getPermission(), CommandType.CONSOLE); this.locale = locale; this.processing = processing; + this.importSystem = importSystem; setArguments("/list", "[import args]"); setShortHelp(locale.getString(CmdHelpLang.MANAGE_IMPORT)); @@ -54,19 +58,20 @@ public class ManageImportCommand extends CommandNode { if (importArg.equals("list")) { sender.sendMessage(locale.getString(ManageLang.IMPORTERS)); - ImporterManager.getImporters().stream() - .map(Importer::getNames) - .map(list -> list.get(0)) - .forEach(name -> sender.sendMessage("- " + name)); + importSystem.getImporterNames().forEach(name -> sender.sendMessage("- " + name)); return; } - Importer importer = ImporterManager.getImporter(importArg); - if (importer == null) { + findImporter(sender, importArg); + } + + private void findImporter(ISender sender, String importArg) { + Optional foundImporter = importSystem.getImporter(importArg); + if (foundImporter.isPresent()) { + Importer importer = foundImporter.get(); + processing.submitNonCritical(importer::processImport); + } else { sender.sendMessage(locale.getString(ManageLang.FAIL_IMPORTER_NOT_FOUND, importArg)); - return; } - - processing.submitNonCritical(importer::processImport); } } diff --git a/Plan/src/main/java/com/djrapitops/plan/modules/bungee/BungeeSuperClassBindingModule.java b/Plan/src/main/java/com/djrapitops/plan/modules/bungee/BungeeSuperClassBindingModule.java index 088a9768e..6d8f2f308 100644 --- a/Plan/src/main/java/com/djrapitops/plan/modules/bungee/BungeeSuperClassBindingModule.java +++ b/Plan/src/main/java/com/djrapitops/plan/modules/bungee/BungeeSuperClassBindingModule.java @@ -4,6 +4,8 @@ import com.djrapitops.plan.api.BungeeAPI; import com.djrapitops.plan.api.PlanAPI; import com.djrapitops.plan.system.database.BungeeDBSystem; import com.djrapitops.plan.system.database.DBSystem; +import com.djrapitops.plan.system.importing.EmptyImportSystem; +import com.djrapitops.plan.system.importing.ImportSystem; import com.djrapitops.plan.system.info.BungeeInfoSystem; import com.djrapitops.plan.system.info.InfoSystem; import com.djrapitops.plan.system.info.connection.BungeeConnectionSystem; @@ -69,4 +71,10 @@ public class BungeeSuperClassBindingModule { return bungeeListenerSystem; } + @Provides + @Singleton + ImportSystem provideImportSystem() { + return new EmptyImportSystem(); + } + } \ No newline at end of file diff --git a/Plan/src/main/java/com/djrapitops/plan/modules/server/bukkit/BukkitSuperClassBindingModule.java b/Plan/src/main/java/com/djrapitops/plan/modules/server/bukkit/BukkitSuperClassBindingModule.java index 87cefa4d1..d85b2df99 100644 --- a/Plan/src/main/java/com/djrapitops/plan/modules/server/bukkit/BukkitSuperClassBindingModule.java +++ b/Plan/src/main/java/com/djrapitops/plan/modules/server/bukkit/BukkitSuperClassBindingModule.java @@ -2,6 +2,8 @@ package com.djrapitops.plan.modules.server.bukkit; import com.djrapitops.plan.system.database.BukkitDBSystem; import com.djrapitops.plan.system.database.DBSystem; +import com.djrapitops.plan.system.importing.BukkitImportSystem; +import com.djrapitops.plan.system.importing.ImportSystem; import com.djrapitops.plan.system.listeners.BukkitListenerSystem; import com.djrapitops.plan.system.listeners.ListenerSystem; import com.djrapitops.plan.system.settings.config.BukkitConfigSystem; @@ -45,4 +47,10 @@ public class BukkitSuperClassBindingModule { return bukkitListenerSystem; } + @Provides + @Singleton + ImportSystem provideImportSsytem(BukkitImportSystem bukkitImportSystem) { + return bukkitImportSystem; + } + } \ No newline at end of file diff --git a/Plan/src/main/java/com/djrapitops/plan/modules/server/sponge/SpongeSuperClassBindingModule.java b/Plan/src/main/java/com/djrapitops/plan/modules/server/sponge/SpongeSuperClassBindingModule.java index d5ffdd92a..7a4f1ef97 100644 --- a/Plan/src/main/java/com/djrapitops/plan/modules/server/sponge/SpongeSuperClassBindingModule.java +++ b/Plan/src/main/java/com/djrapitops/plan/modules/server/sponge/SpongeSuperClassBindingModule.java @@ -2,6 +2,8 @@ package com.djrapitops.plan.modules.server.sponge; import com.djrapitops.plan.system.database.DBSystem; import com.djrapitops.plan.system.database.SpongeDBSystem; +import com.djrapitops.plan.system.importing.EmptyImportSystem; +import com.djrapitops.plan.system.importing.ImportSystem; import com.djrapitops.plan.system.listeners.ListenerSystem; import com.djrapitops.plan.system.listeners.SpongeListenerSystem; import com.djrapitops.plan.system.settings.config.ConfigSystem; @@ -45,4 +47,10 @@ public class SpongeSuperClassBindingModule { return spongeListenerSystem; } + @Provides + @Singleton + ImportSystem provideImportSystem() { + return new EmptyImportSystem(); + } + } \ No newline at end of file diff --git a/Plan/src/main/java/com/djrapitops/plan/system/PlanSystem.java b/Plan/src/main/java/com/djrapitops/plan/system/PlanSystem.java index e8154b171..cb824ccf2 100644 --- a/Plan/src/main/java/com/djrapitops/plan/system/PlanSystem.java +++ b/Plan/src/main/java/com/djrapitops/plan/system/PlanSystem.java @@ -12,6 +12,7 @@ import com.djrapitops.plan.system.cache.CacheSystem; import com.djrapitops.plan.system.database.DBSystem; import com.djrapitops.plan.system.export.ExportSystem; import com.djrapitops.plan.system.file.FileSystem; +import com.djrapitops.plan.system.importing.ImportSystem; import com.djrapitops.plan.system.info.InfoSystem; import com.djrapitops.plan.system.info.server.ServerInfo; import com.djrapitops.plan.system.listeners.ListenerSystem; @@ -50,6 +51,7 @@ public class PlanSystem implements SubSystem { private final Processing processing; + private final ImportSystem importSystem; private final ExportSystem exportSystem; private final HookHandler hookHandler; private final PlanAPI planAPI; @@ -68,6 +70,7 @@ public class PlanSystem implements SubSystem { ServerInfo serverInfo, WebServerSystem webServerSystem, Processing processing, + ImportSystem importSystem, ExportSystem exportSystem, HookHandler hookHandler, PlanAPI planAPI @@ -84,6 +87,7 @@ public class PlanSystem implements SubSystem { this.serverInfo = serverInfo; this.webServerSystem = webServerSystem; this.processing = processing; + this.importSystem = importSystem; this.exportSystem = exportSystem; this.hookHandler = hookHandler; this.planAPI = planAPI; @@ -182,6 +186,14 @@ public class PlanSystem implements SubSystem { return webServerSystem; } + public ImportSystem getImportSystem() { + return importSystem; + } + + public ExportSystem getExportSystem() { + return exportSystem; + } + public ServerInfo getServerInfo() { return serverInfo; } diff --git a/Plan/src/main/java/com/djrapitops/plan/system/importing/BukkitImportSystem.java b/Plan/src/main/java/com/djrapitops/plan/system/importing/BukkitImportSystem.java new file mode 100644 index 000000000..767748d91 --- /dev/null +++ b/Plan/src/main/java/com/djrapitops/plan/system/importing/BukkitImportSystem.java @@ -0,0 +1,34 @@ +package com.djrapitops.plan.system.importing; + +import com.djrapitops.plan.system.database.databases.Database; +import com.djrapitops.plan.system.importing.importers.OfflinePlayerImporter; +import com.djrapitops.plan.system.info.server.ServerInfo; + +import javax.inject.Inject; +import javax.inject.Singleton; + +/** + * ImportSystem implementation for Bukkit. + * + * @author Rsl1122 + */ +@Singleton +public class BukkitImportSystem extends ImportSystem { + + private final Database database; + private final ServerInfo serverInfo; + + @Inject + public BukkitImportSystem( + Database database, + ServerInfo serverInfo + ) { + this.database = database; + this.serverInfo = serverInfo; + } + + @Override + void registerImporters() { + registerImporter(new OfflinePlayerImporter(database, serverInfo)); + } +} \ No newline at end of file diff --git a/Plan/src/main/java/com/djrapitops/plan/system/importing/EmptyImportSystem.java b/Plan/src/main/java/com/djrapitops/plan/system/importing/EmptyImportSystem.java new file mode 100644 index 000000000..7e8c64ae0 --- /dev/null +++ b/Plan/src/main/java/com/djrapitops/plan/system/importing/EmptyImportSystem.java @@ -0,0 +1,14 @@ +package com.djrapitops.plan.system.importing; + +/** + * Placeholder for a ImportSystem. + * + * @author Rsl1122 + */ +public class EmptyImportSystem extends ImportSystem { + + @Override + void registerImporters() { + // No importers to register. + } +} \ No newline at end of file diff --git a/Plan/src/main/java/com/djrapitops/plan/system/importing/ImportSystem.java b/Plan/src/main/java/com/djrapitops/plan/system/importing/ImportSystem.java new file mode 100644 index 000000000..6c39db052 --- /dev/null +++ b/Plan/src/main/java/com/djrapitops/plan/system/importing/ImportSystem.java @@ -0,0 +1,49 @@ +package com.djrapitops.plan.system.importing; + +import com.djrapitops.plan.system.SubSystem; +import com.djrapitops.plan.system.importing.importers.Importer; +import com.djrapitops.plugin.utilities.Verify; + +import java.util.*; + +/** + * Abstract representation of an ImportSystem. + * + * @author Rsl1122 + */ +public abstract class ImportSystem implements SubSystem { + + protected Map importers; + + public ImportSystem() { + importers = new HashMap<>(); + } + + @Override + public void enable() { + registerImporters(); + } + + abstract void registerImporters(); + + public void registerImporter(Importer importer) { + Verify.nullCheck(importer, () -> new IllegalArgumentException("Importer cannot be null")); + + importers.put(importer.getName(), importer); + } + + public Optional getImporter(String name) { + return Optional.ofNullable(importers.get(name)); + } + + public List getImporterNames() { + List names = new ArrayList<>(importers.keySet()); + Collections.sort(names); + return names; + } + + @Override + public void disable() { + importers.clear(); + } +} \ No newline at end of file diff --git a/Plan/src/main/java/com/djrapitops/plan/system/processing/importing/ServerImportData.java b/Plan/src/main/java/com/djrapitops/plan/system/importing/data/ServerImportData.java similarity index 97% rename from Plan/src/main/java/com/djrapitops/plan/system/processing/importing/ServerImportData.java rename to Plan/src/main/java/com/djrapitops/plan/system/importing/data/ServerImportData.java index d6bee620f..d9bb3597e 100644 --- a/Plan/src/main/java/com/djrapitops/plan/system/processing/importing/ServerImportData.java +++ b/Plan/src/main/java/com/djrapitops/plan/system/importing/data/ServerImportData.java @@ -2,7 +2,7 @@ * License is provided in the jar as LICENSE also here: * https://github.com/Rsl1122/Plan-PlayerAnalytics/blob/master/Plan/src/main/resources/LICENSE */ -package com.djrapitops.plan.system.processing.importing; +package com.djrapitops.plan.system.importing.data; import com.djrapitops.plan.data.container.TPS; import com.djrapitops.plan.data.container.builders.TPSBuilder; diff --git a/Plan/src/main/java/com/djrapitops/plan/system/processing/importing/UserImportData.java b/Plan/src/main/java/com/djrapitops/plan/system/importing/data/UserImportData.java similarity index 99% rename from Plan/src/main/java/com/djrapitops/plan/system/processing/importing/UserImportData.java rename to Plan/src/main/java/com/djrapitops/plan/system/importing/data/UserImportData.java index e4727503d..e06155663 100644 --- a/Plan/src/main/java/com/djrapitops/plan/system/processing/importing/UserImportData.java +++ b/Plan/src/main/java/com/djrapitops/plan/system/importing/data/UserImportData.java @@ -2,7 +2,7 @@ * License is provided in the jar as LICENSE also here: * https://github.com/Rsl1122/Plan-PlayerAnalytics/blob/master/Plan/src/main/resources/LICENSE */ -package com.djrapitops.plan.system.processing.importing; +package com.djrapitops.plan.system.importing.data; import com.djrapitops.plan.data.container.PlayerKill; import com.djrapitops.plan.data.store.objects.Nickname; diff --git a/Plan/src/main/java/com/djrapitops/plan/system/processing/importing/UserImportRefiner.java b/Plan/src/main/java/com/djrapitops/plan/system/importing/data/UserImportRefiner.java similarity index 99% rename from Plan/src/main/java/com/djrapitops/plan/system/processing/importing/UserImportRefiner.java rename to Plan/src/main/java/com/djrapitops/plan/system/importing/data/UserImportRefiner.java index c401a3e63..5cf7c61fa 100644 --- a/Plan/src/main/java/com/djrapitops/plan/system/processing/importing/UserImportRefiner.java +++ b/Plan/src/main/java/com/djrapitops/plan/system/importing/data/UserImportRefiner.java @@ -2,7 +2,7 @@ * License is provided in the jar as LICENSE also here: * https://github.com/Rsl1122/Plan-PlayerAnalytics/blob/master/Plan/src/main/resources/LICENSE */ -package com.djrapitops.plan.system.processing.importing; +package com.djrapitops.plan.system.importing.data; import com.djrapitops.plan.Plan; import com.djrapitops.plugin.api.Benchmark; diff --git a/Plan/src/main/java/com/djrapitops/plan/system/processing/importing/importers/Importer.java b/Plan/src/main/java/com/djrapitops/plan/system/importing/importers/Importer.java similarity index 92% rename from Plan/src/main/java/com/djrapitops/plan/system/processing/importing/importers/Importer.java rename to Plan/src/main/java/com/djrapitops/plan/system/importing/importers/Importer.java index db7b8e9d3..ea50961f3 100644 --- a/Plan/src/main/java/com/djrapitops/plan/system/processing/importing/importers/Importer.java +++ b/Plan/src/main/java/com/djrapitops/plan/system/importing/importers/Importer.java @@ -2,7 +2,7 @@ * License is provided in the jar as LICENSE also here: * https://github.com/Rsl1122/Plan-PlayerAnalytics/blob/master/Plan/src/main/resources/LICENSE */ -package com.djrapitops.plan.system.processing.importing.importers; +package com.djrapitops.plan.system.importing.importers; import com.djrapitops.plan.Plan; import com.djrapitops.plan.api.exceptions.database.DBException; @@ -15,10 +15,10 @@ import com.djrapitops.plan.data.time.WorldTimes; import com.djrapitops.plan.system.cache.GeolocationCache; import com.djrapitops.plan.system.database.databases.Database; import com.djrapitops.plan.system.database.databases.operation.SaveOperations; +import com.djrapitops.plan.system.importing.data.ServerImportData; +import com.djrapitops.plan.system.importing.data.UserImportData; +import com.djrapitops.plan.system.importing.data.UserImportRefiner; import com.djrapitops.plan.system.info.server.ServerInfo; -import com.djrapitops.plan.system.processing.importing.ServerImportData; -import com.djrapitops.plan.system.processing.importing.UserImportData; -import com.djrapitops.plan.system.processing.importing.UserImportRefiner; import com.djrapitops.plan.utilities.SHA256Hash; import com.djrapitops.plugin.api.utility.log.Log; import com.djrapitops.plugin.utilities.Verify; @@ -40,12 +40,23 @@ public abstract class Importer { private final Database database; private final UUID serverUUID; - protected Importer(Database database, ServerInfo serverInfo) { + private final String name; + + protected Importer(Database database, ServerInfo serverInfo, String name) { this.database = database; this.serverUUID = serverInfo.getServerUUID(); + + this.name = name; } - public abstract List getNames(); + @Deprecated + public List getNames() { + return new ArrayList<>(); + } + + public String getName() { + return name; + } public abstract ServerImportData getServerImportData(); diff --git a/Plan/src/main/java/com/djrapitops/plan/system/processing/importing/importers/OfflinePlayerImporter.java b/Plan/src/main/java/com/djrapitops/plan/system/importing/importers/OfflinePlayerImporter.java similarity index 82% rename from Plan/src/main/java/com/djrapitops/plan/system/processing/importing/importers/OfflinePlayerImporter.java rename to Plan/src/main/java/com/djrapitops/plan/system/importing/importers/OfflinePlayerImporter.java index 0cf02b2b9..aa23fb80a 100644 --- a/Plan/src/main/java/com/djrapitops/plan/system/processing/importing/importers/OfflinePlayerImporter.java +++ b/Plan/src/main/java/com/djrapitops/plan/system/importing/importers/OfflinePlayerImporter.java @@ -2,12 +2,12 @@ * License is provided in the jar as LICENSE also here: * https://github.com/Rsl1122/Plan-PlayerAnalytics/blob/master/Plan/src/main/resources/LICENSE */ -package com.djrapitops.plan.system.processing.importing.importers; +package com.djrapitops.plan.system.importing.importers; import com.djrapitops.plan.system.database.databases.Database; +import com.djrapitops.plan.system.importing.data.ServerImportData; +import com.djrapitops.plan.system.importing.data.UserImportData; import com.djrapitops.plan.system.info.server.ServerInfo; -import com.djrapitops.plan.system.processing.importing.ServerImportData; -import com.djrapitops.plan.system.processing.importing.UserImportData; import org.bukkit.Bukkit; import org.bukkit.OfflinePlayer; @@ -30,12 +30,7 @@ public class OfflinePlayerImporter extends Importer { Database database, ServerInfo serverInfo ) { - super(database, serverInfo); - } - - @Override - public List getNames() { - return Arrays.asList("offline", "offlineplayer"); + super(database, serverInfo, "offline"); } @Override diff --git a/Plan/src/main/java/com/djrapitops/plan/system/processing/importing/ImporterManager.java b/Plan/src/main/java/com/djrapitops/plan/system/processing/importing/ImporterManager.java deleted file mode 100644 index f2dd34b9e..000000000 --- a/Plan/src/main/java/com/djrapitops/plan/system/processing/importing/ImporterManager.java +++ /dev/null @@ -1,58 +0,0 @@ -/* - * License is provided in the jar as LICENSE also here: - * https://github.com/Rsl1122/Plan-PlayerAnalytics/blob/master/Plan/src/main/resources/LICENSE - */ -package com.djrapitops.plan.system.processing.importing; - -import com.djrapitops.plan.system.processing.importing.importers.Importer; - -import java.util.ArrayList; -import java.util.List; - -/** - * @author Fuzzlemann - */ -public class ImporterManager { - - private static final List registry = new ArrayList<>(); - - /** - * Constructor used to hide the public constructor - */ - private ImporterManager() { - throw new IllegalStateException("Utility class"); - } - - public static void registerImporter(Importer importer) { - if (importer == null) { - throw new NullPointerException("Importer cannot be null"); - } - - String firstName = importer.getNames().get(0); - - if (firstName == null) { - throw new IllegalArgumentException("No Importer name given"); - } - - if (getImporter(firstName) != null) { - removeImporter(firstName); - } - - registry.add(importer); - } - - public static List getImporters() { - return registry; - } - - public static Importer getImporter(String name) { - return registry.stream() - .filter(importer -> importer.getNames().contains(name)) - .findAny() - .orElse(null); - } - - public static void removeImporter(String name) { - registry.removeIf(importer -> importer.getNames().contains(name)); - } -} diff --git a/Plan/src/test/java/com/djrapitops/plan/data/additional/importer/ImportBuilderTest.java b/Plan/src/test/java/com/djrapitops/plan/system/importing/data/ImportBuilderTest.java similarity index 96% rename from Plan/src/test/java/com/djrapitops/plan/data/additional/importer/ImportBuilderTest.java rename to Plan/src/test/java/com/djrapitops/plan/system/importing/data/ImportBuilderTest.java index e68ec84a4..681599150 100644 --- a/Plan/src/test/java/com/djrapitops/plan/data/additional/importer/ImportBuilderTest.java +++ b/Plan/src/test/java/com/djrapitops/plan/system/importing/data/ImportBuilderTest.java @@ -2,7 +2,7 @@ * License is provided in the jar as LICENSE also here: * https://github.com/Rsl1122/Plan-PlayerAnalytics/blob/master/Plan/src/main/resources/LICENSE */ -package com.djrapitops.plan.data.additional.importer; +package com.djrapitops.plan.system.importing.data; import com.djrapitops.plan.Plan; import com.djrapitops.plan.data.container.PlayerKill; @@ -11,8 +11,6 @@ import com.djrapitops.plan.data.store.objects.Nickname; import com.djrapitops.plan.data.time.GMTimes; import com.djrapitops.plan.system.database.databases.SQLiteTest; import com.djrapitops.plan.system.database.databases.sql.SQLDB; -import com.djrapitops.plan.system.processing.importing.ServerImportData; -import com.djrapitops.plan.system.processing.importing.UserImportData; import com.djrapitops.plugin.StaticHolder; import com.djrapitops.plugin.api.utility.log.Log; import com.google.common.collect.ImmutableMap;