X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=src%2Fmain%2Fjava%2Fnet%2Fpterodactylus%2Fsone%2Ffreenet%2Fplugin%2FPluginConnector.java;h=d556a6c25697852966da19ff880aef112579aa92;hb=036c6fa20ce11ce8093f46fc0fce1c1da1839789;hp=e7bf82820cf4a7e8389f166b9f4b8840c6ce6ede;hpb=02de134dcf3d4500ae02320aab2dae827d499fa1;p=Sone.git diff --git a/src/main/java/net/pterodactylus/sone/freenet/plugin/PluginConnector.java b/src/main/java/net/pterodactylus/sone/freenet/plugin/PluginConnector.java index e7bf828..d556a6c 100644 --- a/src/main/java/net/pterodactylus/sone/freenet/plugin/PluginConnector.java +++ b/src/main/java/net/pterodactylus/sone/freenet/plugin/PluginConnector.java @@ -1,5 +1,5 @@ /* - * Sone - PluginConnector.java - Copyright © 2010 David Roden + * Sone - PluginConnector.java - Copyright © 2010–2012 David Roden * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -21,7 +21,8 @@ import java.util.Collections; import java.util.HashMap; import java.util.Map; -import net.pterodactylus.util.collection.Pair; +import com.google.inject.Inject; + import freenet.pluginmanager.FredPluginTalker; import freenet.pluginmanager.PluginNotFoundException; import freenet.pluginmanager.PluginRespirator; @@ -41,7 +42,7 @@ public class PluginConnector implements FredPluginTalker { private final PluginRespirator pluginRespirator; /** Connector listener managers for all plugin connections. */ - private final Map, ConnectorListenerManager> connectorListenerManagers = Collections.synchronizedMap(new HashMap, ConnectorListenerManager>()); + private final Map connectorListenerManagers = Collections.synchronizedMap(new HashMap()); /** * Creates a new plugin connector. @@ -49,6 +50,7 @@ public class PluginConnector implements FredPluginTalker { * @param pluginRespirator * The plugin respirator */ + @Inject public PluginConnector(PluginRespirator pluginRespirator) { this.pluginRespirator = pluginRespirator; } @@ -156,10 +158,10 @@ public class PluginConnector implements FredPluginTalker { * and {@code create} is {@code false} */ private ConnectorListenerManager getConnectorListenerManager(String pluginName, String identifier, boolean create) { - ConnectorListenerManager connectorListenerManager = connectorListenerManagers.get(new Pair(pluginName, identifier)); + ConnectorListenerManager connectorListenerManager = connectorListenerManagers.get(new PluginIdentifier(pluginName, identifier)); if (create && (connectorListenerManager == null)) { connectorListenerManager = new ConnectorListenerManager(this); - connectorListenerManagers.put(new Pair(pluginName, identifier), connectorListenerManager); + connectorListenerManagers.put(new PluginIdentifier(pluginName, identifier), connectorListenerManager); } return connectorListenerManager; } @@ -200,4 +202,57 @@ public class PluginConnector implements FredPluginTalker { connectorListenerManager.fireReceivedReply(params, data); } + /** + * Container for identifying plugins. Plugins are identified by their plugin + * name and their unique identifier. + * + * @author David Roden + */ + private static class PluginIdentifier { + + /** The plugin name. */ + private final String pluginName; + + /** The plugin identifier. */ + private final String identifier; + + /** + * Creates a new plugin identifier. + * + * @param pluginName + * The name of the plugin + * @param identifier + * The identifier of the plugin + */ + public PluginIdentifier(String pluginName, String identifier) { + this.pluginName = pluginName; + this.identifier = identifier; + } + + // + // OBJECT METHODS + // + + /** + * {@inheritDoc} + */ + @Override + public int hashCode() { + return pluginName.hashCode() ^ identifier.hashCode(); + } + + /** + * {@inheritDoc} + */ + @Override + public boolean equals(Object object) { + if (!(object instanceof PluginIdentifier)) { + return false; + } + PluginIdentifier pluginIdentifier = (PluginIdentifier) object; + return pluginName.equals(pluginIdentifier.pluginName) && identifier.equals(pluginIdentifier.identifier); + } + + } + }