From 90ea9ba2fc1549ffaf98503f97403b2549daafc1 Mon Sep 17 00:00:00 2001 From: Florian Schmaus Date: Sun, 11 May 2014 09:27:41 +0200 Subject: [PATCH] Make ProviderManager static also remove initialize() from ProviderFileLoader, by simply putting the code into the constructor. --- .../UrlProviderFileInitializer.java | 2 +- .../smack/provider/ProviderFileLoader.java | 58 ++++++------------- .../smack/provider/ProviderManager.java | 50 +++++----------- .../smack/util/PacketParserUtils.java | 4 +- .../smack/parsing/ParsingExceptionTest.java | 5 +- .../smack/provider/ProviderConfigTest.java | 8 +-- .../debugger/EnhancedDebuggerWindow.java | 4 +- .../smackx/carbons/CarbonTest.java | 2 +- .../smackx/pubsub/provider/ItemProvider.java | 2 +- .../smackx/jingle/JingleManager.java | 3 +- .../smackx/jingle/nat/RTPBridge.java | 2 +- .../jivesoftware/smackx/jingle/nat/STUN.java | 2 +- 12 files changed, 46 insertions(+), 96 deletions(-) diff --git a/smack-core/src/main/java/org/jivesoftware/smack/initializer/UrlProviderFileInitializer.java b/smack-core/src/main/java/org/jivesoftware/smack/initializer/UrlProviderFileInitializer.java index 88bf1da05..f9f43cb38 100644 --- a/smack-core/src/main/java/org/jivesoftware/smack/initializer/UrlProviderFileInitializer.java +++ b/smack-core/src/main/java/org/jivesoftware/smack/initializer/UrlProviderFileInitializer.java @@ -49,7 +49,7 @@ public abstract class UrlProviderFileInitializer implements SmackInitializer { if (is != null) { LOGGER.log(Level.INFO, "Loading providers for file [" + filePath + "]"); ProviderFileLoader pfl = new ProviderFileLoader(is); - ProviderManager.getInstance().addLoader(pfl); + ProviderManager.addLoader(pfl); exceptions.addAll(pfl.getLoadingExceptions()); } else { diff --git a/smack-core/src/main/java/org/jivesoftware/smack/provider/ProviderFileLoader.java b/smack-core/src/main/java/org/jivesoftware/smack/provider/ProviderFileLoader.java index 55a0c6d94..49610afce 100644 --- a/smack-core/src/main/java/org/jivesoftware/smack/provider/ProviderFileLoader.java +++ b/smack-core/src/main/java/org/jivesoftware/smack/provider/ProviderFileLoader.java @@ -39,45 +39,14 @@ import org.xmlpull.v1.XmlPullParser; */ public class ProviderFileLoader implements ProviderLoader { private static final Logger LOGGER = Logger.getLogger(ProviderFileLoader.class.getName()); - + private Collection iqProviders; private Collection extProviders; - private InputStream providerStream; - private List exceptions = new LinkedList(); - - public ProviderFileLoader(InputStream providerFileInputStream) { - setInputStream(providerFileInputStream); - } - - public ProviderFileLoader() { - } - - @Override - public Collection getIQProviderInfo() { - initialize(); - return iqProviders; - } - @Override - public Collection getExtensionProviderInfo() { - initialize(); - return extProviders; - } - - public List getLoadingExceptions() { - return Collections.unmodifiableList(exceptions); - } + private List exceptions = new LinkedList(); @SuppressWarnings("unchecked") - private synchronized void initialize() { - // Check to see if already initialized - if (iqProviders != null) { - return; - } - - if (providerStream == null) { - throw new IllegalArgumentException("No input stream set for loader"); - } + public ProviderFileLoader(InputStream providerStream) { iqProviders = new ArrayList(); extProviders = new ArrayList(); @@ -151,6 +120,7 @@ public class ProviderFileLoader implements ProviderLoader { } catch (Exception e){ LOGGER.log(Level.SEVERE, "Unknown error occurred while parsing provider file", e); + exceptions.add(e); } finally { try { @@ -161,12 +131,18 @@ public class ProviderFileLoader implements ProviderLoader { } } } - - public void setInputStream(InputStream providerFileInput) { - if (providerFileInput == null) { - throw new IllegalArgumentException("InputStream cannot be null"); - } - providerStream = providerFileInput; - initialize(); + + @Override + public Collection getIQProviderInfo() { + return iqProviders; + } + + @Override + public Collection getExtensionProviderInfo() { + return extProviders; + } + + public List getLoadingExceptions() { + return Collections.unmodifiableList(exceptions); } } diff --git a/smack-core/src/main/java/org/jivesoftware/smack/provider/ProviderManager.java b/smack-core/src/main/java/org/jivesoftware/smack/provider/ProviderManager.java index b3b517d8a..540efb7d8 100644 --- a/smack-core/src/main/java/org/jivesoftware/smack/provider/ProviderManager.java +++ b/smack-core/src/main/java/org/jivesoftware/smack/provider/ProviderManager.java @@ -105,32 +105,10 @@ import org.jivesoftware.smack.packet.IQ; */ public final class ProviderManager { - private static ProviderManager instance; + private static final Map extensionProviders = new ConcurrentHashMap(); + private static final Map iqProviders = new ConcurrentHashMap(); - private Map extensionProviders = new ConcurrentHashMap(); - private Map iqProviders = new ConcurrentHashMap(); - - /** - * Returns the ProviderManager instance. - * - * @return the only ProviderManager valid instance. - */ - public static synchronized ProviderManager getInstance() { - if (instance == null) { - instance = new ProviderManager(); - } - return instance; - } - - private ProviderManager() { - super(); - } - - public void addLoader(ProviderLoader loader) { - if (loader == null) { - throw new IllegalArgumentException("loader cannot be null"); - } - + public static void addLoader(ProviderLoader loader) { if (loader.getIQProviderInfo() != null) { for (IQProviderInfo info : loader.getIQProviderInfo()) { iqProviders.put(getProviderKey(info.getElementName(), info.getNamespace()), info.getProvider()); @@ -164,7 +142,7 @@ public final class ProviderManager { * @param namespace the XML namespace. * @return the IQ provider. */ - public Object getIQProvider(String elementName, String namespace) { + public static Object getIQProvider(String elementName, String namespace) { String key = getProviderKey(elementName, namespace); return iqProviders.get(key); } @@ -176,7 +154,7 @@ public final class ProviderManager { * * @return all IQProvider instances. */ - public Collection getIQProviders() { + public static Collection getIQProviders() { return Collections.unmodifiableCollection(iqProviders.values()); } @@ -189,7 +167,7 @@ public final class ProviderManager { * @param namespace the XML namespace. * @param provider the IQ provider. */ - public void addIQProvider(String elementName, String namespace, + public static void addIQProvider(String elementName, String namespace, Object provider) { if (!(provider instanceof IQProvider || (provider instanceof Class && @@ -210,7 +188,7 @@ public final class ProviderManager { * @param elementName the XML element name. * @param namespace the XML namespace. */ - public void removeIQProvider(String elementName, String namespace) { + public static void removeIQProvider(String elementName, String namespace) { String key = getProviderKey(elementName, namespace); iqProviders.remove(key); } @@ -234,7 +212,7 @@ public final class ProviderManager { * @param namespace namespace associated with extension provider. * @return the extenion provider. */ - public Object getExtensionProvider(String elementName, String namespace) { + public static Object getExtensionProvider(String elementName, String namespace) { String key = getProviderKey(elementName, namespace); return extensionProviders.get(key); } @@ -248,7 +226,7 @@ public final class ProviderManager { * @param namespace the XML namespace. * @param provider the extension provider. */ - public void addExtensionProvider(String elementName, String namespace, + public static void addExtensionProvider(String elementName, String namespace, Object provider) { if (!(provider instanceof PacketExtensionProvider || provider instanceof Class)) { @@ -267,7 +245,7 @@ public final class ProviderManager { * @param elementName the XML element name. * @param namespace the XML namespace. */ - public void removeExtensionProvider(String elementName, String namespace) { + public static void removeExtensionProvider(String elementName, String namespace) { String key = getProviderKey(elementName, namespace); extensionProviders.remove(key); } @@ -279,7 +257,7 @@ public final class ProviderManager { * * @return all PacketExtensionProvider instances. */ - public Collection getExtensionProviders() { + public static Collection getExtensionProviders() { return Collections.unmodifiableCollection(extensionProviders.values()); } @@ -290,9 +268,7 @@ public final class ProviderManager { * @param namespace the namespace. * @return a unique key for the element name and namespace pair. */ - private String getProviderKey(String elementName, String namespace) { - StringBuilder buf = new StringBuilder(); - buf.append("<").append(elementName).append("/><").append(namespace).append("/>"); - return buf.toString(); + private static String getProviderKey(String elementName, String namespace) { + return elementName + '#' + namespace; } } diff --git a/smack-core/src/main/java/org/jivesoftware/smack/util/PacketParserUtils.java b/smack-core/src/main/java/org/jivesoftware/smack/util/PacketParserUtils.java index 460254710..32570de4d 100644 --- a/smack-core/src/main/java/org/jivesoftware/smack/util/PacketParserUtils.java +++ b/smack-core/src/main/java/org/jivesoftware/smack/util/PacketParserUtils.java @@ -284,7 +284,7 @@ public class PacketParserUtils { // Otherwise, see if there is a registered provider for // this element name and namespace. else { - Object provider = ProviderManager.getInstance().getIQProvider(elementName, namespace); + Object provider = ProviderManager.getIQProvider(elementName, namespace); if (provider != null) { if (provider instanceof IQProvider) { iqPacket = ((IQProvider)provider).parseIQ(parser); @@ -657,7 +657,7 @@ public class PacketParserUtils { throws Exception { // See if a provider is registered to handle the extension. - Object provider = ProviderManager.getInstance().getExtensionProvider(elementName, namespace); + Object provider = ProviderManager.getExtensionProvider(elementName, namespace); if (provider != null) { if (provider instanceof PacketExtensionProvider) { return ((PacketExtensionProvider)provider).parseExtension(parser); diff --git a/smack-core/src/test/java/org/jivesoftware/smack/parsing/ParsingExceptionTest.java b/smack-core/src/test/java/org/jivesoftware/smack/parsing/ParsingExceptionTest.java index 25a538c4b..ee058887e 100644 --- a/smack-core/src/test/java/org/jivesoftware/smack/parsing/ParsingExceptionTest.java +++ b/smack-core/src/test/java/org/jivesoftware/smack/parsing/ParsingExceptionTest.java @@ -31,7 +31,6 @@ import org.junit.Test; import org.xmlpull.v1.XmlPullParser; public class ParsingExceptionTest { - private final static ProviderManager PM = ProviderManager.getInstance(); private final static String EXTENSION2 = "" + @@ -43,12 +42,12 @@ public class ParsingExceptionTest { @Before public void init() { - PM.addExtensionProvider(ThrowException.ELEMENT, ThrowException.NAMESPACE, new ThrowException()); + ProviderManager.addExtensionProvider(ThrowException.ELEMENT, ThrowException.NAMESPACE, new ThrowException()); } @After public void tini() { - PM.removeExtensionProvider(ThrowException.ELEMENT, ThrowException.NAMESPACE); + ProviderManager.removeExtensionProvider(ThrowException.ELEMENT, ThrowException.NAMESPACE); } @Test diff --git a/smack-core/src/test/java/org/jivesoftware/smack/provider/ProviderConfigTest.java b/smack-core/src/test/java/org/jivesoftware/smack/provider/ProviderConfigTest.java index c6ef02b05..138f02750 100644 --- a/smack-core/src/test/java/org/jivesoftware/smack/provider/ProviderConfigTest.java +++ b/smack-core/src/test/java/org/jivesoftware/smack/provider/ProviderConfigTest.java @@ -36,7 +36,7 @@ public class ProviderConfigTest { @Test public void addGenericLoaderProvider() { - ProviderManager.getInstance().addLoader(new ProviderLoader() { + ProviderManager.addLoader(new ProviderLoader() { @Override public Collection getIQProviderInfo() { @@ -51,13 +51,13 @@ public class ProviderConfigTest { } }); - Assert.assertNotNull(ProviderManager.getInstance().getIQProvider("provider", "test:provider")); + Assert.assertNotNull(ProviderManager.getIQProvider("provider", "test:provider")); } @Test public void addClasspathFileLoaderProvider() throws Exception{ - ProviderManager.getInstance().addLoader(new ProviderFileLoader(FileUtils.getStreamForUrl("classpath:test.providers", null))); - Assert.assertNotNull(ProviderManager.getInstance().getIQProvider("provider", "test:file_provider")); + ProviderManager.addLoader(new ProviderFileLoader(FileUtils.getStreamForUrl("classpath:test.providers", null))); + Assert.assertNotNull(ProviderManager.getIQProvider("provider", "test:file_provider")); } public static class TestIQProvider implements IQProvider { diff --git a/smack-debug/src/main/java/org/jivesoftware/smackx/debugger/EnhancedDebuggerWindow.java b/smack-debug/src/main/java/org/jivesoftware/smackx/debugger/EnhancedDebuggerWindow.java index e8916c312..9e7555db1 100644 --- a/smack-debug/src/main/java/org/jivesoftware/smackx/debugger/EnhancedDebuggerWindow.java +++ b/smack-debug/src/main/java/org/jivesoftware/smackx/debugger/EnhancedDebuggerWindow.java @@ -223,7 +223,7 @@ public class EnhancedDebuggerWindow { iqProvidersPanel.setLayout(new GridLayout(1, 1)); iqProvidersPanel.setBorder(BorderFactory.createTitledBorder("Installed IQ Providers")); Vector providers = new Vector(); - for (Object provider : ProviderManager.getInstance().getIQProviders()) { + for (Object provider : ProviderManager.getIQProviders()) { if (provider.getClass() == Class.class) { providers.add(((Class) provider).getName()); } @@ -242,7 +242,7 @@ public class EnhancedDebuggerWindow { extensionProvidersPanel.setLayout(new GridLayout(1, 1)); extensionProvidersPanel.setBorder(BorderFactory.createTitledBorder("Installed Extension Providers")); providers = new Vector(); - for (Object provider : ProviderManager.getInstance().getExtensionProviders()) { + for (Object provider : ProviderManager.getExtensionProviders()) { if (provider.getClass() == Class.class) { providers.add(((Class) provider).getName()); } diff --git a/smack-experimental/src/test/java/org/jivesoftware/smackx/carbons/CarbonTest.java b/smack-experimental/src/test/java/org/jivesoftware/smackx/carbons/CarbonTest.java index ba08a7343..b8aee5b5f 100644 --- a/smack-experimental/src/test/java/org/jivesoftware/smackx/carbons/CarbonTest.java +++ b/smack-experimental/src/test/java/org/jivesoftware/smackx/carbons/CarbonTest.java @@ -41,7 +41,7 @@ public class CarbonTest { @BeforeClass public static void setup() { - ProviderManager.getInstance().addExtensionProvider("forwarded", "urn:xmpp:forward:0", new ForwardedProvider()); + ProviderManager.addExtensionProvider("forwarded", "urn:xmpp:forward:0", new ForwardedProvider()); } @Test diff --git a/smack-extensions/src/main/java/org/jivesoftware/smackx/pubsub/provider/ItemProvider.java b/smack-extensions/src/main/java/org/jivesoftware/smackx/pubsub/provider/ItemProvider.java index 4496225b4..6968e99ac 100644 --- a/smack-extensions/src/main/java/org/jivesoftware/smackx/pubsub/provider/ItemProvider.java +++ b/smack-extensions/src/main/java/org/jivesoftware/smackx/pubsub/provider/ItemProvider.java @@ -54,7 +54,7 @@ public class ItemProvider implements PacketExtensionProvider String payloadElemName = parser.getName(); String payloadNS = parser.getNamespace(); - if (ProviderManager.getInstance().getExtensionProvider(payloadElemName, payloadNS) == null) + if (ProviderManager.getExtensionProvider(payloadElemName, payloadNS) == null) { boolean done = false; boolean isEmptyElement = false; diff --git a/smack-jingle/src/main/java/org/jivesoftware/smackx/jingle/JingleManager.java b/smack-jingle/src/main/java/org/jivesoftware/smackx/jingle/JingleManager.java index 8dca34d96..9b5310ca3 100644 --- a/smack-jingle/src/main/java/org/jivesoftware/smackx/jingle/JingleManager.java +++ b/smack-jingle/src/main/java/org/jivesoftware/smackx/jingle/JingleManager.java @@ -253,8 +253,7 @@ public class JingleManager implements JingleSessionListener { * method you just call it once and all new connections will report Jingle support.) */ public static void setJingleServiceEnabled() { - ProviderManager providerManager = ProviderManager.getInstance(); - providerManager.addIQProvider("jingle", "urn:xmpp:tmp:jingle", new JingleProvider()); + ProviderManager.addIQProvider("jingle", "urn:xmpp:tmp:jingle", new JingleProvider()); // Enable the Jingle support on every established connection // The ServiceDiscoveryManager class should have been already diff --git a/smack-jingle/src/main/java/org/jivesoftware/smackx/jingle/nat/RTPBridge.java b/smack-jingle/src/main/java/org/jivesoftware/smackx/jingle/nat/RTPBridge.java index f120d7c97..8318e741e 100644 --- a/smack-jingle/src/main/java/org/jivesoftware/smackx/jingle/nat/RTPBridge.java +++ b/smack-jingle/src/main/java/org/jivesoftware/smackx/jingle/nat/RTPBridge.java @@ -81,7 +81,7 @@ public class RTPBridge extends IQ { public static final String NAMESPACE = "http://www.jivesoftware.com/protocol/rtpbridge"; static { - ProviderManager.getInstance().addIQProvider(NAME, NAMESPACE, new Provider()); + ProviderManager.addIQProvider(NAME, NAMESPACE, new Provider()); } /** diff --git a/smack-jingle/src/main/java/org/jivesoftware/smackx/jingle/nat/STUN.java b/smack-jingle/src/main/java/org/jivesoftware/smackx/jingle/nat/STUN.java index 9768d2af8..ee8420294 100644 --- a/smack-jingle/src/main/java/org/jivesoftware/smackx/jingle/nat/STUN.java +++ b/smack-jingle/src/main/java/org/jivesoftware/smackx/jingle/nat/STUN.java @@ -66,7 +66,7 @@ public class STUN extends IQ { public static final String NAMESPACE = "google:jingleinfo"; static { - ProviderManager.getInstance().addIQProvider(ELEMENT_NAME, NAMESPACE, new STUN.Provider()); + ProviderManager.addIQProvider(ELEMENT_NAME, NAMESPACE, new STUN.Provider()); } /**