20 package net.sf.gridarta.plugin;
23 import java.io.FileOutputStream;
24 import java.io.IOException;
25 import java.util.Collections;
26 import java.util.Iterator;
28 import java.util.TreeMap;
34 import nu.xom.Document;
35 import nu.xom.Element;
36 import nu.xom.ParsingException;
37 import nu.xom.Serializer;
38 import org.apache.log4j.Category;
39 import org.apache.log4j.Logger;
40 import org.jetbrains.annotations.NotNull;
41 import org.jetbrains.annotations.Nullable;
42 import org.xml.sax.SAXException;
63 private final Map<String, Plugin<G, A, R>>
plugins =
new TreeMap<>();
79 return plugins.get(name);
83 return plugins.size();
88 final Iterator<Plugin<G, A, R>> it = plugins.values().
iterator();
91 while (it.hasNext() && i-- >= 0) {
94 return i >= 0 ? null : m;
104 if (plugins.containsKey(plugin.getName())) {
108 plugins.put(plugin.getName(), plugin);
117 }
catch (
final IOException ex) {
118 LOG.warn(
"can't load plugin: " + ex.getMessage());
119 }
catch (
final ParsingException ex) {
120 LOG.warn(
"can't parse plugin: " + ex.getMessage());
121 }
catch (
final SAXException ex) {
122 LOG.warn(
"can't parse plugin: " + ex.getMessage());
127 if (!plugins.containsKey(plugin.getName())) {
128 throw new IllegalArgumentException();
133 plugins.remove(plugin.getName());
143 try (FileOutputStream fos =
new FileOutputStream(file)) {
144 final Element root = pluginModelParser.
toXML(plugin);
145 final Document d =
new Document(root);
146 final Serializer serializer =
new Serializer(fos,
"UTF-8");
147 serializer.setIndent(2);
157 listeners.
add(listener);
165 listeners.
remove(listener);
174 listener.pluginCreated(plugin);
184 listener.pluginDeleted(plugin);
194 listener.pluginRegistered(plugin);
204 listener.pluginUnregistered(plugin);
211 return Collections.unmodifiableCollection(plugins.values()).
iterator();
223 return addPlugin(plugin) ? plugin : null;
PluginModel(@NotNull final PluginParameterFactory< G, A, R > pluginParameterFactory, @NotNull final PluginModelParser< G, A, R > pluginModelParser)
void firePluginDeletedEvent(@NotNull final Plugin< G, A, R > plugin)
Notifies all listeners about a removed plugin.
final Map< String, Plugin< G, A, R > > plugins
void firePluginUnregisteredEvent(@NotNull final Plugin< G, A, R > plugin)
Notifies all listeners about an unregistered plugin.
T [] getListeners()
Returns an array of all the listeners.
Factory for Plugin Parameters.
Iterator< Plugin< G, A, R > > iterator()
Plugin< G, A, R > getPlugin(@NotNull final String name)
void removePlugin(@NotNull final Plugin< G, A, R > plugin)
Utility class for loading plugins.
static final Category LOG
The Logger for printing log messages.
final EventListenerList2< PluginModelListener< G, A, R > > listeners
The PluginModelListeners to inform of changes.
Listener interface for scripting related events.
void firePluginRegisteredEvent(@NotNull final Plugin< G, A, R > plugin)
Notifies all listeners about a registered plugin.
final PluginParameterFactory< G, A, R > pluginParameterFactory
void addPlugin(@NotNull final File file)
Base package of all Gridarta classes.
Reflects a game object (object on a map).
void remove(@NotNull final T listener)
Removes a listener.
GameObjects are the objects based on Archetypes found on maps.
void add(@NotNull final T listener)
Adds a listener.
void addPluginModelListener(@NotNull final PluginModelListener< G, A, R > listener)
Adds a listener to be informed of changes.
void savePlugin(@NotNull final Plugin< G, A, R > plugin, @NotNull final File file)
Saves a plugin to a given file.
Type-safe version of EventListenerList.
Iterator< PluginParameter< G, A, R, ?> > iterator()
Plugin< G, A, R > newPlugin(@NotNull final String name, @NotNull final String code)
boolean addPlugin(@NotNull final Plugin< G, A, R > plugin)
Add a new plugin.
void removePluginModelListener(@NotNull final PluginModelListener< G, A, R > listener)
Removes a listener to be informed of changes.
void reRegister(@NotNull final Plugin< G, A, R > plugin)
Plugin< G, A, R > getPlugin(final int index)
final PluginModelParser< G, A, R > pluginModelParser
void setCode(@NotNull final String code)
Sets the executable code of this plugin.
Element toXML(@NotNull final Plugin< G, A, R > plugin)
Converts a Plugin instance to XML representation.
Interface for MapArchObjects.
void firePluginCreatedEvent(@NotNull final Plugin< G, A, R > plugin)
Notify all listeners about an added plugin.