20 package net.sf.gridarta.plugin;
23 import java.io.FileOutputStream;
24 import java.io.IOException;
25 import java.util.Collection;
26 import java.util.Collections;
27 import java.util.Iterator;
29 import java.util.TreeMap;
30 import java.util.concurrent.CopyOnWriteArrayList;
35 import nu.xom.Document;
36 import nu.xom.Element;
37 import nu.xom.ParsingException;
38 import nu.xom.Serializer;
39 import org.apache.log4j.Category;
40 import org.apache.log4j.Logger;
41 import org.jetbrains.annotations.NotNull;
42 import org.jetbrains.annotations.Nullable;
43 import org.xml.sax.SAXException;
64 private final Map<String, Plugin<G, A, R>>
plugins =
new TreeMap<>();
71 private final Collection<PluginModelListener<G, A, R>>
listeners =
new CopyOnWriteArrayList<>();
89 final Iterator<Plugin<G, A, R>> it =
plugins.values().iterator();
92 while (it.hasNext() && i-- >= 0) {
95 return i >= 0 ? null : m;
105 if (
plugins.containsKey(plugin.getName())) {
109 plugins.put(plugin.getName(), plugin);
118 }
catch (
final IOException ex) {
119 LOG.warn(
"can't load plugin: " + ex.getMessage());
120 }
catch (
final ParsingException | SAXException ex) {
121 LOG.warn(
"can't parse plugin: " + ex.getMessage());
126 if (!
plugins.containsKey(plugin.getName())) {
127 throw new IllegalArgumentException(
"plugin does not exist: " + plugin.getName());
132 plugins.remove(plugin.getName());
142 try (FileOutputStream fos =
new FileOutputStream(file)) {
144 final Document d =
new Document(root);
145 final Serializer serializer =
new Serializer(fos,
"UTF-8");
146 serializer.setIndent(2);
173 listener.pluginCreated(plugin);
183 listener.pluginDeleted(plugin);
193 listener.pluginRegistered(plugin);
203 listener.pluginUnregistered(plugin);
210 return Collections.unmodifiableCollection(
plugins.values()).iterator();
222 return addPlugin(plugin) ? plugin :
null;