blob: 558b8571e804978ded80f6df449f6d8d31fb589f [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2007, 2020 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 v2.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v20.html
*
* Contributors:
* Borland Software Corporation - initial API and implementation
* Christopher Gerking - bugs 319078, 562175
*******************************************************************************/
package org.eclipse.m2m.internal.qvt.oml.ui.wizards.project;
import java.io.File;
import java.io.IOException;
import org.eclipse.core.resources.IContainer;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Path;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.dialogs.IMessageProvider;
import org.eclipse.jface.wizard.IWizardPage;
import org.eclipse.m2m.internal.qvt.oml.ui.QVTUIPlugin;
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.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.Group;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Text;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.dialogs.WizardNewProjectCreationPage;
public class NewQVTProjectCreationPage extends WizardNewProjectCreationPage {
private NewProjectData fCreationData;
private Text fSourceText;
private Text fOutputText;
private Button fSimpleProject;
private Button fSimplePlugin;
private Button fJavaPlugin;
private Group fJavaSettingsGroup;
private Label fSourceLabel;
private Label fOutputLabel;
private Label fQvtSourceContainerLabel;
private Text fQvtSourceContainerText;
public NewQVTProjectCreationPage(String pageName, NewProjectData data){
super(pageName);
fCreationData = data;
}
@Override
protected boolean validatePage() {
boolean result = super.validatePage();
if(result && getProjectHandle() != null) {
IPath wsLocation = getProjectHandle().getWorkspace().getRoot().getLocation();
if(wsLocation != null) {
IPath projectLocation = wsLocation.append(getProjectHandle().getName());
File projectFile = Path.fromOSString(projectLocation.toOSString()).toFile();
if(projectFile.exists()) {
try {
projectFile = projectFile.getCanonicalFile();
} catch (IOException e) {
QVTUIPlugin.log(e);
}
String errMessage = NLS.bind(Messages.NewQVTProjectCreationPage_projectAlreadyExists, projectFile.getName());
setErrorMessage(errMessage);
return false;
}
}
}
if(result) {
if(!validateQvtSourceContainer()) {
return false;
}
}
return result;
}
protected boolean validateQvtSourceContainer() {
IStatus status = SourceContainerUpdater.validate(getQVTSourceContainerValue());
if(!status.isOK()) {
int type = IMessageProvider.NONE;
switch (status.getSeverity()) {
case IStatus.INFO:
type = IMessageProvider.INFORMATION;
break;
case IStatus.WARNING:
type = IMessageProvider.WARNING;
break;
case IStatus.ERROR:
type = IMessageProvider.ERROR;
break;
}
setMessage(status.getMessage(), type);
return status.getSeverity() <= IStatus.INFO;
}
return true;
}
protected String getQVTSourceContainerValue() {
return fQvtSourceContainerText != null ? fQvtSourceContainerText.getText() : null;
}
/**
* Get the container for QVT sources
*
* @return project container or folder under the project hierarchy.
*/
public IContainer getQVTSourceContainerHandle() {
String value = getQVTSourceContainerValue();
if(value == null || value.length() == 0) {
return getProjectHandle();
}
return getProjectHandle().getFolder(value);
}
@Override
public void createControl(Composite parent) {
super.createControl(parent);
Composite control = (Composite)getControl();
GridLayout layout = new GridLayout();
control.setLayout(layout);
createQVTSourceContainer(control);
createProjectTypeGroup(control);
Dialog.applyDialogFont(control);
setControl(control);
PlatformUI.getWorkbench().getHelpSystem().setHelp(control,
"org.eclipse.m2m.qvt.oml.transformation_project"); //$NON-NLS-1$
}
private void createQVTSourceContainer(Composite parent) {
Composite composite = new Composite(parent, SWT.NONE);
GridLayout layout = new GridLayout();
layout.numColumns = 2;
composite.setLayout(layout);
GridData gd = new GridData(GridData.FILL_HORIZONTAL);
gd.verticalIndent = 15;
composite.setLayoutData(gd);
//source container
String tooltipText = Messages.NewQVTProjectCreationPage_SourceContainerTooltip;
fQvtSourceContainerLabel = new Label(composite, SWT.NONE);
fQvtSourceContainerLabel.setText(Messages.NewQVTProjectCreationPage_SourceContainerLabel);
fQvtSourceContainerLabel.setToolTipText(tooltipText);
fQvtSourceContainerText = createText(composite, Messages.NewQVTProjectCreationPage_defaultSourceFolder);
fQvtSourceContainerText.setToolTipText(tooltipText);
}
private void createProjectTypeGroup(Composite parent) {
Composite container = new Composite(parent, SWT.Move);
container.setLayout(new GridLayout());
container.setLayoutData(new GridData(GridData.FILL_HORIZONTAL | GridData.FILL_VERTICAL));
Group projectTypeGroup = new Group(container, SWT.RADIO);
projectTypeGroup.setText(Messages.ProjectStructurePage_createProjectType);
GridLayout projectTypeLayout = new GridLayout();
projectTypeLayout.numColumns = 1;
projectTypeGroup.setLayout(projectTypeLayout);
projectTypeGroup.setLayoutData(new GridData(GridData.FILL_HORIZONTAL | GridData.FILL_VERTICAL));
GridData gd = new GridData(GridData.FILL_HORIZONTAL);
gd.verticalIndent = 5;
fSimpleProject = new Button(projectTypeGroup, SWT.RADIO);
fSimpleProject.setText(Messages.ProjectStructurePage_createSimpleProject);
fSimpleProject.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
fSimplePlugin = new Button(projectTypeGroup, SWT.RADIO);
fSimplePlugin.setText(Messages.ProjectStructurePage_createSimplePluginProject);
fSimplePlugin.setLayoutData(gd);
// select simple plugin type by default
if (ProjectIntegrationHelper.isProjectIntegration()) {
fSimplePlugin.setSelection(true);
}
else {
fSimpleProject.setSelection(true);
fSimplePlugin.setEnabled(false);
}
fJavaPlugin = new Button(projectTypeGroup, SWT.RADIO);
fJavaPlugin.setText(Messages.ProjectStructurePage_createJavaPluginProject);
fJavaPlugin.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
updateControls();
}
});
fJavaPlugin.setLayoutData(gd);
fJavaPlugin.setEnabled(ProjectIntegrationHelper.isProjectIntegration());
fJavaSettingsGroup = new Group(projectTypeGroup, SWT.NONE);
fJavaSettingsGroup.setText(Messages.ProjectStructurePage_JavaProjectSettings);
GridLayout layout = new GridLayout();
layout.numColumns = 2;
fJavaSettingsGroup.setLayout(layout);
fJavaSettingsGroup.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
fSourceLabel = createLabel(fJavaSettingsGroup, Messages.ProjectStructurePage_source);
fSourceText = createText(fJavaSettingsGroup, "src"); //$NON-NLS-1$
fSourceText.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
fOutputLabel = createLabel(fJavaSettingsGroup, Messages.ProjectStructurePage_output);
fOutputText = createText(fJavaSettingsGroup, "bin"); //$NON-NLS-1$
fOutputLabel.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
updateControls();
}
private void updateControls() {
fCreationData.setPlugin(fJavaPlugin.getSelection());
fCreationData.setCreateJava(fJavaPlugin.getSelection());
fSourceLabel.setEnabled(fJavaPlugin.getSelection());
fSourceText.setEnabled(fJavaPlugin.getSelection());
fOutputLabel.setEnabled(fJavaPlugin.getSelection());
fOutputText.setEnabled(fJavaPlugin.getSelection());
fJavaSettingsGroup.setEnabled(fJavaPlugin.getSelection());
}
private Label createLabel(Composite container, String text) {
Label label = new Label(container, SWT.NONE);
label.setText(text);
GridData gd = new GridData();
label.setLayoutData(gd);
return label;
}
private Text createText(Composite container, String txtValue) {
Text text = new Text(container, SWT.BORDER | SWT.SINGLE);
GridData gd = new GridData(GridData.FILL_HORIZONTAL);
gd.widthHint = 300;
text.setLayoutData(gd);
if(txtValue != null) {
text.setText(txtValue);
}
text.addModifyListener(new ModifyListener() {
public void modifyText(ModifyEvent e) {
validatePage();
}
});
return text;
}
@Override
public IWizardPage getNextPage() {
updateData();
return super.getNextPage();
}
public void updateData() {
fCreationData.setPlugin(!fSimpleProject.getSelection());
fCreationData.setName(getProjectName());
fCreationData.setQVTSourceFolderName(getQVTSourceContainerValue());
fCreationData.setCreateJava(fJavaPlugin.getSelection());
fCreationData.setLocation(getLocationPath());
if(fJavaPlugin.getSelection()) {
fCreationData.setSourceFolderName(fSourceText.getText().trim());
fCreationData.setOutFolderName(fOutputText.getText().trim());
} else {
fCreationData.setSourceFolderName(null);
fCreationData.setOutFolderName(null);
}
}
/**
* Indicates whether the project to be created is a plugin project.
*/
public boolean isCreatePlugin() {
return fSimpleProject != null && !fSimpleProject.getSelection();
}
/**
* Indicates whether the project to be created is a Java plugin project.
*/
public boolean isJavaPlugin() {
return fJavaPlugin != null && !fJavaPlugin.getSelection();
}
}