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

Java tutorial

Introduction

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

import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.Path;
import org.eclipse.jface.dialogs.IDialogSettings;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
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.DirectoryDialog;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Text;

import com.nokia.carbide.cpp.internal.codescanner.CSPlugin;
import com.nokia.carbide.cpp.internal.codescanner.Messages;
import com.nokia.cpp.internal.api.utils.ui.BrowseDialogUtils;

/**
 * A class to create and control the CodeScanner General Options tab page.
 */
public class CSGeneralTabPage extends Composite {

    public static final String CS_TOOLS_DIRECTORY = "tools";

    // private members for various controls
    private Label csDirLabel = null;
    private Label resultsDirLabel = null;
    private Text csDirEditText = null;
    private Text resultsDirEditText = null;
    private Button browseCSDirButton = null;
    private Button browseResultsDirButton = null;
    private Button htmlResultsButton = null;
    private Button xmlResultsButton = null;
    private Button kbScanButton = null;
    private Button autoscanButton = null;

    /**
     * Create contents of this tab page.
     * @param parent - the parent composite
     */
    public CSGeneralTabPage(Composite parent) {
        super(parent, SWT.NONE);

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

        // CodeScanner directory selection
        csDirLabel = new Label(this, SWT.RIGHT);
        csDirLabel.setText(Messages.getString("CSGeneralTabPage.CSDirLabel"));

        csDirEditText = new Text(this, SWT.BORDER);
        GridData gridData = new GridData(SWT.FILL, SWT.CENTER, true, false);
        gridData.widthHint = 200;
        csDirEditText.setLayoutData(gridData);

        browseCSDirButton = new Button(this, SWT.NONE);
        browseCSDirButton.setText(Messages.getString("CSGeneralTabPage.CSDirBrowseLabel"));
        browseCSDirButton.setToolTipText(Messages.getString("CSGeneralTabPage.CSDirBrowseMessage"));
        browseCSDirButton.addSelectionListener(new SelectionAdapter() {
            public void widgetSelected(SelectionEvent arg0) {
                handleCSDirBrowse();
            }
        });

        // generate HTML results?
        htmlResultsButton = new Button(this, SWT.CHECK);
        htmlResultsButton.setText(Messages.getString("CSGeneralTabPage.HTMLResultsLabel"));
        htmlResultsButton.setToolTipText(Messages.getString("CSGeneralTabPage.HTMLResultsMessage"));
        htmlResultsButton.addSelectionListener(new SelectionAdapter() {
            public void widgetSelected(SelectionEvent arg0) {
                boolean enable = (htmlResultsButton.getSelection() || xmlResultsButton.getSelection());
                resultsDirEditText.setEnabled(enable);
                browseResultsDirButton.setEnabled(enable);
            }
        });

        // place holder label(s) to fill up unused columns in the layout
        new Label(this, SWT.NONE);
        new Label(this, SWT.NONE);

        // generate XML results?
        xmlResultsButton = new Button(this, SWT.CHECK);
        xmlResultsButton.setText(Messages.getString("CSGeneralTabPage.XMLResultsLabel"));
        xmlResultsButton.setToolTipText(Messages.getString("CSGeneralTabPage.XMLResultsMessage"));
        xmlResultsButton.addSelectionListener(new SelectionAdapter() {
            public void widgetSelected(SelectionEvent arg0) {
                boolean enable = (htmlResultsButton.getSelection() || xmlResultsButton.getSelection());
                resultsDirEditText.setEnabled(enable);
                browseResultsDirButton.setEnabled(enable);
            }
        });

        // place holder label(s) to fill up unused columns in the layout
        new Label(this, SWT.NONE);
        new Label(this, SWT.NONE);

        // results directory selection
        resultsDirLabel = new Label(this, SWT.RIGHT);
        resultsDirLabel.setLayoutData(new GridData());
        resultsDirLabel.setText(Messages.getString("CSGeneralTabPage.ResultsDirLabel"));

        resultsDirEditText = new Text(this, SWT.BORDER);
        resultsDirEditText.setLayoutData(gridData);

        browseResultsDirButton = new Button(this, SWT.NONE);
        browseResultsDirButton.setLayoutData(new GridData());
        browseResultsDirButton.setText(Messages.getString("CSGeneralTabPage.ResultsDirBrowseLabel"));
        browseResultsDirButton.setToolTipText(Messages.getString("CSGeneralTabPage.ResultsDirBrowseMessage"));
        browseResultsDirButton.addSelectionListener(new SelectionAdapter() {
            public void widgetSelected(SelectionEvent arg0) {
                handleResultsDirBrowse();
            }
        });

        kbScanButton = new Button(this, SWT.CHECK);
        kbScanButton.setLayoutData(new GridData());
        kbScanButton.setText(Messages.getString("CSGeneralTabPage.KbScanLabel"));
        kbScanButton.setToolTipText(Messages.getString("CSGeneralTabPage.KbScanMessage"));

        // place holder label(s) to fill up unused columns in the layout
        new Label(this, SWT.NONE);
        new Label(this, SWT.NONE);

        autoscanButton = new Button(this, SWT.CHECK);
        autoscanButton.setText(Messages.getString("CSGeneralTabPage.AutoscanLabel"));
        autoscanButton.setToolTipText(Messages.getString("CSGeneralTabPage.AutoscanMessage"));
        autoscanButton.setVisible(false);
    }

