Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael Valenta2002-05-06 19:10:07 +0000
committerMichael Valenta2002-05-06 19:10:07 +0000
commitcd40a91db0bb01eab32e8c306ee6834eb6d76b65 (patch)
tree0fed9d5acde371c84d0276da6100f804385f0d6b
parent852bc42a45ceaaca956f7ce4be6c5511382ddddc (diff)
downloadeclipse.platform.team-cd40a91db0bb01eab32e8c306ee6834eb6d76b65.tar.gz
eclipse.platform.team-cd40a91db0bb01eab32e8c306ee6834eb6d76b65.tar.xz
eclipse.platform.team-cd40a91db0bb01eab32e8c306ee6834eb6d76b65.zip
14885: Bringing in java projects without .project
-rw-r--r--bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/actions/CheckoutAsAction.java180
1 files changed, 137 insertions, 43 deletions
diff --git a/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/actions/CheckoutAsAction.java b/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/actions/CheckoutAsAction.java
index 12eeae941..ff689ebf5 100644
--- a/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/actions/CheckoutAsAction.java
+++ b/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/actions/CheckoutAsAction.java
@@ -10,6 +10,9 @@ import java.lang.reflect.InvocationTargetException;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IProjectDescription;
import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.IResourceChangeEvent;
+import org.eclipse.core.resources.IResourceChangeListener;
+import org.eclipse.core.resources.IResourceDelta;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IPath;
@@ -25,6 +28,8 @@ import org.eclipse.team.internal.ccvs.core.CVSProviderPlugin;
import org.eclipse.team.internal.ccvs.core.ICVSRemoteFolder;
import org.eclipse.team.internal.ccvs.ui.Policy;
import org.eclipse.team.internal.ccvs.ui.PromptingDialog;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.actions.NewProjectAction;
import org.eclipse.ui.actions.WorkspaceModifyOperation;
import org.eclipse.ui.dialogs.ProjectLocationSelectionDialog;
@@ -38,57 +43,108 @@ public class CheckoutAsAction extends AddToWorkspaceAction {
* @see IActionDelegate#run(IAction)
*/
public void execute(IAction action) {
+
+ final ICVSRemoteFolder[] folders = getSelectedRemoteFolders();
+ if (folders.length != 1) return;
+ final String name = folders[0].getName();
+
+ // Fetch the members of the folder to see if they contain a .project file.
+ final boolean[] hasProjectMetaFile = new boolean[] { false };
+ final boolean[] errorOccured = new boolean[] { false };
run(new WorkspaceModifyOperation() {
public void execute(IProgressMonitor monitor) throws InterruptedException, InvocationTargetException {
try {
- final Shell shell = getShell();
- ICVSRemoteFolder[] folders = getSelectedRemoteFolders();
- if (folders.length != 1) return;
- String name = folders[0].getName();
- // Prompt for name
- final int[] result = new int[] { Dialog.OK };
- IProject project = ResourcesPlugin.getWorkspace().getRoot().getProject(name);
- final ProjectLocationSelectionDialog dialog = new ProjectLocationSelectionDialog(shell, project);
- dialog.setTitle(Policy.bind("CheckoutAsAction.enterProjectTitle", name)); //$NON-NLS-1$
-
- shell.getDisplay().syncExec(new Runnable() {
- public void run() {
- result[0] = dialog.open();
- }
- });
- if (result[0] != Dialog.OK) return;
-
- Object[] destinationPaths = dialog.getResult();
- if (destinationPaths == null) return;
- String newName = (String) destinationPaths[0];
- IPath newLocation = new Path((String) destinationPaths[1]);
-
- // prompt if the project exists locally
- project = ResourcesPlugin.getWorkspace().getRoot().getProject(newName);
- PromptingDialog prompt = new PromptingDialog(getShell(), new IResource[] { project },
- getOverwriteLocalAndFileSystemPrompt(), Policy.bind("ReplaceWithAction.confirmOverwrite"));//$NON-NLS-1$
- if (prompt.promptForMultiple().length == 0) return;
-
- monitor.beginTask(null, 100);
- monitor.setTaskName(Policy.bind("CheckoutAsAction.taskname", name, newName)); //$NON-NLS-1$
-
- // create the project
+ folders[0].members(monitor);
+ } catch (TeamException e) {
+ errorOccured[0] = true;
+ throw new InvocationTargetException(e);
+ }
+ // Check for the existance of the .project file
+ try {
+ folders[0].getFile(".project");
+ hasProjectMetaFile[0] = true;
+ } catch (TeamException e) {
+ // We couldn't retrieve the meta file so assume it doesn't exist
+ hasProjectMetaFile[0] = false;
+ }
+ // If the above failed, look for the old .vcm_meta file
+ if (! hasProjectMetaFile[0]) {
try {
- if (newLocation.equals(Platform.getLocation())) {
- // create in default location
- project.create(Policy.subMonitorFor(monitor, 3));
- } else {
- // create in some other location
- IProjectDescription desc = ResourcesPlugin.getWorkspace().newProjectDescription(project.getName());
- desc.setLocation(newLocation);
- project.create(desc, Policy.subMonitorFor(monitor, 3));
+ folders[0].getFile(".vcm_meta");
+ hasProjectMetaFile[0] = true;
+ } catch (TeamException e) {
+ // We couldn't retrieve the meta file so assume it doesn't exist
+ hasProjectMetaFile[0] = false;
+ }
+ }
+ }
+ }, Policy.bind("CheckoutAsAction.checkoutFailed"), this.PROGRESS_DIALOG); //$NON-NLS-1$
+ if (errorOccured[0]) return;
+
+ // Prompt outside a workspace runnable so that the project creation delta can be heard
+ IProject newProject = null;
+ if ( ! hasProjectMetaFile[0]) {
+ newProject = getNewProject(name);
+ if (newProject == null) return;
+ }
+
+ final IProject createdProject = newProject;
+ run(new WorkspaceModifyOperation() {
+ public void execute(IProgressMonitor monitor) throws InterruptedException, InvocationTargetException {
+ try {
+ IProject project;
+ if (hasProjectMetaFile[0]) {
+ // Prompt for name
+ final Shell shell = getShell();
+ final int[] result = new int[] { Dialog.OK };
+ project = ResourcesPlugin.getWorkspace().getRoot().getProject(name);
+ final ProjectLocationSelectionDialog dialog = new ProjectLocationSelectionDialog(shell, project);
+ dialog.setTitle(Policy.bind("CheckoutAsAction.enterProjectTitle", name)); //$NON-NLS-1$
+
+ shell.getDisplay().syncExec(new Runnable() {
+ public void run() {
+ result[0] = dialog.open();
+ }
+ });
+ if (result[0] != Dialog.OK) return;
+
+ Object[] destinationPaths = dialog.getResult();
+ if (destinationPaths == null) return;
+ String newName = (String) destinationPaths[0];
+ IPath newLocation = new Path((String) destinationPaths[1]);
+
+ // prompt if the project exists locally
+ project = ResourcesPlugin.getWorkspace().getRoot().getProject(newName);
+ PromptingDialog prompt = new PromptingDialog(getShell(), new IResource[] { project },
+ getOverwriteLocalAndFileSystemPrompt(), Policy.bind("ReplaceWithAction.confirmOverwrite"));//$NON-NLS-1$
+ if (prompt.promptForMultiple().length == 0) return;
+
+ monitor.beginTask(null, 100);
+ monitor.setTaskName(Policy.bind("CheckoutAsAction.taskname", name, newName)); //$NON-NLS-1$
+
+ // create the project
+ try {
+ if (newLocation.equals(Platform.getLocation())) {
+ // create in default location
+ project.create(Policy.subMonitorFor(monitor, 3));
+ } else {
+ // create in some other location
+ IProjectDescription desc = ResourcesPlugin.getWorkspace().newProjectDescription(project.getName());
+ desc.setLocation(newLocation);
+ project.create(desc, Policy.subMonitorFor(monitor, 3));
+ }
+ project.open(Policy.subMonitorFor(monitor, 2));
+ } catch (CoreException e) {
+ throw CVSException.wrapException(e);
}
- project.open(Policy.subMonitorFor(monitor, 2));
- } catch (CoreException e) {
- throw CVSException.wrapException(e);
+ } else {
+ project = createdProject;
+ monitor.beginTask(null, 95);
+ monitor.setTaskName(Policy.bind("CheckoutAsAction.taskname", name, createdProject.getName())); //$NON-NLS-1$
}
CVSProviderPlugin.getProvider().checkout(folders, new IProject[] { project }, Policy.subMonitorFor(monitor, 95));
+
} catch (TeamException e) {
throw new InvocationTargetException(e);
} finally {
@@ -104,4 +160,42 @@ public class CheckoutAsAction extends AddToWorkspaceAction {
protected boolean isEnabled() throws TeamException {
return getSelectedRemoteFolders().length == 1;
}
+
+ /**
+ * Get a new project.
+ *
+ * The suggestedName is not currently used but is a desired capability.
+ */
+ private IProject getNewProject(String suggestedName) {
+ NewProjectListener listener = new NewProjectListener();
+ ResourcesPlugin.getWorkspace().addResourceChangeListener(listener, IResourceChangeEvent.POST_CHANGE);
+ (new NewProjectAction(PlatformUI.getWorkbench().getActiveWorkbenchWindow())).run();
+ ResourcesPlugin.getWorkspace().removeResourceChangeListener(listener);
+ return listener.getNewProject();
+ }
+
+ class NewProjectListener implements IResourceChangeListener {
+ private IProject newProject = null;
+ /**
+ * @see IResourceChangeListener#resourceChanged(IResourceChangeEvent)
+ */
+ public void resourceChanged(IResourceChangeEvent event) {
+ IResourceDelta root = event.getDelta();
+ IResourceDelta[] projectDeltas = root.getAffectedChildren();
+ for (int i = 0; i < projectDeltas.length; i++) {
+ IResourceDelta delta = projectDeltas[i];
+ IResource resource = delta.getResource();
+ if (delta.getKind() == IResourceDelta.ADDED) {
+ newProject = (IProject)resource;
+ }
+ }
+ }
+ /**
+ * Gets the newProject.
+ * @return Returns a IProject
+ */
+ public IProject getNewProject() {
+ return newProject;
+ }
+ }
} \ No newline at end of file

Back to the top