aboutsummaryrefslogtreecommitdiffstats
path: root/src/net/java/sip/communicator/service/protocol/jabber/AbstractSmackInteroperabilityLayer.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/net/java/sip/communicator/service/protocol/jabber/AbstractSmackInteroperabilityLayer.java')
-rw-r--r--src/net/java/sip/communicator/service/protocol/jabber/AbstractSmackInteroperabilityLayer.java141
1 files changed, 141 insertions, 0 deletions
diff --git a/src/net/java/sip/communicator/service/protocol/jabber/AbstractSmackInteroperabilityLayer.java b/src/net/java/sip/communicator/service/protocol/jabber/AbstractSmackInteroperabilityLayer.java
new file mode 100644
index 0000000..277da84
--- /dev/null
+++ b/src/net/java/sip/communicator/service/protocol/jabber/AbstractSmackInteroperabilityLayer.java
@@ -0,0 +1,141 @@
+/*
+ * Jitsi, the OpenSource Java VoIP and Instant Messaging client.
+ *
+ * Copyright @ 2015 Atlassian Pty Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package net.java.sip.communicator.service.protocol.jabber;
+
+import net.java.sip.communicator.util.*;
+import org.jivesoftware.smack.provider.*;
+
+
+/**
+ *
+ * This class abstracts interactions within Smack XMPP library (mostly with
+ * its <tt>ProviderManager</tt> class).
+ * This exists because <tt>JingleIQProvider</tt> and <tt>ColibriIQProvider</tt>
+ * are in need to be used with Smack v4, where <tt>ProviderManager</tt>
+ * has a different interface.
+ *
+ * @author Maksym Kulish
+ */
+abstract public class AbstractSmackInteroperabilityLayer {
+
+ /**
+ * The <tt>Logger</tt> used by the
+ * <tt>AbstractSmackInteroperabilityLayer</tt> class for
+ * reporting on improper implementations instantiation
+ */
+ private static final Logger logger = Logger.getLogger(
+ AbstractSmackInteroperabilityLayer.class);
+
+ /**
+ * The implementation class to be used within its Jitsi application
+ */
+ private static Class<AbstractSmackInteroperabilityLayer>
+ implementationClass;
+
+ /**
+ * The instance of Smack interoperability layer implementation class
+ */
+ private static AbstractSmackInteroperabilityLayer
+ interopLayerInstance;
+
+ /**
+ * Get the instance of Smack interoperability layer implementation class
+ *
+ * @return Smack interoperation layer implementation class
+ */
+ public static AbstractSmackInteroperabilityLayer getInstance()
+ {
+ if (interopLayerInstance == null)
+ {
+ try
+ {
+ interopLayerInstance =
+ implementationClass.newInstance();
+ }
+ catch (IllegalAccessException e)
+ {
+ // Never thrown within proper implementation
+ logger.fatal("Your AbstractSmackInteroperabilityLayer " +
+ "implementation " +
+ "cannot be accessed properly. " +
+ "Please fix the implementation");
+ }
+ catch (InstantiationException e)
+ {
+ // Never thrown within proper implementation
+ logger.fatal("Your AbstractSmackInteroperabilityLayer " +
+ "implementation " +
+ "cannot be instantiated properly. " +
+ "Please fix the implementation");
+ }
+ }
+ return interopLayerInstance;
+ }
+
+ /**
+ * Set the Smack interoperation layer
+ * implementation class to be used within this Jitsi application
+ * @param implementationClass Smack interoperation layer
+ * implementation class
+ */
+ public static void setImplementationClass(
+ Class implementationClass)
+ {
+ AbstractSmackInteroperabilityLayer.implementationClass
+ = implementationClass;
+ }
+
+
+ /**
+ * Add <tt>PacketExtensionProvider</tt> to the list of known
+ * providers
+ *
+ * @param elementName The element name where the matching is happening
+ * @param namespace The XML namespace used in that element
+ * @param provider <tt>PacketExtensionProvider</tt> implementation to be
+ * used
+ */
+ abstract public void addExtensionProvider(
+ String elementName, String namespace, Object provider);
+
+ /**
+ * Add <tt>IQProvider</tt> to the list of known
+ * providers
+ *
+ * @param elementName The element name where the matching is happening
+ * @param namespace The XML namespace used in that element
+ * @param provider <tt>IQProvider</tt> implementation to be
+ * used
+ */
+ abstract public void addIQProvider(
+ String elementName, String namespace, Object provider);
+
+ /**
+ * Get the <tt>PacketExtensionProvider</tt> for given element name and XML
+ * namespace
+ *
+ * @param elementName The element name where the matching is happening
+ * @param namespace The XML namespace used in that element
+ * @return <tt>PacketExtensionProvider</tt> implementation to be
+ * used
+ */
+ abstract public PacketExtensionProvider getExtensionProvider(
+ String elementName, String namespace);
+
+
+}