Bug 303150 - Fail to create snapshot when Snapshots project is closed
diff --git a/org.eclipse.cdt.debug.edc.ui/src/org/eclipse/cdt/debug/edc/internal/ui/views/SnapshotView.java b/org.eclipse.cdt.debug.edc.ui/src/org/eclipse/cdt/debug/edc/internal/ui/views/SnapshotView.java
index e1acb3f..bb74d90 100644
--- a/org.eclipse.cdt.debug.edc.ui/src/org/eclipse/cdt/debug/edc/internal/ui/views/SnapshotView.java
+++ b/org.eclipse.cdt.debug.edc.ui/src/org/eclipse/cdt/debug/edc/internal/ui/views/SnapshotView.java
@@ -16,8 +16,6 @@
import java.util.Date;
import java.util.List;
-import org.eclipse.cdt.core.model.CoreModel;
-import org.eclipse.cdt.core.model.ICProject;
import org.eclipse.cdt.debug.edc.internal.snapshot.Album;
import org.eclipse.cdt.debug.edc.internal.snapshot.ISnapshotAlbumEventListener;
import org.eclipse.cdt.debug.edc.internal.snapshot.Snapshot;
@@ -30,6 +28,8 @@
import org.eclipse.core.resources.IFile;
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.core.runtime.CoreException;
import org.eclipse.core.runtime.Path;
import org.eclipse.jface.action.Action;
@@ -697,15 +697,17 @@
// See if the default project exists
String defaultProjectName = "Snapshots";
- ICProject cProject = CoreModel.getDefault().getCModel().getCProject(defaultProjectName);
+ IWorkspace workspace = ResourcesPlugin.getWorkspace();
+ IProject snapshotsProject = workspace.getRoot().getProject(
+ defaultProjectName);
- if (cProject == null || !cProject.exists()) {
+ if (snapshotsProject == null || !snapshotsProject.exists()) {
return albumList;
}
// Get all .dsa files from Snapshots project
try {
- IResource[] resources = cProject.getProject().members();
+ IResource[] resources = snapshotsProject.members();
for (IResource resource : resources) {
try {
diff --git a/org.eclipse.cdt.debug.edc/src/org/eclipse/cdt/debug/edc/internal/snapshot/Album.java b/org.eclipse.cdt.debug.edc/src/org/eclipse/cdt/debug/edc/internal/snapshot/Album.java
index b630e9a..3ec9caf 100644
--- a/org.eclipse.cdt.debug.edc/src/org/eclipse/cdt/debug/edc/internal/snapshot/Album.java
+++ b/org.eclipse.cdt.debug.edc/src/org/eclipse/cdt/debug/edc/internal/snapshot/Album.java
@@ -52,6 +52,7 @@
import org.eclipse.cdt.dsf.service.DsfServicesTracker;
import org.eclipse.cdt.dsf.service.DsfSession;
import org.eclipse.cdt.dsf.service.DsfSession.SessionEndedListener;
+import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.FileLocator;
import org.eclipse.core.runtime.IPath;
@@ -1164,17 +1165,22 @@
}
public IPath createEmptyAlbum() {
- IPath zipPath = SnapshotUtils.getSnapshotsProject().getLocation();
- zipPath = zipPath.append(getDefaultAlbumName());
- zipPath = zipPath.addFileExtension("dsa");
- boolean created = ZipFileUtils.createNewZip(zipPath.toFile());
-
- if (created && zipPath.toFile().exists()){
- setLocation(zipPath);
- } else {
- return null;
- }
-
+ IPath zipPath = null;
+ try {
+ zipPath = SnapshotUtils.getSnapshotsProject().getLocation();
+ zipPath = zipPath.append(getDefaultAlbumName());
+ zipPath = zipPath.addFileExtension("dsa");
+ boolean created = ZipFileUtils.createNewZip(zipPath.toFile());
+
+ if (created && zipPath.toFile().exists()){
+ setLocation(zipPath);
+ } else {
+ return null;
+ }
+ SnapshotUtils.getSnapshotsProject().refreshLocal(IResource.DEPTH_INFINITE, new NullProgressMonitor());
+ } catch (CoreException e) {
+ EDCDebugger.getMessageLogger().logError(e.getLocalizedMessage(), e);
+ }
return zipPath;
}
diff --git a/org.eclipse.cdt.debug.edc/src/org/eclipse/cdt/debug/edc/internal/snapshot/SnapshotUtils.java b/org.eclipse.cdt.debug.edc/src/org/eclipse/cdt/debug/edc/internal/snapshot/SnapshotUtils.java
index c7d5cc6..42b3ddc 100644
--- a/org.eclipse.cdt.debug.edc/src/org/eclipse/cdt/debug/edc/internal/snapshot/SnapshotUtils.java
+++ b/org.eclipse.cdt.debug.edc/src/org/eclipse/cdt/debug/edc/internal/snapshot/SnapshotUtils.java
@@ -30,14 +30,9 @@
import javax.sound.sampled.UnsupportedAudioFileException;
import javax.xml.parsers.ParserConfigurationException;
-import org.eclipse.cdt.core.CCorePlugin;
-import org.eclipse.cdt.core.model.CoreModel;
-import org.eclipse.cdt.core.model.ICProject;
import org.eclipse.cdt.debug.edc.internal.EDCDebugger;
import org.eclipse.cdt.debug.edc.launch.IEDCLaunchConfigurationConstants;
import org.eclipse.cdt.debug.edc.snapshot.IAlbum;
-import org.eclipse.core.filesystem.EFS;
-import org.eclipse.core.filesystem.IFileStore;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IProjectDescription;
import org.eclipse.core.resources.IWorkspace;
@@ -427,50 +422,22 @@
properties.put(mapKey, map);
}
- static public IProject getSnapshotsProject() {
-
- final String SNAPSHOT_PROJECT_ID = "org.eclipse.cdt.debug.edc.snapshot"; //$NON-NLS-1$
-
+ static public IProject getSnapshotsProject() throws CoreException {
IProject snapshotsProject = null;
// See if the default project exists
String defaultProjectName = "Snapshots";
- ICProject cProject = CoreModel.getDefault().getCModel().getCProject(defaultProjectName);
- if (cProject.exists()) {
- snapshotsProject = cProject.getProject();
+ IWorkspace workspace = ResourcesPlugin.getWorkspace();
+ snapshotsProject = workspace.getRoot().getProject(
+ defaultProjectName);
+ if (snapshotsProject.exists()) {
+ if (!snapshotsProject.isOpen())
+ snapshotsProject.open(new NullProgressMonitor());
} else {
- final String[] ignoreList = { ".project", //$NON-NLS-1$
- ".cdtproject", //$NON-NLS-1$
- ".cproject", //$NON-NLS-1$
- ".cdtbuild", //$NON-NLS-1$
- ".settings", //$NON-NLS-1$
- };
-
- IWorkspace workspace = ResourcesPlugin.getWorkspace();
- IProject newProjectHandle = workspace.getRoot().getProject(defaultProjectName);
-
- int projectSuffix = 2;
- while (newProjectHandle.exists()) {
- newProjectHandle = workspace.getRoot().getProject(defaultProjectName + projectSuffix);
- projectSuffix++;
- }
-
- IProjectDescription description = workspace.newProjectDescription(newProjectHandle.getName());
+ IProjectDescription description = workspace.newProjectDescription(defaultProjectName);
description.setLocation(null);
- IFileStore store;
try {
- store = EFS.getStore(workspace.getRoot().getLocationURI());
- store = store.getChild(newProjectHandle.getName());
- for (String deleteName : ignoreList) {
- IFileStore projFile = store.getChild(deleteName);
- projFile.delete(EFS.NONE, new NullProgressMonitor());
- }
- IFileStore[] children = store.childStores(EFS.NONE, new NullProgressMonitor());
- for (IFileStore fileStore : children) {
- if (fileStore.fetchInfo().isDirectory())
- fileStore.delete(EFS.NONE, new NullProgressMonitor());
- }
- snapshotsProject = CCorePlugin.getDefault().createCProject(description, newProjectHandle, null,
- SNAPSHOT_PROJECT_ID);
+ snapshotsProject.create(description, new NullProgressMonitor());
+ snapshotsProject.open(new NullProgressMonitor());
} catch (Exception e) {
EDCDebugger.getMessageLogger().logError(null, e);
}