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