From f2e207dab1d07b6a12c979488f6a8f0a4dacdd78 Mon Sep 17 00:00:00 2001 From: DNx5 Date: Tue, 15 Sep 2015 23:11:45 +0700 Subject: [PATCH] change structure of ModuleManager --- .../xephi/authme/modules/ModuleManager.java | 104 +++++++++++------- 1 file changed, 63 insertions(+), 41 deletions(-) diff --git a/src/main/java/fr/xephi/authme/modules/ModuleManager.java b/src/main/java/fr/xephi/authme/modules/ModuleManager.java index 87dabc53a..1050d93de 100644 --- a/src/main/java/fr/xephi/authme/modules/ModuleManager.java +++ b/src/main/java/fr/xephi/authme/modules/ModuleManager.java @@ -1,5 +1,9 @@ package fr.xephi.authme.modules; +import fr.xephi.authme.AuthMe; +import fr.xephi.authme.ConsoleLogger; +import fr.xephi.authme.settings.Settings; + import java.io.File; import java.io.IOException; import java.net.URL; @@ -10,56 +14,69 @@ import java.util.List; import java.util.jar.JarEntry; import java.util.jar.JarFile; -import fr.xephi.authme.AuthMe; -import fr.xephi.authme.ConsoleLogger; - -public class ModuleManager implements Module { +public class ModuleManager { private AuthMe plugin; - private ModuleManager instance; - private List modules = new ArrayList(); + + private List modules = new ArrayList<>(); public ModuleManager(AuthMe plugin) { this.plugin = plugin; } - @Override - public String getName() { - return "AuthMe Module Manager"; + public boolean isModuleEnabled(String name) { + for (Module m : modules) { + if (m.getName().equalsIgnoreCase(name)) + return true; + } + return false; } - @Override - public AuthMe getInstanceOfAuthMe() { - return this.plugin; + public boolean isModuleEnabled(Module.ModuleType type) { + for (Module m : modules) { + if (m.getType() == type) + return true; + } + return false; } - @Override - public Module getInstance() { - if (this.instance == null) - instance = new ModuleManager(AuthMe.getInstance()); - return instance; + public Module getModule(String name) { + for (Module m : modules) { + if (m.getName().equalsIgnoreCase(name)) + return m; + } + return null; } - @Override - public ModuleType getType() { - return (Module.ModuleType.MANAGER); + public Module getModule(Module.ModuleType type) { + for (Module m : modules) { + if (m.getType() == type) + return m; + } + return null; } - @Override - public boolean load() { - File dir = new File(plugin.getDataFolder() + File.separator + "modules"); + public int loadModules() { + File dir = Settings.MODULE_FOLDER; + int count = 0; + if (!dir.isDirectory()) { + dir.mkdirs(); + return count; + } + File[] files = dir.listFiles(); if (files == null) { - return false; + return count; } for (File pathToJar : files) { JarFile jarFile = null; + URLClassLoader cl = null; try { jarFile = new JarFile(pathToJar); - Enumeration e = jarFile.entries(); - URL[] urls = { new URL("jar:file:" + pathToJar.getAbsolutePath() + "!/") }; - URLClassLoader cl = URLClassLoader.newInstance(urls); + URL[] urls = {new URL("jar:file:" + pathToJar.getAbsolutePath() + "!/")}; + cl = URLClassLoader.newInstance(urls); + Enumeration e = jarFile.entries(); while (e.hasMoreElements()) { JarEntry je = (JarEntry) e.nextElement(); if (je.isDirectory() || !je.getName().endsWith("Main.class")) { @@ -68,35 +85,40 @@ public class ModuleManager implements Module { String className = je.getName().substring(0, je.getName().length() - 6); className = className.replace('/', '.'); Class c = cl.loadClass(className); + if (!Module.class.isAssignableFrom(c)) { + continue; + } + Module mod = (Module) c.newInstance(); mod.load(); modules.add(mod); + count++; break; - } + } catch (Exception ex) { + ConsoleLogger.writeStackTrace(ex); ConsoleLogger.showError("Cannot load " + pathToJar.getName() + " jar file !"); } finally { - if (jarFile != null) - try { + try { + if (jarFile != null) { jarFile.close(); - } catch (IOException e) { } + if (cl != null) { + cl.close(); + } + } catch (IOException ignored) { + } } } - return true; + return count; } - @Override - public boolean unload() { - try { - for (Module mod : modules) { - mod.unload(); - modules.remove(mod); - } - } catch (Exception e) { + public void unloadModules() { + for (Module m : modules) { + m.unload(); + modules.remove(m); } - return true; } }