| Index: editor/tools/plugins/com.google.dart.tools.ui/src/com/google/dart/tools/ui/internal/projects/CreateApplicationWizard.java
|
| ===================================================================
|
| --- editor/tools/plugins/com.google.dart.tools.ui/src/com/google/dart/tools/ui/internal/projects/CreateApplicationWizard.java (revision 6693)
|
| +++ editor/tools/plugins/com.google.dart.tools.ui/src/com/google/dart/tools/ui/internal/projects/CreateApplicationWizard.java (working copy)
|
| @@ -17,28 +17,38 @@
|
| import com.google.dart.tools.core.DartCore;
|
| import com.google.dart.tools.core.generator.ApplicationGenerator;
|
| import com.google.dart.tools.core.generator.DartIdentifierUtil;
|
| +import com.google.dart.tools.core.internal.util.ResourceUtil;
|
| import com.google.dart.tools.ui.DartToolsPlugin;
|
| import com.google.dart.tools.ui.internal.projects.NewApplicationCreationPage.ProjectType;
|
|
|
| import org.eclipse.core.commands.ExecutionException;
|
| +import org.eclipse.core.commands.operations.AbstractOperation;
|
| import org.eclipse.core.resources.ICommand;
|
| import org.eclipse.core.resources.IFile;
|
| +import org.eclipse.core.resources.IFolder;
|
| import org.eclipse.core.resources.IProject;
|
| import org.eclipse.core.resources.IProjectDescription;
|
| +import org.eclipse.core.resources.IResource;
|
| import org.eclipse.core.resources.IResourceStatus;
|
| import org.eclipse.core.resources.IWorkspace;
|
| import org.eclipse.core.resources.ResourcesPlugin;
|
| import org.eclipse.core.runtime.CoreException;
|
| +import org.eclipse.core.runtime.IPath;
|
| import org.eclipse.core.runtime.IProgressMonitor;
|
| import org.eclipse.core.runtime.IStatus;
|
| import org.eclipse.core.runtime.NullProgressMonitor;
|
| +import org.eclipse.core.runtime.Path;
|
| import org.eclipse.core.runtime.Status;
|
| +import org.eclipse.jface.dialogs.MessageDialog;
|
| import org.eclipse.jface.operation.IRunnableWithProgress;
|
| import org.eclipse.osgi.util.NLS;
|
| +import org.eclipse.swt.SWT;
|
| import org.eclipse.ui.PartInitException;
|
| import org.eclipse.ui.ide.IDE;
|
| +import org.eclipse.ui.ide.undo.CreateFolderOperation;
|
| import org.eclipse.ui.ide.undo.CreateProjectOperation;
|
| import org.eclipse.ui.ide.undo.WorkspaceUndoUtil;
|
| +import org.eclipse.ui.internal.ide.IDEWorkbenchMessages;
|
| import org.eclipse.ui.internal.ide.IDEWorkbenchPlugin;
|
| import org.eclipse.ui.internal.ide.StatusUtil;
|
| import org.eclipse.ui.internal.wizards.newresource.ResourceMessages;
|
| @@ -67,8 +77,15 @@
|
|
|
| @Override
|
| public boolean performFinish() {
|
| - createNewProject();
|
|
|
| + IPath locationPath = new Path(page.getLocationURI().getPath());
|
| +
|
| + if (isNestedByAnExistingProject(locationPath)) {
|
| + createFolder(locationPath);
|
| + } else {
|
| + createNewProject();
|
| + }
|
| +
|
| if (newProject == null) {
|
| return false;
|
| }
|
| @@ -88,6 +105,60 @@
|
| return true;
|
| }
|
|
|
| + private void createFolder(IPath path) {
|
| +
|
| + final ProjectType projectType = page.getProjectType();
|
| +
|
| + IPath containerPath = path.removeLastSegments(1);
|
| +
|
| + IResource container = ResourceUtil.getResource(containerPath.toFile());
|
| + IPath newFolderPath = container.getFullPath().append(path.lastSegment());
|
| +
|
| + final IFolder newFolderHandle = IDEWorkbenchPlugin.getPluginWorkspace().getRoot().getFolder(
|
| + newFolderPath);
|
| +
|
| + IRunnableWithProgress op = new IRunnableWithProgress() {
|
| + @Override
|
| + public void run(IProgressMonitor monitor) throws InvocationTargetException {
|
| + AbstractOperation op;
|
| + op = new CreateFolderOperation(newFolderHandle, null,
|
| + IDEWorkbenchMessages.WizardNewFolderCreationPage_title);
|
| + try {
|
| +
|
| + IStatus status = op.execute(monitor, WorkspaceUndoUtil.getUIInfoAdapter(getShell()));
|
| +
|
| + if (status.isOK() && projectType != ProjectType.NONE) {
|
| + createdFile = createProjectContent(newProject,
|
| + newFolderHandle.getLocation().toOSString(), newFolderHandle.getName(), projectType);
|
| + }
|
| +
|
| + } catch (ExecutionException e) {
|
| + throw new InvocationTargetException(e);
|
| + } catch (CoreException e) {
|
| + throw new InvocationTargetException(e);
|
| + }
|
| + }
|
| + };
|
| +
|
| + try {
|
| + getContainer().run(true, true, op);
|
| + } catch (InterruptedException e) {
|
| +
|
| + } catch (InvocationTargetException e) {
|
| + // ExecutionExceptions are handled above, but unexpected runtime
|
| + // exceptions and errors may still occur.
|
| + IDEWorkbenchPlugin.log(getClass(), "createNewFolder()", e.getTargetException()); //$NON-NLS-1$
|
| + MessageDialog.open(MessageDialog.ERROR, getContainer().getShell(),
|
| + IDEWorkbenchMessages.WizardNewFolderCreationPage_internalErrorTitle, NLS.bind(
|
| + IDEWorkbenchMessages.WizardNewFolder_internalError,
|
| + e.getTargetException().getMessage()), SWT.SHEET);
|
| +
|
| + }
|
| +
|
| + newProject = newFolderHandle.getProject();
|
| +
|
| + }
|
| +
|
| /**
|
| * Creates a new project resource with the selected name.
|
| * <p>
|
| @@ -127,7 +198,9 @@
|
| IStatus status = op.execute(monitor, WorkspaceUndoUtil.getUIInfoAdapter(getShell()));
|
|
|
| if (status.isOK() && projectType != ProjectType.NONE) {
|
| - createdFile = createProjectContent(newProjectHandle, projectType);
|
| + createdFile = createProjectContent(newProjectHandle,
|
| + newProjectHandle.getLocation().toOSString(), newProjectHandle.getName(),
|
| + projectType);
|
| }
|
| } catch (ExecutionException e) {
|
| throw new InvocationTargetException(e);
|
| @@ -181,12 +254,12 @@
|
| * @param projectType
|
| * @throws CoreException
|
| */
|
| - private IFile createProjectContent(IProject project, ProjectType projectType)
|
| - throws CoreException {
|
| + private IFile createProjectContent(IProject project, String location, String name,
|
| + ProjectType projectType) throws CoreException {
|
| ApplicationGenerator generator = new ApplicationGenerator(project);
|
|
|
| - generator.setApplicationLocation(project.getLocation().toOSString());
|
| - generator.setApplicationName(DartIdentifierUtil.createValidIdentifier(project.getName()));
|
| + generator.setApplicationLocation(location);
|
| + generator.setApplicationName(DartIdentifierUtil.createValidIdentifier(name));
|
| generator.setWebApplication(projectType == ProjectType.WEB);
|
|
|
| generator.execute(new NullProgressMonitor());
|
| @@ -205,4 +278,15 @@
|
| return description;
|
| }
|
|
|
| + private boolean isNestedByAnExistingProject(IPath path) {
|
| + for (IProject project : ResourcesPlugin.getWorkspace().getRoot().getProjects()) {
|
| + IPath location = project.getLocation();
|
| + if (location.isPrefixOf(path)) {
|
| + newProject = project;
|
| + return true;
|
| + }
|
| + }
|
| + return false;
|
| + }
|
| +
|
| }
|
|
|