/*******************************************************************************
 * Copyright (c) 2005, 2009 Oracle Corporation.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License 2.0
 * which accompanies this distribution, and is available at
 * https://www.eclipse.org/legal/epl-2.0/
 *
 * SPDX-License-Identifier: EPL-2.0
 *
 * Contributors:
 *    Debajit Adhikary - initial API and implementation
 *******************************************************************************/ 
package org.eclipse.jst.jsf.core.internal.project.facet;

import org.eclipse.core.runtime.IConfigurationElement;
import org.eclipse.core.runtime.IExtension;
import org.eclipse.core.runtime.IExtensionPoint;
import org.eclipse.jst.jsf.core.internal.JSFCorePlugin;


/**
 * Utility class to provide an easy way to read the jsfFacetConfiguration 
 * extension-point (org.eclipse.jst.jsf.core.jsfFacetConfiguration).

 * @author Debajit Adhikary (Oracle)
 *
 */
public class JsfFacetConfigurationUtil
{
    private static final String JSF_FACES_CONFIG_EXTENSION_ID = "jsfFacetConfiguration"; //$NON-NLS-1$
    private static final String DISABLED_ATTR_NAME = "disabled"; //$NON-NLS-1$
    private static final String TRUE_STRING = "true"; //$NON-NLS-1$


    /**
     * @return True if the disabled attribute is not set to "true".
     */
    public static boolean isJsfFacetConfigurationEnabled ()
    {
        return !isJsfFacetConfigurationDisabled();
    }

    
    /**
     * @return True if disabled="true" is set in the extension point.
     */
    public static boolean isJsfFacetConfigurationDisabled ()
    {
        IExtensionPoint jsfFacetConfigExtensionPoint = JSFCorePlugin.getDefault().getExtension(JSF_FACES_CONFIG_EXTENSION_ID);
        for (final IExtension extension : jsfFacetConfigExtensionPoint.getExtensions())
        {
            for (final IConfigurationElement configElement : extension.getConfigurationElements())
            {
                if (configElement != null && configElement.getName().equals(JSF_FACES_CONFIG_EXTENSION_ID))
                {
                    final String attrValue = configElement.getAttribute(DISABLED_ATTR_NAME);
                    if(attrValue != null)
                    {
                        return attrValue.equalsIgnoreCase(TRUE_STRING);
                    }
                }
            }
        }

        return false;
    }


}
