468081 : simplify persistence.xml lookup
Change-Id: I2ae1fe85eb02b329bb1b2206b0041483cc43248d
Signed-off-by: Fred Bricon <fbricon@gmail.com>
diff --git a/org.eclipse.m2e.wtp.jpa/src/org/eclipse/m2e/wtp/jpa/internal/configurators/JpaProjectConfigurator.java b/org.eclipse.m2e.wtp.jpa/src/org/eclipse/m2e/wtp/jpa/internal/configurators/JpaProjectConfigurator.java
index d050e17..7d6c1dc 100644
--- a/org.eclipse.m2e.wtp.jpa/src/org/eclipse/m2e/wtp/jpa/internal/configurators/JpaProjectConfigurator.java
+++ b/org.eclipse.m2e.wtp.jpa/src/org/eclipse/m2e/wtp/jpa/internal/configurators/JpaProjectConfigurator.java
@@ -27,7 +27,6 @@
import org.eclipse.core.runtime.Path;
import org.eclipse.core.runtime.SubProgressMonitor;
import org.eclipse.jdt.core.JavaCore;
-import org.eclipse.jpt.common.core.resource.ResourceLocator;
import org.eclipse.jpt.common.core.resource.xml.JptXmlResource;
import org.eclipse.jpt.jpa.core.JpaPlatform;
import org.eclipse.jpt.jpa.core.JpaProject;
@@ -89,7 +88,7 @@
IProject project = request.getProject();
MavenProject mavenProject = request.getMavenProject();
- IFile persistenceXml = getPersistenceXml(project);
+ IFile persistenceXml = getPersistenceXml(request.getMavenProjectFacade());
if (persistenceXml == null || !persistenceXml.exists()) {
//No persistence.xml => not a JPA project
return;
@@ -113,10 +112,9 @@
}
}
- private IFile getPersistenceXml(IProject project) {
- ResourceLocator resourceLocator = new MavenResourceLocator();
-
- IPath path = resourceLocator.getWorkspacePath(project, new Path("META-INF/persistence.xml")); //$NON-NLS-1$
+ private IFile getPersistenceXml(IMavenProjectFacade mavenProjectFacade) {
+ MavenResourceLocator resourceLocator = new MavenResourceLocator();
+ IPath path = resourceLocator.lookupMavenResources(mavenProjectFacade, new Path("META-INF/persistence.xml")); //$NON-NLS-1$
IFile persistenceXml = null;
if (path != null) {
persistenceXml = ResourcesPlugin.getWorkspace().getRoot().getFile(path);
diff --git a/org.eclipse.m2e.wtp.jpa/src/org/eclipse/m2e/wtp/jpa/internal/configurators/MavenResourceLocator.java b/org.eclipse.m2e.wtp.jpa/src/org/eclipse/m2e/wtp/jpa/internal/configurators/MavenResourceLocator.java
index d362423..e94d879 100644
--- a/org.eclipse.m2e.wtp.jpa/src/org/eclipse/m2e/wtp/jpa/internal/configurators/MavenResourceLocator.java
+++ b/org.eclipse.m2e.wtp.jpa/src/org/eclipse/m2e/wtp/jpa/internal/configurators/MavenResourceLocator.java
@@ -35,10 +35,13 @@
import org.eclipse.m2e.core.MavenPlugin;
import org.eclipse.m2e.core.internal.IMavenConstants;
import org.eclipse.m2e.core.project.IMavenProjectFacade;
+import org.eclipse.osgi.util.NLS;
import org.eclipse.wst.common.componentcore.ModuleCoreNature;
import org.eclipse.wst.common.project.facet.core.IFacetedProject;
import org.eclipse.wst.common.project.facet.core.IProjectFacet;
import org.eclipse.wst.common.project.facet.core.ProjectFacetsManager;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
/**
* Maven resource Locator
@@ -48,6 +51,8 @@
@SuppressWarnings("restriction")
public class MavenResourceLocator implements ResourceLocator {
+ private static final Logger LOG = LoggerFactory.getLogger(MavenResourceLocator.class);
+
private static IPath META_INF_PATH = new Path("META-INF"); //$NON-NLS-1$
private static final IProjectFacet WEB_FACET = ProjectFacetsManager.getProjectFacet("jst.web"); //$NON-NLS-1$
@@ -100,37 +105,19 @@
}
/**
- * Returns the resource path from Maven's resource folders mapped to theP
+ * Returns the resource path from Maven's resource folders mapped to the
* runtimePath.
*/
@Override
public IPath getWorkspacePath(IProject project, IPath runtimePath) {
- IPath resourcePath = null;
IMavenProjectFacade mavenProjectFacade = getMavenProjectFacade(project);
- if (mavenProjectFacade != null && mavenProjectFacade.getMavenProject() != null) {
- List<Resource> resources = mavenProjectFacade.getMavenProject().getBuild().getResources();
- for (Resource resourceFolder : resources) {
- resourcePath = getFilePath(getWorkspaceRelativePath(resourceFolder), runtimePath);
- if (resourcePath != null) {
- break;
- }
- }
+ IPath resourcePath = null;
+ if (mavenProjectFacade != null) {
+ resourcePath = lookupMavenResources(mavenProjectFacade, runtimePath);
} else {
// Maven project not loaded yet, we fallback on the JavaProject
// source folders lookup
- IJavaProject javaProject = JavaCore.create(project);
- try {
- for (IClasspathEntry entry : javaProject.getRawClasspath()) {
- if (IClasspathEntry.CPE_SOURCE == entry.getEntryKind()) {
- resourcePath = getFilePath(entry.getPath(), runtimePath);
- if (resourcePath != null) {
- break;
- }
- }
- }
- } catch (JavaModelException e) {
- e.printStackTrace();
- }
+ resourcePath = lookupProjectSources(project, runtimePath);
}
if (resourcePath == null) {
@@ -139,6 +126,42 @@
return resourcePath;
}
+ IPath lookupMavenResources(IMavenProjectFacade mavenProjectFacade, IPath runtimePath) {
+ if (mavenProjectFacade == null) {
+ return null;
+ }
+ IPath resourcePath = null;
+ if (mavenProjectFacade.getMavenProject() != null) {
+ List<Resource> resources = mavenProjectFacade.getMavenProject().getBuild().getResources();
+ for (Resource resourceFolder : resources) {
+ resourcePath = getFilePath(getWorkspaceRelativePath(resourceFolder), runtimePath);
+ if (resourcePath != null) {
+ return resourcePath;
+ }
+ }
+ }
+
+ return lookupProjectSources(mavenProjectFacade.getProject(), runtimePath);
+ }
+
+ IPath lookupProjectSources(IProject project, IPath runtimePath) {
+ IJavaProject javaProject = JavaCore.create(project);
+ IPath resourcePath = null;
+ try {
+ for (IClasspathEntry entry : javaProject.getRawClasspath()) {
+ if (IClasspathEntry.CPE_SOURCE == entry.getEntryKind()) {
+ resourcePath = getFilePath(entry.getPath(), runtimePath);
+ if (resourcePath != null) {
+ return resourcePath;
+ }
+ }
+ }
+ } catch (JavaModelException e) {
+ LOG.error(NLS.bind("An error occured while looking up {0} sources",project),e); //$NON-NLS-1$
+ }
+ return null;
+ }
+
private IPath getFilePath(IPath containerPath, IPath runtimePath) {
if (containerPath != null) {
final IWorkspaceRoot root = ResourcesPlugin.getWorkspace()