/*-
 * ~~~~~~licensing~~~~~~
 * connection-manager
 * ==========
 * Copyright (C) 2020 - 2023 EmDev LLC
 * ==========
 * You may not use this file except in accordance with the License Terms of the Copyright
 * Holder located at: https://entaxy.ru/eula . All copyrights, all intellectual property
 * rights to the Software and any copies are the property of the Copyright Holder. Unless
 * it is explicitly allowed the Copyright Holder, the User is prohibited from using the
 * Software for commercial purposes to provide services to third parties.
 * 
 * The Copyright Holder hereby declares that the Software is provided on an "AS IS".
 * Under no circumstances does the Copyright Holder guarantee or promise that the
 * Software provided by him will be suitable or not suitable for the specific purposes
 * of the User, that the Software will meet all commercial and personal subjective
 * expectations of the User, that the Software will work properly, without technical
 * errors, quickly and uninterruptedly.
 * 
 * Under no circumstances shall the Copyright Holder or its Affiliates is not liable
 * to the User for any direct or indirect losses of the User, his expenses or actual
 * damage, including, downtime; loss of bussines; lost profit; lost earnings; loss
 * or damage to data, property, etc.
 * ~~~~~~/licensing~~~~~~
 */
package ru.entaxy.esb.platform.runtime.core.management.connection.util;

import org.osgi.framework.BundleContext;
import org.osgi.framework.FrameworkUtil;
import org.osgi.framework.ServiceReference;
import org.osgi.util.tracker.ServiceTracker;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import ru.entaxy.esb.platform.runtime.core.management.connection.api.ConnectionManager;
import ru.entaxy.platform.base.support.osgi.OSGIUtils;

public class ConnectionManagerUtil {

    private static final Logger LOG = LoggerFactory.getLogger(ConnectionManagerUtil.class);

    private static ServiceTracker tracker = null;

    public static ConnectionManager getService() {

        // get our own bundleContext
        BundleContext bundleContext = FrameworkUtil.getBundle(ConnectionManagerUtil.class).getBundleContext();

        try {
            return OSGIUtils.services().bundleContext(bundleContext)
                    .waitService(2000)
                    .ofClass(ConnectionManager.class)
                    .<ConnectionManager>get();
        } catch (Exception e1) {
            // TODO Auto-generated catch block
            LOG.warn(e1.getMessage());
            return null;
        }

        // found an issue: service is not returned 'cause the initializers start earlier than 
        // Karaf publishes service
        // So we should use tracker here to be sure the service is active
/*
        if (tracker == null) {
        	tracker = new ServiceTracker(bundleContext, ConnectionManager.class, null);
        	tracker.open();
        }
        try {
        	tracker.waitForService(2000);
        } catch (Exception e) {
			// TODO: handle exception
		}
*/        
/*        
        ServiceReference<ConnectionManager> connectionManagerServiceReference =
        		tracker.getServiceReference();
                // bundleContext.getServiceReference(ConnectionManager.class);
        return bundleContext.getService(connectionManagerServiceReference);
*/
    }
}