    /**
     * Enables the receiver if the argument is true, and disables it otherwise.
     * @param enabled - the new enable state.
     */
    public void setEnabled(boolean enabled) {
        super.setEnabled(enabled);
        csDirLabel.setEnabled(enabled);
        resultsDirLabel.setEnabled(enabled);
        csDirEditText.setEnabled(enabled);
        browseCSDirButton.setEnabled(enabled);
        htmlResultsButton.setEnabled(enabled);
        xmlResultsButton.setEnabled(enabled);
        kbScanButton.setEnabled(enabled);
        autoscanButton.setEnabled(enabled);
        boolean htmlResults = htmlResultsButton.getSelection();
        boolean xmlResults = xmlResultsButton.getSelection();
        if (!enabled || htmlResults || xmlResults) {
            resultsDirEditText.setEnabled(enabled);
            browseResultsDirButton.setEnabled(enabled);
        }
    }

    /**
     * Set the default values of this tab page.
     */
    public void setDefaults() {
        csDirEditText.setText(getDefaultCSDirectory());
        htmlResultsButton.setSelection(false);
        xmlResultsButton.setSelection(false);
        resultsDirEditText.setText("");
        resultsDirEditText.setEnabled(false);
        browseResultsDirButton.setEnabled(false);
        kbScanButton.setSelection(false);
        autoscanButton.setSelection(false);
    }

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

        String csDir = store.getString(CSPreferenceConstants.CODESCANNER_FOLDER);
        csDirEditText.setText(csDir);

        boolean htmlResults = store.getBoolean(CSPreferenceConstants.HTML_RESULTS);
        htmlResultsButton.setSelection(htmlResults);

        boolean xmlResults = store.getBoolean(CSPreferenceConstants.XML_RESULTS);
        xmlResultsButton.setSelection(xmlResults);

        String csResultsFolder = store.getString(CSPreferenceConstants.RESULTS_FOLDER);
        resultsDirEditText.setText(csResultsFolder);
        resultsDirEditText.setEnabled(htmlResults || xmlResults);
        browseResultsDirButton.setEnabled(htmlResults || xmlResults);

