com.nokia.carbide.cpp.internal.codescanner.config.CSConfigManager.java Source code

Java tutorial

Introduction

Here is the source code for com.nokia.carbide.cpp.internal.codescanner.config.CSConfigManager.java

Source

/*
* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). 
* All rights reserved.
* This component and the accompanying materials are made available
* under the terms of the License "Eclipse Public License v1.0"
* which accompanies this distribution, and is available
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
*
* Initial Contributors:
* Nokia Corporation - initial contribution.
*
* Contributors:
*
* Description: 
*
*/

package com.nokia.carbide.cpp.internal.codescanner.config;

import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.StringTokenizer;

import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResourceChangeEvent;
import org.eclipse.core.resources.IResourceChangeListener;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.Path;
import org.eclipse.emf.common.util.EList;
import org.eclipse.jface.dialogs.IDialogSettings;
import org.eclipse.jface.preference.IPreferenceStore;

import com.nokia.carbide.cpp.internal.codescanner.CSPlugin;
import com.nokia.carbide.cpp.internal.codescanner.ui.CSPreferenceConstants;
import com.nokia.cpp.internal.api.utils.core.HostOS;

/**
 * A class for handling global and project specific Codescanner configuration settings.
 */
public class CSConfigManager implements IResourceChangeListener {

    // name of CodeScanner configuration file generated by this plugin
    public static final String CS_CONFIG_SETTINGS_FILE = "carbide_cs_config.xml";

    // name of CodeScanner commandline tool
    public static final String CS_CMDLINE_TOOL = "codescanner" + HostOS.EXE_EXT;

    // private members
    private static CSConfigSettings defaultConfig;
    private String codescannerDir = null;
    private String resultsDir = null;
    private String outputFormatArgument = null;
    private List<String> inputArguments = null;
    private boolean htmlResults = false;
    private boolean xmlResults = false;
    private Map<IProject, CSProjectSettings> settingsMap;

    /**
     * Create an instance of CSConfigManager.
     */
    public CSConfigManager() {
        super();
        defaultConfig = new CSConfigSettings();
        defaultConfig.loadDefaultConfig();
        settingsMap = new HashMap<IProject, CSProjectSettings>();
    }

    /**
     * Get the default CodeScanner configuration settings.
     * @return default CodeScanner configuration settings
     */
    public CSConfigSettings getDefaultConfig() {
        if (defaultConfig == null) {
            defaultConfig = new CSConfigSettings();
            defaultConfig.loadDefaultConfig();
        }
        return defaultConfig;
    }

    /**
     * Find out whether the CodeScanner commandline tool exists in the specified
     * CodeScanner directory. If it does, return its full path, otherwise return null.
     * @return full path of the CodeScanner commandline tool if it exists
     */
    public String getCSCommandLineTool() {
        String csCmdLineTool = CS_CMDLINE_TOOL;
        if (codescannerDir != null && codescannerDir.length() > 0) {
            csCmdLineTool = codescannerDir + csCmdLineTool;
        }
        IPath fullPath = new Path(csCmdLineTool);
        if (fullPath.toFile().exists()) {
            return csCmdLineTool;
        } else {
            return null;
        }
    }

    /**
     * Return the directory for scanning results.
     * @return the directory for scanning results
     */
    public String getCSResultsDirectory() {
        return resultsDir;
    }

    /**
     * Are we generating html reports for scanning results?
     * @return true if generating html reports
     */
    public boolean generateHtmlResults() {
        return htmlResults;
    }

    /**
     * Are we generating xml reports for scanning results?
     * @return true if generating xml reports
     */
    public boolean generateXmlResults() {
        return xmlResults;
    }

    /**
     * Create CodeScanner settings for a given project and store it.
     * @param project - the project in question
     * @return the project specific CodeScanner settings
     */
    public CSProjectSettings createProjectSettings(IProject project) {
        synchronized (settingsMap) {
            assert (settingsMap.get(project) == null);
            CSProjectSettings settings = new CSProjectSettings(project);
            settingsMap.put(project, settings);
            return settings;
        }
    }

