/* * Copyright (C) 2012 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.motorolamobility.studio.android.certmanager.ui.composite; import java.util.Date; 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.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Event; import org.eclipse.swt.widgets.Group; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Listener; import org.eclipse.swt.widgets.Text; import com.motorola.studio.android.common.utilities.ui.WidgetsFactory; import com.motorola.studio.android.common.utilities.ui.WidgetsUtil; import com.motorolamobility.studio.android.certmanager.core.KeyStoreManager; import com.motorolamobility.studio.android.certmanager.i18n.CertificateManagerNLS; import com.motorolamobility.studio.android.certmanager.ui.model.EntryNode; import com.motorolamobility.studio.android.certmanager.ui.model.IKeyStore; import com.motorolamobility.studio.android.certmanager.ui.wizards.CreateKeyWizardPage; /** * This class shows the field to create a new Android certificates / keys. */ public class NewKeyBlock extends CertificateBlock { private static final int VALIDITY_SIZE = 3; private static final int SMALL_TEXT_SIZE = 64; private CreateKeyWizardPage baseWizardPage; private Label keyPasswordLabel; private Label keyConfirmPasswordLabel; private Text keyPassword; private Text keyConfirmPassword; private Button savePasswordCheckBox; private Text textValidity = null; private Label labelValidity = null; private boolean canSavePassword = false; private String keyPasswordText = new String(); private static final String DEFAULT_VALIDITY_IN_YEARS = "30"; //default //$NON-NLS-1$ @Override public Composite createContent(Composite parent) { Composite composite = super.createContent(parent); decorateRequiredFields(); return composite; }; @Override protected void createCustomDetailedInfoArea(Composite parent) { labelValidity = WidgetsFactory.createLabel(parent, CertificateManagerNLS.CertificateBlock_Validity + ":"); //$NON-NLS-1$ textValidity = WidgetsFactory.createText(parent); textValidity.addListener(SWT.Modify, this); textValidity.addFocusListener(focusListener); textValidity.setTextLimit(VALIDITY_SIZE); textValidity.setText(DEFAULT_VALIDITY_IN_YEARS); } /* (non-Javadoc) * @see com.motorolamobility.studio.android.certmanager.ui.composite.CertificateBlock#createCustomArea(org.eclipse.swt.widgets.Composite) */ @Override protected void createCustomArea(Composite parent) { Group passwordGroup = WidgetsFactory.createTitledGroup(parent, CertificateManagerNLS.NewKeyBlock_PasswordGroupTitle, 2); //KEYSTORE PASSWORD SECTION keyPasswordLabel = new Label(passwordGroup, SWT.NONE); keyPasswordLabel.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, false, 1, 1)); keyPasswordLabel.setText(CertificateManagerNLS.CertificateBlock_KeyPassword_Label + ":"); //$NON-NLS-2$ //$NON-NLS-1$ keyPassword = new Text(passwordGroup, SWT.SINGLE | SWT.BORDER | SWT.PASSWORD); keyPassword.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1)); keyPassword.setTextLimit(SMALL_TEXT_SIZE); keyPassword.addListener(SWT.Modify, new Listener() { @Override public void handleEvent(Event event) { keyPasswordText = keyPassword.getText(); NewKeyBlock.super.handleEvent(event); } }); keyPassword.addFocusListener(focusListener); //CONFIRM PASSWORD SECTION keyConfirmPasswordLabel = new Label(passwordGroup, SWT.NONE); keyConfirmPasswordLabel .setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, false, 1, 1)); keyConfirmPasswordLabel .setText(CertificateManagerNLS.CertificateBlock_ConfirmKeyPassword_Label + ":"); //$NON-NLS-2$ //$NON-NLS-1$ keyConfirmPassword = new Text(passwordGroup, SWT.SINGLE | SWT.BORDER | SWT.PASSWORD); keyConfirmPassword.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1)); keyConfirmPassword.addListener(SWT.Modify, this); keyConfirmPassword.addFocusListener(focusListener); keyConfirmPassword.setTextLimit(SMALL_TEXT_SIZE); //Creates the save password checkbox savePasswordCheckBox = new Button(passwordGroup, SWT.CHECK); savePasswordCheckBox.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, false, 2, 1)); savePasswordCheckBox.setText(CertificateManagerNLS.PasswordProvider_SaveThisPassword); savePasswordCheckBox.setSelection(false); savePasswordCheckBox.addFocusListener(focusListener); if ((baseWizardPage != null) && (baseWizardPage.getKeystore() != null)) { //we can not save password if keystore is not mapped in the view savePasswordCheckBox.setVisible(KeyStoreManager.getInstance().isKeystoreMapped( baseWizardPage.getKeystore().getFile())); } savePasswordCheckBox.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { //update according to check status canSavePassword = savePasswordCheckBox.getSelection(); } }); } /* (non-Javadoc) * @see com.motorolamobility.studio.android.certmanager.ui.composite.CertificateBlock#decorateRequiredFields() */ @Override protected void decorateRequiredFields() { super.decorateRequiredFields(); labelValidity.setText(decorateText(labelValidity.getText())); keyPasswordLabel.setText(decorateText(keyPasswordLabel.getText())); keyConfirmPasswordLabel.setText(decorateText(keyConfirmPasswordLabel.getText())); } @Override public boolean isPageComplete() { return (super.isPageComplete()) && !WidgetsUtil.isNullOrEmpty(this.textValidity) && !WidgetsUtil.isNullOrEmpty(this.keyPassword) && !WidgetsUtil.isNullOrEmpty(this.keyConfirmPassword); } /* * (non-Javadoc) * @seecom.motorola.studio.platform.tools.common.ui.composite.BaseBlock# * canFlipToNextPage() */ @Override public boolean canFlipToNextPage() { return super.canFlipToNextPage() && !WidgetsUtil.isNullOrEmpty(this.textValidity) && !WidgetsUtil.isNullOrEmpty(this.keyPassword) && !WidgetsUtil.isNullOrEmpty(this.keyConfirmPassword); } public Composite createInfoBlock(Composite parent, String alias, String name, String organization, String organizationUnit, String country, String state, String locality, Date validity, Date creationDate) { Composite toReturn = super.createInfoBlock(parent, alias, name, organization, organizationUnit, country, state, locality); labelValidity.setText(CertificateManagerNLS.CertificateBlock_ExpirationDate + ":"); //$NON-NLS-1$ textValidity.setTextLimit(Text.LIMIT); textValidity.setText(validity.toString()); textValidity.setEditable(false); keyPasswordLabel.setVisible(false); keyPassword.setVisible(false); keyConfirmPasswordLabel.setVisible(false); keyConfirmPassword.setVisible(false); savePasswordCheckBox.setVisible(false); return toReturn; } public String getKeyPassword() { return keyPasswordText; } public String getKeyConfirmPassword() { return keyConfirmPassword.getText(); } public boolean needToSaveKeyPassword() { return canSavePassword; } @Override public String getErrorMessage() { String message = super.getErrorMessage(); //if there is no error message on other items => check text validity field if (message == null) { try { int validity = Integer.parseInt(textValidity.getText()); if (validity <= 0) { throw new NumberFormatException(); } } catch (NumberFormatException nfe) { message = CertificateManagerNLS.CertificateBlock_Validity_Error; //$NON-NLS-1$ } } //if there is no error message on other items => check password fields if (message == null) { //password text and confirmation password text must match if (!keyPassword.getText().equals(keyConfirmPassword.getText())) { message = CertificateManagerNLS.CreateKeystorePage_PasswordDoesNotMatch; } //check password size according to keytool specification if (keyPassword.getText().length() < EntryNode.KEY_PASSWORD_MIN_SIZE) { message = CertificateManagerNLS.bind( CertificateManagerNLS.CreateKeystorePage_PasswordMinSizeMessage, IKeyStore.KEYSTORE_PASSWORD_MIN_SIZE); //$NON-NLS-1$ } } return message; } /** * Set messages (used to set information messages) * @param message * @param messageType IMessageProvider.INFORMATION */ protected void setMessage(String message, int messageType) { if (baseWizardPage != null) { baseWizardPage.setMessage(message, messageType); } } public String getValidity() { return textValidity.getText(); } /** * @param baseWizardPage the baseWizardPage to set */ public void setBaseWizardPage(CreateKeyWizardPage baseWizardPage) { this.baseWizardPage = baseWizardPage; } }