Make ProviderManager static

also remove initialize() from ProviderFileLoader, by simply putting the
code into the constructor.
This commit is contained in:
Florian Schmaus 2014-05-11 09:27:41 +02:00
parent 0111be1a04
commit 90ea9ba2fc
12 changed files with 46 additions and 96 deletions

View File

@ -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 {

View File

@ -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<IQProviderInfo> iqProviders;
private Collection<ExtensionProviderInfo> extProviders;
private InputStream providerStream;
private List<Exception> exceptions = new LinkedList<Exception>();
public ProviderFileLoader(InputStream providerFileInputStream) {
setInputStream(providerFileInputStream);
}
public ProviderFileLoader() {
}
@Override
public Collection<IQProviderInfo> getIQProviderInfo() {
initialize();
return iqProviders;
}
@Override
public Collection<ExtensionProviderInfo> getExtensionProviderInfo() {
initialize();
return extProviders;
}
public List<Exception> getLoadingExceptions() {
return Collections.unmodifiableList(exceptions);
}
private List<Exception> exceptions = new LinkedList<Exception>();
@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<IQProviderInfo>();
extProviders = new ArrayList<ExtensionProviderInfo>();
@ -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<IQProviderInfo> getIQProviderInfo() {
return iqProviders;
}
@Override
public Collection<ExtensionProviderInfo> getExtensionProviderInfo() {
return extProviders;
}
public List<Exception> getLoadingExceptions() {
return Collections.unmodifiableList(exceptions);
}
}

View File

@ -105,32 +105,10 @@ import org.jivesoftware.smack.packet.IQ;
*/
public final class ProviderManager {
private static ProviderManager instance;
private static final Map<String, Object> extensionProviders = new ConcurrentHashMap<String, Object>();
private static final Map<String, Object> iqProviders = new ConcurrentHashMap<String, Object>();
private Map<String, Object> extensionProviders = new ConcurrentHashMap<String, Object>();
private Map<String, Object> iqProviders = new ConcurrentHashMap<String, Object>();
/**
* 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<Object> getIQProviders() {
public static Collection<Object> 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<Object> getExtensionProviders() {
public static Collection<Object> 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;
}
}

View File

@ -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);

View File

@ -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 =
"<extension2 xmlns='namespace'>" +
@ -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

View File

@ -36,7 +36,7 @@ public class ProviderConfigTest {
@Test
public void addGenericLoaderProvider() {
ProviderManager.getInstance().addLoader(new ProviderLoader() {
ProviderManager.addLoader(new ProviderLoader() {
@Override
public Collection<IQProviderInfo> 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 {

View File

@ -223,7 +223,7 @@ public class EnhancedDebuggerWindow {
iqProvidersPanel.setLayout(new GridLayout(1, 1));
iqProvidersPanel.setBorder(BorderFactory.createTitledBorder("Installed IQ Providers"));
Vector<String> providers = new Vector<String>();
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<String>();
for (Object provider : ProviderManager.getInstance().getExtensionProviders()) {
for (Object provider : ProviderManager.getExtensionProviders()) {
if (provider.getClass() == Class.class) {
providers.add(((Class<?>) provider).getName());
}

View File

@ -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

View File

@ -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;

View File

@ -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

View File

@ -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());
}
/**

View File

@ -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());
}
/**