| /******************************************************************************* |
| * Copyright (c) 2000, 2011 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 API and implementation |
| *******************************************************************************/ |
| package org.eclipse.jdt.ui.wizards; |
| |
| import java.io.File; |
| import java.io.IOException; |
| import java.net.URI; |
| import java.util.ArrayList; |
| import java.util.Arrays; |
| import java.util.Comparator; |
| import java.util.HashMap; |
| import java.util.Iterator; |
| import java.util.List; |
| import java.util.Map; |
| import java.util.Observable; |
| import java.util.Observer; |
| |
| import org.eclipse.swt.SWT; |
| import org.eclipse.swt.events.SelectionEvent; |
| import org.eclipse.swt.events.SelectionListener; |
| import org.eclipse.swt.layout.GridData; |
| import org.eclipse.swt.layout.GridLayout; |
| import org.eclipse.swt.widgets.Combo; |
| import org.eclipse.swt.widgets.Composite; |
| import org.eclipse.swt.widgets.Control; |
| import org.eclipse.swt.widgets.DirectoryDialog; |
| import org.eclipse.swt.widgets.Group; |
| import org.eclipse.swt.widgets.Label; |
| import org.eclipse.swt.widgets.Link; |
| |
| import org.eclipse.core.filesystem.URIUtil; |
| |
| import org.eclipse.core.runtime.IPath; |
| import org.eclipse.core.runtime.IStatus; |
| import org.eclipse.core.runtime.Path; |
| import org.eclipse.core.runtime.Platform; |
| |
| import org.eclipse.core.resources.IProject; |
| import org.eclipse.core.resources.IResource; |
| import org.eclipse.core.resources.IWorkspace; |
| import org.eclipse.core.resources.ResourcesPlugin; |
| |
| import org.eclipse.jface.dialogs.Dialog; |
| import org.eclipse.jface.dialogs.IDialogConstants; |
| import org.eclipse.jface.dialogs.IDialogSettings; |
| import org.eclipse.jface.util.Policy; |
| import org.eclipse.jface.viewers.IStructuredSelection; |
| import org.eclipse.jface.viewers.ITreeSelection; |
| import org.eclipse.jface.viewers.TreePath; |
| import org.eclipse.jface.wizard.WizardPage; |
| |
| import org.eclipse.ui.IWorkbenchPart; |
| import org.eclipse.ui.IWorkingSet; |
| import org.eclipse.ui.PlatformUI; |
| import org.eclipse.ui.dialogs.PreferencesUtil; |
| import org.eclipse.ui.dialogs.WorkingSetConfigurationBlock; |
| |
| import org.eclipse.jdt.core.IClasspathEntry; |
| import org.eclipse.jdt.core.JavaCore; |
| |
| import org.eclipse.jdt.internal.corext.util.JavaModelUtil; |
| import org.eclipse.jdt.internal.corext.util.Messages; |
| |
| import org.eclipse.jdt.launching.IVMInstall; |
| import org.eclipse.jdt.launching.IVMInstall2; |
| import org.eclipse.jdt.launching.IVMInstallType; |
| import org.eclipse.jdt.launching.JavaRuntime; |
| import org.eclipse.jdt.launching.VMStandin; |
| import org.eclipse.jdt.launching.environments.IExecutionEnvironment; |
| |
| import org.eclipse.jdt.ui.JavaUI; |
| import org.eclipse.jdt.ui.PreferenceConstants; |
| |
| import org.eclipse.jdt.internal.ui.IJavaHelpContextIds; |
| import org.eclipse.jdt.internal.ui.JavaPlugin; |
| import org.eclipse.jdt.internal.ui.packageview.PackageExplorerPart; |
| import org.eclipse.jdt.internal.ui.preferences.CompliancePreferencePage; |
| import org.eclipse.jdt.internal.ui.preferences.NewJavaProjectPreferencePage; |
| import org.eclipse.jdt.internal.ui.preferences.PropertyAndPreferencePage; |
| import org.eclipse.jdt.internal.ui.viewsupport.BasicElementLabels; |
| import org.eclipse.jdt.internal.ui.wizards.NewWizardMessages; |
| import org.eclipse.jdt.internal.ui.wizards.buildpaths.BuildPathSupport; |
| import org.eclipse.jdt.internal.ui.wizards.dialogfields.ComboDialogField; |
| import org.eclipse.jdt.internal.ui.wizards.dialogfields.DialogField; |
| import org.eclipse.jdt.internal.ui.wizards.dialogfields.IDialogFieldListener; |
| import org.eclipse.jdt.internal.ui.wizards.dialogfields.IStringButtonAdapter; |
| import org.eclipse.jdt.internal.ui.wizards.dialogfields.LayoutUtil; |
| import org.eclipse.jdt.internal.ui.wizards.dialogfields.SelectionButtonDialogField; |
| import org.eclipse.jdt.internal.ui.wizards.dialogfields.StringButtonDialogField; |
| import org.eclipse.jdt.internal.ui.wizards.dialogfields.StringDialogField; |
| import org.eclipse.jdt.internal.ui.workingsets.IWorkingSetIDs; |
| |
| /** |
| * The first page of the New Java Project wizard. This page is typically used in combination with |
| * {@link NewJavaProjectWizardPageTwo}. Clients can extend this page to modify the UI: Add, remove |
| * or reorder sections. |
| * |
| * <p> |
| * Clients may instantiate or subclass. |
| * </p> |
| * |
| * @since 3.4 |
| */ |
| public class NewJavaProjectWizardPageOne extends WizardPage { |
| |
| /** |
| * Request a project name. Fires an event whenever the text field is |
| * changed, regardless of its content. |
| */ |
| private final class NameGroup extends Observable implements IDialogFieldListener { |
| |
| protected final StringDialogField fNameField; |
| |
| public NameGroup() { |
| // text field for project name |
| fNameField= new StringDialogField(); |
| fNameField.setLabelText(NewWizardMessages.NewJavaProjectWizardPageOne_NameGroup_label_text); |
| fNameField.setDialogFieldListener(this); |
| } |
| |
| public Control createControl(Composite composite) { |
| Composite nameComposite= new Composite(composite, SWT.NONE); |
| nameComposite.setFont(composite.getFont()); |
| nameComposite.setLayout(new GridLayout(2, false)); |
| |
| fNameField.doFillIntoGrid(nameComposite, 2); |
| LayoutUtil.setHorizontalGrabbing(fNameField.getTextControl(null)); |
| |
| return nameComposite; |
| } |
| |
| protected void fireEvent() { |
| setChanged(); |
| notifyObservers(); |
| } |
| |
| public String getName() { |
| return fNameField.getText().trim(); |
| } |
| |
| public void postSetFocus() { |
| fNameField.postSetFocusOnDialogField(getShell().getDisplay()); |
| } |
| |
| public void setName(String name) { |
| fNameField.setText(name); |
| } |
| |
| /* (non-Javadoc) |
| * @see org.eclipse.jdt.internal.ui.wizards.dialogfields.IDialogFieldListener#dialogFieldChanged(org.eclipse.jdt.internal.ui.wizards.dialogfields.DialogField) |
| */ |
| public void dialogFieldChanged(DialogField field) { |
| fireEvent(); |
| } |
| } |
| |
| /** |
| * Request a location. Fires an event whenever the checkbox or the location |
| * field is changed, regardless of whether the change originates from the |
| * user or has been invoked programmatically. |
| */ |
| private final class LocationGroup extends Observable implements Observer, IStringButtonAdapter, IDialogFieldListener { |
| |
| protected final SelectionButtonDialogField fUseDefaults; |
| protected final StringButtonDialogField fLocation; |
| |
| private String fPreviousExternalLocation; |
| |
| private static final String DIALOGSTORE_LAST_EXTERNAL_LOC= JavaUI.ID_PLUGIN + ".last.external.project"; //$NON-NLS-1$ |
| |
| public LocationGroup() { |
| fUseDefaults= new SelectionButtonDialogField(SWT.CHECK); |
| fUseDefaults.setDialogFieldListener(this); |
| fUseDefaults.setLabelText(NewWizardMessages.NewJavaProjectWizardPageOne_LocationGroup_location_desc); |
| |
| fLocation= new StringButtonDialogField(this); |
| fLocation.setDialogFieldListener(this); |
| fLocation.setLabelText(NewWizardMessages.NewJavaProjectWizardPageOne_LocationGroup_locationLabel_desc); |
| fLocation.setButtonLabel(NewWizardMessages.NewJavaProjectWizardPageOne_LocationGroup_browseButton_desc); |
| |
| fUseDefaults.setSelection(true); |
| |
| fPreviousExternalLocation= ""; //$NON-NLS-1$ |
| } |
| |
| public Control createControl(Composite composite) { |
| final int numColumns= 4; |
| |
| final Composite locationComposite= new Composite(composite, SWT.NONE); |
| locationComposite.setLayout(new GridLayout(numColumns, false)); |
| |
| fUseDefaults.doFillIntoGrid(locationComposite, numColumns); |
| fLocation.doFillIntoGrid(locationComposite, numColumns); |
| LayoutUtil.setHorizontalGrabbing(fLocation.getTextControl(null)); |
| |
| return locationComposite; |
| } |
| |
| protected void fireEvent() { |
| setChanged(); |
| notifyObservers(); |
| } |
| |
| protected String getDefaultPath(String name) { |
| final IPath path= Platform.getLocation().append(name); |
| return path.toOSString(); |
| } |
| |
| /* (non-Javadoc) |
| * @see java.util.Observer#update(java.util.Observable, java.lang.Object) |
| */ |
| public void update(Observable o, Object arg) { |
| if (isUseDefaultSelected()) { |
| fLocation.setText(getDefaultPath(fNameGroup.getName())); |
| } |
| fireEvent(); |
| } |
| |
| public IPath getLocation() { |
| if (isUseDefaultSelected()) { |
| return Platform.getLocation(); |
| } |
| return Path.fromOSString(fLocation.getText().trim()); |
| } |
| |
| public boolean isUseDefaultSelected() { |
| return fUseDefaults.isSelected(); |
| } |
| |
| public void setLocation(IPath path) { |
| fUseDefaults.setSelection(path == null); |
| if (path != null) { |
| fLocation.setText(path.toOSString()); |
| } else { |
| fLocation.setText(getDefaultPath(fNameGroup.getName())); |
| } |
| fireEvent(); |
| } |
| |
| /* (non-Javadoc) |
| * @see org.eclipse.jdt.internal.ui.wizards.dialogfields.IStringButtonAdapter#changeControlPressed(org.eclipse.jdt.internal.ui.wizards.dialogfields.DialogField) |
| */ |
| public void changeControlPressed(DialogField field) { |
| final DirectoryDialog dialog= new DirectoryDialog(getShell()); |
| dialog.setMessage(NewWizardMessages.NewJavaProjectWizardPageOne_directory_message); |
| String directoryName = fLocation.getText().trim(); |
| if (directoryName.length() == 0) { |
| String prevLocation= JavaPlugin.getDefault().getDialogSettings().get(DIALOGSTORE_LAST_EXTERNAL_LOC); |
| if (prevLocation != null) { |
| directoryName= prevLocation; |
| } |
| } |
| |
| if (directoryName.length() > 0) { |
| final File path = new File(directoryName); |
| if (path.exists()) |
| dialog.setFilterPath(directoryName); |
| } |
| final String selectedDirectory = dialog.open(); |
| if (selectedDirectory != null) { |
| String oldDirectory= new Path(fLocation.getText().trim()).lastSegment(); |
| fLocation.setText(selectedDirectory); |
| String lastSegment= new Path(selectedDirectory).lastSegment(); |
| if (lastSegment != null && (fNameGroup.getName().length() == 0 || fNameGroup.getName().equals(oldDirectory))) { |
| fNameGroup.setName(lastSegment); |
| } |
| JavaPlugin.getDefault().getDialogSettings().put(DIALOGSTORE_LAST_EXTERNAL_LOC, selectedDirectory); |
| } |
| } |
| |
| /* (non-Javadoc) |
| * @see org.eclipse.jdt.internal.ui.wizards.dialogfields.IDialogFieldListener#dialogFieldChanged(org.eclipse.jdt.internal.ui.wizards.dialogfields.DialogField) |
| */ |
| public void dialogFieldChanged(DialogField field) { |
| if (field == fUseDefaults) { |
| final boolean checked= fUseDefaults.isSelected(); |
| if (checked) { |
| fPreviousExternalLocation= fLocation.getText(); |
| fLocation.setText(getDefaultPath(fNameGroup.getName())); |
| fLocation.setEnabled(false); |
| } else { |
| fLocation.setText(fPreviousExternalLocation); |
| fLocation.setEnabled(true); |
| } |
| } |
| fireEvent(); |
| } |
| } |
| |
| /** |
| * Request a project layout. |
| */ |
| private final class LayoutGroup implements Observer, SelectionListener { |
| |
| private final SelectionButtonDialogField fStdRadio, fSrcBinRadio; |
| private Group fGroup; |
| private Link fPreferenceLink; |
| |
| public LayoutGroup() { |
| fStdRadio= new SelectionButtonDialogField(SWT.RADIO); |
| fStdRadio.setLabelText(NewWizardMessages.NewJavaProjectWizardPageOne_LayoutGroup_option_oneFolder); |
| |
| fSrcBinRadio= new SelectionButtonDialogField(SWT.RADIO); |
| fSrcBinRadio.setLabelText(NewWizardMessages.NewJavaProjectWizardPageOne_LayoutGroup_option_separateFolders); |
| |
| boolean useSrcBin= PreferenceConstants.getPreferenceStore().getBoolean(PreferenceConstants.SRCBIN_FOLDERS_IN_NEWPROJ); |
| fSrcBinRadio.setSelection(useSrcBin); |
| fStdRadio.setSelection(!useSrcBin); |
| } |
| |
| |
| public Control createContent(Composite composite) { |
| fGroup= new Group(composite, SWT.NONE); |
| fGroup.setFont(composite.getFont()); |
| fGroup.setLayout(initGridLayout(new GridLayout(3, false), true)); |
| fGroup.setText(NewWizardMessages.NewJavaProjectWizardPageOne_LayoutGroup_title); |
| |
| fStdRadio.doFillIntoGrid(fGroup, 3); |
| LayoutUtil.setHorizontalGrabbing(fStdRadio.getSelectionButton(null)); |
| |
| fSrcBinRadio.doFillIntoGrid(fGroup, 2); |
| |
| fPreferenceLink= new Link(fGroup, SWT.NONE); |
| fPreferenceLink.setText(NewWizardMessages.NewJavaProjectWizardPageOne_LayoutGroup_link_description); |
| fPreferenceLink.setLayoutData(new GridData(GridData.END, GridData.END, false, false)); |
| fPreferenceLink.addSelectionListener(this); |
| |
| updateEnableState(); |
| return fGroup; |
| } |
| |
| |
| /* (non-Javadoc) |
| * @see java.util.Observer#update(java.util.Observable, java.lang.Object) |
| */ |
| public void update(Observable o, Object arg) { |
| updateEnableState(); |
| } |
| |
| private void updateEnableState() { |
| if (fDetectGroup == null) |
| return; |
| |
| final boolean detect= fDetectGroup.mustDetect(); |
| fStdRadio.setEnabled(!detect); |
| fSrcBinRadio.setEnabled(!detect); |
| if (fPreferenceLink != null) { |
| fPreferenceLink.setEnabled(!detect); |
| } |
| if (fGroup != null) { |
| fGroup.setEnabled(!detect); |
| } |
| } |
| |
| /** |
| * Return <code>true</code> if the user specified to create 'source' and 'bin' folders. |
| * |
| * @return returns <code>true</code> if the user specified to create 'source' and 'bin' folders. |
| */ |
| public boolean isSrcBin() { |
| return fSrcBinRadio.isSelected(); |
| } |
| |
| /* (non-Javadoc) |
| * @see org.eclipse.swt.events.SelectionListener#widgetSelected(org.eclipse.swt.events.SelectionEvent) |
| */ |
| public void widgetSelected(SelectionEvent e) { |
| widgetDefaultSelected(e); |
| } |
| |
| /* (non-Javadoc) |
| * @see org.eclipse.swt.events.SelectionListener#widgetDefaultSelected(org.eclipse.swt.events.SelectionEvent) |
| */ |
| public void widgetDefaultSelected(SelectionEvent e) { |
| String id= NewJavaProjectPreferencePage.ID; |
| PreferencesUtil.createPreferenceDialogOn(getShell(), id, new String[] { id }, null).open(); |
| fDetectGroup.handlePossibleJVMChange(); |
| fJREGroup.handlePossibleJVMChange(); |
| } |
| } |
| |
| private final class JREGroup implements Observer, SelectionListener, IDialogFieldListener { |
| |
| private static final String LAST_SELECTED_EE_SETTINGS_KEY= JavaUI.ID_PLUGIN + ".last.selected.execution.enviroment"; //$NON-NLS-1$ |
| private static final String LAST_SELECTED_JRE_SETTINGS_KEY= JavaUI.ID_PLUGIN + ".last.selected.project.jre"; //$NON-NLS-1$ |
| // private static final String LAST_SELECTED_JRE_KIND= JavaUI.ID_PLUGIN + ".last.selected.jre.kind"; // used before EE became default |
| private static final String LAST_SELECTED_JRE_KIND2= JavaUI.ID_PLUGIN + ".last.selected.jre.kind2"; //$NON-NLS-1$ |
| |
| private static final int DEFAULT_JRE= 0; |
| private static final int PROJECT_JRE= 1; |
| private static final int EE_JRE= 2; |
| |
| private final SelectionButtonDialogField fUseDefaultJRE, fUseProjectJRE, fUseEEJRE; |
| private final ComboDialogField fJRECombo; |
| private final ComboDialogField fEECombo; |
| private Group fGroup; |
| private Link fPreferenceLink; |
| private IVMInstall[] fInstalledJVMs; |
| private String[] fJRECompliance; |
| private IExecutionEnvironment[] fInstalledEEs; |
| private String[] fEECompliance; |
| |
| public JREGroup() { |
| fUseDefaultJRE= new SelectionButtonDialogField(SWT.RADIO); |
| fUseDefaultJRE.setLabelText(getDefaultJVMLabel()); |
| |
| fUseProjectJRE= new SelectionButtonDialogField(SWT.RADIO); |
| fUseProjectJRE.setLabelText(NewWizardMessages.NewJavaProjectWizardPageOne_JREGroup_specific_compliance); |
| |
| fJRECombo= new ComboDialogField(SWT.READ_ONLY); |
| fillInstalledJREs(fJRECombo); |
| fJRECombo.setDialogFieldListener(this); |
| |
| fUseEEJRE= new SelectionButtonDialogField(SWT.RADIO); |
| fUseEEJRE.setLabelText(NewWizardMessages.NewJavaProjectWizardPageOne_JREGroup_specific_EE); |
| |
| fEECombo= new ComboDialogField(SWT.READ_ONLY); |
| fillExecutionEnvironments(fEECombo); |
| fEECombo.setDialogFieldListener(this); |
| |
| switch (getLastSelectedJREKind()) { |
| case DEFAULT_JRE: |
| fUseDefaultJRE.setSelection(true); |
| break; |
| case PROJECT_JRE: |
| fUseProjectJRE.setSelection(true); |
| break; |
| case EE_JRE: |
| fUseEEJRE.setSelection(true); |
| break; |
| } |
| |
| fJRECombo.setEnabled(fUseProjectJRE.isSelected()); |
| fEECombo.setEnabled(fUseEEJRE.isSelected()); |
| |
| fUseDefaultJRE.setDialogFieldListener(this); |
| fUseProjectJRE.setDialogFieldListener(this); |
| fUseEEJRE.setDialogFieldListener(this); |
| } |
| |
| public Control createControl(Composite composite) { |
| fGroup= new Group(composite, SWT.NONE); |
| fGroup.setFont(composite.getFont()); |
| fGroup.setLayout(initGridLayout(new GridLayout(2, false), true)); |
| fGroup.setText(NewWizardMessages.NewJavaProjectWizardPageOne_JREGroup_title); |
| |
| fUseEEJRE.doFillIntoGrid(fGroup, 1); |
| Combo eeComboControl= fEECombo.getComboControl(fGroup); |
| eeComboControl.setLayoutData(new GridData(GridData.FILL, GridData.CENTER, true, false)); |
| |
| fUseProjectJRE.doFillIntoGrid(fGroup, 1); |
| Combo comboControl= fJRECombo.getComboControl(fGroup); |
| comboControl.setLayoutData(new GridData(GridData.FILL, GridData.CENTER, true, false)); |
| |
| fUseDefaultJRE.doFillIntoGrid(fGroup, 1); |
| |
| fPreferenceLink= new Link(fGroup, SWT.NONE); |
| fPreferenceLink.setFont(fGroup.getFont()); |
| fPreferenceLink.setText(NewWizardMessages.NewJavaProjectWizardPageOne_JREGroup_link_description); |
| fPreferenceLink.setLayoutData(new GridData(GridData.END, GridData.CENTER, false, false)); |
| fPreferenceLink.addSelectionListener(this); |
| |
| updateEnableState(); |
| return fGroup; |
| } |
| |
| |
| private void fillInstalledJREs(ComboDialogField comboField) { |
| String selectedItem= getLastSelectedJRE(); |
| int selectionIndex= -1; |
| if (fUseProjectJRE.isSelected()) { |
| selectionIndex= comboField.getSelectionIndex(); |
| if (selectionIndex != -1) {//paranoia |
| selectedItem= comboField.getItems()[selectionIndex]; |
| } |
| } |
| |
| fInstalledJVMs= getWorkspaceJREs(); |
| Arrays.sort(fInstalledJVMs, new Comparator<IVMInstall>() { |
| |
| public int compare(IVMInstall i0, IVMInstall i1) { |
| if (i1 instanceof IVMInstall2 && i0 instanceof IVMInstall2) { |
| String cc0= JavaModelUtil.getCompilerCompliance((IVMInstall2) i0, JavaCore.VERSION_1_4); |
| String cc1= JavaModelUtil.getCompilerCompliance((IVMInstall2) i1, JavaCore.VERSION_1_4); |
| int result= cc1.compareTo(cc0); |
| if (result != 0) |
| return result; |
| } |
| return Policy.getComparator().compare(i0.getName(), i1.getName()); |
| } |
| |
| }); |
| selectionIndex= -1;//find new index |
| String[] jreLabels= new String[fInstalledJVMs.length]; |
| fJRECompliance= new String[fInstalledJVMs.length]; |
| for (int i= 0; i < fInstalledJVMs.length; i++) { |
| jreLabels[i]= fInstalledJVMs[i].getName(); |
| if (selectedItem != null && jreLabels[i].equals(selectedItem)) { |
| selectionIndex= i; |
| } |
| if (fInstalledJVMs[i] instanceof IVMInstall2) { |
| fJRECompliance[i]= JavaModelUtil.getCompilerCompliance((IVMInstall2) fInstalledJVMs[i], JavaCore.VERSION_1_4); |
| } else { |
| fJRECompliance[i]= JavaCore.VERSION_1_4; |
| } |
| } |
| comboField.setItems(jreLabels); |
| if (selectionIndex == -1) { |
| comboField.selectItem(getDefaultJVMName()); |
| } else { |
| comboField.selectItem(selectedItem); |
| } |
| } |
| |
| private void fillExecutionEnvironments(ComboDialogField comboField) { |
| String selectedItem= getLastSelectedEE(); |
| int selectionIndex= -1; |
| if (fUseEEJRE.isSelected()) { |
| selectionIndex= comboField.getSelectionIndex(); |
| if (selectionIndex != -1) {// paranoia |
| selectedItem= comboField.getItems()[selectionIndex]; |
| } |
| } |
| |
| fInstalledEEs= JavaRuntime.getExecutionEnvironmentsManager().getExecutionEnvironments(); |
| Arrays.sort(fInstalledEEs, new Comparator<IExecutionEnvironment>() { |
| public int compare(IExecutionEnvironment arg0, IExecutionEnvironment arg1) { |
| return Policy.getComparator().compare(arg0.getId(), arg1.getId()); |
| } |
| }); |
| selectionIndex= -1;//find new index |
| String[] eeLabels= new String[fInstalledEEs.length]; |
| fEECompliance= new String[fInstalledEEs.length]; |
| for (int i= 0; i < fInstalledEEs.length; i++) { |
| eeLabels[i]= fInstalledEEs[i].getId(); |
| if (selectedItem != null && eeLabels[i].equals(selectedItem)) { |
| selectionIndex= i; |
| } |
| fEECompliance[i]= JavaModelUtil.getExecutionEnvironmentCompliance(fInstalledEEs[i]); |
| } |
| comboField.setItems(eeLabels); |
| if (selectionIndex == -1) { |
| comboField.selectItem(getDefaultEEName()); |
| } else { |
| comboField.selectItem(selectedItem); |
| } |
| } |
| |
| private IVMInstall[] getWorkspaceJREs() { |
| List<VMStandin> standins = new ArrayList<VMStandin>(); |
| IVMInstallType[] types = JavaRuntime.getVMInstallTypes(); |
| for (int i = 0; i < types.length; i++) { |
| IVMInstallType type = types[i]; |
| IVMInstall[] installs = type.getVMInstalls(); |
| for (int j = 0; j < installs.length; j++) { |
| IVMInstall install = installs[j]; |
| standins.add(new VMStandin(install)); |
| } |
| } |
| return standins.toArray(new IVMInstall[standins.size()]); |
| } |
| |
| private String getDefaultJVMName() { |
| IVMInstall install= JavaRuntime.getDefaultVMInstall(); |
| if (install != null) { |
| return install.getName(); |
| } else { |
| return NewWizardMessages.NewJavaProjectWizardPageOne_UnknownDefaultJRE_name; |
| } |
| } |
| |
| private String getDefaultEEName() { |
| IVMInstall defaultVM= JavaRuntime.getDefaultVMInstall(); |
| |
| IExecutionEnvironment[] environments= JavaRuntime.getExecutionEnvironmentsManager().getExecutionEnvironments(); |
| if (defaultVM != null) { |
| for (int i= 0; i < environments.length; i++) { |
| IVMInstall eeDefaultVM= environments[i].getDefaultVM(); |
| if (eeDefaultVM != null && defaultVM.getId().equals(eeDefaultVM.getId())) |
| return environments[i].getId(); |
| } |
| } |
| |
| String defaultCC; |
| if (defaultVM instanceof IVMInstall2) { |
| defaultCC= JavaModelUtil.getCompilerCompliance((IVMInstall2)defaultVM, JavaCore.VERSION_1_4); |
| } else { |
| defaultCC= JavaCore.VERSION_1_4; |
| } |
| |
| for (int i= 0; i < environments.length; i++) { |
| String eeCompliance= JavaModelUtil.getExecutionEnvironmentCompliance(environments[i]); |
| if (defaultCC.endsWith(eeCompliance)) |
| return environments[i].getId(); |
| } |
| |
| return "JavaSE-1.6"; //$NON-NLS-1$ |
| } |
| |
| private String getDefaultJVMLabel() { |
| return Messages.format(NewWizardMessages.NewJavaProjectWizardPageOne_JREGroup_default_compliance, getDefaultJVMName()); |
| } |
| |
| public void update(Observable o, Object arg) { |
| updateEnableState(); |
| } |
| |
| private void updateEnableState() { |
| final boolean detect= fDetectGroup.mustDetect(); |
| fUseDefaultJRE.setEnabled(!detect); |
| fUseProjectJRE.setEnabled(!detect); |
| fUseEEJRE.setEnabled(!detect); |
| fJRECombo.setEnabled(!detect && fUseProjectJRE.isSelected()); |
| fEECombo.setEnabled(!detect && fUseEEJRE.isSelected()); |
| if (fPreferenceLink != null) { |
| fPreferenceLink.setEnabled(!detect); |
| } |
| if (fGroup != null) { |
| fGroup.setEnabled(!detect); |
| } |
| } |
| |
| /* (non-Javadoc) |
| * @see org.eclipse.swt.events.SelectionListener#widgetSelected(org.eclipse.swt.events.SelectionEvent) |
| */ |
| public void widgetSelected(SelectionEvent e) { |
| widgetDefaultSelected(e); |
| } |
| |
| /* (non-Javadoc) |
| * @see org.eclipse.swt.events.SelectionListener#widgetDefaultSelected(org.eclipse.swt.events.SelectionEvent) |
| */ |
| public void widgetDefaultSelected(SelectionEvent e) { |
| String jreID= BuildPathSupport.JRE_PREF_PAGE_ID; |
| String eeID= BuildPathSupport.EE_PREF_PAGE_ID; |
| String complianceId= CompliancePreferencePage.PREF_ID; |
| Map<String, Boolean> data= new HashMap<String, Boolean>(); |
| data.put(PropertyAndPreferencePage.DATA_NO_LINK, Boolean.TRUE); |
| PreferencesUtil.createPreferenceDialogOn(getShell(), jreID, new String[] { jreID, complianceId , eeID }, data).open(); |
| |
| handlePossibleJVMChange(); |
| fDetectGroup.handlePossibleJVMChange(); |
| } |
| |
| public void handlePossibleJVMChange() { |
| fUseDefaultJRE.setLabelText(getDefaultJVMLabel()); |
| fillInstalledJREs(fJRECombo); |
| fillExecutionEnvironments(fEECombo); |
| } |
| |
| /* (non-Javadoc) |
| * @see org.eclipse.jdt.internal.ui.wizards.dialogfields.IDialogFieldListener#dialogFieldChanged(org.eclipse.jdt.internal.ui.wizards.dialogfields.DialogField) |
| */ |
| public void dialogFieldChanged(DialogField field) { |
| updateEnableState(); |
| fDetectGroup.handlePossibleJVMChange(); |
| if (field == fJRECombo) { |
| if (fUseProjectJRE.isSelected()) { |
| storeSelectionValue(fJRECombo, LAST_SELECTED_JRE_SETTINGS_KEY); |
| } |
| } else if (field == fEECombo) { |
| if (fUseEEJRE.isSelected()) { |
| storeSelectionValue(fEECombo, LAST_SELECTED_EE_SETTINGS_KEY); |
| } |
| } else if (field == fUseDefaultJRE) { |
| if (fUseDefaultJRE.isSelected()) { |
| JavaPlugin.getDefault().getDialogSettings().put(LAST_SELECTED_JRE_KIND2, DEFAULT_JRE); |
| fUseProjectJRE.setSelection(false); |
| fUseEEJRE.setSelection(false); |
| } |
| } else if (field == fUseProjectJRE) { |
| if (fUseProjectJRE.isSelected()) { |
| JavaPlugin.getDefault().getDialogSettings().put(LAST_SELECTED_JRE_KIND2, PROJECT_JRE); |
| fUseDefaultJRE.setSelection(false); |
| fUseEEJRE.setSelection(false); |
| } |
| } else if (field == fUseEEJRE) { |
| if (fUseEEJRE.isSelected()) { |
| JavaPlugin.getDefault().getDialogSettings().put(LAST_SELECTED_JRE_KIND2, EE_JRE); |
| fUseDefaultJRE.setSelection(false); |
| fUseProjectJRE.setSelection(false); |
| } |
| } |
| } |
| |
| private void storeSelectionValue(ComboDialogField combo, String preferenceKey) { |
| int index= combo.getSelectionIndex(); |
| if (index == -1) |
| return; |
| |
| String item= combo.getItems()[index]; |
| JavaPlugin.getDefault().getDialogSettings().put(preferenceKey, item); |
| } |
| |
| private int getLastSelectedJREKind() { |
| IDialogSettings settings= JavaPlugin.getDefault().getDialogSettings(); |
| if (settings.get(LAST_SELECTED_JRE_KIND2) == null) |
| return EE_JRE; |
| |
| return settings.getInt(LAST_SELECTED_JRE_KIND2); |
| } |
| |
| private String getLastSelectedEE() { |
| IDialogSettings settings= JavaPlugin.getDefault().getDialogSettings(); |
| return settings.get(LAST_SELECTED_EE_SETTINGS_KEY); |
| } |
| |
| private String getLastSelectedJRE() { |
| IDialogSettings settings= JavaPlugin.getDefault().getDialogSettings(); |
| return settings.get(LAST_SELECTED_JRE_SETTINGS_KEY); |
| } |
| |
| public IVMInstall getSelectedJVM() { |
| if (fUseProjectJRE.isSelected()) { |
| int index= fJRECombo.getSelectionIndex(); |
| if (index >= 0 && index < fInstalledJVMs.length) { // paranoia |
| return fInstalledJVMs[index]; |
| } |
| } else if (fUseEEJRE.isSelected()) { |
| |
| } |
| return null; |
| } |
| |
| public IPath getJREContainerPath() { |
| if (fUseProjectJRE.isSelected()) { |
| int index= fJRECombo.getSelectionIndex(); |
| if (index >= 0 && index < fInstalledJVMs.length) { // paranoia |
| return JavaRuntime.newJREContainerPath(fInstalledJVMs[index]); |
| } |
| } else if (fUseEEJRE.isSelected()) { |
| int index= fEECombo.getSelectionIndex(); |
| if (index >= 0 && index < fInstalledEEs.length) { // paranoia |
| return JavaRuntime.newJREContainerPath(fInstalledEEs[index]); |
| } |
| } |
| return null; |
| } |
| |
| public String getSelectedCompilerCompliance() { |
| if (fUseProjectJRE.isSelected()) { |
| int index= fJRECombo.getSelectionIndex(); |
| if (index >= 0 && index < fJRECompliance.length) { // paranoia |
| return fJRECompliance[index]; |
| } |
| } else if (fUseEEJRE.isSelected()) { |
| int index= fEECombo.getSelectionIndex(); |
| if (index >= 0 && index < fEECompliance.length) { // paranoia |
| return fEECompliance[index]; |
| } |
| } |
| return null; |
| } |
| } |
| |
| private final class WorkingSetGroup { |
| |
| private WorkingSetConfigurationBlock fWorkingSetBlock; |
| |
| public WorkingSetGroup() { |
| String[] workingSetIds= new String[] { IWorkingSetIDs.JAVA, IWorkingSetIDs.RESOURCE }; |
| fWorkingSetBlock= new WorkingSetConfigurationBlock(workingSetIds, JavaPlugin.getDefault().getDialogSettings()); |
| //fWorkingSetBlock.setDialogMessage(NewWizardMessages.NewJavaProjectWizardPageOne_WorkingSetSelection_message); |
| } |
| |
| public Control createControl(Composite composite) { |
| Group workingSetGroup= new Group(composite, SWT.NONE); |
| workingSetGroup.setFont(composite.getFont()); |
| workingSetGroup.setText(NewWizardMessages.NewJavaProjectWizardPageOne_WorkingSets_group); |
| workingSetGroup.setLayout(new GridLayout(1, false)); |
| |
| fWorkingSetBlock.createContent(workingSetGroup); |
| |
| return workingSetGroup; |
| } |
| |
| |
| public void setWorkingSets(IWorkingSet[] workingSets) { |
| fWorkingSetBlock.setWorkingSets(workingSets); |
| } |
| |
| public IWorkingSet[] getSelectedWorkingSets() { |
| return fWorkingSetBlock.getSelectedWorkingSets(); |
| } |
| } |
| |
| /** |
| * Show a warning when the project location contains files. |
| */ |
| private final class DetectGroup extends Observable implements Observer, SelectionListener { |
| |
| private Link fHintText; |
| private Label fIcon; |
| private boolean fDetect; |
| |
| public DetectGroup() { |
| fDetect= false; |
| } |
| |
| public Control createControl(Composite parent) { |
| |
| Composite composite= new Composite(parent, SWT.NONE); |
| composite.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false)); |
| GridLayout layout= new GridLayout(2, false); |
| layout.horizontalSpacing= 10; |
| composite.setLayout(layout); |
| |
| fIcon= new Label(composite, SWT.LEFT); |
| fIcon.setImage(Dialog.getImage(Dialog.DLG_IMG_MESSAGE_WARNING)); |
| GridData gridData= new GridData(SWT.LEFT, SWT.TOP, false, false); |
| fIcon.setLayoutData(gridData); |
| |
| fHintText= new Link(composite, SWT.WRAP); |
| fHintText.setFont(composite.getFont()); |
| fHintText.addSelectionListener(this); |
| gridData= new GridData(GridData.FILL, SWT.FILL, true, true); |
| gridData.widthHint= convertWidthInCharsToPixels(50); |
| gridData.heightHint= convertHeightInCharsToPixels(3); |
| fHintText.setLayoutData(gridData); |
| |
| handlePossibleJVMChange(); |
| return composite; |
| } |
| |
| public void handlePossibleJVMChange() { |
| |
| if (JavaRuntime.getDefaultVMInstall() == null) { |
| fHintText.setText(NewWizardMessages.NewJavaProjectWizardPageOne_NoJREFound_link); |
| fHintText.setVisible(true); |
| fIcon.setImage(Dialog.getImage(Dialog.DLG_IMG_MESSAGE_WARNING)); |
| fIcon.setVisible(true); |
| return; |
| } |
| |
| String selectedCompliance= fJREGroup.getSelectedCompilerCompliance(); |
| if (selectedCompliance != null) { |
| String defaultCompliance= JavaCore.getOption(JavaCore.COMPILER_COMPLIANCE); |
| if (selectedCompliance.equals(defaultCompliance)) { |
| fHintText.setVisible(false); |
| fIcon.setVisible(false); |
| } else { |
| fHintText.setText(Messages.format(NewWizardMessages.NewJavaProjectWizardPageOne_DetectGroup_differendWorkspaceCC_message, new String[] { BasicElementLabels.getVersionName(defaultCompliance), BasicElementLabels.getVersionName(selectedCompliance)})); |
| fHintText.setVisible(true); |
| fIcon.setImage(Dialog.getImage(Dialog.DLG_IMG_MESSAGE_INFO)); |
| fIcon.setVisible(true); |
| } |
| return; |
| } |
| |
| selectedCompliance= JavaCore.getOption(JavaCore.COMPILER_COMPLIANCE); |
| IVMInstall selectedJVM= fJREGroup.getSelectedJVM(); |
| if (selectedJVM == null) { |
| selectedJVM= JavaRuntime.getDefaultVMInstall(); |
| } |
| String jvmCompliance= JavaCore.VERSION_1_4; |
| if (selectedJVM instanceof IVMInstall2) { |
| jvmCompliance= JavaModelUtil.getCompilerCompliance((IVMInstall2) selectedJVM, JavaCore.VERSION_1_4); |
| } |
| if (!selectedCompliance.equals(jvmCompliance) && (JavaModelUtil.is50OrHigher(selectedCompliance) || JavaModelUtil.is50OrHigher(jvmCompliance))) { |
| fHintText.setText(Messages.format(NewWizardMessages.NewJavaProjectWizardPageOne_DetectGroup_jre_message, new String[] {BasicElementLabels.getVersionName(selectedCompliance), BasicElementLabels.getVersionName(jvmCompliance)})); |
| fHintText.setVisible(true); |
| fIcon.setImage(Dialog.getImage(Dialog.DLG_IMG_MESSAGE_WARNING)); |
| fIcon.setVisible(true); |
| } else { |
| fHintText.setVisible(false); |
| fIcon.setVisible(false); |
| } |
| } |
| |
| private boolean computeDetectState() { |
| if (fLocationGroup.isUseDefaultSelected()) { |
| String name= fNameGroup.getName(); |
| if (name.length() == 0 || JavaPlugin.getWorkspace().getRoot().findMember(name) != null) { |
| return false; |
| } else { |
| final File directory= fLocationGroup.getLocation().append(name).toFile(); |
| return directory.isDirectory(); |
| } |
| } else { |
| final File directory= fLocationGroup.getLocation().toFile(); |
| return directory.isDirectory(); |
| } |
| } |
| |
| public void update(Observable o, Object arg) { |
| if (o instanceof LocationGroup) { |
| boolean oldDetectState= fDetect; |
| fDetect= computeDetectState(); |
| |
| if (oldDetectState != fDetect) { |
| setChanged(); |
| notifyObservers(); |
| |
| if (fDetect) { |
| fHintText.setVisible(true); |
| fHintText.setText(NewWizardMessages.NewJavaProjectWizardPageOne_DetectGroup_message); |
| fIcon.setImage(Dialog.getImage(Dialog.DLG_IMG_MESSAGE_INFO)); |
| fIcon.setVisible(true); |
| } else { |
| handlePossibleJVMChange(); |
| } |
| } |
| } |
| } |
| |
| public boolean mustDetect() { |
| return fDetect; |
| } |
| |
| /* (non-Javadoc) |
| * @see org.eclipse.swt.events.SelectionListener#widgetSelected(org.eclipse.swt.events.SelectionEvent) |
| */ |
| public void widgetSelected(SelectionEvent e) { |
| widgetDefaultSelected(e); |
| } |
| |
| /* (non-Javadoc) |
| * @see org.eclipse.swt.events.SelectionListener#widgetDefaultSelected(org.eclipse.swt.events.SelectionEvent) |
| */ |
| public void widgetDefaultSelected(SelectionEvent e) { |
| String jreID= BuildPathSupport.JRE_PREF_PAGE_ID; |
| String eeID= BuildPathSupport.EE_PREF_PAGE_ID; |
| String complianceId= CompliancePreferencePage.PREF_ID; |
| Map<String, Boolean> data= new HashMap<String, Boolean>(); |
| data.put(PropertyAndPreferencePage.DATA_NO_LINK, Boolean.TRUE); |
| String id= "JRE".equals(e.text) ? jreID : complianceId; //$NON-NLS-1$ |
| PreferencesUtil.createPreferenceDialogOn(getShell(), id, new String[] { jreID, complianceId, eeID }, data).open(); |
| |
| fJREGroup.handlePossibleJVMChange(); |
| handlePossibleJVMChange(); |
| } |
| } |
| |
| /** |
| * Validate this page and show appropriate warnings and error NewWizardMessages. |
| */ |
| private final class Validator implements Observer { |
| |
| public void update(Observable o, Object arg) { |
| |
| final IWorkspace workspace= JavaPlugin.getWorkspace(); |
| |
| final String name= fNameGroup.getName(); |
| |
| // check whether the project name field is empty |
| if (name.length() == 0) { |
| setErrorMessage(null); |
| setMessage(NewWizardMessages.NewJavaProjectWizardPageOne_Message_enterProjectName); |
| setPageComplete(false); |
| return; |
| } |
| |
| // check whether the project name is valid |
| final IStatus nameStatus= workspace.validateName(name, IResource.PROJECT); |
| if (!nameStatus.isOK()) { |
| setErrorMessage(nameStatus.getMessage()); |
| setPageComplete(false); |
| return; |
| } |
| |
| // check whether project already exists |
| final IProject handle= workspace.getRoot().getProject(name); |
| if (handle.exists()) { |
| setErrorMessage(NewWizardMessages.NewJavaProjectWizardPageOne_Message_projectAlreadyExists); |
| setPageComplete(false); |
| return; |
| } |
| |
| IPath projectLocation= ResourcesPlugin.getWorkspace().getRoot().getLocation().append(name); |
| if (projectLocation.toFile().exists()) { |
| try { |
| //correct casing |
| String canonicalPath= projectLocation.toFile().getCanonicalPath(); |
| projectLocation= new Path(canonicalPath); |
| } catch (IOException e) { |
| JavaPlugin.log(e); |
| } |
| |
| String existingName= projectLocation.lastSegment(); |
| if (!existingName.equals(fNameGroup.getName())) { |
| setErrorMessage(Messages.format(NewWizardMessages.NewJavaProjectWizardPageOne_Message_invalidProjectNameForWorkspaceRoot, BasicElementLabels.getResourceName(existingName))); |
| setPageComplete(false); |
| return; |
| } |
| |
| } |
| |
| final String location= fLocationGroup.getLocation().toOSString(); |
| |
| // check whether location is empty |
| if (location.length() == 0) { |
| setErrorMessage(null); |
| setMessage(NewWizardMessages.NewJavaProjectWizardPageOne_Message_enterLocation); |
| setPageComplete(false); |
| return; |
| } |
| |
| // check whether the location is a syntactically correct path |
| if (!Path.EMPTY.isValidPath(location)) { |
| setErrorMessage(NewWizardMessages.NewJavaProjectWizardPageOne_Message_invalidDirectory); |
| setPageComplete(false); |
| return; |
| } |
| |
| IPath projectPath= null; |
| if (!fLocationGroup.isUseDefaultSelected()) { |
| projectPath= Path.fromOSString(location); |
| if (!projectPath.toFile().exists()) { |
| // check non-existing external location |
| if (!canCreate(projectPath.toFile())) { |
| setErrorMessage(NewWizardMessages.NewJavaProjectWizardPageOne_Message_cannotCreateAtExternalLocation); |
| setPageComplete(false); |
| return; |
| } |
| } |
| } |
| |
| // validate the location |
| final IStatus locationStatus= workspace.validateProjectLocation(handle, projectPath); |
| if (!locationStatus.isOK()) { |
| setErrorMessage(locationStatus.getMessage()); |
| setPageComplete(false); |
| return; |
| } |
| |
| setPageComplete(true); |
| |
| setErrorMessage(null); |
| setMessage(null); |
| } |
| |
| private boolean canCreate(File file) { |
| while (!file.exists()) { |
| file= file.getParentFile(); |
| if (file == null) |
| return false; |
| } |
| |
| return file.canWrite(); |
| } |
| } |
| |
| private static final String PAGE_NAME= "NewJavaProjectWizardPageOne"; //$NON-NLS-1$ |
| |
| private final NameGroup fNameGroup; |
| private final LocationGroup fLocationGroup; |
| private final LayoutGroup fLayoutGroup; |
| private final JREGroup fJREGroup; |
| private final DetectGroup fDetectGroup; |
| private final Validator fValidator; |
| private final WorkingSetGroup fWorkingSetGroup; |
| |
| /** |
| * Creates a new {@link NewJavaProjectWizardPageOne}. |
| */ |
| public NewJavaProjectWizardPageOne() { |
| super(PAGE_NAME); |
| setPageComplete(false); |
| setTitle(NewWizardMessages.NewJavaProjectWizardPageOne_page_title); |
| setDescription(NewWizardMessages.NewJavaProjectWizardPageOne_page_description); |
| |
| fNameGroup= new NameGroup(); |
| fLocationGroup= new LocationGroup(); |
| fJREGroup= new JREGroup(); |
| fLayoutGroup= new LayoutGroup(); |
| fWorkingSetGroup= new WorkingSetGroup(); |
| fDetectGroup= new DetectGroup(); |
| |
| // establish connections |
| fNameGroup.addObserver(fLocationGroup); |
| fDetectGroup.addObserver(fLayoutGroup); |
| fDetectGroup.addObserver(fJREGroup); |
| fLocationGroup.addObserver(fDetectGroup); |
| |
| // initialize all elements |
| fNameGroup.notifyObservers(); |
| |
| // create and connect validator |
| fValidator= new Validator(); |
| fNameGroup.addObserver(fValidator); |
| fLocationGroup.addObserver(fValidator); |
| |
| // initialize defaults |
| setProjectName(""); //$NON-NLS-1$ |
| setProjectLocationURI(null); |
| setWorkingSets(new IWorkingSet[0]); |
| |
| initializeDefaultVM(); |
| } |
| |
| /** |
| * The wizard owning this page can call this method to initialize the fields from the |
| * current selection and active part. |
| * |
| * @param selection used to initialize the fields |
| * @param activePart the (typically active) part to initialize the fields or <code>null</code> |
| */ |
| public void init(IStructuredSelection selection, IWorkbenchPart activePart) { |
| setWorkingSets(getSelectedWorkingSet(selection, activePart)); |
| } |
| |
| private void initializeDefaultVM() { |
| JavaRuntime.getDefaultVMInstall(); |
| } |
| |
| /* (non-Javadoc) |
| * @see org.eclipse.jface.dialogs.IDialogPage#createControl(org.eclipse.swt.widgets.Composite) |
| */ |
| public void createControl(Composite parent) { |
| initializeDialogUnits(parent); |
| |
| final Composite composite= new Composite(parent, SWT.NULL); |
| composite.setFont(parent.getFont()); |
| composite.setLayout(initGridLayout(new GridLayout(1, false), true)); |
| composite.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL)); |
| |
| // create UI elements |
| Control nameControl= createNameControl(composite); |
| nameControl.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); |
| |
| Control locationControl= createLocationControl(composite); |
| locationControl.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); |
| |
| Control jreControl= createJRESelectionControl(composite); |
| jreControl.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); |
| |
| Control layoutControl= createProjectLayoutControl(composite); |
| layoutControl.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); |
| |
| Control workingSetControl= createWorkingSetControl(composite); |
| workingSetControl.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); |
| |
| Control infoControl= createInfoControl(composite); |
| infoControl.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); |
| |
| setControl(composite); |
| } |
| |
| @Override |
| protected void setControl(Control newControl) { |
| Dialog.applyDialogFont(newControl); |
| |
| PlatformUI.getWorkbench().getHelpSystem().setHelp(newControl, IJavaHelpContextIds.NEW_JAVAPROJECT_WIZARD_PAGE); |
| |
| super.setControl(newControl); |
| } |
| |
| |
| /** |
| * Creates the controls for the name field. |
| * |
| * @param composite the parent composite |
| * @return the created control |
| */ |
| protected Control createNameControl(Composite composite) { |
| return fNameGroup.createControl(composite); |
| } |
| |
| /** |
| * Creates the controls for the location field. |
| * |
| * @param composite the parent composite |
| * @return the created control |
| */ |
| protected Control createLocationControl(Composite composite) { |
| return fLocationGroup.createControl(composite); |
| } |
| |
| /** |
| * Creates the controls for the JRE selection |
| * |
| * @param composite the parent composite |
| * @return the created control |
| */ |
| protected Control createJRESelectionControl(Composite composite) { |
| return fJREGroup.createControl(composite); |
| } |
| |
| /** |
| * Creates the controls for the project layout selection. |
| * |
| * @param composite the parent composite |
| * @return the created control |
| */ |
| protected Control createProjectLayoutControl(Composite composite) { |
| return fLayoutGroup.createContent(composite); |
| } |
| |
| /** |
| * Creates the controls for the working set selection. |
| * |
| * @param composite the parent composite |
| * @return the created control |
| */ |
| protected Control createWorkingSetControl(Composite composite) { |
| return fWorkingSetGroup.createControl(composite); |
| } |
| |
| /** |
| * Creates the controls for the info section. |
| * |
| * @param composite the parent composite |
| * @return the created control |
| */ |
| protected Control createInfoControl(Composite composite) { |
| return fDetectGroup.createControl(composite); |
| } |
| |
| /** |
| * Gets a project name for the new project. |
| * |
| * @return the new project resource handle |
| */ |
| public String getProjectName() { |
| return fNameGroup.getName(); |
| } |
| |
| /** |
| * Sets the name of the new project |
| * |
| * @param name the new name |
| */ |
| public void setProjectName(String name) { |
| if (name == null) |
| throw new IllegalArgumentException(); |
| |
| fNameGroup.setName(name); |
| } |
| |
| /** |
| * Returns the current project location path as entered by the user, or <code>null</code> |
| * if the project should be created in the workspace. |
| |
| * @return the project location path or its anticipated initial value. |
| */ |
| public URI getProjectLocationURI() { |
| if (fLocationGroup.isUseDefaultSelected()) { |
| return null; |
| } |
| return URIUtil.toURI(fLocationGroup.getLocation()); |
| } |
| |
| /** |
| * Sets the project location of the new project or <code>null</code> if the project |
| * should be created in the workspace |
| * |
| * @param uri the new project location |
| */ |
| public void setProjectLocationURI(URI uri) { |
| IPath path= uri != null ? URIUtil.toPath(uri) : null; |
| fLocationGroup.setLocation(path); |
| } |
| |
| /** |
| * Returns the compiler compliance to be used for the project, or <code>null</code> to use the workspace |
| * compiler compliance. |
| * |
| * @return compiler compliance to be used for the project or <code>null</code> |
| */ |
| public String getCompilerCompliance() { |
| return fJREGroup.getSelectedCompilerCompliance(); |
| } |
| |
| /** |
| * Returns the default class path entries to be added on new projects. By default this is the JRE container as |
| * selected by the user. |
| * |
| * @return returns the default class path entries |
| */ |
| public IClasspathEntry[] getDefaultClasspathEntries() { |
| IPath newPath= fJREGroup.getJREContainerPath(); |
| if (newPath != null) { |
| return new IClasspathEntry[] { JavaCore.newContainerEntry(newPath) }; |
| } |
| return PreferenceConstants.getDefaultJRELibrary(); |
| } |
| |
| /** |
| * Returns the source class path entries to be added on new projects. |
| * The underlying resources may not exist. All entries that are returned must be of kind |
| * {@link IClasspathEntry#CPE_SOURCE}. |
| * |
| * @return returns the source class path entries for the new project |
| */ |
| public IClasspathEntry[] getSourceClasspathEntries() { |
| IPath sourceFolderPath= new Path(getProjectName()).makeAbsolute(); |
| |
| if (fLayoutGroup.isSrcBin()) { |
| IPath srcPath= new Path(PreferenceConstants.getPreferenceStore().getString(PreferenceConstants.SRCBIN_SRCNAME)); |
| if (srcPath.segmentCount() > 0) { |
| sourceFolderPath= sourceFolderPath.append(srcPath); |
| } |
| } |
| return new IClasspathEntry[] { JavaCore.newSourceEntry(sourceFolderPath) }; |
| } |
| |
| /** |
| * Returns the source class path entries to be added on new projects. |
| * The underlying resource may not exist. |
| * |
| * @return returns the default class path entries |
| */ |
| public IPath getOutputLocation() { |
| IPath outputLocationPath= new Path(getProjectName()).makeAbsolute(); |
| if (fLayoutGroup.isSrcBin()) { |
| IPath binPath= new Path(PreferenceConstants.getPreferenceStore().getString(PreferenceConstants.SRCBIN_BINNAME)); |
| if (binPath.segmentCount() > 0) { |
| outputLocationPath= outputLocationPath.append(binPath); |
| } |
| } |
| return outputLocationPath; |
| } |
| |
| /** |
| * Returns the working sets to which the new project should be added. |
| * |
| * @return the selected working sets to which the new project should be added |
| */ |
| public IWorkingSet[] getWorkingSets() { |
| return fWorkingSetGroup.getSelectedWorkingSets(); |
| } |
| |
| /** |
| * Sets the working sets to which the new project should be added. |
| * |
| * @param workingSets the initial selected working sets |
| */ |
| public void setWorkingSets(IWorkingSet[] workingSets) { |
| if (workingSets == null) { |
| throw new IllegalArgumentException(); |
| } |
| fWorkingSetGroup.setWorkingSets(workingSets); |
| } |
| |
| /* (non-Javadoc) |
| * @see org.eclipse.jface.dialogs.DialogPage#setVisible(boolean) |
| */ |
| @Override |
| public void setVisible(boolean visible) { |
| super.setVisible(visible); |
| if (visible) { |
| fNameGroup.postSetFocus(); |
| } |
| } |
| |
| private GridLayout initGridLayout(GridLayout layout, boolean margins) { |
| layout.horizontalSpacing= convertHorizontalDLUsToPixels(IDialogConstants.HORIZONTAL_SPACING); |
| layout.verticalSpacing= convertVerticalDLUsToPixels(IDialogConstants.VERTICAL_SPACING); |
| if (margins) { |
| layout.marginWidth= convertHorizontalDLUsToPixels(IDialogConstants.HORIZONTAL_MARGIN); |
| layout.marginHeight= convertVerticalDLUsToPixels(IDialogConstants.VERTICAL_MARGIN); |
| } else { |
| layout.marginWidth= 0; |
| layout.marginHeight= 0; |
| } |
| return layout; |
| } |
| |
| private static final IWorkingSet[] EMPTY_WORKING_SET_ARRAY = new IWorkingSet[0]; |
| |
| private IWorkingSet[] getSelectedWorkingSet(IStructuredSelection selection, IWorkbenchPart activePart) { |
| IWorkingSet[] selected= getSelectedWorkingSet(selection); |
| if (selected != null && selected.length > 0) { |
| for (int i= 0; i < selected.length; i++) { |
| if (!isValidWorkingSet(selected[i])) |
| return EMPTY_WORKING_SET_ARRAY; |
| } |
| return selected; |
| } |
| |
| if (!(activePart instanceof PackageExplorerPart)) |
| return EMPTY_WORKING_SET_ARRAY; |
| |
| PackageExplorerPart explorerPart= (PackageExplorerPart) activePart; |
| if (explorerPart.getRootMode() == PackageExplorerPart.PROJECTS_AS_ROOTS) { |
| //Get active filter |
| IWorkingSet filterWorkingSet= explorerPart.getFilterWorkingSet(); |
| if (filterWorkingSet == null) |
| return EMPTY_WORKING_SET_ARRAY; |
| |
| if (!isValidWorkingSet(filterWorkingSet)) |
| return EMPTY_WORKING_SET_ARRAY; |
| |
| return new IWorkingSet[] {filterWorkingSet}; |
| } else { |
| //If we have been gone into a working set return the working set |
| Object input= explorerPart.getViewPartInput(); |
| if (!(input instanceof IWorkingSet)) |
| return EMPTY_WORKING_SET_ARRAY; |
| |
| IWorkingSet workingSet= (IWorkingSet)input; |
| if (!isValidWorkingSet(workingSet)) |
| return EMPTY_WORKING_SET_ARRAY; |
| |
| return new IWorkingSet[] {workingSet}; |
| } |
| } |
| |
| private IWorkingSet[] getSelectedWorkingSet(IStructuredSelection selection) { |
| if (!(selection instanceof ITreeSelection)) |
| return EMPTY_WORKING_SET_ARRAY; |
| |
| ITreeSelection treeSelection= (ITreeSelection) selection; |
| if (treeSelection.isEmpty()) |
| return EMPTY_WORKING_SET_ARRAY; |
| |
| List<?> elements= treeSelection.toList(); |
| if (elements.size() == 1) { |
| Object element= elements.get(0); |
| TreePath[] paths= treeSelection.getPathsFor(element); |
| if (paths.length != 1) |
| return EMPTY_WORKING_SET_ARRAY; |
| |
| TreePath path= paths[0]; |
| if (path.getSegmentCount() == 0) |
| return EMPTY_WORKING_SET_ARRAY; |
| |
| Object candidate= path.getSegment(0); |
| if (!(candidate instanceof IWorkingSet)) |
| return EMPTY_WORKING_SET_ARRAY; |
| |
| IWorkingSet workingSetCandidate= (IWorkingSet) candidate; |
| if (isValidWorkingSet(workingSetCandidate)) |
| return new IWorkingSet[] { workingSetCandidate }; |
| |
| return EMPTY_WORKING_SET_ARRAY; |
| } |
| |
| ArrayList<IWorkingSet> result= new ArrayList<IWorkingSet>(); |
| for (Iterator<?> iterator= elements.iterator(); iterator.hasNext();) { |
| Object element= iterator.next(); |
| if (element instanceof IWorkingSet && isValidWorkingSet((IWorkingSet) element)) { |
| result.add((IWorkingSet) element); |
| } |
| } |
| return result.toArray(new IWorkingSet[result.size()]); |
| } |
| |
| |
| private static boolean isValidWorkingSet(IWorkingSet workingSet) { |
| String id= workingSet.getId(); |
| if (!IWorkingSetIDs.JAVA.equals(id) && !IWorkingSetIDs.RESOURCE.equals(id)) |
| return false; |
| |
| if (workingSet.isAggregateWorkingSet()) |
| return false; |
| |
| return true; |
| } |
| |
| |
| } |