diff options
author | Dinnerbone <dinnerbone@dinnerbone.com> | 2010-12-24 10:31:01 +0000 |
---|---|---|
committer | Dinnerbone <dinnerbone@dinnerbone.com> | 2010-12-24 10:31:01 +0000 |
commit | e112e33a72a5138047ea8874c73cdc711ca5b406 (patch) | |
tree | be80083b74a003ddb850bb947e9dbabdbe1dfa86 /src | |
parent | 6ec2d4bc66bdc60bcaf05f0405685090540ac934 (diff) | |
download | bukkit-e112e33a72a5138047ea8874c73cdc711ca5b406.tar bukkit-e112e33a72a5138047ea8874c73cdc711ca5b406.tar.gz bukkit-e112e33a72a5138047ea8874c73cdc711ca5b406.tar.lz bukkit-e112e33a72a5138047ea8874c73cdc711ca5b406.tar.xz bukkit-e112e33a72a5138047ea8874c73cdc711ca5b406.zip |
Added Java plugin loader + a plugin manager
Diffstat (limited to 'src')
-rw-r--r-- | src/org/bukkit/plugin/PluginLoader.java | 8 | ||||
-rw-r--r-- | src/org/bukkit/plugin/PluginManager.java | 82 | ||||
-rw-r--r-- | src/org/bukkit/plugin/java/JavaPluginLoader.java | 37 |
3 files changed, 125 insertions, 2 deletions
diff --git a/src/org/bukkit/plugin/PluginLoader.java b/src/org/bukkit/plugin/PluginLoader.java index 6a11406c..f7913d20 100644 --- a/src/org/bukkit/plugin/PluginLoader.java +++ b/src/org/bukkit/plugin/PluginLoader.java @@ -2,6 +2,7 @@ package org.bukkit.plugin; import java.io.File; +import java.util.regex.Pattern; /** * Represents a plugin loader, which provides access and management for all plugins @@ -38,11 +39,14 @@ public interface PluginLoader { /** * Loads the plugin contained in the specified file * - * File must be a .jar and contain a valid plugin.yaml file - * * @param file File to attempt to load * @return Plugin that was contained in the specified file, or null if * unsuccessful */ public Plugin loadPlugin(File file); + + /** + * Returns a list of all filename filters expected by this PluginLoader + */ + public Pattern[] getPluginFileFilters(); } diff --git a/src/org/bukkit/plugin/PluginManager.java b/src/org/bukkit/plugin/PluginManager.java new file mode 100644 index 00000000..1de78b9a --- /dev/null +++ b/src/org/bukkit/plugin/PluginManager.java @@ -0,0 +1,82 @@ + +package org.bukkit.plugin; + +import java.io.File; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Set; +import java.util.regex.Matcher; +import org.bukkit.Server; +import java.util.regex.Pattern; + +/** + * Handles all plugin management from the Server + */ +public final class PluginManager { + private final Server server; + private final HashMap<Pattern, PluginLoader> fileAssociations = new HashMap<Pattern, PluginLoader>(); + + public PluginManager(Server instance) { + server = instance; + } + + /** + * Registers the specified plugin loader + * + * @param loader PluginLoader to register + */ + public void RegisterInterface(PluginLoader loader) { + Pattern[] patterns = loader.getPluginFileFilters(); + + for (Pattern pattern : patterns) { + fileAssociations.put(pattern, loader); + } + } + + /** + * Loads the plugins contained within the specified directory + * + * @param directory Directory to check for plugins + * @return A list of all plugins loaded + */ + public Plugin[] loadPlugins(File directory) { + List<Plugin> result = new ArrayList<Plugin>(); + File[] files = directory.listFiles(); + + for (File file : files) { + Plugin plugin = loadPlugin(file); + + if (plugin != null) { + result.add(plugin); + } + } + + return (Plugin[])result.toArray(); + } + + /** + * Loads the plugin in the specified file + * + * File must be valid according to the current enabled Plugin interfaces + * + * @param file File containing the plugin to load + * @return The Plugin loaded, or null if it was invalid + */ + public Plugin loadPlugin(File file) { + Set<Pattern> filters = fileAssociations.keySet(); + Plugin result = null; + + for (Pattern filter : filters) { + String name = file.getName(); + Matcher match = filter.matcher(name); + + if (match.find()) { + PluginLoader loader = fileAssociations.get(filter); + result = loader.loadPlugin(file); + } + } + + return result; + } +} diff --git a/src/org/bukkit/plugin/java/JavaPluginLoader.java b/src/org/bukkit/plugin/java/JavaPluginLoader.java new file mode 100644 index 00000000..abc16deb --- /dev/null +++ b/src/org/bukkit/plugin/java/JavaPluginLoader.java @@ -0,0 +1,37 @@ + +package org.bukkit.plugin.java; + +import java.io.File; +import org.bukkit.plugin.Plugin; +import org.bukkit.plugin.PluginLoader; +import java.util.regex.Pattern; + +/** + * Represents a Java plugin loader, allowing plugins in the form of .jars + */ +public final class JavaPluginLoader implements PluginLoader { + private final Pattern[] fileFilters = new Pattern[] { + Pattern.compile("\\.jar$"), + }; + + public Plugin getPlugin(String name) { + throw new UnsupportedOperationException("Not supported yet."); + } + + public boolean isPluginEnabled(String name) { + throw new UnsupportedOperationException("Not supported yet."); + } + + public boolean isPluginEnabled(Plugin plugin) { + throw new UnsupportedOperationException("Not supported yet."); + } + + public Plugin loadPlugin(File file) { + throw new UnsupportedOperationException("Not supported yet."); + } + + public Pattern[] getPluginFileFilters() { + return fileFilters; + } + +} |