| Index: editor/tools/plugins/com.google.dart.tools.ui/src/com/google/dart/tools/ui/actions/CreateAndRevealProjectAction.java
|
| ===================================================================
|
| --- editor/tools/plugins/com.google.dart.tools.ui/src/com/google/dart/tools/ui/actions/CreateAndRevealProjectAction.java (revision 0)
|
| +++ editor/tools/plugins/com.google.dart.tools.ui/src/com/google/dart/tools/ui/actions/CreateAndRevealProjectAction.java (revision 0)
|
| @@ -0,0 +1,126 @@
|
| +/*
|
| + * Copyright (c) 2012, the Dart project authors.
|
| + *
|
| + * Licensed under the Eclipse Public License v1.0 (the "License"); you may not use this file except
|
| + * in compliance with the License. You may obtain a copy of the License at
|
| + *
|
| + * http://www.eclipse.org/legal/epl-v10.html
|
| + *
|
| + * Unless required by applicable law or agreed to in writing, software distributed under the License
|
| + * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
|
| + * or implied. See the License for the specific language governing permissions and limitations under
|
| + * the License.
|
| + */
|
| +package com.google.dart.tools.ui.actions;
|
| +
|
| +import com.google.dart.tools.core.internal.util.ResourceUtil;
|
| +import com.google.dart.tools.ui.internal.projects.NewApplicationCreationPage.ProjectType;
|
| +import com.google.dart.tools.ui.internal.projects.ProjectMessages;
|
| +import com.google.dart.tools.ui.internal.projects.ProjectUtils;
|
| +
|
| +import org.eclipse.core.resources.IProject;
|
| +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.core.runtime.Status;
|
| +import org.eclipse.jface.action.Action;
|
| +import org.eclipse.jface.dialogs.MessageDialog;
|
| +import org.eclipse.osgi.util.NLS;
|
| +import org.eclipse.swt.widgets.Shell;
|
| +import org.eclipse.ui.IWorkbenchWindow;
|
| +
|
| +import java.io.File;
|
| +import java.net.URI;
|
| +
|
| +/**
|
| + * Creates projects in the workspace.
|
| + */
|
| +public class CreateAndRevealProjectAction extends Action {
|
| +
|
| + //TODO(pquitslund): permit/handle overwriting existing projects
|
| +
|
| + private final IWorkbenchWindow window;
|
| + private final String[] directories;
|
| + private IStatus status;
|
| +
|
| + /**
|
| + * Create the action.
|
| + *
|
| + * @param window the workbench window
|
| + * @param directories directory paths
|
| + */
|
| + public CreateAndRevealProjectAction(IWorkbenchWindow window, String... directories) {
|
| + this.directories = directories;
|
| + this.window = window;
|
| + }
|
| +
|
| + /**
|
| + * Return {@link Status#OK_STATUS} if creation succeeded, {@link Status#CANCEL_STATUS} otherwise.
|
| + * (Returns null if the action has not been run yet.)
|
| + */
|
| + public IStatus getStatus() {
|
| + return status;
|
| + }
|
| +
|
| + @Override
|
| + public void run() {
|
| + status = Status.OK_STATUS; //will get unset if any creation fails
|
| + for (String d : directories) {
|
| + createAndRevealProject(d);
|
| + }
|
| + }
|
| +
|
| + protected void createAndRevealProject(String directoryPath) {
|
| + Path path = new Path(directoryPath);
|
| + String name = path.lastSegment();
|
| +
|
| + IProject projectHandle = ResourcesPlugin.getWorkspace().getRoot().getProject(name);
|
| + if (projectHandle.exists()) {
|
| + ProjectUtils.selectAndReveal(projectHandle);
|
| + } else if (!isNestedByAnExistingProject(path) && !nestsAnExistingProject(path)) {
|
| + URI location = new File(directoryPath).toURI();
|
| +
|
| + IProject project = ProjectUtils.createNewProject(name, projectHandle, ProjectType.NONE,
|
| + location, window, getShell());
|
| +
|
| + ProjectUtils.selectAndReveal(project);
|
| + } else {
|
| + status = Status.CANCEL_STATUS;
|
| + }
|
| + }
|
| +
|
| + private Shell getShell() {
|
| + return window.getShell();
|
| + }
|
| +
|
| + private boolean isNestedByAnExistingProject(IPath path) {
|
| + for (IProject project : ResourcesPlugin.getWorkspace().getRoot().getProjects()) {
|
| + IPath location = project.getLocation();
|
| + if (location.isPrefixOf(path)) {
|
| + IResource resource = ResourceUtil.getResource(path.toFile());
|
| + ProjectUtils.selectAndReveal(resource);
|
| + return true;
|
| + }
|
| + }
|
| + return false;
|
| + }
|
| +
|
| + private boolean nestsAnExistingProject(IPath path) {
|
| + for (IProject project : ResourcesPlugin.getWorkspace().getRoot().getProjects()) {
|
| + IPath location = project.getLocation();
|
| + if (path.isPrefixOf(location)) {
|
| + String folderName = path.lastSegment();
|
| + String projectName = project.getName();
|
| + MessageDialog.openError(getShell(),
|
| + ProjectMessages.OpenExistingFolderWizardAction_nesting_title,
|
| + NLS.bind(ProjectMessages.OpenExistingFolderWizardAction_nesting_msg, folderName,
|
| + projectName));
|
| + return true;
|
| + }
|
| + }
|
| + return false;
|
| + }
|
| +
|
| +}
|
|
|