//------------------------------------------------------------------------------ // Copyright (c) 2005, 2006 IBM Corporation and others. // 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 // // Contributors: // IBM Corporation - initial implementation //------------------------------------------------------------------------------ package org.eclipse.epf.export.xml.wizards; import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.Path; import org.eclipse.epf.export.xml.ExportXMLPlugin; import org.eclipse.epf.export.xml.ExportXMLResources; import org.eclipse.epf.export.xml.preferences.ExportXMLPreferences; import org.eclipse.jface.wizard.IWizardPage; 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.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; 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.Text; /** * A wizard page that prompts the user to specify a XML file to store the * exported method library content. * * @author Jinhua Xi * @author Kelvin Low * @since 1.0 */ public class SelectXMLFilePage extends WizardPage { public static final String PAGE_NAME = SelectXMLFilePage.class.getName(); private Text pathText; private String path; /** * Creates a new instance. */ public SelectXMLFilePage() { super(PAGE_NAME); setTitle(ExportXMLResources.selectXMLFilePage_title); setDescription(ExportXMLResources.selectXMLFilePage_desc); setImageDescriptor(ExportXMLPlugin.getDefault().getImageDescriptor( "full/wizban/ExportXML.gif")); //$NON-NLS-1$ } /** * @see org.eclipse.jface.dialogs.IDialogPage#createControl(Composite) */ public void createControl(Composite parent) { Composite composite = new Composite(parent, SWT.NONE); composite.setLayout(new GridLayout(3, false)); composite.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); Label fileLabel = new Label(composite, SWT.NONE); fileLabel.setText(ExportXMLResources.fileLabel_text); pathText = new Text(composite, SWT.BORDER); pathText.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); pathText.setText(ExportXMLPreferences.getXMLFile()); pathText.addModifyListener(new ModifyListener() { public void modifyText(ModifyEvent e) { if (isValidPath(pathText.getText().trim())) { setPageComplete(true); setErrorMessage(null); } else { setPageComplete(false); setErrorMessage(ExportXMLResources.invalidXMLFile_error); } } }); Button browseButton = new Button(composite, SWT.PUSH); browseButton.setLayoutData(new GridData(GridData.END)); browseButton.setText(ExportXMLResources.browseButton_text); browseButton.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { FileDialog fd = new FileDialog(Display.getCurrent() .getActiveShell(), SWT.SAVE); fd.setFilterExtensions(new String[] { "*.xml", "*.*" }); //$NON-NLS-1$ //$NON-NLS-2$ String path = fd.open(); boolean ok = false; if (path != null) { pathText.setText(path); ok = isValidPath(path); } setPageComplete(ok); getWizard().getContainer().updateButtons(); } }); setControl(composite); setPageComplete(isValidPath(pathText.getText().trim())); } /** * Checks whether the user specific path is valid. * * @param path * the user specific path * @return <code>true</code> if the user specified path is valid. */ private boolean isValidPath(String path) { IPath ecPath = Path.fromOSString(path); if (ecPath.isValidPath(path) && path.endsWith(".xml")) { //$NON-NLS-1$ this.path = path; return true; } return false; } /** * @see org.eclipse.jface.wizard.WizardPage#isCompleted() */ public IWizardPage getNextPage() { return null; // no more page } /** * Gets the user specified XML file. * * @return an absolute path to the XML file */ public String getPath() { return this.path; } }