net.rim.ejde.internal.ui.preferences.SignatureToolPrefsPage.java Source code

Java tutorial

Introduction

Here is the source code for net.rim.ejde.internal.ui.preferences.SignatureToolPrefsPage.java

Source

/*
* Copyright (c) 2010-2012 Research In Motion Limited. All rights reserved.
*
* This program and the accompanying materials are made available
* under the terms of the Eclipse Public License, Version 1.0,
* which accompanies this distribution and is available at
*
* http://www.eclipse.org/legal/epl-v10.html
*
*/
package net.rim.ejde.internal.ui.preferences;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;

import net.rim.ejde.internal.core.IConstants;
import net.rim.ejde.internal.model.preferences.SignatureToolPreferences;
import net.rim.ejde.internal.signing.ImportCSIFilesAction;
import net.rim.ejde.internal.ui.widgets.dialog.SigningSearchDialog;
import net.rim.ejde.internal.util.Messages;
import net.rim.ejde.internal.util.VMToolsUtils;

import org.apache.log4j.Logger;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.swt.SWT;
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.Control;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Link;
import org.eclipse.swt.widgets.Listener;

public class SignatureToolPrefsPage extends BasicPrefsPage {

    public static final String ID = "net.rim.ejde.internal.ui.preferences.CodeSigningPrefsPage"; //$NON-NLS-1$

    static private final Logger _log = Logger.getLogger(SignatureToolPrefsPage.class);
    private Link _searchKeyLink, _removeKeyLink;
    private Button _runSignToolSilently;
    private Button _runSignToolAutomatically;

    @Override
    protected Control createContents(Composite parent) {

        Composite main = new Composite(parent, SWT.NONE);
        GridLayout layout = new GridLayout();
        layout.numColumns = 1;
        main.setLayout(layout);
        main.setLayoutData(new GridData(GridData.FILL_BOTH));

        Label linkLabel = new Label(main, SWT.NONE);
        linkLabel.setText(Messages.CodeSigningPrefsPage_ClickHereLabel);

        Link keyLink = new Link(main, SWT.NONE);
        keyLink.setText(Messages.CodeSigningPrefsPage_AddNewKeyLabel);
        keyLink.setToolTipText(Messages.CodeSigningPrefsPage_AddNewKeyToolTip);

        keyLink.addListener(SWT.Selection, new Listener() {
            public void handleEvent(Event event) {
                ImportCSIFilesAction action = new ImportCSIFilesAction();
                action.run(null);
            }
        });

        _searchKeyLink = new Link(main, SWT.NONE);
        _searchKeyLink.setText(Messages.CodeSigningPrefsPage_AddOldKeyLabel);
        _searchKeyLink.setToolTipText(Messages.CodeSigningPrefsPage_AddOldKeyToolTip);

        _removeKeyLink = new Link(main, SWT.NONE);
        _removeKeyLink.setText(Messages.CodeSigningPrefsPage_RemoveCurrentKeyLabel);
        _removeKeyLink.setToolTipText(Messages.CodeSigningPrefsPage_RemoveCurrentKeyToolTip);

        File cskFile;
        File dbFile;
        try {
            cskFile = new File(VMToolsUtils.getVMToolsFolderPath() + File.separator + IConstants.CSK_FILE_NAME);
            dbFile = new File(VMToolsUtils.getVMToolsFolderPath() + File.separator + IConstants.DB_FILE_NAME);
            if ((cskFile.exists()) && (dbFile.exists())) {
                _searchKeyLink.setEnabled(false);
                _removeKeyLink.setEnabled(true);
            } else {
                _searchKeyLink.setEnabled(true);
                _removeKeyLink.setEnabled(false);
            }
        } catch (IOException io) {
            _log.error(io.getMessage());
        }

        _searchKeyLink.addListener(SWT.Selection, new Listener() {
            public void handleEvent(Event event) {
                // Open file dialog to allow user select the parent folder of *.csk and *.db files
                SigningSearchDialog oldKeyDialog = new SigningSearchDialog(getShell());
                try {
                    ArrayList<File> oldKeyFiles = oldKeyDialog.search();
                    if (oldKeyFiles != null) {
                        oldKeyDialog.copyFileIntoSignToolDir(oldKeyFiles);
                        MessageDialog dialog = new MessageDialog(getShell(),
                                Messages.CodeSigningPrefsPage_MessageDialogTitle1, null,
                                Messages.CodeSigningPrefsPage_MessageDialogMsg1, MessageDialog.INFORMATION,
                                new String[] { IDialogConstants.OK_LABEL }, 0);
                        dialog.open();
                        _searchKeyLink.setEnabled(false);
                        _removeKeyLink.setEnabled(true);
                        _log.info(Messages.CodeSigningPrefsPage_MessageDialogMsg9);
                    }
                } catch (IllegalArgumentException ex) {
                    MessageDialog dialog = new MessageDialog(getShell(),
                            Messages.CodeSigningPrefsPage_MessageDialogTitle1, null, ex.getMessage(),
                            MessageDialog.WARNING, new String[] { IDialogConstants.OK_LABEL }, 0);
                    dialog.open();
                }
            }
        });

        _removeKeyLink.addListener(SWT.Selection, new Listener() {
            public void handleEvent(Event event) {
                if (MessageDialog.openQuestion(getShell(), Messages.CodeSigningPrefsPage_MessageDialogTitle3,
                        Messages.CodeSigningPrefsPage_MessageDialogMsg4
                                + Messages.CodeSigningPrefsPage_MessageDialogMsg6)) {
                    removeKeys();
                }
            }
        });

        GridData gridData = new GridData(GridData.FILL, GridData.CENTER, true, false);
        gridData.verticalIndent = 15;

        _runSignToolAutomatically = new Button(main, SWT.CHECK);
        _runSignToolAutomatically.setText(Messages.SignatureToolPrefsPage_AutomaticallySigningBtnMsg);
        _runSignToolAutomatically.setToolTipText(Messages.SignatureToolPrefsPage_AutomaticallySigningBtnTooltipMsg);
        _runSignToolAutomatically.setLayoutData(gridData);

        _runSignToolSilently = new Button(main, SWT.CHECK);
        _runSignToolSilently.setText(Messages.SignatureToolPrefsPage_SilentToolBtnMsg);
        _runSignToolSilently.setToolTipText(Messages.SignatureToolPrefsPage_SilentToolBtnTooltipMsg);
        _runSignToolSilently.setLayoutData(gridData);

        initValues();

        return parent;
    }

