summaryrefslogtreecommitdiff
path: root/src/plugins/certmanager/src/com/motorolamobility/studio/android/certmanager/ui/wizards/ImportKeystorePage.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/certmanager/src/com/motorolamobility/studio/android/certmanager/ui/wizards/ImportKeystorePage.java')
-rw-r--r--src/plugins/certmanager/src/com/motorolamobility/studio/android/certmanager/ui/wizards/ImportKeystorePage.java417
1 files changed, 417 insertions, 0 deletions
diff --git a/src/plugins/certmanager/src/com/motorolamobility/studio/android/certmanager/ui/wizards/ImportKeystorePage.java b/src/plugins/certmanager/src/com/motorolamobility/studio/android/certmanager/ui/wizards/ImportKeystorePage.java
new file mode 100644
index 0000000..b9b0582
--- /dev/null
+++ b/src/plugins/certmanager/src/com/motorolamobility/studio/android/certmanager/ui/wizards/ImportKeystorePage.java
@@ -0,0 +1,417 @@
+/*
+ * 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.wizards;
+
+import java.io.File;
+import java.util.List;
+
+import org.eclipse.jface.viewers.ComboViewer;
+import org.eclipse.jface.viewers.ILabelProvider;
+import org.eclipse.jface.viewers.ILabelProviderListener;
+import org.eclipse.jface.viewers.IStructuredContentProvider;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.jface.wizard.WizardPage;
+import org.eclipse.osgi.util.NLS;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.ModifyEvent;
+import org.eclipse.swt.events.ModifyListener;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.SelectionListener;
+import org.eclipse.swt.graphics.Image;
+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.Display;
+import org.eclipse.swt.widgets.FileDialog;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.Text;
+import org.eclipse.ui.PlatformUI;
+
+import com.motorola.studio.android.common.utilities.EclipseUtils;
+import com.motorola.studio.android.common.utilities.FileUtil;
+import com.motorolamobility.studio.android.certmanager.CertificateManagerActivator;
+import com.motorolamobility.studio.android.certmanager.core.KeyStoreManager;
+import com.motorolamobility.studio.android.certmanager.core.PasswordProvider;
+import com.motorolamobility.studio.android.certmanager.exception.KeyStoreManagerException;
+import com.motorolamobility.studio.android.certmanager.i18n.CertificateManagerNLS;
+import com.motorolamobility.studio.android.certmanager.ui.model.IKeyStore;
+import com.motorolamobility.studio.android.certmanager.ui.model.KeyStoreNode;
+import com.motorolamobility.studio.android.certmanager.ui.model.SigningAndKeysModelManager;
+
+public class ImportKeystorePage extends WizardPage
+{
+
+ private Text keystoreFilename;
+
+ private ComboViewer keystoreType;
+
+ public static final String IMPORT_KEYSTORE_HELP_ID = CertificateManagerActivator.PLUGIN_ID
+ + ".import_keystore"; //$NON-NLS-1$
+
+ private SelectionListener selectionListener = new SelectionAdapter()
+ {
+
+ @Override
+ public void widgetSelected(SelectionEvent e)
+ {
+ validatePage();
+ }
+ };
+
+ private boolean userChangedFilename = false;
+
+ private Composite mainComposite;
+
+ private File keystoreFile;
+
+ private String keystoreTypeString;
+
+ protected boolean keystoreAlreadyMapped = false;
+
+ private IKeyStore keyStoreNode;
+
+ /**
+ * @param pageName
+ */
+ protected ImportKeystorePage(String pageName)
+ {
+ super(pageName);
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.jface.dialogs.IDialogPage#createControl(org.eclipse.swt.widgets.Composite)
+ */
+ @Override
+ public void createControl(Composite parent)
+ {
+ mainComposite = new Composite(parent, SWT.FILL);
+ mainComposite.setLayout(new GridLayout(3, false));
+ mainComposite.setLayoutData(new GridData(GridData.FILL_BOTH));
+
+ setTitle(CertificateManagerNLS.ImportKeystorePage_Title);
+ setMessage(CertificateManagerNLS.ImportKeystorePage_Description);
+
+ createFilenameSection(mainComposite);
+ createKeystoreTypeSection(mainComposite);
+
+ validatePage();
+
+ setControl(mainComposite);
+
+ //set help id for this page
+ PlatformUI.getWorkbench().getHelpSystem().setHelp(parent, IMPORT_KEYSTORE_HELP_ID);
+ PlatformUI.getWorkbench().getHelpSystem().setHelp(mainComposite, IMPORT_KEYSTORE_HELP_ID);
+ }
+
+ private void createFilenameSection(Composite mainComposite)
+ {
+ Label keystoreFilenameLabel = new Label(mainComposite, SWT.NONE);
+ keystoreFilenameLabel.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, false, 1, 1));
+ keystoreFilenameLabel
+ .setText(CertificateManagerNLS.CreateKeystorePage_KeystoreFilenameLabel);
+
+ keystoreFilename = new Text(mainComposite, SWT.SINGLE | SWT.BORDER);
+ keystoreFilename.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
+ keystoreFilename.addSelectionListener(selectionListener);
+ keystoreFilename.addModifyListener(new ModifyListener()
+ {
+
+ @Override
+ public void modifyText(ModifyEvent e)
+ {
+ userChangedFilename = true;
+ validatePage();
+ }
+ });
+
+ Button chooseLocation = new Button(mainComposite, SWT.PUSH);
+ chooseLocation.setLayoutData(new GridData(SWT.CENTER, SWT.CENTER, false, false, 1, 1));
+ chooseLocation.setText(CertificateManagerNLS.CreateKeystorePage_KeystoreFilenameBrowse);
+ chooseLocation.addSelectionListener(new SelectionAdapter()
+ {
+ /* (non-Javadoc)
+ * @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse.swt.events.SelectionEvent)
+ */
+ @Override
+ public void widgetSelected(SelectionEvent e)
+ {
+ Shell shell = Display.getCurrent().getActiveShell();
+
+ FileDialog dialog = new FileDialog(shell, SWT.OPEN);
+
+ String keystoreFilenameStr = dialog.open();
+
+ if (keystoreFilenameStr != null)
+ {
+ keystoreFilename.setText(keystoreFilenameStr);
+ keystoreType.getCombo().setFocus();
+ }
+ }
+ });
+ }
+
+ private void createKeystoreTypeSection(Composite parent)
+ {
+ Label keystoreTypeLabel = new Label(parent, SWT.NONE);
+ keystoreTypeLabel.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, false, 1, 1));
+ keystoreTypeLabel.setText(CertificateManagerNLS.CreateKeystorePage_KeystoreType);
+
+ keystoreType = new ComboViewer(parent, SWT.READ_ONLY);
+ keystoreType.getCombo().setLayoutData(new GridData(SWT.FILL, SWT.NONE, true, false, 1, 1));
+ keystoreType.setContentProvider(new IStructuredContentProvider()
+ {
+
+ @Override
+ public void inputChanged(Viewer viewer, Object oldInput, Object newInput)
+ {
+ //do nothing
+ }
+
+ @Override
+ public void dispose()
+ {
+ //do nothing
+ }
+
+ @SuppressWarnings("unchecked")
+ @Override
+ public Object[] getElements(Object inputElement)
+ {
+ return ((List<String>) inputElement).toArray();
+ }
+ });
+ keystoreType.setLabelProvider(new ILabelProvider()
+ {
+
+ @Override
+ public void removeListener(ILabelProviderListener listener)
+ {
+ //do nothing
+ }
+
+ @Override
+ public boolean isLabelProperty(Object element, String property)
+ {
+ return false;
+ }
+
+ @Override
+ public void dispose()
+ {
+ //do nothing
+ }
+
+ @Override
+ public void addListener(ILabelProviderListener listener)
+ {
+ //do nothing
+ }
+
+ @Override
+ public String getText(Object element)
+ {
+ return (String) element;
+ }
+
+ @Override
+ public Image getImage(Object element)
+ {
+ return null;
+ }
+ });
+
+ keystoreType.setInput(KeyStoreManager.getInstance().getAvailableTypes());
+
+ for (int i = 0; i < keystoreType.getCombo().getItemCount(); i++)
+ {
+ if (keystoreType.getCombo().getItem(i)
+ .compareToIgnoreCase(KeyStoreManager.getInstance().getDefaultType()) == 0)
+ {
+ keystoreType.getCombo().select(i);
+ }
+ }
+
+ keystoreType.getCombo().addModifyListener(new ModifyListener()
+ {
+
+ @Override
+ public void modifyText(ModifyEvent e)
+ {
+ validatePage();
+ }
+ });
+
+ //fill the third column with a blank label
+ Label separator2 = new Label(parent, SWT.NONE);
+ separator2.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, false, 1, 1));
+ }
+
+ protected boolean validatePage()
+ {
+ String errorMessage = null;
+ boolean pageComplete = true;
+ keystoreAlreadyMapped = false;
+
+ keystoreFile = new File(keystoreFilename.getText());
+ keystoreTypeString = keystoreType.getCombo().getText();
+
+ if (keystoreType.getCombo().getText().isEmpty())
+ {
+ errorMessage = CertificateManagerNLS.ImportKeystorePage_KeystoreTypeCannotBeEmpty;
+ pageComplete = false;
+ }
+
+ if (userChangedFilename && !keystoreFile.exists())
+ {
+ errorMessage =
+ NLS.bind(CertificateManagerNLS.ImportKeystorePage_FileDoesNotExist,
+ keystoreFilename.getText());
+ pageComplete = false;
+ }
+
+ if (keystoreFile.exists())
+ {
+ if (keystoreFile.isFile())
+ {
+ int fileSize = -1;
+ try
+ {
+ fileSize = FileUtil.getFileSize(keystoreFile);
+ }
+ catch (Exception e)
+ {
+ e.printStackTrace();
+ }
+ if (fileSize <= 0)
+ {
+ errorMessage =
+ NLS.bind(CertificateManagerNLS.ImportKeystorePage_FileEmpty,
+ keystoreFilename.getText());
+ pageComplete = false;
+ }
+ }
+ else if (keystoreFile.isDirectory())
+ {
+ errorMessage =
+ NLS.bind(
+ CertificateManagerNLS.ImportKeystorePage_DirectoryNotAllowedErrorMsg,
+ keystoreFilename.getText());
+ pageComplete = false;
+ }
+ }
+
+ if (keystoreFilename.getText().isEmpty())
+ {
+ errorMessage = CertificateManagerNLS.ImportKeystorePage_FilenameCannotBeEmpty;
+ pageComplete = false;
+ }
+
+ if (KeyStoreManager.getInstance().isKeystoreMapped(keystoreFile))
+ {
+ errorMessage =
+ NLS.bind(CertificateManagerNLS.ImportKeystorePage_KeystoreAlreadyMapped,
+ keystoreFilename.getText());
+ keystoreAlreadyMapped = true;
+ pageComplete = false;
+ }
+
+ setErrorMessage(errorMessage);
+ setPageComplete(pageComplete);
+
+ return pageComplete;
+ }
+
+ /**
+ * Import the keystore using the information provided by the user.
+ * @return True if the keystore was imported, false otherwise.
+ * */
+ protected boolean importKeystore(String password, boolean savePassword)
+ {
+ boolean successfullyImported = true;
+
+ validatePage();
+
+ if (isPageComplete())
+ {
+
+ KeyStoreNode keyStoreNode =
+ new KeyStoreNode(keystoreFile, keystoreType.getCombo().getText());
+
+ try
+ {
+ SigningAndKeysModelManager.getInstance().mapKeyStore(keyStoreNode);
+
+ if (savePassword)
+ {
+ PasswordProvider passwordProvider = new PasswordProvider(keystoreFile);
+ passwordProvider.saveKeyStorePassword(password);
+ }
+ }
+ catch (KeyStoreManagerException e)
+ {
+ //keystore already mapped
+ EclipseUtils.showErrorDialog(
+ CertificateManagerNLS.ImportKeystorePage_CouldNotImportKeystore,
+ e.getMessage());
+ successfullyImported = false;
+ }
+ }
+ else
+ {
+ successfullyImported = false;
+ }
+
+ return successfullyImported;
+ }
+
+ /**
+ * Import the keystore using the information provided by the user.
+ * @return True if the keystore was imported, false otherwise.
+ * */
+ public boolean importKeystore()
+ {
+ return importKeystore(null, false);
+ }
+
+ /**
+ *
+ * @return
+ */
+ protected IKeyStore getSelectedKeystore()
+ {
+ if ((keyStoreNode == null)
+ || !keyStoreNode.getFile().equals(keystoreFile)
+ || ((keyStoreNode.getFile().equals(keystoreFile)) && keyStoreNode.getType()
+ .equalsIgnoreCase(keystoreTypeString)))
+ {
+ keyStoreNode = new KeyStoreNode(keystoreFile, keystoreTypeString);
+ }
+ return keyStoreNode;
+ }
+
+ /**
+ * @return the mainComposite
+ */
+ protected Composite getMainComposite()
+ {
+ return mainComposite;
+ }
+
+}