    /**
     * Get the CodeScanner settings for a given project.
     * @param project - the project in question
     * @return the project specific CodeScanner settings
     */
    public CSProjectSettings getProjectSettings(IProject project) {
        synchronized (settingsMap) {
            CSProjectSettings settings = settingsMap.get(project);
            if (settings == null) {
                settings = createProjectSettings(project);
            }
            return settings;
        }
    }

    /**
     * Handle any resource change event
     * @param event - the resource change event in question
     */
    public void resourceChanged(IResourceChangeEvent event) {
        // remove projects from map when they are closed or deleted
        if (event.getType() == IResourceChangeEvent.PRE_CLOSE
                || event.getType() == IResourceChangeEvent.PRE_DELETE) {
            settingsMap.remove(event.getResource());
        }
    }

    /**
     * Load either project specific or global CodeScanner configuration settings.
     * @param project - project associated with currently selected resource
     * @param configFilePath - path of CodeScanner configuration file
     * @return true if settings has been successfully loaded
     */
    public boolean loadConfigSettings(IProject project) {
        boolean success = false;
        if (project != null) {
            success = loadProjectConfigSettings(project);
        }
        if (!success) {
            success = loadGlobalConfigSettings();
        }
        clearArguments();
        return success;
    }

    /**
     * Load project specific CodeScanner settings.
     * @param project - project associated with currently selected resource
     * @param configFilePath - path of CodeScanner configuration file
     * @return true if settings has been successfully loaded
     */
    public boolean loadProjectConfigSettings(IProject project) {
        if (project == null) {
            return false;
        }
        boolean success = false;
        CSProjectSettings projectSettings = getProjectSettings(project);
        IDialogSettings cSettings = projectSettings.getDialogSettings();
        IDialogSettings pageSettings = cSettings.getSection(CSPreferenceConstants.PROPERTY_SETTINGS_ID);
        if (pageSettings == null) {
            success = false;
        } else {
            success = pageSettings.getBoolean(CSPreferenceConstants.PROJ_SETTINGS);
            if (success) {
                codescannerDir = pageSettings.get(CSPreferenceConstants.CODESCANNER_FOLDER);
                htmlResults = pageSettings.getBoolean(CSPreferenceConstants.HTML_RESULTS);
                xmlResults = pageSettings.getBoolean(CSPreferenceConstants.XML_RESULTS);
                resultsDir = pageSettings.get(CSPreferenceConstants.RESULTS_FOLDER);
            } else {
                codescannerDir = "";
                htmlResults = false;
                xmlResults = false;
                resultsDir = "";
            }
        }
        return success;
    }

    /**
     * Load global CodeScanner settings.
     * @param project - project associated with currently selected resource
     * @param configFilePath - path of CodeScanner configuration file
     * @return true if settings has been successfully loaded
     */
    public boolean loadGlobalConfigSettings() {
        IPreferenceStore store = CSPlugin.getCSPrefsStore();
        codescannerDir = store.getString(CSPreferenceConstants.CODESCANNER_FOLDER);
        htmlResults = store.getBoolean(CSPreferenceConstants.HTML_RESULTS);
        xmlResults = store.getBoolean(CSPreferenceConstants.XML_RESULTS);
        resultsDir = store.getString(CSPreferenceConstants.RESULTS_FOLDER);
        return true;
    }

    /**
     * Create a CodeScanner configuration file from either project specific or 
     * global CodeScanner configuration settings.
     * @param project - project associated with currently selected resource
     * @param configFilePath - path of CodeScanner configuration file
     * @return true if configuration file has been successfully created
     */
    public File createConfigFile(IProject project, String configFilePath) {
        File configFile = null;
        if (project != null) {
            configFile = createProjectConfigFile(project, configFilePath);
        }
        if (configFile == null) {
            configFile = createGlobalConfigFile(project, configFilePath);
        }
        return configFile;
    }

    /**
     * Create a CodeScanner configuration file from project specific CodeScanner settings.
     * @param configFilePath - path of CodeScanner configuration file
     * @param settings - project specific CodeScanner settings
     * @return CodeScanner configuration file
     */
    public File createProjectConfigFile(IProject project, String configFilePath) {
        if (configFilePath.length() == 0) {
            return null;
        }

        // load project specific settings
        CSProjectSettings projectSettings = getProjectSettings(project);
        IDialogSettings cSettings = projectSettings.getDialogSettings();
        IDialogSettings pageSettings = cSettings.getSection(CSPreferenceConstants.PROPERTY_SETTINGS_ID);
        if (pageSettings == null) {
            return null;
        }
        if (!pageSettings.getBoolean(CSPreferenceConstants.PROJ_SETTINGS)) {
            return null;
        }

        // create and initialize a configuration file
        File configFile = new File(configFilePath);
        if (configFile.exists()) {
            configFile.delete();
        }
        CSConfigSettings configSettings = new CSConfigSettings();
        configSettings.loadDefaultConfig();

        // retrieve various stored values
        String fileFilterString = pageSettings.get(CSPreferenceConstants.FILE_FILTERS);
        if (fileFilterString != null) {
            StringTokenizer fileFilters = new StringTokenizer(fileFilterString, CSPreferenceConstants.DELIMETER);
            EList<String> fileFilterList = configSettings.getSourceFilters().getExclude();
            fileFilterList.clear();
            while (fileFilters.hasMoreTokens()) {
                String fileFilter = fileFilters.nextToken();
                fileFilterList.add(fileFilter);
            }
        }

        String scriptsString = pageSettings.get(CSPreferenceConstants.RULE_SCRIPTS);
        String categoriesString = pageSettings.get(CSPreferenceConstants.RULE_CATEGORIES);
        String severitiesString = pageSettings.get(CSPreferenceConstants.RULE_SEVERITIES);
        String enabledString = pageSettings.get(CSPreferenceConstants.RULES_ENABLED);
        if ((scriptsString != null) && (categoriesString != null) && (severitiesString != null)
                && (enabledString != null)) {
            StringTokenizer scriptTokens = new StringTokenizer(scriptsString, CSPreferenceConstants.DELIMETER);
            StringTokenizer categoryTokens = new StringTokenizer(categoriesString, CSPreferenceConstants.DELIMETER);
            StringTokenizer severityTokens = new StringTokenizer(severitiesString, CSPreferenceConstants.DELIMETER);
            StringTokenizer enabledTokens = new StringTokenizer(enabledString, CSPreferenceConstants.DELIMETER);
            while (scriptTokens.hasMoreTokens() && categoryTokens.hasMoreTokens() && severityTokens.hasMoreTokens()
                    && enabledTokens.hasMoreTokens()) {
                String scriptString = "script_" + scriptTokens.nextToken();
                String categoryString = categoryTokens.nextToken();
                String severityString = severityTokens.nextToken();
                int value = Integer.valueOf(enabledTokens.nextToken());
                boolean enabled = (value != 0);
                CSScript script = CSScript.toScript(scriptString);
                if (!script.equals(CSScript.script_unknown)) {
                    configSettings.setScriptCategory(script, categoryString);
                    configSettings.setScriptSeverity(script, severityString);
                    configSettings.setScriptEnabled(script, enabled);
                }
            }
        }

        configSettings.setScriptCClassIgnore(pageSettings.get(CSPreferenceConstants.CCLASSIGNORE));
        configSettings.setScriptForbiddenWords(pageSettings.get(CSPreferenceConstants.FORBIDEENWORDS));
        String icons = pageSettings.get(CSPreferenceConstants.ICONS);
        if (icons.length() == 0) {
            icons = null;
        }
        configSettings.setScriptIcons(icons);
        configSettings.setScriptLFunctionIgnore(pageSettings.get(CSPreferenceConstants.LFUNCTIONIGNORE));
        configSettings.setScriptLongLinesLength(pageSettings.getInt(CSPreferenceConstants.LONGLINES_LENGTH));
        configSettings.setScriptOpenIgnore(pageSettings.get(CSPreferenceConstants.OPENIGNORE));
        configSettings.setScriptWorryingComments(pageSettings.get(CSPreferenceConstants.WORRYINGCOMMENTS));

        configSettings.setInputArguments(inputArguments);
        configSettings.setOutputFormatArgument(outputFormatArgument);

        if (isProjectKbScanningEnabled(pageSettings)) {
            CSPlugin.getKbManager().clearRules();
            CSPlugin.getKbManager().addKBaseRulesToConfigSettings(project, configSettings);
        }

        // copy settings to the configuration file and return it
        configSettings.saveConfig(configFile);
        return configFile;
    }

    /**
     * Create a CodeScanner configuration file from global CodeScanner settings.
     * @param configFilePath - path of CodeScanner configuration file
     * @return CodeScanner configuration file
     */
    public File createGlobalConfigFile(IProject project, String configFilePath) {
        if (configFilePath.length() == 0) {
            return null;
        }

        // create and initialize a configuration file
        File configFile = new File(configFilePath);
        if (configFile.exists()) {
            configFile.delete();
        }
        CSConfigSettings configSettings = new CSConfigSettings();
        configSettings.loadDefaultConfig();

        // retrieve various stored values
        IPreferenceStore store = CSPlugin.getCSPrefsStore();

        String fileFilterString = store.getString(CSPreferenceConstants.FILE_FILTERS);
        if (fileFilterString != null) {
            StringTokenizer fileFilters = new StringTokenizer(fileFilterString, CSPreferenceConstants.DELIMETER);
            EList<String> fileFilterList = configSettings.getSourceFilters().getExclude();
            fileFilterList.clear();
            while (fileFilters.hasMoreTokens()) {
                String fileFilter = fileFilters.nextToken();
                fileFilterList.add(fileFilter);
            }
        }

        String scriptsString = store.getString(CSPreferenceConstants.RULE_SCRIPTS);
        String categoriesString = store.getString(CSPreferenceConstants.RULE_CATEGORIES);
        String severitiesString = store.getString(CSPreferenceConstants.RULE_SEVERITIES);
        String enabledString = store.getString(CSPreferenceConstants.RULES_ENABLED);
        if ((scriptsString != null) && (categoriesString != null) && (severitiesString != null)
                && (enabledString != null)) {
            StringTokenizer scriptTokens = new StringTokenizer(scriptsString, CSPreferenceConstants.DELIMETER);
            StringTokenizer categoryTokens = new StringTokenizer(categoriesString, CSPreferenceConstants.DELIMETER);
            StringTokenizer severityTokens = new StringTokenizer(severitiesString, CSPreferenceConstants.DELIMETER);
            StringTokenizer enabledTokens = new StringTokenizer(enabledString, CSPreferenceConstants.DELIMETER);
            while (scriptTokens.hasMoreTokens() && categoryTokens.hasMoreTokens() && severityTokens.hasMoreTokens()
                    && enabledTokens.hasMoreTokens()) {
                String scriptString = "script_" + scriptTokens.nextToken();
                String categoryString = categoryTokens.nextToken();
                String severityString = severityTokens.nextToken();
                int value = Integer.valueOf(enabledTokens.nextToken());
                boolean enabled = (value != 0);
                CSScript script = CSScript.toScript(scriptString);
                if (!script.equals(CSScript.script_unknown)) {
                    configSettings.setScriptCategory(script, categoryString);
                    configSettings.setScriptSeverity(script, severityString);
                    configSettings.setScriptEnabled(script, enabled);
                }
            }
        }

        configSettings.setScriptCClassIgnore(store.getString(CSPreferenceConstants.CCLASSIGNORE));
        configSettings.setScriptForbiddenWords(store.getString(CSPreferenceConstants.FORBIDEENWORDS));
        String icons = store.getString(CSPreferenceConstants.ICONS);
        if (icons != null && icons.length() == 0) {
            icons = null;
        }
        configSettings.setScriptIcons(icons);
        configSettings.setScriptLFunctionIgnore(store.getString(CSPreferenceConstants.LFUNCTIONIGNORE));
        configSettings.setScriptLongLinesLength(store.getInt(CSPreferenceConstants.LONGLINES_LENGTH));
        configSettings.setScriptOpenIgnore(store.getString(CSPreferenceConstants.OPENIGNORE));
        configSettings.setScriptWorryingComments(store.getString(CSPreferenceConstants.WORRYINGCOMMENTS));
        configSettings.setInputArguments(inputArguments);
        configSettings.setOutputFormatArgument(outputFormatArgument);

        if (isGlobalKbScanningEnabled()) {
            CSPlugin.getKbManager().clearRules();
            CSPlugin.getKbManager().addKBaseRulesToConfigSettings(project, configSettings);
        }

        // copy settings to the configuration file and return it
        configSettings.saveConfig(configFile);
        return configFile;
    }

    /**
     * Load project specific CodeScanner settings from a CodeScanner configuration file.
     * @param configFilePath - path of CodeScanner configuration file
     * @param settings - project specific CodeScanner settings
     */
    public void loadProjectConfigFile(String configFilePath, IDialogSettings settings) {
        if ((configFilePath.length() == 0) || (settings == null)) {
            return;
        }

        // load settings from a configuration file
        File configFile = new File(configFilePath);
        CSConfigSettings configSettings = new CSConfigSettings();
        configSettings.loadDefaultConfig();
        if (configSettings.loadConfig(configFile)) {
            // store various values
            String fileFilters = "";
            EList<String> fileFilterList = configSettings.getSourceFilters().getExclude();
            for (Iterator<String> iterator = fileFilterList.iterator(); iterator.hasNext();) {
                fileFilters += iterator.next() + CSPreferenceConstants.DELIMETER;
            }
            settings.put(CSPreferenceConstants.FILE_FILTERS, fileFilters);

            String scriptString = "";
            String categoryString = "";
            String severityString = "";
            String enabledString = "";
            for (CSScript script : CSScript.values()) {
                if (!script.equals(CSScript.script_unknown)) {
                    scriptString += script.toString() + CSPreferenceConstants.DELIMETER;
                    if (configSettings.getScript(script) != null) {
                        categoryString += configSettings.getScriptCategory(script)
                                + CSPreferenceConstants.DELIMETER;
                        severityString += configSettings.getScriptSeverity(script)
                                + CSPreferenceConstants.DELIMETER;
                        int flag = 1;
                        if (!configSettings.getScriptEnabled(script))
                            flag = 0;
                        enabledString += flag + CSPreferenceConstants.DELIMETER;
                    } else {
                        categoryString += defaultConfig.getScriptCategory(script) + CSPreferenceConstants.DELIMETER;
                        severityString += defaultConfig.getScriptSeverity(script) + CSPreferenceConstants.DELIMETER;
                        int flag = 1;
                        if (!defaultConfig.getScriptEnabled(script))
                            flag = 0;
                        enabledString += flag + CSPreferenceConstants.DELIMETER;
                    }
                }
            }
            settings.put(CSPreferenceConstants.RULE_SCRIPTS, scriptString);
            settings.put(CSPreferenceConstants.RULE_CATEGORIES, categoryString);
            settings.put(CSPreferenceConstants.RULE_SEVERITIES, severityString);
            settings.put(CSPreferenceConstants.RULES_ENABLED, enabledString);

            settings.put(CSPreferenceConstants.CCLASSIGNORE, getCClassIgnoreFromConfig(configSettings));
            settings.put(CSPreferenceConstants.FORBIDEENWORDS, getForbiddenWordsFromConfig(configSettings));
            settings.put(CSPreferenceConstants.ICONS, getIconsFromConfig(configSettings));
            settings.put(CSPreferenceConstants.LFUNCTIONIGNORE, getLFunctionIgnoreFromConfig(configSettings));
            settings.put(CSPreferenceConstants.LONGLINES_LENGTH, getLongLinesLengthFromConfig(configSettings));
            settings.put(CSPreferenceConstants.OPENIGNORE, getOpenIgnoreFromConfig(configSettings));
            settings.put(CSPreferenceConstants.WORRYINGCOMMENTS, getWorryingCommentsFromConfig(configSettings));
        }
    }

    /**
     * Load global CodeScanner settings from a CodeScanner configuration file.
     * @param configFilePath - path of CodeScanner configuration file
     */
    public void loadGlobalConfigFile(String configFilePath) {
        if (configFilePath.length() == 0) {
            return;
        }

        // load settings from a configuration file
        File configFile = new File(configFilePath);
        CSConfigSettings configSettings = new CSConfigSettings();
        configSettings.loadDefaultConfig();
        if (configSettings.loadConfig(configFile)) {
            IPreferenceStore store = CSPlugin.getCSPrefsStore();

            // store various values
            String fileFilters = "";
            EList<String> fileFilterList = configSettings.getSourceFilters().getExclude();
            for (Iterator<String> iterator = fileFilterList.iterator(); iterator.hasNext();) {
                fileFilters += iterator.next() + CSPreferenceConstants.DELIMETER;
            }
            store.setValue(CSPreferenceConstants.FILE_FILTERS, fileFilters);

            String scriptString = "";
            String categoryString = "";
            String severityString = "";
            String enabledString = "";
            for (CSScript script : CSScript.values()) {
                if (!script.equals(CSScript.script_unknown)) {
                    scriptString += script.toString() + CSPreferenceConstants.DELIMETER;
                    if (configSettings.getScript(script) != null) {
                        categoryString += configSettings.getScriptCategory(script)
                                + CSPreferenceConstants.DELIMETER;
                        severityString += configSettings.getScriptSeverity(script)
                                + CSPreferenceConstants.DELIMETER;
                        int flag = 1;
                        if (!configSettings.getScriptEnabled(script))
                            flag = 0;
                        enabledString += flag + CSPreferenceConstants.DELIMETER;
                    } else {
                        categoryString += defaultConfig.getScriptCategory(script) + CSPreferenceConstants.DELIMETER;
                        severityString += defaultConfig.getScriptSeverity(script) + CSPreferenceConstants.DELIMETER;
                        int flag = 1;
                        if (!defaultConfig.getScriptEnabled(script))
                            flag = 0;
                        enabledString += flag + CSPreferenceConstants.DELIMETER;
                    }
                }
            }
            store.setValue(CSPreferenceConstants.RULE_SCRIPTS, scriptString);
            store.setValue(CSPreferenceConstants.RULE_CATEGORIES, categoryString);
            store.setValue(CSPreferenceConstants.RULE_SEVERITIES, severityString);
            store.setValue(CSPreferenceConstants.RULES_ENABLED, enabledString);

            store.setValue(CSPreferenceConstants.CCLASSIGNORE, getCClassIgnoreFromConfig(configSettings));
            store.setValue(CSPreferenceConstants.FORBIDEENWORDS, getForbiddenWordsFromConfig(configSettings));
            store.setValue(CSPreferenceConstants.ICONS, getIconsFromConfig(configSettings));
            store.setValue(CSPreferenceConstants.LFUNCTIONIGNORE, getLFunctionIgnoreFromConfig(configSettings));
            store.setValue(CSPreferenceConstants.LONGLINES_LENGTH, getLongLinesLengthFromConfig(configSettings));
            store.setValue(CSPreferenceConstants.OPENIGNORE, getOpenIgnoreFromConfig(configSettings));
            store.setValue(CSPreferenceConstants.WORRYINGCOMMENTS, getWorryingCommentsFromConfig(configSettings));
        }
    }

    /**
     * Set the input arguments.
     * @param configSettings - CodeScanner configuration settings to be set
     * @param inputPaths - input paths to be converted into input arguments
     */
    public void setInputArguments(List<IPath> inputPaths) {
        inputArguments = new ArrayList<String>();
        for (IPath inputPath : inputPaths) {
            inputArguments.add(inputPath.toOSString());
        }
    }

    /**
     * Set the output format argument.
     * @param configSettings - CodeScanner configuration settings to be set
     */
    public void setOutputFormatArgument() {
        outputFormatArgument = "std";
        if (generateHtmlResults()) {
            outputFormatArgument += "|html";
        }
        if (generateXmlResults()) {
            outputFormatArgument += "|xml";
        }
    }

    /**
     * Clear various argument settings.
     */
    private void clearArguments() {
        inputArguments = null;
        outputFormatArgument = null;
    }

    /**
     * Get the C class ignore list from from a CodeScanner configuration settings. 
     * If the list does not exist in, get it from the default configuration settings.
     * @param configSettings - CodeScanner configuration settings to be read
     * @return C class ignore list as a string
     */
    private String getCClassIgnoreFromConfig(CSConfigSettings configSettings) {
        String value = configSettings.getScriptCClassIgnore();
        if (value == null) {
            value = getDefaultConfig().getScriptCClassIgnore();
        }
        return value;
    }

    /**
     * Get the forbidden words list from from a CodeScanner configuration settings. 
     * If the list does not exist in, get it from the default configuration settings.
     * @param configSettings - CodeScanner configuration settings to be read
     * @return forbidden words list as a string
     */
    private String getForbiddenWordsFromConfig(CSConfigSettings configSettings) {
        String value = configSettings.getScriptForbiddenWords();
        if (value == null) {
            value = getDefaultConfig().getScriptForbiddenWords();
        }
        return value;
    }

    /**
     * Get the customizable icons list from from a CodeScanner configuration settings. 
     * If the list does not exist in, get it from the default configuration settings.
     * @param configSettings - CodeScanner configuration settings to be read
     * @return customizable icons list as a string
     */
    private String getIconsFromConfig(CSConfigSettings configSettings) {
        String value = configSettings.getScriptIcons();
        if (value == null) {
            value = getDefaultConfig().getScriptIcons();
        }
        if (value == null) {
            value = "";
        }
        return value;
    }

    /**
     * Get the L-function ignore list from from a CodeScanner configuration settings. 
     * If the list does not exist in, get it from the default configuration settings.
     * @param configSettings - CodeScanner configuration settings to be read
     * @return L-function ignore list as a string
     */
    private String getLFunctionIgnoreFromConfig(CSConfigSettings configSettings) {
        String value = configSettings.getScriptLFunctionIgnore();
        if (value == null) {
            value = getDefaultConfig().getScriptLFunctionIgnore();
        }
        return value;
    }

    /**
     * Get the long lines length attribute value from a CodeScanner configuration settings.
     * @param configSettings - CodeScanner configuration settings to be read
     * @return the long lines length attribute value
     */
    private int getLongLinesLengthFromConfig(CSConfigSettings configSettings) {
        return configSettings.getScriptLongLinesLength();
    }

    /**
     * Get the Open() function ignore list from from a CodeScanner configuration settings. 
     * If the list does not exist in, get it from the default configuration settings.
     * @param configSettings - CodeScanner configuration settings to be read
     * @return Open() function  ignore list as a string
     */
    private String getOpenIgnoreFromConfig(CSConfigSettings configSettings) {
        String value = configSettings.getScriptOpenIgnore();
        if (value == null) {
            value = getDefaultConfig().getScriptOpenIgnore();
        }
        return value;
    }

    /**
     * Get the worrying comments list from from a CodeScanner configuration settings. 
     * If the list does not exist in, get it from the default configuration settings.
     * @param configSettings - CodeScanner configuration settings to be read
     * @return worrying comments list as a string
     */
    private String getWorryingCommentsFromConfig(CSConfigSettings configSettings) {
        String value = configSettings.getScriptWorryingComments();
        if (value == null) {
            value = getDefaultConfig().getScriptWorryingComments();
        }
        return value;
    }

    /**
     * Check whether to perform project specific knowledge base scanning.
     * @param pageSettings - project specific settings
     * @return true if performing project specific knowledge base scanning.
     */
    private boolean isProjectKbScanningEnabled(IDialogSettings pageSettings) {
        return pageSettings.getBoolean(CSPreferenceConstants.KBSCANNING);
    }

    /**
     * Check whether to perform global knowledge base scanning.
     * @return true if performing global knowledge base scanning.
     */
    private boolean isGlobalKbScanningEnabled() {
        return CSPlugin.getCSPrefsStore().getBoolean(CSPreferenceConstants.KBSCANNING);
    }

}