Java tutorial
/***************************************************************************** * Copyright (c) 2008 g-Eclipse Consortium * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Initial development of the original code was made for the * g-Eclipse project founded by European Union * project number: FP6-IST-034327 http://www.geclipse.eu/ * * Contributors: * Moritz Post - initial API and implementation *****************************************************************************/ package eu.geclipse.aws.ui.wizards; import java.net.URL; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.jface.wizard.IWizardPage; import org.eclipse.jface.wizard.Wizard; import org.eclipse.jface.wizard.WizardPage; import org.eclipse.swt.SWT; import org.eclipse.swt.events.ModifyEvent; import org.eclipse.swt.events.ModifyListener; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Group; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Text; import eu.geclipse.aws.auth.AWSAuthToken; import eu.geclipse.aws.auth.AWSAuthTokenDescription; import eu.geclipse.aws.ui.Messages; import eu.geclipse.aws.ui.internal.Activator; import eu.geclipse.aws.vo.AWSVirtualOrganization; import eu.geclipse.core.auth.PasswordManager; import eu.geclipse.core.model.IVirtualOrganization; import eu.geclipse.core.reporting.ProblemException; import eu.geclipse.ui.wizards.VoSelectionWizardPage; /** * This wizard page provides the form elements to input the details required to * create an {@link AWSAuthToken}. * * @author Moritz Post */ public class AWSAuthTokenWizardPage extends WizardPage { /** The ID of the wizard page. */ private static final String WIZARD_PAGE_ID = "eu.geclipse.aws.ui.awsAuthTokenWizardPage"; //$NON-NLS-1$ /** The {@link Text} widget to hold the access id. */ private Text accessIdText; /** The {@link Text} widget to hold the secret id. */ private Text secretIdText; /** The initial datasource for the token. */ private AWSAuthTokenDescription awsAuthTokenDesc; /** The parent {@link Wizard} of this page. */ private AWSAuthTokenWizard authTokenWizard; /** * Create a new {@link AWSAuthTokenWizardPage} and provide initial content via * the awsAuthTokenDesc * * @param authTokenWizard the parent {@link Wizard} * @param awsAuthTokenDesc the initial {@link AWSAuthTokenDescription} */ protected AWSAuthTokenWizardPage(final AWSAuthTokenWizard authTokenWizard, final AWSAuthTokenDescription awsAuthTokenDesc) { super(AWSAuthTokenWizardPage.WIZARD_PAGE_ID, Messages.getString("AWSAuthTokenWizardPage.wizard_page_title"), //$NON-NLS-1$ null); this.awsAuthTokenDesc = awsAuthTokenDesc; this.authTokenWizard = authTokenWizard; setDescription(Messages.getString("AWSAuthTokenWizardPage.wizard_page_description")); //$NON-NLS-1$ URL imgUrl = Activator.getDefault().getBundle().getEntry("icons/wizban/credentials_wiz.gif"); //$NON-NLS-1$ setImageDescriptor(ImageDescriptor.createFromURL(imgUrl)); } @Override public void setVisible(final boolean visible) { super.setVisible(visible); this.authTokenWizard.setCanFinish(true); if (visible) { initPage(); } } public void createControl(final Composite parent) { GridData gData; Composite mainComp = new Composite(parent, SWT.NONE); mainComp.setLayout(new GridLayout(1, false)); // credentials group Group credentialsGroup = new Group(mainComp, SWT.NONE); credentialsGroup.setLayout(new GridLayout(2, false)); credentialsGroup.setText(Messages.getString("AWSAuthTokenWizardPage.group_credentials_title")); //$NON-NLS-1$ gData = new GridData(GridData.FILL_HORIZONTAL); gData.grabExcessHorizontalSpace = true; credentialsGroup.setLayoutData(gData); // access id text Label accessIdLabel = new Label(credentialsGroup, SWT.LEFT); accessIdLabel.setText(Messages.getString("AWSAuthTokenWizardPage.label_access_id")); //$NON-NLS-1$ gData = new GridData(); accessIdLabel.setLayoutData(gData); this.accessIdText = new Text(credentialsGroup, SWT.LEFT | SWT.SINGLE | SWT.BORDER | SWT.READ_ONLY); gData = new GridData(GridData.FILL_HORIZONTAL); gData.grabExcessHorizontalSpace = true; this.accessIdText.setLayoutData(gData); // secret id Label secretIdLabel = new Label(credentialsGroup, SWT.LEFT); secretIdLabel.setText(Messages.getString("AWSAuthTokenWizardPage.label_secret_id")); //$NON-NLS-1$ gData = new GridData(); secretIdLabel.setLayoutData(gData); this.secretIdText = new Text(credentialsGroup, SWT.LEFT | SWT.SINGLE | SWT.BORDER | SWT.PASSWORD); gData = new GridData(GridData.FILL_HORIZONTAL); gData.grabExcessHorizontalSpace = true; this.secretIdText.setLayoutData(gData); setControl(mainComp); } /** * Initializes the pages form based on either a provided * {@link AWSAuthTokenDescription} or the {@link AWSVirtualOrganization} * selected in the previous wizard page. */ private void initPage() { // populate fields if possible String emptyString = ""; //$NON-NLS-1$ this.accessIdText.setText(emptyString); this.secretIdText.setText(emptyString); if (this.awsAuthTokenDesc != null) { String awsAccessId = this.awsAuthTokenDesc.getAwsAccessId(); if (awsAccessId != null) { String awsSecretId = PasswordManager .getPassword(AWSAuthTokenDescription.SECURE_STORAGE_NODE + awsAccessId); this.accessIdText.setText(awsAccessId); if (awsSecretId != null) { this.secretIdText.setText(awsSecretId); } else { this.secretIdText.setFocus(); } } } else { IVirtualOrganization[] selectedVos = getVoSelectionPage().getSelectedVos(); if (selectedVos[0] != null) { AWSVirtualOrganization awsVo = (AWSVirtualOrganization) selectedVos[0]; try { String awsAccessId = awsVo.getProperties().getAwsAccessId(); this.accessIdText.setText(awsAccessId); String awsSecretId = PasswordManager .getPassword(AWSAuthTokenDescription.SECURE_STORAGE_NODE + awsAccessId); if (awsSecretId != null) { this.secretIdText.setText(awsSecretId); } else { this.secretIdText.setFocus(); } } catch (ProblemException problemEx) { Activator.log("Could not extract aws access id from aws vo properties", //$NON-NLS-1$ problemEx); } } else { this.accessIdText.setEnabled(true); this.accessIdText.setFocus(); } } } /** * Construct an {@link AWSAuthTokenDescription} from the specified settings of * the UI components. * * @return A token description that holds the values that were specified using * the UI components. */ public AWSAuthTokenDescription getTokenDescription() { String accessId = this.accessIdText.getText().trim(); String secretId = this.secretIdText.getText().trim(); AWSVirtualOrganization awsVo = null; if (this.awsAuthTokenDesc == null || this.awsAuthTokenDesc.getAwsVo() == null) { IVirtualOrganization[] selectedVos = getVoSelectionPage().getSelectedVos(); for (IVirtualOrganization virtualOrganization : selectedVos) { awsVo = (AWSVirtualOrganization) virtualOrganization; } } else { awsVo = this.awsAuthTokenDesc.getAwsVo(); } AWSAuthTokenDescription authTokenDesc = new AWSAuthTokenDescription(awsVo); PasswordManager.registerPassword(AWSAuthTokenDescription.SECURE_STORAGE_NODE + accessId, secretId); return authTokenDesc; } /** * Validate the input of this form. Check if the secret id and the access id * is present. * * @return if this pages form data is valid or not */ public boolean isValid() { String error = null; if (this.accessIdText.getText().trim().length() == 0) { error = Messages.getString("AWSAuthTokenWizardPage.form_error_access_id_required"); //$NON-NLS-1$ } if (this.secretIdText.getText().trim().length() == 0) { error = Messages.getString("AWSAuthTokenWizardPage.form_error_secret_id_required"); //$NON-NLS-1$ } if (error != null) { setErrorMessage(error); this.authTokenWizard.setCanFinish(false); getWizard().getContainer().updateButtons(); return false; } setErrorMessage(null); this.authTokenWizard.setCanFinish(true); getWizard().getContainer().updateButtons(); return true; } /** * Fetch the vo selection page to choose a VO. * * @return the {@link VoSelectionWizardPage} */ private VoSelectionWizardPage getVoSelectionPage() { IWizardPage page = getPreviousPage(); while (page != null && !(page instanceof VoSelectionWizardPage)) { page = page.getPreviousPage(); } return (VoSelectionWizardPage) page; } /** * Register listeners on the form input fields so that after a first press of * the "Finish" button, any subsequent key strokes trigger validation of the * {@link Text} input widgets. */ public void registerFormListener() { this.accessIdText.addModifyListener(new ModifyListener() { public void modifyText(final ModifyEvent e) { isValid(); } }); this.secretIdText.addModifyListener(new ModifyListener() { public void modifyText(final ModifyEvent e) { isValid(); } }); } }