diff options
author | Dinnerbone <dinnerbone@dinnerbone.com> | 2010-12-24 11:20:20 +0000 |
---|---|---|
committer | Dinnerbone <dinnerbone@dinnerbone.com> | 2010-12-24 11:20:20 +0000 |
commit | 777ef5442ad109eb27868a78dc4c771d813c107f (patch) | |
tree | 9b09a843119cc30e6682fe0070a66ff9a62a1738 | |
parent | e112e33a72a5138047ea8874c73cdc711ca5b406 (diff) | |
download | bukkit-777ef5442ad109eb27868a78dc4c771d813c107f.tar bukkit-777ef5442ad109eb27868a78dc4c771d813c107f.tar.gz bukkit-777ef5442ad109eb27868a78dc4c771d813c107f.tar.lz bukkit-777ef5442ad109eb27868a78dc4c771d813c107f.tar.xz bukkit-777ef5442ad109eb27868a78dc4c771d813c107f.zip |
Basics of PluginDescriptionFile
-rw-r--r-- | src/org/bukkit/plugin/InvalidDescriptionException.java | 34 | ||||
-rw-r--r-- | src/org/bukkit/plugin/PluginDescriptionFile.java | 69 |
2 files changed, 103 insertions, 0 deletions
diff --git a/src/org/bukkit/plugin/InvalidDescriptionException.java b/src/org/bukkit/plugin/InvalidDescriptionException.java new file mode 100644 index 00000000..aee3e397 --- /dev/null +++ b/src/org/bukkit/plugin/InvalidDescriptionException.java @@ -0,0 +1,34 @@ + +package org.bukkit.plugin; + +/** + * Thrown when attempting to load an invalid PluginDescriptionFile + */ +public class InvalidDescriptionException extends Exception { + private final Exception innerException; + + /** + * Constructs a new InvalidDescriptionException based on the given Exception + * + * @param exception Exception that triggered this Exception + */ + public InvalidDescriptionException(Exception exception) { + innerException = exception; + } + + /** + * Constructs a new InvalidDescriptionException + */ + public InvalidDescriptionException() { + innerException = null; + } + + /** + * If applicable, returns the Exception that triggered this InvalidDescriptionException + * + * @return Inner exception, or null if one does not exist + */ + public Exception getInnerException() { + return innerException; + } +} diff --git a/src/org/bukkit/plugin/PluginDescriptionFile.java b/src/org/bukkit/plugin/PluginDescriptionFile.java new file mode 100644 index 00000000..52632e11 --- /dev/null +++ b/src/org/bukkit/plugin/PluginDescriptionFile.java @@ -0,0 +1,69 @@ + +package org.bukkit.plugin; + +import java.io.InputStream; +import java.io.Reader; +import java.io.Writer; +import java.util.HashMap; +import java.util.Map; +import org.yaml.snakeyaml.Yaml; +import org.yaml.snakeyaml.constructor.SafeConstructor; + +/** + * Provides access to a Plugins description file, plugin.yaml + */ +public final class PluginDescriptionFile { + private static final Yaml yaml = new Yaml(new SafeConstructor()); + private String name = null; + private String main = null; + + public PluginDescriptionFile(final InputStream stream) throws InvalidDescriptionException { + try { + loadMap((Map<String, Object>)yaml.load(stream)); + } catch (ClassCastException ex) { + throw new InvalidDescriptionException(ex); + } + } + + /** + * Loads a PluginDescriptionFile from the specified reader + * @param reader + */ + public PluginDescriptionFile(final Reader reader) { + loadMap((Map<String, Object>)yaml.load(reader)); + } + + /** + * Creates a new PluginDescriptionFile with the given detailed + * + * @param pluginName Name of this plugin + * @param mainClass Full location of the main class of this plugin + */ + public PluginDescriptionFile(final String pluginName, final String mainClass) { + name = pluginName; + main = mainClass; + } + + /** + * Saves this PluginDescriptionFile to the given writer + * + * @param writer Writer to output this file to + */ + public void save(Writer writer) { + yaml.dump(saveMap(), writer); + } + + private void loadMap(Map<String, Object> map) throws ClassCastException { + name = (String)map.get("name"); + main = (String)map.get("main"); + } + + private Map<String, Object> saveMap() { + Map<String, Object> map = new HashMap<String, Object>(); + + map.put("name", name); + map.put("main", main); + + return map; + } +} |