    private void removeKeys() {
        try {
            File cskFile = new File(
                    VMToolsUtils.getVMToolsFolderPath() + File.separator + IConstants.CSK_FILE_NAME);
            File dbFile = new File(VMToolsUtils.getVMToolsFolderPath() + File.separator + IConstants.DB_FILE_NAME);
            if ((!cskFile.exists()) && (!dbFile.exists())) {
                MessageDialog dialog = new MessageDialog(getShell(),
                        Messages.CodeSigningPrefsPage_MessageDialogTitle3, null,
                        Messages.CodeSigningPrefsPage_MessageDialogMsg3, MessageDialog.WARNING,
                        new String[] { IDialogConstants.OK_LABEL }, 0);
                dialog.open();
                return;
            }
            if (cskFile.exists()) {
                cskFile.renameTo(new File(VMToolsUtils.getVMToolsFolderPath() + File.separator
                        + IConstants.CSK_FILE_NAME + IConstants.UNDERSCORE_STRING + System.currentTimeMillis()));
            }
            if (dbFile.exists()) {
                dbFile.renameTo(new File(VMToolsUtils.getVMToolsFolderPath() + File.separator
                        + IConstants.DB_FILE_NAME + IConstants.UNDERSCORE_STRING + System.currentTimeMillis()));
            }
            if ((!cskFile.exists()) && (!dbFile.exists())) {
                MessageDialog dialog = new MessageDialog(getShell(),
                        Messages.CodeSigningPrefsPage_MessageDialogTitle3, null,
                        Messages.CodeSigningPrefsPage_MessageDialogMsg5
                                + Messages.CodeSigningPrefsPage_MessageDialogMsg6,
                        MessageDialog.INFORMATION, new String[] { IDialogConstants.OK_LABEL }, 0);
                dialog.open();
                _searchKeyLink.setEnabled(true);
                _removeKeyLink.setEnabled(false);
                _log.info(Messages.CodeSigningPrefsPage_MessageDialogMsg7);
            }
        } catch (IOException e) {
            _log.error(e.getMessage());
        }
    }

    @Override
    public boolean performOk() {
        storePrefValues();
        return true;
    }

    @Override
    protected void performDefaults() {
        initializeDefaults();
        super.performDefaults();
    }

    private void initValues() {
        if (_runSignToolSilently != null) {
            _runSignToolSilently.setSelection(SignatureToolPreferences.getRunSignatureToolSilently());
        }

        if (_runSignToolAutomatically != null) {
            _runSignToolAutomatically.setSelection(SignatureToolPreferences.getRunSignatureToolAutomatically());
        }
    }

    private void initializeDefaults() {
        if (_runSignToolSilently != null) {
            _runSignToolSilently.setSelection(SignatureToolPreferences.getDefaultRunSignatureToolSilently());
        }
        if (_runSignToolAutomatically != null) {
            _runSignToolAutomatically
                    .setSelection(SignatureToolPreferences.getDefaultRunSignatureToolAutomatically());
        }
    }

    private void storePrefValues() {
        if (_runSignToolSilently != null) {
            SignatureToolPreferences.setRunSignatureToolSilently(_runSignToolSilently.getSelection());
        }
        if (_runSignToolAutomatically != null) {
            SignatureToolPreferences.setRunSignatureToolAutomatically(_runSignToolAutomatically.getSelection());
        }
    }
}