/* * 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() ); } } }