        boolean kbScan = store.getBoolean(CSPreferenceConstants.KBSCANNING);
        kbScanButton.setSelection(kbScan);
    }

    /**
     * Retrieve the stored property settings values of this tab page.
     */
    public void getStoredPropertyValues(IDialogSettings pageSettings) {
        String csDir = pageSettings.get(CSPreferenceConstants.CODESCANNER_FOLDER);
        csDirEditText.setText(csDir);

        boolean htmlResults = pageSettings.getBoolean(CSPreferenceConstants.HTML_RESULTS);
        htmlResultsButton.setSelection(htmlResults);

        boolean xmlResults = pageSettings.getBoolean(CSPreferenceConstants.XML_RESULTS);
        xmlResultsButton.setSelection(xmlResults);

        String csResultsFolder = pageSettings.get(CSPreferenceConstants.RESULTS_FOLDER);
        resultsDirEditText.setText(csResultsFolder);
        resultsDirEditText.setEnabled(htmlResults || xmlResults);
        browseResultsDirButton.setEnabled(htmlResults || xmlResults);

        boolean kbScan = pageSettings.getBoolean(CSPreferenceConstants.KBSCANNING);
        kbScanButton.setSelection(kbScan);

        autoscanButton.setSelection(pageSettings.getBoolean(CSPreferenceConstants.AUTOSCAN));
    }

    /**
     * Set the stored preference settings values of this tab page.
     */
    public boolean setStoredPreferenceValues() {
        IPreferenceStore store = CSPlugin.getCSPrefsStore();

        // check the CodeScanner directory selected by user
        String csDir = csDirEditText.getText();
        if (csDir.length() == 0) {
            csDir = getDefaultCSDirectory();
        }

        if (!csDir.endsWith(File.separator)) {
            csDir += File.separator;
            csDirEditText.setText(csDir);
        }

        if (!validateDirectory(csDir)) {
            return false;
        }

        boolean htmlResults = htmlResultsButton.getSelection();
        boolean xmlResults = xmlResultsButton.getSelection();

        // check the results directory selected by user (only when generating HTML or XML results)
        String resultDir = resultsDirEditText.getText();
        if ((htmlResults || xmlResults)) {
            if (resultDir.length() > 0) {
                if (!validateDirectory(resultDir)) {
                    return false;
                }
            } else {
                // must specify results directory when generating HTML or XML results
                reportMissingResultsDir();
                return false;
            }
        }

        boolean kbScan = kbScanButton.getSelection();

        store.setValue(CSPreferenceConstants.CODESCANNER_FOLDER, csDir);
        store.setValue(CSPreferenceConstants.HTML_RESULTS, htmlResults);
        store.setValue(CSPreferenceConstants.XML_RESULTS, xmlResults);
        store.setValue(CSPreferenceConstants.RESULTS_FOLDER, resultDir);
        store.setValue(CSPreferenceConstants.KBSCANNING, kbScan);
        return true;
    }

    /**
     * Set the stored property settings values of this tab page.
     */
    public boolean setStoredPropertyValues(IDialogSettings pageSettings) {
        // check the CodeScanner directory selected by user
        String csDir = csDirEditText.getText();
        if (csDir.length() == 0) {
            csDir = getDefaultCSDirectory();
        }

        if (!csDir.endsWith(File.separator)) {
            csDir += File.separator;
            csDirEditText.setText(csDir);
        }

        if (!validateDirectory(csDir)) {
            return false;
        }

        boolean htmlResults = htmlResultsButton.getSelection();
        boolean xmlResults = xmlResultsButton.getSelection();

        // check the results directory selected by user (only when generating HTML or XML results)
        String resultDir = resultsDirEditText.getText();
        if ((htmlResults || xmlResults)) {
            if (resultDir.length() > 0) {
                if (!validateDirectory(resultDir)) {
                    return false;
                }
            } else {
                // must specify results directory when generating HTML or XML results
                reportMissingResultsDir();
                return false;
            }
        }

        boolean kbScan = kbScanButton.getSelection();
        boolean autoscan = autoscanButton.getSelection();

        pageSettings.put(CSPreferenceConstants.CODESCANNER_FOLDER, csDir);
        pageSettings.put(CSPreferenceConstants.HTML_RESULTS, htmlResults);
        pageSettings.put(CSPreferenceConstants.XML_RESULTS, xmlResults);
        pageSettings.put(CSPreferenceConstants.RESULTS_FOLDER, resultDir);
        pageSettings.put(CSPreferenceConstants.KBSCANNING, kbScan);
        pageSettings.put(CSPreferenceConstants.AUTOSCAN, autoscan);
        return true;
    }

    /**
     * Initialize the stored preference settings values of this tab page.
     */
    public static void initializePreferenceValues() {
        IPreferenceStore store = CSPlugin.getCSPrefsStore();
        store.setDefault(CSPreferenceConstants.CODESCANNER_FOLDER, getDefaultCSDirectory());
        store.setDefault(CSPreferenceConstants.HTML_RESULTS, false);
        store.setDefault(CSPreferenceConstants.XML_RESULTS, false);
        store.setDefault(CSPreferenceConstants.RESULTS_FOLDER, "");
        store.setDefault(CSPreferenceConstants.KBSCANNING, false);
        store.setDefault(CSPreferenceConstants.AUTOSCAN, false);
    }

    /**
     * Initialize the stored property settings values of this tab page.
     */
    public static void initializePropertyValues(IDialogSettings pageSettings) {
        pageSettings.put(CSPreferenceConstants.CODESCANNER_FOLDER, getDefaultCSDirectory());
        pageSettings.put(CSPreferenceConstants.HTML_RESULTS, false);
        pageSettings.put(CSPreferenceConstants.XML_RESULTS, false);
        pageSettings.put(CSPreferenceConstants.RESULTS_FOLDER, "");
        pageSettings.put(CSPreferenceConstants.KBSCANNING, false);
        pageSettings.put(CSPreferenceConstants.AUTOSCAN, false);
    }

    /**
     * Make the Autoscan check box visible/invisible.
     */
    public void setVisibleAutoscan(boolean visiable) {
        autoscanButton.setVisible(visiable);
    }

    /**
     * Retrieve value of the Autoscan check box.
     * @return true if the Autoscan check box is checked.
     */
    public boolean autoscanSelected() {
        return autoscanButton.getSelection();
    }

    /**
     * Retrieve the default CodeScanner directory.
     * @return default CodeScanner directory if it exists.
     */
    private static String getDefaultCSDirectory() {
        String csDirString = "";
        try {
            String pluginLocation = CSPlugin.getPluginInstallLocation();
            csDirString = pluginLocation + CS_TOOLS_DIRECTORY + File.separator;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return csDirString;
    }

    /**
     * Handle the selection of CodeScanner directory.
     */
    private void handleCSDirBrowse() {
        String selectedDir = showCSDirBrowseDialog();
        if (selectedDir != null) {
            if (!selectedDir.equals(csDirEditText.getText())) {
                csDirEditText.setText(selectedDir);
            }
        }
    }

    /**
     * Handle the selection of results directory.
     */
    private void handleResultsDirBrowse() {
        String selectedDir = showResultsDirBrowseDialog();
        if (selectedDir != null) {
            if (!selectedDir.equals(resultsDirEditText.getText())) {
                resultsDirEditText.setText(selectedDir);
            }
        }
    }

    /**
     * Create and open a dialog to allow the selection of CodeScanner directory.
     * @return the path of the selected directory
     */
    private String showCSDirBrowseDialog() {
        DirectoryDialog dialog = new DirectoryDialog(csDirEditText.getShell(), SWT.OPEN);
        dialog.setText(Messages.getString("CSGeneralTabPage.SelectDirTitle"));
        dialog.setMessage(Messages.getString("CSGeneralTabPage.SelectCSDirMessage"));
        BrowseDialogUtils.initializeFrom(dialog, csDirEditText);
        return dialog.open();
    }

    /**
     * Create and open a dialog to allow the selection of results directory.
     * @return the path of the selected directory
     */
    private String showResultsDirBrowseDialog() {
        DirectoryDialog dialog = new DirectoryDialog(resultsDirEditText.getShell(), SWT.OPEN);
        dialog.setText(Messages.getString("CSGeneralTabPage.SelectDirTitle"));
        dialog.setMessage(Messages.getString("CSGeneralTabPage.SelectResultsDirMessage"));
        BrowseDialogUtils.initializeFrom(dialog, resultsDirEditText);
        return dialog.open();
    }

    /**
     * Check whether a directory already exist.
     * @param path - path of directory to be validated
     * @return true if directory exists
     */
    private boolean validateDirectory(String path) {
        boolean result = false;
        IPath dirPath = new Path(path);
        if (dirPath.toFile().exists()) {
            result = true;
        } else {
            result = MessageDialog.openQuestion(getShell(), "Directory does not exist.",
                    "The directory " + dirPath + " does not exist.\n\nDo you want to continue?");
        }
        return result;
    }

    /**
     * Create an error dialog for missing results directory.
     */
    private void reportMissingResultsDir() {
        MessageDialog.openError(getShell(), Messages.getString("CSGeneralTabPage.MissingResultsDirTitle"),
                Messages.getString("CSGeneralTabPage.MissingResultsDirMessage"));
    }
}