Skip to content

Commit

Permalink
Make ProviderManager static
Browse files Browse the repository at this point in the history
also remove initialize() from ProviderFileLoader, by simply putting the
code into the constructor.
  • Loading branch information
Flowdalic committed May 11, 2014
1 parent 0111be1 commit 90ea9ba
Show file tree
Hide file tree
Showing 12 changed files with 46 additions and 96 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ public void initialize() {
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 {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,45 +39,14 @@
*/
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>();

Expand Down Expand Up @@ -151,6 +120,7 @@ else if (PacketExtension.class.isAssignableFrom(provider)) {
}
catch (Exception e){
LOGGER.log(Level.SEVERE, "Unknown error occurred while parsing provider file", e);
exceptions.add(e);
}
finally {
try {
Expand All @@ -161,12 +131,18 @@ else if (PacketExtension.class.isAssignableFrom(provider)) {
}
}
}

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);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -105,32 +105,10 @@
*/
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());
Expand Down Expand Up @@ -164,7 +142,7 @@ public void addLoader(ProviderLoader loader) {
* @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);
}
Expand All @@ -176,7 +154,7 @@ public Object getIQProvider(String elementName, String namespace) {
*
* @return all IQProvider instances.
*/
public Collection<Object> getIQProviders() {
public static Collection<Object> getIQProviders() {
return Collections.unmodifiableCollection(iqProviders.values());
}

Expand All @@ -189,7 +167,7 @@ public Collection<Object> getIQProviders() {
* @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 &&
Expand All @@ -210,7 +188,7 @@ public void addIQProvider(String elementName, String namespace,
* @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);
}
Expand All @@ -234,7 +212,7 @@ public void removeIQProvider(String elementName, String namespace) {
* @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);
}
Expand All @@ -248,7 +226,7 @@ public Object getExtensionProvider(String elementName, String namespace) {
* @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)) {
Expand All @@ -267,7 +245,7 @@ public void addExtensionProvider(String elementName, String namespace,
* @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);
}
Expand All @@ -279,7 +257,7 @@ public void removeExtensionProvider(String elementName, String namespace) {
*
* @return all PacketExtensionProvider instances.
*/
public Collection<Object> getExtensionProviders() {
public static Collection<Object> getExtensionProviders() {
return Collections.unmodifiableCollection(extensionProviders.values());
}

Expand All @@ -290,9 +268,7 @@ public Collection<Object> getExtensionProviders() {
* @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;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -284,7 +284,7 @@ else if (elementName.equals("bind") &&
// 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);
Expand Down Expand Up @@ -657,7 +657,7 @@ public static PacketExtension parsePacketExtension(String elementName, String na
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);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,6 @@
import org.xmlpull.v1.XmlPullParser;

public class ParsingExceptionTest {
private final static ProviderManager PM = ProviderManager.getInstance();

private final static String EXTENSION2 =
"<extension2 xmlns='namespace'>" +
Expand All @@ -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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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() {
Expand All @@ -51,13 +51,13 @@ public Collection<ExtensionProviderInfo> getExtensionProviderInfo() {
}
});

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 {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -223,7 +223,7 @@ public void windowClosing(WindowEvent evt) {
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());
}
Expand All @@ -242,7 +242,7 @@ public void windowClosing(WindowEvent evt) {
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());
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ public PacketExtension parseExtension(XmlPullParser parser) throws Exception
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;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -253,8 +253,7 @@ public void presenceChanged(Presence presence) {
* 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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,7 @@ private enum BridgeAction {
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());
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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());
}

/**
Expand Down

0 comments on commit 90ea9ba

Please sign in to comment.