/*******************************************************************************
* Copyright (c) 2007, 2008 Borland Software 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:
* Borland Software Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.m2m.internal.qvt.oml.samples.ui.wizard;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Path;
import org.eclipse.jface.wizard.WizardPage;
import org.eclipse.m2m.internal.qvt.oml.samples.ui.Messages;
import org.eclipse.m2m.internal.qvt.oml.samples.ui.SampleProject;
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.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Text;
public class SamplesWizardPage extends WizardPage {
public SamplesWizardPage(SampleProject[] projects) {
super("wizardPage"); //$NON-NLS-1$
if(projects.length == 0) {
throw new IllegalArgumentException("No projects"); //$NON-NLS-1$
}
setTitle(Messages.SamplesWizardPage_title);
setDescription(Messages.SamplesWizardPage_desc);
myProjects = projects;
}
public void createControl(final Composite parent) {
Composite container = new Composite(parent, SWT.NULL);
setControl(container);
doCreateContents(container);
setPageComplete(validatePage());
}
protected void doCreateContents(Composite container) {
GridLayout layout = new GridLayout();
container.setLayout(layout);
layout.numColumns = 2;
layout.verticalSpacing = 9;
ModifyListener modifyListener = new ModifyListener() {
public void modifyText(final ModifyEvent e) {
setPageComplete(validatePage());
}
};
myNames = new Text[myProjects.length];
for (int i = 0; i < myProjects.length; i++) {
SampleProject project = myProjects[i];
Label label = new Label(container, SWT.NULL);
if (project.getLabel() != null) {
label.setText(project.getLabel());
} else {
label.setText(NLS.bind(Messages.SamplesWizardPage_projectNameIndexed, new Integer(i+1)));
}
Text name = new Text(container, SWT.BORDER | SWT.SINGLE);
name.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
name.setText(project.getName());
name.setSelection(name.getCharCount());
name.setData(project);
name.addModifyListener(modifyListener);
myNames[i] = name;
}
}
@Override
public void setVisible(boolean visible) {
super.setVisible(visible);
if(visible && myNames != null) {
myNames[0].setFocus();
}
}
private boolean projectExists(final String projectName) {
return ResourcesPlugin.getWorkspace().getRoot().getProject(projectName).exists();
}
private IStatus validateProjectName(String projectName) {
IPath projectPath = new Path(projectName).makeAbsolute();
IStatus status = ResourcesPlugin.getWorkspace().validatePath(projectPath.toString(), IResource.PROJECT);
return status;
}
protected boolean validatePage() {
setMessage(null);
setErrorMessage(null);
for (int i = 0; i < myNames.length; i++) {
Text name = myNames[i];
IStatus projectPathStatus = validateProjectName(name.getText());
if(projectPathStatus.getSeverity() == IStatus.ERROR) {
setErrorMessage(projectPathStatus.getMessage());
return false;
}
else if (projectExists(name.getText())) {
setErrorMessage(NLS.bind(Messages.SamplesWizardPage_alreadyExists, name.getText()));
return false;
}
myProjects[i].setName(name.getText());
}
return true;
}
private Text[] myNames;
private final SampleProject[] myProjects;
}