/*
 * 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.plugin.desktoputil;

import net.java.sip.communicator.service.gui.*;
import org.osgi.framework.*;

/**
 * Utils to query for config forms.
 * @author Damian Minkov
 */
public class ConfigFormUtils
{
    /**
     * Returns the first available configuration form with the provided
     * class name.
     * @param formType the form type to search for, any of the
     * ConfigurationForm form types. (SECURITY_TYPE, GENERAL_TYPE,
     * ADVANCED_TYPE, CONTACT_SOURCE_TYPE).
     * @param className the class name to search for
     *
     * @return the first available configuration form found
     */
    public static ConfigurationForm getConfigForm(
        String formType, String className)
    {
        BundleContext bundleContext = DesktopUtilActivator.bundleContext;
        String osgiFilter = "("
            + ConfigurationForm.FORM_TYPE + "=" + formType + ")";

        ServiceReference[] confFormsRefs = null;
        try
        {
            confFormsRefs = bundleContext
                .getServiceReferences(
                    ConfigurationForm.class.getName(),
                    osgiFilter);
        }
        catch (InvalidSyntaxException ex)
        {}

        if(confFormsRefs != null)
        {
            for (int i = 0; i < confFormsRefs.length; i++)
            {
                ConfigurationForm form
                    = (ConfigurationForm) bundleContext
                        .getService(confFormsRefs[i]);

                if (form instanceof LazyConfigurationForm)
                {
                    LazyConfigurationForm lazyConfigForm
                        = (LazyConfigurationForm) form;

                    if (lazyConfigForm.getFormClassName().equals(className))
                    {
                        return form;
                    }
                }
                else if (form.getClass().getName().equals(className))
                {
                    return form;
                }
            }
        }

        return null;
    }
}
