bug 336553 - fixed file creation in projects with locations other than workspace
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/operations/AbstractJpaFileCreationDataModelProvider.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/operations/AbstractJpaFileCreationDataModelProvider.java
index cbed042..294f28f 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/operations/AbstractJpaFileCreationDataModelProvider.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/operations/AbstractJpaFileCreationDataModelProvider.java
@@ -15,7 +15,6 @@
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IFolder;
import org.eclipse.core.resources.IProject;
-import org.eclipse.core.resources.IWorkspaceRoot;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Path;
@@ -26,6 +25,7 @@
import org.eclipse.jpt.core.JptCorePlugin;
import org.eclipse.jpt.core.internal.AbstractJpaProject;
import org.eclipse.jpt.core.internal.JptCoreMessages;
+import org.eclipse.jpt.core.internal.utility.PlatformTools;
import org.eclipse.jpt.utility.Filter;
import org.eclipse.jpt.utility.internal.ArrayTools;
import org.eclipse.jpt.utility.internal.CollectionTools;
@@ -262,13 +262,11 @@
if (project == null) {
return false;
}
- try {
- IWorkspaceRoot root = project.getWorkspace().getRoot();
- return root.getContainerForLocation(root.getLocation().append(new Path(containerPath))) == null;
- }
- catch (IllegalArgumentException e) {
+ IContainer container = PlatformTools.getContainer(new Path(containerPath));
+ if (container == null) {
return true;
}
+ return false;
}
/**
@@ -279,14 +277,8 @@
if (project == null) {
return false;
}
- IFolder folder;
- try {
- folder = project.getWorkspace().getRoot().getFolder(new Path(folderPath));
- }
- catch (IllegalArgumentException e) {
- return false;
- }
- return ! project.equals(folder.getProject());
+ IContainer container = PlatformTools.getContainer(new Path(folderPath));
+ return ! project.equals(container.getProject());
}
/**
@@ -299,14 +291,7 @@
if (project == null) {
return null;
}
- IContainer container;
- try {
- IWorkspaceRoot root = project.getWorkspace().getRoot();
- container = root.getContainerForLocation(root.getLocation().append(new Path(folderPath)));
- }
- catch (IllegalArgumentException e) {
- return null;
- }
+ IContainer container = PlatformTools.getContainer(new Path(folderPath));
if (container == null || ! container.exists()) {
return null;
}
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/operations/AbstractJpaFileCreationOperation.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/operations/AbstractJpaFileCreationOperation.java
index 922308d..1a20efd 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/operations/AbstractJpaFileCreationOperation.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/operations/AbstractJpaFileCreationOperation.java
@@ -14,7 +14,6 @@
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IFolder;
import org.eclipse.core.resources.IProject;
-import org.eclipse.core.resources.IWorkspaceRoot;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.core.runtime.IProgressMonitor;
@@ -24,6 +23,7 @@
import org.eclipse.jem.util.emf.workbench.ProjectUtilities;
import org.eclipse.jpt.core.JpaProject;
import org.eclipse.jpt.core.JptCorePlugin;
+import org.eclipse.jpt.core.internal.utility.PlatformTools;
import org.eclipse.jpt.core.resource.AbstractXmlResourceProvider;
import org.eclipse.wst.common.componentcore.ComponentCore;
import org.eclipse.wst.common.componentcore.resources.IVirtualFolder;
@@ -88,8 +88,7 @@
// Get the source folder name from the data model
String folderPath = model.getStringProperty(SOURCE_FOLDER);
IProject project = getProject();
- IWorkspaceRoot root = project.getWorkspace().getRoot();
- IContainer container = root.getContainerForLocation(root.getLocation().append(new Path(folderPath)));
+ IContainer container = PlatformTools.getContainer(new Path(folderPath));
boolean createVirtualReference = ComponentCore.createFolder(project, new Path("")).exists();
if (container instanceof IFolder) {
IFolder folder = (IFolder) container;
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/utility/PlatformTools.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/utility/PlatformTools.java
index 1974095..43f461e 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/utility/PlatformTools.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/utility/PlatformTools.java
@@ -11,8 +11,13 @@
import java.io.IOException;
import java.io.InputStream;
+import org.eclipse.core.resources.IContainer;
import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IWorkspaceRoot;
+import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.Platform;
import org.eclipse.core.runtime.content.IContentType;
import org.eclipse.core.runtime.content.IContentTypeManager;
@@ -24,6 +29,21 @@
public class PlatformTools {
/**
+ * Return the {@link IContainer} with the workspace relative "full" path
+ */
+ public static IContainer getContainer(IPath fullContainerPath) {
+ IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();
+ // changed to handle non-workspace projects
+ String projectName = fullContainerPath.segment(0).toString();
+ IPath projectRelativePath = fullContainerPath.removeFirstSegments(1);
+ IProject project = root.getProject(projectName);
+ if (projectRelativePath.isEmpty()) {
+ return project;
+ }
+ return project.getFolder(projectRelativePath);
+ }
+
+ /**
* Return the specified file's content type,
* using the Eclipse platform's content type manager.
*/