All Downloads are FREE. Search and download functionalities are using the official Maven repository.

it.netgrid.bauer.impl.StaticTopicBinder Maven / Gradle / Ivy

package it.netgrid.bauer.impl;

import org.eclipse.paho.mqttv5.client.MqttClient;
import org.eclipse.paho.mqttv5.common.MqttException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.google.inject.Module;

import java.util.Properties;

import it.netgrid.bauer.ITopicFactory;
import it.netgrid.bauer.TopicFactory;
import it.netgrid.bauer.TopicFactoyBinder;
import it.netgrid.bauer.impl.impl.MqttConfigFromPropertiesProvider;
import it.netgrid.bauer.impl.impl.ThreadedMqttClientManager;

public class StaticTopicBinder implements TopicFactoyBinder {

    private static final Logger log = LoggerFactory.getLogger(StaticTopicBinder.class);

    private static final StaticTopicBinder SINGLETON = new StaticTopicBinder();

    /**
     * Return the singleton of this class.
     * 
     * @return the StaticLoggerBinder singleton
     */
    public static final StaticTopicBinder getSingleton() {
        return SINGLETON;
    }

    /**
     * Declare the version of the BAUER API this implementation is compiled against.
     * The value of this field is modified with each major release.
     */
    // to avoid constant folding by the compiler, this field must *not* be final
    public static String REQUESTED_API_VERSION = "1.0"; // !final

    private static final String topicFactoryClassStr = MqttTopicFactory.class.getName();


    /**
     * The ILoggerFactory instance returned by the {@link #getLoggerFactory}
     * method should always be the same object
     */
    private ITopicFactory topicFactory;

    private StaticTopicBinder() {}

    public ITopicFactory getTopicFactory() {
        if(topicFactory == null) {
            MqttConfigFromPropertiesProvider cp = new MqttConfigFromPropertiesProvider(TopicFactory.getProperties());

            try {
                // Build client and manager for mqtt connection handling
                MqttClient client = new MqttClient(cp.config().url(), cp.config().clientId());
                MqttClientManager mqttClientManager = new ThreadedMqttClientManager(client, cp.config());
    
                // Build topic factory
                MqttMessageFactory messageFactory = cp.config().getMessageFactory();
                topicFactory = new MqttTopicFactory(mqttClientManager, messageFactory);
    
                // Open MQTT connection
                mqttClientManager.safeFirstConnection();
            } catch (MqttException e) {
                log.error(String.format("Unable to init MQTT Client: %s", e.getMessage()));
            }
        }
        return topicFactory;
    }

    public String getTopicFactoryClassStr() {
        return topicFactoryClassStr;
    }

    @Override
    public Module getTopicFactoryAsModule(Properties properties) {
        return new MqttTopicFactoryModule(properties);
    }

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy