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

org.tango.TangoHostManager Maven / Gradle / Ivy

package org.tango;

import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.HashMap;
import java.util.Map;
import java.util.StringTokenizer;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.tango.utils.DevFailedUtils;

import fr.esrf.Tango.DevFailed;

/**
 * Management of tango host
 * 
 * @author ABEILLE
 * 
 */
public final class TangoHostManager {

    private static final Logger LOGGER = LoggerFactory.getLogger(TangoHostManager.class);
    /**
     * Host and port
     */
    public static final Map TANGO_HOST_PORT_MAP = new HashMap();
    /**
     * TANGO property name (TANGO_HOST)
     */
    public static final String TANGO_HOST_NAME = "TANGO_HOST";
    /**
     * host1:port1,host2:port2,...
     */
    private static final String TANGO_HOST = System.getProperty(TANGO_HOST_NAME, System.getenv(TANGO_HOST_NAME));

    private static boolean isChecked = false;

    private TangoHostManager() {
    }

    public static String getTangoHost() {
        return TANGO_HOST;
    }

    private static void checkTangoHost() throws DevFailed {
        if (!isChecked) {
            LOGGER.debug("TANGO_HOST is {} ", TANGO_HOST);
            if (TANGO_HOST_PORT_MAP.isEmpty()) {
                if (TANGO_HOST == null) {
                    throw DevFailedUtils.newDevFailed("CONFIG_ERROR", "tango host not defined");
                }
                if (TANGO_HOST.indexOf(':') < 0) {
                    throw DevFailedUtils.newDevFailed("CONFIG_ERROR", "tango host not defined correctly. Must be host:port");
                }
                // Check if there is more than one Tango Host
                StringTokenizer stk;
                if (TANGO_HOST.indexOf(',') > 0) {
                    stk = new StringTokenizer(TANGO_HOST, ",");
                } else {
                    stk = new StringTokenizer(TANGO_HOST);
                }

                while (stk.hasMoreTokens()) {
                    // Get each Tango_host
                    final String th = stk.nextToken();
                    final StringTokenizer stk2 = new StringTokenizer(th, ":");
                    final String host = stk2.nextToken();
                    final String port = stk2.nextToken();
                    // System.out.println(tangoHostPortMap);
                    TANGO_HOST_PORT_MAP.put(host, port);
                }
            }
            isChecked = true;
        }
    }

    public static String getFirstTangoHost() throws DevFailed {
        checkTangoHost();
        final Map.Entry entrySet = TANGO_HOST_PORT_MAP.entrySet().iterator().next();
        return entrySet.getKey() + ":" + entrySet.getValue();
    }

    public static String getFirstHost() throws DevFailed {
        checkTangoHost();
        final Map.Entry entrySet = TANGO_HOST_PORT_MAP.entrySet().iterator().next();
        return entrySet.getKey();
    }

    public static String getFirstPort() throws DevFailed {
        checkTangoHost();
        final Map.Entry entrySet = TANGO_HOST_PORT_MAP.entrySet().iterator().next();
        return entrySet.getValue();
    }

    /**
     * Returns the TANGO_HOST with full qualified name.
     * 
     * @param tangoHost default Tango_host
     * @return the TANGO_HOST with full qualified name.
     * @throws DevFailed if TANGO_HOST value has a bad syntax.
     */
    public static String getFirstFullTangoHost() throws DevFailed {
        // TODO
        final String TANGO_HOST_ERROR = "API_GetTangoHostFailed";

        // Get the tango_host
        String host = getFirstHost();

        try {
            // Get FQDN for host
            final InetAddress iadd = InetAddress.getByName(host);
            host = iadd.getCanonicalHostName();
        } catch (final UnknownHostException e) {
            throw DevFailedUtils.newDevFailed(TANGO_HOST_ERROR, e.toString());
        }

        return host + ':' + getFirstPort();
    }

    public static Map getTangoHostPortMap() {
        return new HashMap(TANGO_HOST_PORT_MAP);
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy