com.nokia.carbide.cpp.internal.codescanner.ui.CSRulesTabPage.java Source code

Java tutorial

Introduction

Here is the source code for com.nokia.carbide.cpp.internal.codescanner.ui.CSRulesTabPage.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.ui;

import java.util.ArrayList;
import java.util.List;
import java.util.StringTokenizer;

import org.eclipse.jface.dialogs.IDialogSettings;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.jface.viewers.ArrayContentProvider;
import org.eclipse.jface.viewers.CheckStateChangedEvent;
import org.eclipse.jface.viewers.CheckboxTableViewer;
import org.eclipse.jface.viewers.DoubleClickEvent;
import org.eclipse.jface.viewers.ICheckStateListener;
import org.eclipse.jface.viewers.IDoubleClickListener;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.ITableLabelProvider;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Group;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableColumn;

import com.nokia.carbide.cpp.internal.codescanner.CSPlugin;
import com.nokia.carbide.cpp.internal.codescanner.Messages;
import com.nokia.carbide.cpp.internal.codescanner.config.CSCategory;
import com.nokia.carbide.cpp.internal.codescanner.config.CSConfigSettings;
import com.nokia.carbide.cpp.internal.codescanner.config.CSRule;
import com.nokia.carbide.cpp.internal.codescanner.config.CSScript;
import com.nokia.carbide.cpp.internal.codescanner.config.CSSeverity;

/**
 * A class to create and control the CodeScanner Rules tab page.
 */
public class CSRulesTabPage extends Composite {

    /**
     * Inner class to handle labels of the rules table.
     */
    private class CSRulesLabelProvider extends LabelProvider implements ITableLabelProvider {

        public String getColumnText(Object element, int index) {
            CSRule rule = (CSRule) element;
            switch (index) {
            case 0:
                return rule.getScript().toString();
            case 1:
                return rule.getCategory().toString();
            case 2:
                return rule.getSeverity().toString();
            default:
                return "unknown " + index;
            }
        }

        public Image getColumnImage(Object element, int index) {
            return null;
        }
    }

    // private members for various controls of this preference page
    private Group tableGroup = null;
    private Label detailsLabel = null;
    private CheckboxTableViewer rulesTableViewer = null;
    private Button editButton = null;
    private Button enableAllButton = null;
    private Button disableAllButton = null;
    private String cclassIgnore = "";
    private String icons = "";
    private String lfunctionIgnore = "";
    private int longLinesLength = 0;
    private String forbiddenWords = "";
    private String openIgnore = "";
    private String worryingComments = "";
    private CSConfigSettings defaultConfigSettings = null;
    private List<CSRule> rules = null;
    private CSRulesSorter rulesSorter = null;

    /**
     * Create contents of this tab page.
     * @param parent - the parent composite
     */
    public CSRulesTabPage(Composite parent) {
        super(parent, SWT.NONE);
        defaultConfigSettings = CSPlugin.getConfigManager().getDefaultConfig();
        rules = new ArrayList<CSRule>();

        this.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));
        final GridLayout gridLayout = new GridLayout();
        gridLayout.numColumns = 2;
        this.setLayout(gridLayout);

        // table for CodeScanner rules
        tableGroup = new Group(this, SWT.NONE);
        final GridData tableGridData = new GridData(SWT.FILL, SWT.CENTER, true, false);
        tableGridData.heightHint = 250;
        tableGridData.widthHint = 200;
        tableGroup.setText(Messages.getString("RulesTabPage.RulesTableMessage"));
        tableGroup.setLayoutData(tableGridData);
        tableGroup.setLayout(new GridLayout());

        rulesTableViewer = CheckboxTableViewer.newCheckList(tableGroup,
                SWT.BORDER | SWT.SINGLE | SWT.FULL_SELECTION);
        rulesTableViewer.setLabelProvider(new CSRulesLabelProvider());
        rulesTableViewer.setContentProvider(new ArrayContentProvider());
        rulesSorter = new CSRulesSorter();
        rulesTableViewer.setSorter(rulesSorter);
        rulesTableViewer.addCheckStateListener(new ICheckStateListener() {
            public void checkStateChanged(CheckStateChangedEvent event) {
                CSRule rule = (CSRule) event.getElement();
                rule.setEnabled(event.getChecked());
            }
        });
        rulesTableViewer.addDoubleClickListener(new IDoubleClickListener() {
            public void doubleClick(DoubleClickEvent event) {
                handleEdit();
            }
        });

        Table rulesTable = rulesTableViewer.getTable();
        rulesTable.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
        rulesTable.setHeaderVisible(true);
        rulesTable.setLinesVisible(true);

        // create the columns of the table
        TableColumn tableColumn1 = new TableColumn(rulesTable, SWT.LEFT);
        tableColumn1.setText(Messages.getString("RulesTabPage.RulesTableRulesLabel"));
        tableColumn1.setWidth(170);
        tableColumn1.addSelectionListener(new SelectionAdapter() {
            public void widgetSelected(SelectionEvent arg0) {
                rulesSorter.setSortingType(CSRulesSorter.SORT_BY_RULE);
                rulesSorter.sort(rulesTableViewer, rules.toArray());
                rulesTableViewer.setInput(rules.toArray());
                setCheckedElements();
            }
        });

        TableColumn tableColumn2 = new TableColumn(rulesTable, SWT.LEFT);
        tableColumn2.setText(Messages.getString("RulesTabPage.RulesTableCategoriesLabel"));
        tableColumn2.setWidth(80);
        tableColumn2.addSelectionListener(new SelectionAdapter() {
            public void widgetSelected(SelectionEvent arg0) {
                rulesSorter.setSortingType(CSRulesSorter.SORT_BY_CATEGORY);
                rulesSorter.sort(rulesTableViewer, rules.toArray());
                rulesTableViewer.setInput(rules.toArray());
                setCheckedElements();
            }
        });

        TableColumn tableColumn3 = new TableColumn(rulesTable, SWT.LEFT);
        tableColumn3.setText(Messages.getString("RulesTabPage.RulesTableSeveritiesLabel"));
        tableColumn3.setWidth(65);
        tableColumn3.addSelectionListener(new SelectionAdapter() {
            public void widgetSelected(SelectionEvent arg0) {
                rulesSorter.setSortingType(CSRulesSorter.SORT_BY_SEVERITY);
                rulesSorter.sort(rulesTableViewer, rules.toArray());
                rulesTableViewer.setInput(rules.toArray());
                setCheckedElements();
            }
        });

        // various buttons for manipulating the rules
        Composite composite = new Composite(this, SWT.NONE);
        composite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, false, false));
        final GridLayout buttonGridLayout = new GridLayout();
        buttonGridLayout.makeColumnsEqualWidth = true;
        composite.setLayout(buttonGridLayout);
        final GridData buttonsGridData = new GridData(SWT.NONE, SWT.NONE, true, false);
        buttonsGridData.widthHint = 80;

        editButton = new Button(composite, SWT.NONE);
        editButton.setLayoutData(buttonsGridData);
        editButton.setText(Messages.getString("RulesTabPage.EditRuleLabel"));
        editButton.setToolTipText(Messages.getString("RulesTabPage.EditRuleMessage"));
        editButton.addSelectionListener(new SelectionAdapter() {
            public void widgetSelected(SelectionEvent arg0) {
                handleEdit();
            }
        });
        editButton.setEnabled(false);

        enableAllButton = new Button(composite, SWT.NONE);
        enableAllButton.setLayoutData(buttonsGridData);
        enableAllButton.setText(Messages.getString("RulesTabPage.EnableAllRulesLabel"));
        enableAllButton.setToolTipText(Messages.getString("RulesTabPage.EnableAllRulesMessage"));
        enableAllButton.addSelectionListener(new SelectionAdapter() {
            public void widgetSelected(SelectionEvent arg0) {
                handleEnableAll();
            }
        });

        disableAllButton = new Button(composite, SWT.NONE);
        disableAllButton.setLayoutData(buttonsGridData);
        disableAllButton.setText(Messages.getString("RulesTabPage.DisableAllRulesLabel"));
        disableAllButton.setToolTipText(Messages.getString("RulesTabPage.DisableAllRulesMessage"));
        disableAllButton.addSelectionListener(new SelectionAdapter() {
            public void widgetSelected(SelectionEvent arg0) {
                handleDisableAll();
            }
        });

        // enable the Edit and Details buttons only when a single rule is selected
        rulesTable.addSelectionListener(new SelectionAdapter() {
            public void widgetSelected(SelectionEvent arg0) {
                boolean enable = (rulesTableViewer.getTable().getSelectionCount() == 1);
                editButton.setEnabled(enable);
                handleDetails();
            }
        });

        // label to display detail info of a selected rule
        Group detailsGroup = new Group(this, SWT.NONE);
        GridData gridData = new GridData(SWT.FILL, SWT.CENTER, true, false);
        gridData.heightHint = 60;
        gridData.widthHint = 200;
        detailsGroup.setText(Messages.getString("RulesTabPage.DetailsLabel"));
        detailsGroup.setLayoutData(gridData);
        detailsGroup.setLayout(new GridLayout());

        detailsLabel = new Label(detailsGroup, SWT.WRAP);
        gridData = new GridData(SWT.FILL, SWT.FILL, true, false);
        gridData.heightHint = 55;
        gridData.widthHint = 200;
        detailsLabel.setLayoutData(gridData);
        detailsLabel.setText("");
    }

    /**
     * Enables the receiver if the argument is true, and disables it otherwise.
     * @param enabled - the new enable state.
     */
    public void setEnabled(boolean enabled) {
        boolean ruleSelected = (rulesTableViewer.getTable().getSelectionCount() == 1);
        tableGroup.setEnabled(enabled);
        rulesTableViewer.getTable().setEnabled(enabled);
        editButton.setEnabled(enabled && ruleSelected);
        enableAllButton.setEnabled(enabled);
        disableAllButton.setEnabled(enabled);
        detailsLabel.setEnabled(enabled);
    }

    /**
     * Set the default values of this tab page.
     */
    public void setDefaults() {
        rules.clear();
        for (CSScript script : CSScript.values()) {
            if (!script.equals(CSScript.script_unknown)) {
                String categoryString = "category_" + defaultConfigSettings.getScriptCategory(script);
                CSCategory category = CSCategory.toCategory(categoryString);
                String severityString = "severity_" + defaultConfigSettings.getScriptSeverity(script);
                CSSeverity severity = CSSeverity.toSeverity(severityString);
                boolean enabled = defaultConfigSettings.getScriptEnabled(script);
                CSRule rule = new CSRule(script, category, severity, enabled);
                rules.add(rule);
            }
        }
        rulesTableViewer.setInput(rules.toArray());
        setCheckedElements();
        cclassIgnore = defaultConfigSettings.getScriptCClassIgnore();
        icons = defaultConfigSettings.getScriptIcons();
        if (icons == null) {
            icons = "";
        }
        longLinesLength = defaultConfigSettings.getScriptLongLinesLength();
        forbiddenWords = defaultConfigSettings.getScriptForbiddenWords();
        openIgnore = defaultConfigSettings.getScriptOpenIgnore();
        worryingComments = defaultConfigSettings.getScriptWorryingComments();
    }

    /**
     * Retrieve the stored preference settings values of this tab page.
     */
    public void getStoredPreferenceValues() {
        IPreferenceStore store = CSPlugin.getCSPrefsStore();

        // retrieve the stored tokenized strings
        String scriptsString = store.getString(CSPreferenceConstants.RULE_SCRIPTS);
        if (scriptsString == null)
            return;
        StringTokenizer scriptTokens = new StringTokenizer(scriptsString, CSPreferenceConstants.DELIMETER);
        String categoriesString = store.getString(CSPreferenceConstants.RULE_CATEGORIES);
        if (categoriesString == null)
            return;
        StringTokenizer categoryTokens = new StringTokenizer(categoriesString, CSPreferenceConstants.DELIMETER);
        String severitiesString = store.getString(CSPreferenceConstants.RULE_SEVERITIES);
        if (severitiesString == null)
            return;
        StringTokenizer severityTokens = new StringTokenizer(severitiesString, CSPreferenceConstants.DELIMETER);
        String enabledString = store.getString(CSPreferenceConstants.RULES_ENABLED);
        if (enabledString == null)
            return;
        StringTokenizer enabledTokens = new StringTokenizer(enabledString, CSPreferenceConstants.DELIMETER);

        // populate the rules table with the stored values
        int index = 0;
        rules.clear();
        while (scriptTokens.hasMoreTokens() && categoryTokens.hasMoreTokens() && severityTokens.hasMoreTokens()
                && enabledTokens.hasMoreTokens()) {
            String scriptString = "script_" + scriptTokens.nextToken();
            CSScript script = CSScript.toScript(scriptString);
            String categoryString = "category_" + categoryTokens.nextToken();
            CSCategory category = CSCategory.toCategory(categoryString);
            String severityString = "severity_" + severityTokens.nextToken();
            CSSeverity severity = CSSeverity.toSeverity(severityString);
            int value = Integer.valueOf(enabledTokens.nextToken());
            boolean enabled = (value != 0);
            if (!script.equals(CSScript.script_unknown) && !category.equals(CSCategory.category_unknown)
                    && !severity.equals(CSSeverity.severity_unknown)) {
                CSRule rule = new CSRule(script, category, severity, enabled);
                rules.add(rule);
                index++;
            }
        }
        rulesTableViewer.setInput(rules.toArray());
        setCheckedElements();

        // retrieve other stored values
        cclassIgnore = store.getString(CSPreferenceConstants.CCLASSIGNORE);
        forbiddenWords = store.getString(CSPreferenceConstants.FORBIDEENWORDS);
        icons = store.getString(CSPreferenceConstants.ICONS);
        lfunctionIgnore = store.getString(CSPreferenceConstants.LFUNCTIONIGNORE);
        longLinesLength = store.getInt(CSPreferenceConstants.LONGLINES_LENGTH);
        openIgnore = store.getString(CSPreferenceConstants.OPENIGNORE);
        worryingComments = store.getString(CSPreferenceConstants.WORRYINGCOMMENTS);
    }

    /**
     * Retrieve the stored property settings values of this tab page.
     */
    public void getStoredPropertyValues(IDialogSettings pageSettings) {
        // retrieve the stored tokenized strings
        String scriptsString = pageSettings.get(CSPreferenceConstants.RULE_SCRIPTS);
        if (scriptsString == null)
            return;
        StringTokenizer scriptTokens = new StringTokenizer(scriptsString, CSPreferenceConstants.DELIMETER);
        String categoriesString = pageSettings.get(CSPreferenceConstants.RULE_CATEGORIES);
        if (categoriesString == null)
            return;
        StringTokenizer categoryTokens = new StringTokenizer(categoriesString, CSPreferenceConstants.DELIMETER);
        String severitiesString = pageSettings.get(CSPreferenceConstants.RULE_SEVERITIES);
        if (severitiesString == null)
            return;
        StringTokenizer severityTokens = new StringTokenizer(severitiesString, CSPreferenceConstants.DELIMETER);
        String enabledString = pageSettings.get(CSPreferenceConstants.RULES_ENABLED);
        if (enabledString == null)
            return;
        StringTokenizer enabledTokens = new StringTokenizer(enabledString, CSPreferenceConstants.DELIMETER);

        // populate the rules table with the stored values
        int index = 0;
        rules.clear();
        while (scriptTokens.hasMoreTokens() && categoryTokens.hasMoreTokens() && severityTokens.hasMoreTokens()
                && enabledTokens.hasMoreTokens()) {
            String scriptString = "script_" + scriptTokens.nextToken();
            CSScript script = CSScript.toScript(scriptString);
            String categoryString = "category_" + categoryTokens.nextToken();
            CSCategory category = CSCategory.toCategory(categoryString);
            String severityString = "severity_" + severityTokens.nextToken();
            CSSeverity severity = CSSeverity.toSeverity(severityString);
            int value = Integer.valueOf(enabledTokens.nextToken());
            boolean enabled = (value != 0);
            if (!script.equals(CSScript.script_unknown) && !category.equals(CSCategory.category_unknown)
                    && !severity.equals(CSSeverity.severity_unknown)) {
                CSRule rule = new CSRule(script, category, severity, enabled);
                rules.add(rule);
                index++;
            }
        }
        rulesTableViewer.setInput(rules.toArray());
        setCheckedElements();

        // retrieve other stored values
        cclassIgnore = pageSettings.get(CSPreferenceConstants.CCLASSIGNORE);
        forbiddenWords = pageSettings.get(CSPreferenceConstants.FORBIDEENWORDS);
        icons = pageSettings.get(CSPreferenceConstants.ICONS);
        lfunctionIgnore = pageSettings.get(CSPreferenceConstants.LFUNCTIONIGNORE);
        longLinesLength = pageSettings.getInt(CSPreferenceConstants.LONGLINES_LENGTH);
        openIgnore = pageSettings.get(CSPreferenceConstants.OPENIGNORE);
        worryingComments = pageSettings.get(CSPreferenceConstants.WORRYINGCOMMENTS);
    }

    /**
     * Set the stored preference settings values of this tab page.
     */
    public boolean setStoredPreferenceValues() {
        IPreferenceStore store = CSPlugin.getCSPrefsStore();
        String scriptString = "";
        String categoryString = "";
        String severityString = "";
        String enabledString = "";
        int total = rules.toArray().length;

        // create tokenized strings from the content of the rules table
        for (int i = 0; i < total; i++) {
            CSRule rule = (CSRule) rules.toArray()[i];
            if (rule != null) {
                scriptString += rule.getScript().toString() + CSPreferenceConstants.DELIMETER;
                categoryString += rule.getCategory().toString() + CSPreferenceConstants.DELIMETER;
                severityString += rule.getSeverity().toString() + CSPreferenceConstants.DELIMETER;
                int flag = 1;
                if (!rulesTableViewer.getChecked(rule))
                    flag = 0;
                enabledString += flag + CSPreferenceConstants.DELIMETER;
            }
        }

        // store the tokenized strings
        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 other values
        store.setValue(CSPreferenceConstants.CCLASSIGNORE, cclassIgnore);
        store.setValue(CSPreferenceConstants.FORBIDEENWORDS, forbiddenWords);
        store.setValue(CSPreferenceConstants.ICONS, icons);
        store.setValue(CSPreferenceConstants.LFUNCTIONIGNORE, lfunctionIgnore);
        store.setValue(CSPreferenceConstants.LONGLINES_LENGTH, longLinesLength);
        store.setValue(CSPreferenceConstants.OPENIGNORE, openIgnore);
        store.setValue(CSPreferenceConstants.WORRYINGCOMMENTS, worryingComments);
        return true;
    }

    /**
     * Set the stored property settings values of this tab page.
     */
    public boolean setStoredPropertyValues(IDialogSettings pageSettings) {
        String scriptString = "";
        String categoryString = "";
        String severityString = "";
        String enabledString = "";
        int total = rules.toArray().length;

        // create tokenized strings from the content of the rules table
        for (int i = 0; i < total; i++) {
            CSRule rule = (CSRule) rules.toArray()[i];
            if (rule != null) {
                scriptString += rule.getScript().toString() + CSPreferenceConstants.DELIMETER;
                categoryString += rule.getCategory().toString() + CSPreferenceConstants.DELIMETER;
                severityString += rule.getSeverity().toString() + CSPreferenceConstants.DELIMETER;
                int flag = 1;
                if (!rulesTableViewer.getChecked(rule))
                    flag = 0;
                enabledString += flag + CSPreferenceConstants.DELIMETER;
            }
        }

        // store the tokenized strings
        pageSettings.put(CSPreferenceConstants.RULE_SCRIPTS, scriptString);
        pageSettings.put(CSPreferenceConstants.RULE_CATEGORIES, categoryString);
        pageSettings.put(CSPreferenceConstants.RULE_SEVERITIES, severityString);
        pageSettings.put(CSPreferenceConstants.RULES_ENABLED, enabledString);

        // store other values
        pageSettings.put(CSPreferenceConstants.CCLASSIGNORE, cclassIgnore);
        pageSettings.put(CSPreferenceConstants.FORBIDEENWORDS, forbiddenWords);
        pageSettings.put(CSPreferenceConstants.ICONS, icons);
        pageSettings.put(CSPreferenceConstants.LFUNCTIONIGNORE, lfunctionIgnore);
        pageSettings.put(CSPreferenceConstants.LONGLINES_LENGTH, longLinesLength);
        pageSettings.put(CSPreferenceConstants.OPENIGNORE, openIgnore);
        pageSettings.put(CSPreferenceConstants.WORRYINGCOMMENTS, worryingComments);
        return true;
    }

    /**
     * Initialize the stored preference settings values of this tab page.
     */
    public static void initializePreferenceValues() {
        IPreferenceStore store = CSPlugin.getCSPrefsStore();
        CSConfigSettings configSettings = CSPlugin.getConfigManager().getDefaultConfig();
        String scriptString = "";
        String categoryString = "";
        String severityString = "";
        String enabledString = "";
        int flag = 1;
        for (CSScript script : CSScript.values()) {
            if (!script.equals(CSScript.script_unknown)) {
                scriptString += script.toString() + CSPreferenceConstants.DELIMETER;
                categoryString += configSettings.getScriptCategory(script) + CSPreferenceConstants.DELIMETER;
                severityString += configSettings.getScriptSeverity(script) + CSPreferenceConstants.DELIMETER;
                if (configSettings.getScriptEnabled(script)) {
                    flag = 1;
                } else {
                    flag = 0;
                }
                enabledString += flag + CSPreferenceConstants.DELIMETER;
            }
        }
        store.setDefault(CSPreferenceConstants.RULE_SCRIPTS, scriptString);
        store.setDefault(CSPreferenceConstants.RULE_CATEGORIES, categoryString);
        store.setDefault(CSPreferenceConstants.RULE_SEVERITIES, severityString);
        store.setDefault(CSPreferenceConstants.RULES_ENABLED, enabledString);
        store.setDefault(CSPreferenceConstants.CCLASSIGNORE, configSettings.getScriptCClassIgnore());
        store.setDefault(CSPreferenceConstants.FORBIDEENWORDS, configSettings.getScriptForbiddenWords());
        String icons = configSettings.getScriptIcons();
        if (icons == null) {
            icons = "";
        }
        store.setDefault(CSPreferenceConstants.ICONS, icons);
        store.setDefault(CSPreferenceConstants.LFUNCTIONIGNORE, configSettings.getScriptLFunctionIgnore());
        store.setDefault(CSPreferenceConstants.LONGLINES_LENGTH, configSettings.getScriptLongLinesLength());
        store.setDefault(CSPreferenceConstants.OPENIGNORE, configSettings.getScriptOpenIgnore());
        store.setDefault(CSPreferenceConstants.WORRYINGCOMMENTS, configSettings.getScriptWorryingComments());
    }

    /**
     * Initialize the stored property settings values of this tab page.
     */
    public static void initializePropertyValues(IDialogSettings pageSettings) {
        CSConfigSettings configSettings = CSPlugin.getConfigManager().getDefaultConfig();
        String scriptString = "";
        String categoryString = "";
        String severityString = "";
        String enabledString = "";
        int flag = 1;
        for (CSScript script : CSScript.values()) {
            if (!script.equals(CSScript.script_unknown)) {
                scriptString += script.toString() + CSPreferenceConstants.DELIMETER;
                categoryString += configSettings.getScriptCategory(script) + CSPreferenceConstants.DELIMETER;
                severityString += configSettings.getScriptSeverity(script) + CSPreferenceConstants.DELIMETER;
                if (configSettings.getScriptEnabled(script)) {
                    flag = 1;
                } else {
                    flag = 0;
                }
                enabledString += flag + CSPreferenceConstants.DELIMETER;
            }
        }
        pageSettings.put(CSPreferenceConstants.RULE_SCRIPTS, scriptString);
        pageSettings.put(CSPreferenceConstants.RULE_CATEGORIES, categoryString);
        pageSettings.put(CSPreferenceConstants.RULE_SEVERITIES, severityString);
        pageSettings.put(CSPreferenceConstants.RULES_ENABLED, enabledString);
        pageSettings.put(CSPreferenceConstants.CCLASSIGNORE, configSettings.getScriptCClassIgnore());
        pageSettings.put(CSPreferenceConstants.FORBIDEENWORDS, configSettings.getScriptForbiddenWords());
        String icons = configSettings.getScriptIcons();
        if (icons == null) {
            icons = "";
        }
        pageSettings.put(CSPreferenceConstants.ICONS, icons);
        pageSettings.put(CSPreferenceConstants.LFUNCTIONIGNORE, configSettings.getScriptLFunctionIgnore());
        pageSettings.put(CSPreferenceConstants.LONGLINES_LENGTH, configSettings.getScriptLongLinesLength());
        pageSettings.put(CSPreferenceConstants.OPENIGNORE, configSettings.getScriptOpenIgnore());
        pageSettings.put(CSPreferenceConstants.WORRYINGCOMMENTS, configSettings.getScriptWorryingComments());
    }

    /**
     * Things to do when user hit the "Edit" button.
     */
    private void handleEdit() {
        ISelection selection = rulesTableViewer.getSelection();
        if (selection instanceof IStructuredSelection) {
            IStructuredSelection ss = (IStructuredSelection) selection;
            Object element = ss.getFirstElement();
            if (element instanceof CSRule) {
                CSRule rule = (CSRule) element;
                if (rule != null) {
                    boolean hasExtra = false;
                    String extraAttrTitle = "";
                    String extraAttr = "";

                    CSScript script = rule.getScript();
                    if (script.equals(CSScript.script_customizableicons)) {
                        hasExtra = true;
                        extraAttrTitle = Messages.getString("RulesTabPage.EditIconsLabel");
                        if (icons != null) {
                            extraAttr = icons;
                        }
                    } else if (script.equals(CSScript.script_forbiddenwords)) {
                        hasExtra = true;
                        extraAttrTitle = Messages.getString("RulesTabPage.EditForbiddenWordsLabel");
                        if (forbiddenWords != null) {
                            extraAttr = forbiddenWords;
                        }
                    } else if (script.equals(CSScript.script_LFunctionCantLeave)) {
                        hasExtra = true;
                        extraAttrTitle = Messages.getString("RulesTabPage.EditLFunctionCantLeaveLabel");
                        if (lfunctionIgnore != null) {
                            extraAttr = lfunctionIgnore;
                        }
                    } else if (script.equals(CSScript.script_longlines)) {
                        hasExtra = true;
                        extraAttrTitle = Messages.getString("RulesTabPage.EditLongLinesLabel");
                        extraAttr = longLinesLength + "";
                    } else if (script.equals(CSScript.script_missingcclass)) {
                        hasExtra = true;
                        extraAttrTitle = Messages.getString("RulesTabPage.EditMissingCClassLabel");
                        if (cclassIgnore != null) {
                            extraAttr = cclassIgnore;
                        }
                    } else if (script.equals(CSScript.script_open)) {
                        hasExtra = true;
                        extraAttrTitle = Messages.getString("RulesTabPage.EditOpenLabel");
                        if (openIgnore != null) {
                            extraAttr = openIgnore;
                        }
                    } else if (script.equals(CSScript.script_worryingcomments)) {
                        hasExtra = true;
                        extraAttrTitle = Messages.getString("RulesTabPage.EditWorryingCommentsLabel");
                        if (worryingComments != null) {
                            extraAttr = worryingComments;
                        }
                    }
                    CSRulesEditDialog dialog = new CSRulesEditDialog(getShell(), script, rule.getCategory(),
                            rule.getSeverity(), hasExtra, extraAttrTitle, extraAttr);
                    if (dialog.open() == CSRulesEditDialog.OK) {
                        CSCategory newCategory = dialog.getCategory();
                        if (!newCategory.equals(rule.getCategory())) {
                            rule.setCategory(newCategory);
                        }
                        CSSeverity newSeverity = dialog.getSeverity();
                        if (!newSeverity.equals(rule.getSeverity())) {
                            rule.setSeverity(newSeverity);
                        }
                        String newExtraAttr = dialog.getExtra();
                        if (dialog.hasExtra() && !newExtraAttr.equals(extraAttr)) {
                            if (script.equals(CSScript.script_customizableicons)) {
                                icons = newExtraAttr;
                            } else if (script.equals(CSScript.script_forbiddenwords)) {
                                forbiddenWords = newExtraAttr;
                            } else if (script.equals(CSScript.script_LFunctionCantLeave)) {
                                lfunctionIgnore = newExtraAttr;
                            } else if (script.equals(CSScript.script_longlines)) {
                                longLinesLength = Integer.valueOf(newExtraAttr);
                            } else if (script.equals(CSScript.script_missingcclass)) {
                                cclassIgnore = newExtraAttr;
                            } else if (script.equals(CSScript.script_open)) {
                                openIgnore = newExtraAttr;
                            } else if (script.equals(CSScript.script_worryingcomments)) {
                                worryingComments = newExtraAttr;
                            }
                        }
                    }
                    rulesTableViewer.refresh(true);
                }
            }
        }
    }

    /**
     * Things to do when user hit the "Details" button.
     */
    private void handleDetails() {
        ISelection selection = rulesTableViewer.getSelection();
        if (selection instanceof IStructuredSelection) {
            IStructuredSelection ss = (IStructuredSelection) selection;
            Object element = ss.getFirstElement();
            if (element instanceof CSRule) {
                CSRule rule = (CSRule) element;
                if (rule != null) {
                    detailsLabel.setText(rule.getDetails());
                }
                rulesTableViewer.refresh(true);
            }
        }
    }

    /**
     * Things to do when user hit the "EnableAll" button.
     */
    private void handleEnableAll() {
        rulesTableViewer.setAllChecked(true);
    }

    /**
     * Things to do when user hit the "DisableAll" button.
     */
    private void handleDisableAll() {
        rulesTableViewer.setAllChecked(false);
    }

    /**
     * Set the checked state of the rules table elements.
     */
    private void setCheckedElements() {
        for (int i = 0; i < rules.toArray().length; i++) {
            CSRule rule = (CSRule) rules.toArray()[i];
            rulesTableViewer.setChecked(rule, rule.getEnabled());
        }
    }

}